APK逆向工程

来源:互联网 发布:北欧移民知乎 编辑:程序博客网 时间:2024/05/22 04:30

最近在搞一个android的应用,找不到相关的源码参考,只有apk文件,于是就琢磨能不能对apk做逆向工程,还原出源码,呵呵,本人的很多同学是做芯片的,经常听那些哥们谈起芯片的逆向工程,可能受其影响吧。于是到网上找了一下,还真有这样的技术。下面将我的方法和步骤详细说明如下。我是在ubuntu下完成的,在以下的说明过程中,我同样会对windows下的操作简单提一下,不过没试过,不一定行,希望列位看官谨慎从之。

 

     “工欲善其事,必先利其器”,做逆向工程在一定程度上如同小偷,电脑的黑客,都是精细的活,往往离不开趁手的家伙。所以,首先列出所需的工具,概括起来,就是三大件:

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

 

      好了,至此从apk获取源文件和资源文件的逆向工程的所有步骤全部完成,希望各位有需要这样做的好运了,2011年的第一篇博客,祝大家健康快乐,工作顺利!

原创粉丝点击