zoukankan      html  css  js  c++  java
  • 反编译Android apk文件

    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用的多点的原因吧。


    ---------------------------------------------------------------------------------------------------------------------------------
    copyright:http://www.cnblogs.com/anee/
  • 相关阅读:
    184. Department Highest Salary【leetcode】sql,join on
    181. Employees Earning More Than Their Managers【leetcode】,sql,inner join ,where
    178. Rank Scores【leetcode】,sql
    177. Nth Highest Salary【leetcode】,第n高数值,sql,limit,offset
    176. Second Highest Salary【取表中第二高的值】,sql,limit,offset
    118. Pascal's Triangle【LeetCode】,java,算法,杨辉三角
    204. Count Primes【leetcode】java,算法,质数
    202. Happy Number【leetcode】java,hashSet,算法
    41. First Missing Positive【leetcode】寻找第一个丢失的整数,java,算法
    删除
  • 原文地址:https://www.cnblogs.com/anee/p/2675814.html
Copyright © 2011-2022 走看看