Android反编译练习
使用的三个软件都是免费的,下载地址Google一下也能轻易的搜到
apktool下载地址
dex2jar下载地址
jd-gui下载地址
dex2jar在sourceforge上面,建议代理开全局访问
apktool
运行apktool需要Java环境。Java 8或者JRE1.8。
我是Windows环境,其他环境可查看apktool下载地址文档。
- 把apktool.bat文件下载下来
- 下载apktool包(以apktool_2.3.3.jar为例)
- 重命名apktool包,名为apktool.jar
- 配置系统环境变量(可以参考java环境变量配置)或直接复制apktool.bat和apktool包到C://Windows
- 使用命令提示符运行apktool。
一般来说拿到一个apk文件之后想要得到自己想要的部分的代码一个很重要的突破口就是图片和xml文件,尤其是在你想要得到的部分是一个自定义控件的时候。因为图片和xml文件的名字是不会被混淆的,如果编写这个程序的人秉承了良好的代码规范的话,你就可以很容易的猜出你想要的界面使用的那些图片的名字,甚至猜出那个界面或者控件的xml文件的名字,继而找到控件的包名。
用apktool得到apk的资源文件
- 我有一个apk文件,路径为E:\app\test.apk
- 打开控制台,进入app所在的文件夹。
- 输入apktool d test.apk,敲回车。
- 出现了一个新的test文件夹
如图所示:
点击进入查看结构
没有发现java格式的文件,全是smali文件。(区别于直接解压apk,能看到到dex和java文件)
使用dex2jar获取jar文件
- 直接将test.apk文件后缀改为rar,解压test.rar文件,找到dex文件。dex2jar就是对dex文件起作用的。
- 进入dex2jar的那一堆bat命令所在的文件夹,找到那个名字里面带有dex2jar.bat的bat命令,我的这个版本是这个。
- 打开控制台,切换目录到dex2jar所在的文件夹(不切也行,记得配置dex2jar环境变量)。
- 控制台键入命令 d2j-dex2jar.bat E:\app\test\classes.dex (classes.dex的全路径)敲回车。
结果如下(classes-error.zip,记录了生成jar过程中错误)
使用jd-gui查看得到的jar包
怎么看这个jar包呢?这个时候jd-gui就起作用了,打开jd-gui.exe,把那个jar拖进去就可以看了。
一般来说jar的代码是经过混淆的,没有混淆可能是debug版本,比如下图。