“工欲善其事,必先利其器”,做逆向工程在一定程度上如同小偷,电脑的黑客,都是精细的活,往往离不开趁手的家伙。所以,首先列出所需的工具,概括起来,就是三大件:
1、dex2jar:将apk中的class.dex文件反编译为jar包
2、jd_gui:将jar反编译为.java文件
3、apktool:提取apk中的资源文件
三种工具的下载地址如下:
1、dex2jar:http://code.google.com/p/dex2jar/downloads/list
2、jd_gui:http://java.decompiler.free.fr/?q=jdgui
3。apktool:http://code.google.com/p/android-apktool/downloads/list
下载注意事项:
1、根据自己的系统平台下载对应版本的工具,dex2jar貌似不支持Mac OS,其他两种工具支持Windows,Linux,Mac OS。
2、apktool必须下载apktool-1.3.2.tar.bz2(目前最新版)和apk_install_系统平台_版本号.tar.bz2,为什么要这样,后面阐述。
至此,万事具备,不过还差东风,我们的东风就是需要一个.apk文件,这个简单,不解释。下面说明apk逆向工程的详细步骤。
友情提示:以下步骤默认的是Ubuntu下的操作。
1、修改apk文件的扩展名改为.zip,并解压,获取其中的class.dex文件。
2、利用dex2jar从class.dex中反编译出jar包
解压下载的dex2jar文件的压缩包,将class.dex文件拷贝到解压后的目录下,该目录下的dex2jar.sh适用于Linux平台,dex2jar.bat适用于Windows平台。将终端切换到该目录下,执行命令:./dex2jar.sh class.dex,即可在当前目录下生成一个默认名为class.dex.dex2jar.jar的jar包。如果在windows下,通过命令行执行:./dex2jar.bat class.dex即可,或直接把class.dex拖到dex2jar.bat文件也可。顺便提一下,如果不想将class.dex文件拷贝到该工具的目录下,重要在命令行中指定class.dex文件的具体路径即可。
3、利用jd_gui从步骤2中生成的class.dex.dex2jar.jar包中反编译出.java文件
jg_gui是个绿色软件,无须安装,解压即可。这是一款界面化的工具,打开之后,利用File->Open File打开class.dex.dex2jar.jar,然后选择File->Save All Sources,并指定存放路径即可,默认生成一个.zip的压缩包。
到此为止,apk中的源码文件已经提取出来,全部是.java文件,不过,遗憾的是,这样恢复出来的并不是完整的工程,只是一些java文件,而且原工程中的很多资源现在只能看到一串数字代号,不知道那是个什么东西,其它也有很多不是很懂的表示方式,不过大概的代码结构还是可以看清的,对于只需要了解局部的实现小技巧而言,分析这些文件还是可以的。
4、利用apktool提取apk中的资源文件
前面提到,需要apktool需要下载两个压缩包,其中,apktool1.3.2.tar.bz2里面是一个jar包,而apktool_install_系统平台_版本号.tar.bz2里面则是一个名为apktool的脚本,该脚本的执行以来apktool1.3.2.tar.bz2里面的jar包。实际做法是将apktool1.3.2.tar.bz2解压,将里面的jar包拷贝到apktool_install_系统平台_版本号.tar.bz2解压后的目录,即与apktool脚本位于同一目录下。然后执行如下命令:
./apktool d apk路径/XXX.apk,默认在当前目录生成一个与apk同名的目录,里面就是apk中包含的资源文件了。
参考链接:http://www.eoeandroid.com/forum-viewthread-tid-30768-highlight-apk.html