闲来无事,学习了下安卓的逆向工程,有助于观摩学习他人的优秀代码,查询了解后发现大体包括两部分:
1.dex反编译,即smali语法学习;
2.Native层,arm汇编学习。
反编译dex,Smali语法
工具
java环境不多说
1.apktool.jar;
2.jd-gui.jar;
3.dex2jar.zip;
这里就不提供了,毕竟自己动手,丰衣足食,建议百度下载最新的版本,旧版本可能会有bug。
查看java源码
假设现在有一个test.apk,如果我们想要查看一个apk里的java源码,就可以通过解压apk文件得到dex文件,然后使用dex2jar.zip工具包中的d2j-dex2jar.bat将dex转为jar文件:
将classes.dex拖动到d2j-dex2jar.bat上,得到classes-dex2jar.jar,使用jd-gui.jar打开就可以查看源码了:
反编译
但是jar文件只能辅助我们查看java代码,无法修改。想要修改的话,还是要反编译出smali文件,然后对smali文件进行修改操作,使用下边的命令反编译apk:
apktool.jar d test.apk
然后会在当前目录生成test目录,目录内容大体如下:
assets资源目录,包含了图片和字体等资源;
build和dist为重新编译生成的,新apk在dist目录;
lib为so文件目录;
original保存了原签名和反编译前的清单文件;
res主要为layout,strings等xml文件;
unknown不用管;
下边是AndroidManifest.xml,清单文件,已经可以打开查看了;
然后最重要的来了smali和smali_classes2,apk中的每个dex文件会反编译出一个smali文件夹,classes.dex对应smali,classes2.dex对应smali_classes2,以此类推。
修改smali
知道了这些后,就可以查看修改我们想要的内容了。AndroidManifest.xml不多说ÿ