环境配置
Apktool的安装
- 在官网链接里下载一个shell脚本,保存的名字就是”apktool”,不要带.sh后缀。
- 下载最新的apktool-2,在bitbucket上,并重命名为:"apktool.jar"。
- 将”apktool”和”apktool.jar”放到 “/usr/local/bin”目录下
- 增加这两个文件可执行权限,chmod a+x apktool ;chmod a+x apktool.jar
- 执行apktool(测试:apktool -version可以看到版本信息)。
dex2jar和JD-GUI的安装
直接下载并解压:dex2jar JD-GUI
反编译步骤
- 新建个apk文件夹,将待破译的apk放进去,之后进到这个目录运行命令: apktool d test.apk
- 再运行命令回编译apk: apktool b test,build和dist就是回编译apk过程中生成的东西,dist里的apk文件是没有签名的。
- 我们要用dex2jar将apk转成jar文件,将dex2jar里的d2j_invoke.sh、d2j-dex2jar.sh增加可执行权限。然后进到dex2jar这个文件夹下运行: ./d2j-dex2jar.sh /Users/xxx/apk/test.apk ,得到test-dex2jar.jar文件。
- 打开JD-GUI,将hongbao-dex2jar.jar拖进去就看到源码了。通过看java源码对比smali文件,修改后回编译就ok了!
回编译apk签名
回编译后的apk是安装不成功的,总是提示:Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION] 实质是没签名。
- 生成签名:
keytool -genkey -keystore test.keystore -keyalg RSA -validity 10000 -alias test
- 为apk增加签名:
jarsigner -digestalg SHA1 -sigalg MD5withRSA -tsa https://timestamp.geotrust.com/tsa -keystore test.keystore -signedjar test-signed.apk test.apk test
注意:
- 最后的”test”就是-alias后面带的,必须保持一致。
- 如果不带-digestalg SHA1 -sigalg MD5withRSA签名后的apk安装也是不成功的,说INSTALL_PARSE_FAILED_NO_CERTIFICATES的错误,如果不带-tsa会报一个时间方面的警告。