最近在看《Anroid开发艺术探索》,关于反编译的工具的使用,以window为例,以此文章做个笔记。
apktool:http://ibotpeaches.github.io/Apktool/
dex2jar:https://github.com/pxb1988/dex2jar
jd-gui:http://jd.benow.ca/
使用dex2jar和jd-gui反编译apk
将apk重命名后缀为zip,解压缩得到dex文件,通过dex2jar将dex转换为jar,jar包中都是class文件,使用jd-gui将jar包转换为java代码。
1.使用dex2jar将dex转换为jar:
下载dex2jar并cmd进入到dex2jar目录下执行命令,生成jar:
d2j-dex2jar.bat classes.dex
其中classes.dex为需要转换的dex文件
如下图所示:
2.通过jd-gui打开jar查看java代码:
jd-gui是图形化工具,直接双击打开后通过菜单打开jar包即可查看jar包的源码。
使用apktool对apk进行二次打包
使用dex2jar和jd-gui将一个dex文件反编译为java代码,无法反编译出apk中的二进制数据资源,采用apktool可以做到,另外还可以用来进行二次打包。
1.下载apktool.jar和apktool.bat:
2.使用apktool进行反编译:
使用cmd在apktool.jar和apktool.bat目录下执行命令
apktool.bat d test.apk
其中d表示解包,test.apk为需要反编译的apk
如下所示:
3.使用apktool进行二次打包:
修改刚才反编译后的test文件夹中的文件,使用cmd在apktool.jar和apktool.bat目录下执行命令
apktool.bat b test
如下所示:
此时会在test文件中生成一个dist目录,dist目录下test.apk为二次打包后的apk。
但此时新生成的test.apk是未进行签名的,是不能进行安装和运行。
4.使用signapk.jar包进行签名:
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-signed.apk
具体使用步骤请查看http://blog.csdn.net/hexingen/article/details/76731721