直接进入正题,如果要在mac下反编绎apk跟在window下还是有点区别的,但是大体原理是一样的。首先下载三个工具:
Apktool
dex2jar
jd-gui
分别介绍下这几个应用在mac下的安装
Apktool,官方有明确的文档说明:
Download Mac wrapper script (Right click, Save Link As apktool)
Downloadapktool-2
Rename downloaded jar toapktool.jar
Move both files (apktool.jar & apktool) to/usr/local/bin(root needed)
Make sure both files are executable (chmod a+x filename)
Try running apktool via cli
这样你就配置了bash权限,可以执行apktool命令,回车可以查看其命令集
1
apktool d file.apk
这样就能生成一个file的文件夹,就生成了资源文件,smile文件,如果修改了生成apk文件
1
apktool b file
上面的build和dist就是回编译apk过程中生成的东西,编译出来的apk在dist目录下,打开build/apk文件夹会发现少了original文件夹下的META-INF文件夹,也就意味着dist里的apk文件是没有签名的。
dex2jar,我们把.apk重命名成.zip,解压,取出classess.dex。我们要用dex2jar将apk转成jar文件,实质是将apk里的classes.dex转成jar。然后进到dex2jar这个文件夹下运行:
1
sh d2j-dex2jar.sh classes.dex
可能会出现
1
d2j-dex2jar.sh: line 36: ./d2j_invoke.sh: Permission denied
这时候就将dex2jar里的d2j_invoke.sh/d2j-dex2jar.sh增加可执行权限
1
2chmod +x ./d2j_invoke.sh
sh d2j-dex2jar.sh classes.dex
这样就生成了classes-dex2jar.jar,
打开JD-GUI,将hongbao-dex2jar.jar拖进去就看到源码了。 通过看Java源码对比smali文件,修改后回编译就ok了!
如何手动给apk增加签名?
回编译后的apk是安装不成功的,总是提示
Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION] 实质是没签名。
1,生成签名:
1
keytool -genkey -keystore filename.keystore -keyalg RSA -validity 10000 -alias aliasname
注意:上面-keystore后面跟的是签名文件的名字,而-alias是别名,一般情况下-keystore后面跟-alias是一样的,但其实两者没有关系,这也是我故意搞成不一样的原因。
2,为apk增加签名:
1
jarsigner -digestalg SHA1 -sigalg MD5withRSA -tsa -verbose -keystore filename.keystore -signedjar filename-signed.apk filename.apk aliasname
注意:
1,最后的”aliasname”就是-alias后面带的,必须保持一致。
2,如果不带-digestalg SHA1 -sigalg MD5withRSA签名后的apk安装也是不成功的,说INSTALL_PARSE_FAILED_NO_CERTIFICATES的错误,如果不带-tsa会报一个时间方面的警告。
http://stareme.wang/2016/12/14/Mac%20%E4%B8%8A%20android%20%E5%8F%8D%E7%BC%96%E8%AF%91apk/