jdk1.7

反编译,如果 目标文件 为 halou.apk 反编译输出到  一个 temp 文件 中 ,命令为

java -jar apktool.jar d -f -s halou.apk -o temp

apktool.jar 下载地址 http://pan.baidu.com/s/1bnxrt4F


重建build命令

java -jar apktool.jar b temp -o new_halou.apk

这样重建时候,隐藏文件是 没法 打new_halou.apk的。但隐藏文件 可以反编译出来 。


隐藏文件在assets中的话,可以这样加入到new_halou.apk中


z = ZipFile('new_halou.apk', 'a')    

asset_file = r'%s/assets' % temp
if os.path.isdir( asset_file ):
for dirpath, dirnames, filenames in os.walk( asset_file ):
for filename in filenames:
if filename[0:1] == '.':
z.write(os.path.join(dirpath,filename), os.path.join(dirpath,filename)[len(temp_file):])
logger.info( 'write .* resource file: %s' % os.path.join(dirpath,filename)[len(temp_file):])
z.close()


其实反编译 也会有一些文件 无法 反编译出来。 可以用zipfile提取。LIke:


z = zipfile.ZipFile(apkpath, 'r')
for f in z.namelist():
if (f[0:len('res/drawable/')] == 'res/drawable/' and f.endswith('.bin')):
z.extract(f, './%s' % temp_file)
logger.info('extract file: %s' % f)

z.close()


签名

jarsigner -digestalg SHA1 -sigalg MD5withRSA -verbose -keystore %s -storepass %s -keypass %s -signedjar  signedjar unsignedjar  'alianame'


最后 查看包 的签名 

jarsigner -verify -verbose -certs  new_halou.apk


查看包的一些信息,比如包名

aapt d badging new_halou.apk