【转+原】Android代码反编译及分析

参考博客:

http://blog.csdn.net/ithomer/article/details/6727581


一、反编译Apk得到Java源代码
首先要下载两个工具:dex2jarJD-GUI

前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址

http://code.google.com/p/dex2jar/downloads/list

http://java.decompiler.free.fr/?q=jdgui

PS:由于之前一直是只下了别人提供的链接,下一次后就不更新工具了,造成后面Android版本升级后混淆功能加强,一度有段时间没混淆工具用,但是一直没想过要更新工具,实在是有点根号2了。。。当时刚自学Android没多久。。

具体步骤:

首先将apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,将classes.dex复制到dex2jar.bat所在目录dex2jar文件夹。

在命令行下定位到dex2jar.bat所在目录,运行

dex2jar.bat    classes.dex

生成

classes_dex2jar.jar

PS:亦可采用将classex.dex文件拖至dex2jar.bat处,当出现一个“+”号描述用dex2jar.bat打开也能生成classes_dex2jar.jar,这个也是我平时用的方式得意比网上介绍的方便快捷



然后,进入jdgui文件夹双击jd-gui.exe,打开上面生成的jar包classes_dex2jar.jar,即可看到源代码了,如下图:



二、apk反编译生成程序的源代码和图片、XML配置、语言资源等文件

如果是汉化软件,这将特别有用

首先还是要下载上述反编译工具包,其中最新的apktool,请到google code下载

apktool(google code)

https://code.google.com/p/android-apktool/downloads/list


具体步骤:

下载上述反编译工具包,打开apk2java目录下的apktool1.4.1文件夹,内含三个文件:aapt.exeapktool.batapktool.jar 

注:里面的apktool_bk.jar是备份的老版本,最好用最新的apktool.jar


在命令行下定位到apktool.bat文件夹,输入以下命令:apktool.bat  d  -f   abc123.apk   abc123,如下图:

 

上图中,apktool.bat 命令行解释:apktool.bat   d  -f    [apk文件 ]   [输出文件夹]


反编译的文件如下(AndroidManifest.xml为例):


PS:你要反编译的文件一定要放在C盘的根目录里


将反编译完的文件重新打包成apk,很简单,输入apktool.bat   b    abc123(你编译出来文件夹)即可,命令如下:

 

打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:

build

dist

其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok



三、 图形化反编译apk

上述步骤一、二讲述了命令行反编译apk,现在提供一种图形化反编译工具:Androidfby

首先,下载上述反编译工具包,打开Androidfby目录,双击Android反编译工具.exe,就可以浏览打开要反编译的apk


四、分析反编译后的R.class

由于现在大部分代码都混淆了,反编译后找不到R.class 
其实不然,在反编译后的文件里是放在res\values\public.xml里 

然后反编译的类里setContentView(2130903174);是十进制的 
使用win键+R启动运行窗口输入“calc”,得到windows系统自带的“计算器”,点击 “查看”选“程序员”,就可以方便的进行各进制的转换了(如:你要转换10进制90000000为16进制,点“十进制”,输入90000000,再点一下“16进制”,就会看到55D4A80,转换就完成了。其他同理)。

这样就可以很方便的在public.xml文件里找到对应的资源文件或ID等。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章