9.4 KiB
APK反编译器
☁️ HackTricks云平台 ☁️ -🐦 推特 🐦 - 🎙️ Twitch直播 🎙️ - 🎥 YouTube频道 🎥
- 你在一家网络安全公司工作吗?想要在HackTricks中宣传你的公司吗?或者你想要获取PEASS的最新版本或下载HackTricks的PDF吗?请查看订阅计划!
- 发现我们的独家NFT收藏品——The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组 或者 Telegram群组,或者关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks仓库 和 hacktricks-cloud仓库 提交PR来分享你的黑客技巧。
JD-Gui
第一个著名的GUI Java反编译器,你可以使用它来研究从APK中获取的Java代码。
Jadx
内置的Java(多平台)反编译器,目前我认为这是推荐使用的。
只需下载最新版本并从_bin_文件夹中执行:
jadx-gui
使用GUI可以进行文本搜索,转到函数定义(在函数上按CTRL +左键单击)和交叉引用(右键单击 --> 查找用法)
如果你只想要Java代码,但不想使用GUI,一个非常简单的方法是使用jadx命令行工具:
jadx app.apk
一些jadx(GUI和CLI版本)的有趣选项包括:
-d <path to output dir>
--no-res #No resources
--no-src #No source code
--no-imports #Always write entire package name (very useful to know where is the function that you might want to hook)
GDA-android-reversing-Tool
GDA也是一个强大而快速的反向分析平台。它不仅支持基本的反编译操作,还具有许多出色的功能,如恶意行为检测、隐私泄露检测、漏洞检测、路径解决、打包程序识别、变量跟踪分析、反混淆、Python和Java脚本、设备内存提取、数据解密和加密等等。
仅适用于Windows。
Bytecode-Viewer
另一个进行静态分析的有趣工具是:bytecode-viewer。它允许您同时使用多个反编译器对APK进行反编译。然后,您可以看到例如两个不同的Java反编译器和一个Smali反编译器。它还允许您修改代码:
如果您修改了代码,那么您可以将其导出。
bytecode-viewer的一个不好的地方是它没有引用或交叉引用。
Enjarify
Enjarify是一种将Dalvik字节码转换为等效Java字节码的工具。这使得Java分析工具能够分析Android应用程序。
Dex2jar是一个较旧的工具,也尝试将Dalvik转换为Java字节码。它在大多数情况下工作得相当好,但许多晦涩的特性或边缘情况会导致它失败,甚至悄悄地产生错误的结果。相比之下,Enjarify被设计为在尽可能多的情况下工作,即使是Dex2jar无法处理的代码。Enjarify正确处理Unicode类名、多个类型使用的常量、隐式转换、异常处理程序跳转到正常控制流、引用太多常量的类、非常长的方法、catchall处理程序之后的异常处理程序以及错误类型的静态初始值等等。
CFR
CFR将反编译现代Java特性 - 包括Java 9、12和14等 - 但它完全使用Java 6编写,因此可以在任何地方使用!(FAQ)- 它甚至可以将其他JVM语言的类文件转换回Java!
可以使用该JAR文件如下:
java -jar ./cfr.jar "$JARFILE" --outputdir "$OUTDIR"
对于较大的JAR文件,我发现内存不足。如果你也遇到这个问题,你可以简单地调整JVM的内存分配池的大小。
java -Xmx4G -jar ./cfr.jar "$JARFILE" --outputdir "$OUTDIR"
这个示例将允许分配最多4GB的内存。
在输出目录中,您将找到反编译的.java
文件,以及反编译的摘要。
Fernflower
接下来是Fernflower,它是IntelliJ IDEA的一部分。每个人都提到它是一个“分析性”反编译器(正如他们的项目描述中所述),但没有人指出这实际上意味着什么。我只找到了这个Stackoverflow问题,但很遗憾,至今没有得到答案。
无论如何,由于没有自包含的发布版本,您需要自己构建它。作为一个基于Gradle的项目,您可以克隆它,然后在您的机器上安装了Gradle之后运行以下命令。
cd ./plugins/java-decompiler/engine && gradle jar
在这里,我们首先将工作目录切换到Fernflower的根目录。然后,我们指示Gradle构建文件./build/libs/fernflower.jar
。
Fernflower的调用方式与CFR类似。
java -jar ./fernflower.jar "$JARFILE" "$OUTDIR"
在这里描述的反编译器中,这是唯一一个将生成的.java
文件输出到JAR文件中的工具。您可以使用unzip
轻松提取源文件。
Krakatau
还记得上面提到的Enjarify吗?同样的作者也是Krakatau的开发者。
与其他项目不同,这个项目是用Python编写的。我认为这就是它与其他项目有所不同的原因。
让我引用一下该项目的README。
接下来,确保您拥有包含任何外部类(即库)的定义的JAR文件,这些类可能被您尝试反编译的JAR文件引用。这包括标准库类(即JRT)。
根据描述,这些标准库类以rt.jar
文件的形式随Java的8版本一起提供。对于更高版本,作者提供了jrt-extractor,可以为我们生成这个文件。
因此,我们下载该工具并运行以下命令。
cd ./jrt-extractor
javac JRTExtractor.java
java -ea JRTExtractor
这个文件应该写在目录中的rt.jar
文件里。
有了这个文件,我们可以按照以下方式运行Krakatau。
./Krakatau/decompile.py -out "$OUTDIR" -skip -nauto -path ./jrt-extractor/rt.jar "$JARFILE"
让我参考项目的GitHub来了解参数的解释。只需注意,对于您的JAR文件使用的任何库,Krakatau将要求您将其作为JAR文件添加到-path
标志中。
procyon
安装完成后,使用方法很简单。
procyon -jar "$JARFILE" -o "$OUTDIR"
参考资料
{% embed url="https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一个网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想要获取PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品——The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组,或者关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。