工具
反编译apk要用到很多工具,其中apktoll
工具 | 作用 | 下载地址 |
---|---|---|
ApkTool | Goolge官方提供的APK反编译工具十分强大, 是以下几个工具的综合体 | https://ibotpeaches.github.io/Apktool/install/ |
dex2jar | 将dex文件转为jar包及.class文件 | https://github.com/pxb1988/dex2jar |
baksmali.jar | 将Odex文件转为Dex文件 | https://bitbucket.org/JesusFreke/smali/downloads |
smali.jar | 将.smali文件重新打包转为Dex文件 | https://bitbucket.org/JesusFreke/smali/downloads |
jadx | 可以将dex文件转化成Java源码 | https://github.com/skylot/jadx |
还有大神把apktool封装成了可视化界面–androidkiller,这款软件很强大可以自己添加插件。可以自己更换apktool。
开始
我们用apktool反编译apk,也可以用Androidkiller.
apktool 使用方法:
$ apktool d test.apk
I: Using Apktool 2.2.1 on test.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: 1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
$ apktool b test
I: Using Apktool 2.2.1 on test
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Building resources...
I: Building apk file...
I: Copying unknown files/dir...
apktool d test.apk 会反编译apk。
成功后你能找到 smali 文件夹。其中都是smali文件。我们可以修改smali文件,达到我们的目的然后再打包成apk,再重新签名就可以了。
smali文件有些人可能看不懂,它使用的是smali指令。可以百度该指令的语法。
smali 文件可以直接编辑,然后重新打包,打包好后要在签名才可以使用。
smali 可以转化成java代码,在Androidkiller中可以一键转化。
其实apk文件就是一个zip压缩包,大家可以直接解压出来。先把apk后缀名修改为zip,用解压工具解压出来就可以了。解压出来之后可以看到资源文件,但是这个不是我们的目的。还有一个dex文件。smali文件就是通过这个文件得到的。这个才是重点。用jadx工具可以直接吧dex文件转化成java文件。
现在你已经知道怎么获取dex文件和smali文件了。smali文件可以直接修改。dex文件可以转化成java文件。大家对照着慢慢分析。你可能发现所有的变量名称都变成了毫无意义的名字。那是因为对方使用了混淆技术。大家将就着慢慢看吧。
加固后的apk
如果你通过上面的的方法能够得到dex文件,能都看到java代码。那么你算幸运的。一般来说现在都会使用加固软件进行加固。比如 360加固,腾讯的乐固、梆梆加固等等,这些工具就是会加密dex文件。加密了的dex文件你自然就不发转化成smali,也无法转化成java了。如果你得到的apk被加固了。那么你首先得脱壳。关于脱壳网上有很多文章,过程较为复杂。
由于加固工具比较多,而且加固工具的版本也一直在更新。所以脱壳工具不一定好用。
待续