Mac反编译apk

字数 680阅读 347

有很多帖子对这种技术作了详解,我也一步一步来实现一下,做个记录。

三个工具:
Apktooldex2jarJD-GUI

1、Apktool

(1) 右键wrapper script另存为apktool,文件不带后缀名;
(2) 根据链接下载最新的apktool-2文件;
(3) 将下载的apktool-2的jar文件命名为apktool.jar
(4) 将apktool.jarapktool放在/usr/local/bin目录下;
(5) 执行chmod a+x apktoolchmod a+x apktool.jar给这两个文件添加可执行权限;
(6) 运行apktool命令,出现下面的结果证明安装成功:

2、dex2jarJD-GUI 下载后解压即可:

进入dex2jar-2.0文件夹,执行chmod a+x d2j_invoke.shchmod a+x d2j-dex2jar.sh给这两个文件添加可执行权限。

3、使用 apktool 反编译 apk:apktool d *.apk

反编译之后的文件夹如下:

original/META-INF/CERT.RSA就是apk的签名文件。

4、使用 dex2jar 将 dex 转为 jar 文件:
进入dex2jar-2.0文件夹,执行./d2j-dex2jar.sh *.apk

可以看到dex2jar-2.0文件夹下多了转换后的jar文件:

5、使用 JD-GUI 查看jar文件:

6、将apk安装到手机上,打开某个界面,然后执行adb shell dumpsys activity activities查看当前Activity的路径和名称,在 JD-GUI 中找到对应的文件,如果有想要修改的地方,找到要修改的位置,然后在相应的smali文件中定位到对应的地方进行修改,然后保存。

7、使用 apktool 回编译 apk:apktool b *(*即为反编译出的文件夹)

build 和 dist 文件夹是在回编译的时候产生的,dist/my.apk 就是回编译出来的apk。
直接解压或者反编译 dist/my.apk 文件会发现,没有 META-INF 文件夹,也就是说目前 dist/my.apk 是没有签名的。

8、给回编译的apk签名:
jarsigner -digestalg SHA1 -sigalg MD5withRSA -tsa https://timestamp.geotrust.com/tsa -verbose -keystore mykey.keystore -signedjar my-singed.apk my.apk mykey 最后的 mykey 就是 mykey.keystore 的 alias ,-tsa 提供一个时间戳。

一大串信息之后,

再看指定路径下的文件,出现了指定名字的签名后的apk文件:

9、签名后的回编译的apk可以成功安装(adb install *.apk)并运行:

查看签名(keytool -printcert -file META-INF/MYKEY.RSA):

已经是自己的签名信息了。

参考:
MAC上反编译android apk---apktool, dex2jar, jd-jui安装使用(含手动签名)
对某日头条apk 的反编译和二次打包

推荐阅读更多精彩内容