http://dohkoos.name/decompile-android-apk-file.html

CMD:如果当前目录不在d盘,如“C:\Documents and Settings\$UserName”,输入“cd d:\”是不行的。 用“cd /d d:\”就可以了。

设置环境变量时首字母大写,之后要小写"Apktool_HOME"

apktool d -f(如果指定文件夹已存在,重写)F:\apk\shark-0-ym.apk shark-0-ym.apk 反编出所有资源文件及xml文件,同时生成smil文件夹

F:\SoftWare\Develop Tools\Decomplier\dex-translator-0.0.9.3>dex2jar F:\apk\shark-0-ym\classes.dex 首先将apk解压,得到classes.dex(源码)文件,resources.arsc(所有资源文件的索引),资源文件. 将dex文件反编得到jar文件

XJAD.exe 将得到的jar文件反编成java文件


classes.dex是Java源码编译后生成的字节码文件。由于Android使用的dalvik虚拟机与标准的Java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。
目前有下面这几种反编译的工具:
dexdump
Dedexer
AXMLPrinter2
apktool
dex2jar + JD-GUI
smali
Android开发包提供了一个dex的反编译工具dexdump。用法为首先启动Android模拟器,把要反编译的dex文件用adb push上传到模拟器中,然后通过adb shell登录,找到该dex文件,执行dexdump xxx.dex。总的来说dexdump功能比较弱,且用起来麻烦,另外反编译的结果可读性也很差。
另一个dex文件的反编译工具是Dedexer,且反编译的效果比较好。它可以读取dex格式的文件,生成一种类似于汇编语言的输出。这种输出与Jasmin的输出相似,但包含的是Dalvik的字节码。Dedexer与dexdump相比至少有3个优点:
1. 不需要在Android模拟器中运行;
2. 反编译后的文件目录结构和源代码结构相近,每个class文件对应一个ddx文件。不像dexdump那样把所有的结果都放在一起;
3. 可以作为反编译引擎。目前好多强大的反编译工具都是以Jasmin作为反编译引擎的。
可以下载已经编译好的jar文件ddx1.11.jar,对应Java 1.6版本。用法:
1
java -jar ddx1.11.jar -o -D -r -d src classes.dex //在src目录下生成ddx文件
在apk中的资源是经过压缩的,用文本工具看都是乱码,可以通过AXMLPrinter2将其转换为可读的xml文件。具体命令为:
1
java -jar AXMLPrinter2.jar xxx.xml output.xml
目前最好的dex反编译工具是apktool。可以帮助我们把apk文件反编译,输出smali格式的代码和图片和资源等文件,还可以在修改后重新打包。将下载下来的apktool和apktool-install-windows解压到同一目录下,有三个文件:aapt.exe,apktool.bat和apktool.jar。使用方法:
1
apktool d xxx.apk zzz //反编译xxx.apk到zzz目录,得到apk的图片和配置资源文件等
2
apktool b zzz //从文件夹zzz重建apk,输出到zzz/dist/out.apk
dex2jar是一个将Dalvik虚拟机的dex文件转换回标准Java的class文件的工具:
1
dex2jar xxx.apk //生成jar文件,可以用JD GUI工具直接打开查看
smali可以反编译dex文件,也可以把你修改过的代码重新编译成dex:
1
java -jar baksmali.jar classes.dex -o classes
2
java -jar smali.jar classes -o classes.dex




Readers who viewed this page, also viewed:
用Spinner + SQLite实现省市县三级联动
如何创建Android启动界面Splash Screen
如何获得已安装apk的安装时间和占用空间大小
Related Posts
简单实现Android顶部工具栏
用Spinner + SQLite实现省市县三级联动
Android Tab使用总结
创建Android自定义键盘
如何创建Android启动界面Splash Screen
3 Responses to “反编译Android apk文件”
pop1030123 Says:
September 7th, 2011 at 5:34 am
兄弟这方面研究的不错,学习了。
pop1030123 Says:
September 19th, 2011 at 0:25 am
请教个问题:dex2jar这个工具反编译后,会生成使用jd-gui阅读的jar包,那么说这种情况反编译后的代码应该是最容易理解最容易阅读的了,为什么感觉apktool还用得多点呢?
dohkoos Says:
September 20th, 2011 at 20:32 pm
通常我使用apktool来得到资源文件,用dex2jar来查看其它应用的某些功能是怎么实现的。大部分情况下我只要学习布局就可以了,我想这大概就是apktoo用的多点的原因吧。

更多相关文章

  1. Python3原生编写月份计算工具
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  7. 一款霸榜 GitHub 的开源 Linux 资源监视器!
  8. android studio中android.support.v7.widget.RecyclerView;包找
  9. Android(安卓)sdk tool地址及相关工具

随机推荐

  1. android优化实战(一)-从递归到迭代
  2. 手机Android系统有那些优势?
  3. 禁止Android 横屏竖屏切换
  4. Android学习笔记1 android adb启动失败问
  5. Android使用FrameLayout应该注意的地方
  6. system 权限程序不能访问sd卡问题
  7. myeclipse8.5下离线安装android
  8. [android]android-am命令的使用
  9. Android Studio 默认keystore 以及自定义
  10. 理解Android的layout和measure