内容简介:安卓逆向分析之apktool与dex2jar等工具的使用
记得自己刚学安卓的时候看到那些知名App的界面都做的那么好看,如腾讯QQ,就很想知道这么漂亮的界面布局layout是怎么做的,那个时候知道apk本质就是一个zip压缩包文件,因此会用解压缩的软件把apk解压出来,虽然解压缩之后可以得到那些精美的图片素材,但是layout布局文件打开内容是乱码,看不到有价值的信息。现在开始从事安卓安全方面的工作了,开始知道这正是apktool能够做到的,apktool是谷歌官方提供的apk编译工具,使用该 工具 可以将apk资源文件decode为几乎原始的形式,然后修改之后还可以重新构建为apk文件。另外如果我们还想知道某一个功能是如何做出来的,或者是使用了那些相关开源框架,我们需要得到该apk的 java 代码,如果App未加密的话使用dex2jar工具即可完成。
使用apktool得到资源文件与.smali文件
首先在官网下载最新版本的apktool,apktool官网下载地址: https://ibotpeaches.github.io/Apktool/ , 在该网站下载下来的工具是jar文件,因此使用的时候需要使用java命令。将我们下载下来的apktool_2.2.2.jar文件与我们想要decode的apk放到同一个文件夹下(当然不放到同一个文件夹下也可以,只不过那样在使用命令的时候需要输入apk的路径),然后打开cmd,切换到工具所在的目录,然后输入如下命令:
java -jar apktool_2.2.2.jar d QQ.apk
命令格式为apktool d apk名称,只不过因为下载的是jar文件,因此前面使用了java -jar命令,如果是bat文件就不需要,其中d代表“ decode
”的意思,也可以使用apktool decode apk名称,即使用如下命令效果是一样的:
java -jar apktool_2.2.2.jar decode QQ.apk
执行该命令之后,apktool工具会将apk文件decode出来的资源输出到当前文件夹下的QQ文件夹中,即与apk同名的文件夹下,如图:
如果要指定文件夹名称可以使用如下命令:
java -jar apktool_2.2.2.jar d QQ.apk -o output
即在原命令的基础上增加-o参数,参数后的内容即为输出的文件夹名称,即上述命令会将apk文件decode出来的资源输出到当前文件夹下的output文件夹中。然后打开decode出来的QQ文件夹,可以看到在该目录下和我们直接解压缩apk产生的文件相比多了一个smali文件夹,在该文件夹下的文件都是.smali文件。而少了classes.dex文件,如图:
事实上dex文件已经被decode为了.smali文件。这一点在使用上述命令时从命令行的输出可以看出来,如图:
另外可以看到使用apktool工具decode出来的xml文件内容可以查看,而直接解压缩出来的xml文件内容是乱码,无法查看。另外如果要把decode出来的文件重新打包为apk文件可以使用如下命令:
java -jar apktool_2.2.2.jar b QQ
即命令格式为apktool b 文件夹名,其中b代表build的意思,该命令会将QQ这个文件夹下的资源打包为QQ.apk,即与文件夹同名的apk文件,如果要重新指定apk名称可以使用如下命令:
java -jar apktool_2.2.2.jar b QQ -o QQ_.apk
该命令会重新打包为QQ_.apk文件。
关于apktool更多的参数详细使用大家可以参看官方文档: https://ibotpeaches.github.io/Apktool/documentation/
使用dex2jar得到jar文件
当我们要实现某个功能感觉很难的时候,我们就可以参看其它具备类似功能的apk是如何做到的,使用dex2jar可以将apk中的dex文件转换为jar文件(java的.class文件包),虽然不能够直接看到源码,但是或许可以给我们一些思路,如或许可以看到该apk使用了某些开源框架,
首先下载dex2jar,官网下载地址: https://sourceforge.net/projects/dex2jar/files/?source=navbar , 下载下来的是zip包,解压缩该zip包,可以看到该文件夹下包含很多文件,其中d2j-dex2jar,d2j-dex2smali和d2j-baksmali这三个文件比较重要,如图:
这三个文件依此对应如下功能:
- d2j-dex2jar:将apk中的dex文件转换为jar文件(.class文件)
- d2j-dex2smali:将apk中的dex文件转换为.smali文件,和前面的apktool的部分功能类似
- d2j-baksmali:将.smali文件转换为dex文件
其中我们要得到java源代码需要使用的是d2j-dex2jar文件。将apk中的dex文件复制到该文件夹下,然后在cmd切换到该目录下,输入如下命令:
d2j-dex2jar classes.dex
即命令格式为”dex2jar文件名 dex文件文件名“,待命令行显示命令执行完成之后可以看到在该目录下生成了一个classes-dex2jar.jar的jar包文件,该jar包文件即是.class的代码文件,然后使用jd-gui工具就可以查看该jar包的代码的内容了。
使用jd-gui查看.class文件的代码
得到了apk的.class文件之后就可以通过jd-gui查看该jar包的代码的内容,首先在jd-gui官网下载jd-gui,官网下载地址: http://jd.benow.ca/ , 下载之后解压可以得到jd-gui.exe文件,双击打开,将前面得到的jar包拖进去,可以看到能够看到源码了,如图:
因为代码混淆过,所以某些包或者类的名称不是那么直观,被改为了aa或者a.class。但是源代码已经可以看到了,当然如果混淆强度足够大或者进行过加固的话那就可能看到的代码没这么直观了。
综合工具Android Killer
这里在给大家介绍一个前面几个工具的综合工具Android Killer,之所以说是综合工具是因为该工具包括前面几个工具的全部功能,事实上该工具也是调用的前面几个工具来完成的相应功能,这一点从下载下来的软件的bin目录下可以看出来,如图:
关于下载地址,一般都是推荐去官网下载的,但自己也是刚开始学习安卓逆向与安全,在网上搜索该软件的官网还像也没有,大家可以在吾爱破解这个网站上下载: https://down.52pojie.cn/Tools/Android_Tools/
该软件是绿色软件,下载下来之后无需安装可直接使用,还是以前面自己写的QQ为例,打开该软件,点击打开选择一个apk文件,可以看到主界面下方的日志输出面板会自动进行反编译apk,如图:
分析完成之后会在左侧显示出关于该apk的一些信息,如apk名称,包名,入口等,点击某个类可以看到该类的smali代码,如图:
可以看到该工具的功能还是很强大的,当然还包括很多其它功能,如字符串搜索,apk签名等,因为是可视化程序,因此就不做过多介绍,大家可以去下载尝试一下。
最后本人将自己从官网下载下来的文中用到的工具打包为了zip包,大家可以直接下载使用,下载地址:
注:本文首次发表于www.huqi.tk,谢绝转载,如需转载,请注明出处:www.huqi.tk
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。