Answers:
获取以下工具:
1)dex2jar将dex文件转换为jar文件
2)jd-gui查看jar中的java文件
由于dex2jar进行了一些优化,因此源代码具有很高的可读性。
这是有关如何反编译的过程:
将test_apk-debug.apk中的classes.dex转换为test_apk-debug_dex2jar.jar
d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex
注1:在Windows计算机上的所有的
.sh
脚本改为.bat
脚本注意2:在linux / mac上不要忘记
sh
或bash
。完整命令应为:
sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
注意3:此外,请记住将执行权限添加到
dex2jar-X.X
目录,例如sudo chmod -R +x dex2jar-2.0
在JD-GUI中打开jar
为了澄清一点,根据您要完成的目标,您可以采用两种主要方法:
将Dalvik字节码(dex)反编译为可读的Java源代码。如fred所述,您可以使用dex2jar和jd-gui轻松完成此操作。结果源对于阅读和理解应用程序的功能很有用,但可能不会产生100%的可用代码。换句话说,您可以阅读源代码,但不能真正对其进行修改和重新打包。请注意,如果源代码已被proguard混淆,则生成的源代码将更难解开。
另一个主要选择是将字节码反汇编为smali,这是专门为此目的设计的一种汇编语言。我发现最简单的方法是使用apktool。一旦安装了apktool,就可以将其指向一个apk文件,然后您将为应用程序中包含的每个类取回一个smali文件。您可以通过从新的Java源代码生成smali来读取和修改smali甚至完全替换类(为此,您可以使用javac将.java源代码编译为.class文件,然后使用Android的.class文件将.class文件转换为.dex文件dx编译器,然后使用baksmali(smali反汇编程序)将.dex转换为.smali文件,如本问题所述。这里可能会有捷径)。完成后,您可以轻松地再次用apktool将apk打包打包。请注意,apktool不会对生成的apk进行签名,因此您需要像对待其他任何Android应用程序一样进行处理。
如果您使用smali路线,则可能需要尝试APK Studio,这是一个IDE,可以自动执行上述一些步骤,以帮助您反编译和重新编译apk并将其安装在设备上。
简而言之,您的选择要么是反编译为更易读但很可能不可逆的Java,要么是反汇编为smali(难于阅读,但更灵活地进行更改和重新打包已修改的应用)。您选择哪种方法取决于您要实现的目标。
最后,敢于冒险的建议也值得注意。它是将.dex和.apk文件转换为Java .class文件的重定向工具,以便可以使用典型的Java静态分析工具对其进行分析。
我实际上建议去这里:https : //github.com/JesusFreke/smali
它提供了BAKSMALI,这是用于DEX文件的最出色的逆向工程工具。它是由创建著名的Android ROM的JesusFreke制作的。
首先,您需要一个工具来将DEX上的所有(已编译)类提取到JAR中。
有一个叫dex2jar的文件,它是由一个中国学生制作的。
然后,您可以使用JD-GUI来反编译的JAR源代码的类。
由于dex2jar进行了一些优化,因此生成的源应该非常易读。
您可以使用APKTool。它将自动提取所有类(.dex
),资源(.asrc
),然后将二进制XML转换为人类可读的XML,还将 为您分解这些类。
拆卸总是比反编译更稳健,特别是与
同亲卫队混淆的JAR!
只需告诉APKTool 将APK 解码到目录中,然后修改您想要的内容,
最后将其编码回APK即可。就这样。
重要提示: APKTool会分解。它不会反编译。
生成的代码将不是Java源代码。
但是您应该能够阅读它,甚至如果您熟悉jasmin甚至可以对其进行编辑。
如果您想要Java源代码,请阅读手动方式。
有时,在使用dex2jar
/时apktool
,您会得到残破的代码,尤其是在循环中。为了避免这种情况,请使用jadx,它将dalvik字节码反编译为Java源代码,而无需像创建那样先创建.jar
/ .class
文件dex2jar
(我认为apktool使用dex2jar)。它也是开源的并且正在积极开发中。它甚至具有GUI,适用于GUI狂热者。尝试一下!
javac "$(find . -name '*.java')"
?
由于没有人提到过这一点,因此还有一个工具:DED主页
安装方法和一些说明:安装。
它被用于对顶级市场应用程序的安全性进行的非常有趣的研究中(即使您好奇,也没有真正的关联):Android应用程序安全性调查
由于Dheeraj Bhaskar
的答案相对而言已有多年历史了。
这是我最新的(2019年)答案:
从dex
到java sourcecode
,目前有两种解决方案:
One Step
:直接转换dex
为java sourcecode
Two Step
:首先转换dex
为jar
,第二次转换jar
为java sourcecode
dex
直接java sourcecode
bin
文件夹中可以看到命令行jadx
或GUI版本jadx-gui
,双击运行GUI版本:jadx-gui
dex
文件然后可以显示java源代码:
File
-> save as gradle project
然后得到了java源代码:
dex
到jar
下载dex2jar zip,解压缩后d2j-dex2jar.sh
,然后:
apk
至jar
:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
至jar
:sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex
例:
➜ v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
➜ v3.4.8 ll
-rw------- 1 crifan staff 9.5M 3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw------- 1 crifan staff 8.4M 3 19 14:04 com.huili.readingclub8825612.dex
jar
到java sourcecode
这里演示Procyon
将jar转换为Java源代码:
下载procyon-decompiler-0.5.34.jar
然后使用语法:
java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName
例:
java -jar /Users/crifan/dev/dev_tool/android/reverse_engineering/Procyon/procyon-decompiler-0.5.34.jar -jar com.huili.readingclub8825612-dex2jar.jar -o com.huili.readingclub8825612
使用编辑器VSCode打开导出的源代码,如下所示:
转换正确性:Jadx
> Procyon
> CRF
>JD-GUI
推荐使用:(一站式解决方案) Jadx
有关详细说明,请参阅我的在线中文电子书:安卓应用的安全和破解
dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dex
刚刚例外:java.io.IOException: the src file not a .dex or zip file
d2j-dex2jar.bat "D:\android\some_dex_file.dex"
可以吗?
>d2j-dex2jar.bat file.dex
但是不行。也许是因为我的.dex
文件是从中复制的dalvik-cache
?
dex is copied from dalvik-cache
应该是dex is decompiled from apk
下载APK文件后,您需要执行以下步骤来获取可编辑的Java代码/文档。
Android逆向工程是可能的 。请按照以下步骤从apk文件获取.java文件。
步骤1 。使用dex2jar
dex2jar sampleApp.apk
第2步 。使用JD-GUI反编译.jar
最近的Debian have Python包androguard
:
Description-en: full Python tool to play with Android files
Androguard is a full Python tool to play with Android files.
* DEX, ODEX
* APK
* Android's binary xml
* Android resources
* Disassemble DEX/ODEX bytecodes
* Decompiler for DEX/ODEX files
安装相应的软件包:
sudo apt-get install androguard python-networkx
反编译DEX文件:
$ androdd -i classes.dex -o ./dir-for-output
classes.dex
从Apk 提取+反编译:
$ androdd -i app.apk -o ./dir-for-output
APK文件只不过是Java存档(JAR),您可以通过以下方式从存档中提取文件:
$ unzip app.apk -d ./dir-for-output
您可以尝试JADX(https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler),这是DEX反编译的理想工具。
是的,它也可以在(我:0)的新站点上在线获得:http : //www.javadecompilers.com/apk/
这可以通过以下五个步骤完成:
反编译android应用最简单的方法是从playstore 下载名为ShowJava的应用。只需从应用程序列表中选择需要反编译的应用程序。您可以使用三种不同的反编译器来反编译应用程序-
CFR 0.110,JaDX 0.6.1或FernFlower(分析反编译器)。
如果您不想下载dex2jar,则只需使用apk_grabber
python脚本将任何apk反编译为jar文件。然后,您可以使用jd-gui阅读它们。