先说一下apk的结构。APK采用了zip格式的压缩,我们可以很容易解压。
一个APK文件结构为:
META-INF/ Jar文件中常可以看到
res/ 存放资源文件的目录
AndroidManifest.xml 程序全局配置文件
classes.dex Dalvik字节码
resources.arsc 编译后的二进制资源文件
apk下的文本文件是做了二进制处理的。
如果我们只是想看APK 的Manifest信息。可以使用aapt命令。
命名格式为:
aapt dump badging *.apk (这里*.apk是你的apk名)
aapt命令我们可以在SDK下对应版本下的tools文件夹下找到:
这个是我的路径:C:/android-sdk-windows/platforms/android-7/tools
如果是res目录下的文件,则需要用工具来读取并生成文本文件,android4me的AXMLPrinter2是个很好的选择。
下载地址:
http://code.google.com/p/android4me/downloads/detail?name=AXMLPrinter2.jar&can=2&q=
使用方法:
java –jar AXMLPrinter2.jar capture.xml > test.xml
执行后,将标准输出capture.xml到test.xml文件。
下面我们开始反编译代码部分。反编译代码需要两个工具:
- dex2jar,用于将dex文件转换为jar文件;
- jd-gui,将jar文件反向工程为java代码。
dex2jar的地址:http://code.google.com/p/dex2jar/
下载后解压,dex2jar 的命令使用:
dex2jar.sh classes.dex
命令执行后,会在该文件夹下生成一个classes.dex.dex2jar.jar的文件。
jd-gui分windows,mac,linux三个版本。我们下载对应版本。
jd-gui的地址:http://java.decompiler.free.fr/?q=jdgui
下载后解压,点执行文件。把刚才dex2jar生成的jar文件拖入jd_gui界面即可生成源代码。
之前一篇文章写过 自制Android反编译工具 , 用到了2个开源工具dex2Jar和AXMLPrinter2.
用dex2jar反编译dex 到jar没有问题,但是用AXMLPrinter2反编译的XML文件有些地方不太好, 比如标题,颜色,还有Id属性, layout属性等等 其他属性,这个文件应该将编译后的xml文件直接反编译回来的, 可读性不强。
请看下面一个用AXMLPrinter2反编译后的xml文件, 以反编译支 付宝手机客户端 为例, 这个xml文件是支付宝about 文件(alipay_about_320_480.xml):
从上面的文件可以看到, 反编译后的文件可读性不好。
最近发现有一个开源工具apktool(http://code.google.com/p/android-apktool/), 这个工具功能比较强悍, 可以反编译成源码,xml文件和语言资源文件; 我们还可以对xml文件进行修改(汉化), 然后在利用此工具编译打包APK,然后签名后就可以在手机上安装了。 简单来说apktool 可以反编译apk文件, 也可以编译源码打包成APK文件。
V2.0 修改: 用apktoo替换AXMLPrinter2 来反编译xml文件。
软件主界面:
还是以上面的about页面为例子, 展示一下apktool反编译的效果:
这个反编译的效果可读性比较好了吧, 通过这个例子可以看到AXMLPrinter2 和 apktool的差距了吧。
1. 反编译后的apk主目录如下图:
2. res文件目录:
如果使用AXMLPrinter2来进行反编译, 就没有values文件夹。
3.登录菜单
4. 看下res/values下的string.xml, 如果使用AXMLPrinter2来进行反编译, 就没有values文件夹 。
声明: 本软件仅供大家学习之用, 请尊重软件原版。
- Android反编译工具.rar (3.8 MB)
- 下载次数: 1657
转http://note.sdo.com/u/jesse_luo/n/sCPcz~jAnGiwLX01E0014t
来源:https://www.cnblogs.com/jiezzy/archive/2012/06/21/2557440.html