2023-08-03 19:12:22 +00:00
|
|
|
|
# APK反编译器
|
2022-04-28 16:01:33 +00:00
|
|
|
|
|
|
|
|
|
<details>
|
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云平台 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch直播 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 YouTube频道 🎥</strong></a></summary>
|
2022-04-28 16:01:33 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
|
|
|
|
* 发现我们的独家[**NFT收藏品**](https://opensea.io/collection/the-peass-family)——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
|
|
|
|
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
|
|
|
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或者 [**Telegram群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
|
|
|
|
* **通过向**[**hacktricks仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
2022-04-28 16:01:33 +00:00
|
|
|
|
|
|
|
|
|
</details>
|
|
|
|
|
|
2022-05-01 12:41:36 +00:00
|
|
|
|
## [JD-Gui](https://github.com/java-decompiler/jd-gui)
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
第一个著名的GUI Java反编译器,你可以使用它来研究从APK中获取的Java代码。
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2022-05-01 12:41:36 +00:00
|
|
|
|
## [Jadx](https://github.com/skylot/jadx)
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
内置的Java(多平台)反编译器,目前我认为这是推荐使用的。\
|
|
|
|
|
只需**下载**最新版本并从_**bin**_文件夹中执行:
|
2021-10-18 11:21:18 +00:00
|
|
|
|
```
|
2020-07-15 15:43:14 +00:00
|
|
|
|
jadx-gui
|
|
|
|
|
```
|
2023-08-03 19:12:22 +00:00
|
|
|
|
使用GUI可以进行文本搜索,转到函数定义(在函数上按CTRL +左键单击)和交叉引用(右键单击 --> 查找用法)
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
如果你只想要Java代码,但不想使用GUI,一个非常简单的方法是使用jadx命令行工具:
|
2021-10-18 11:21:18 +00:00
|
|
|
|
```
|
2020-07-15 15:43:14 +00:00
|
|
|
|
jadx app.apk
|
|
|
|
|
```
|
2023-08-03 19:12:22 +00:00
|
|
|
|
一些jadx(GUI和CLI版本)的有趣选项包括:
|
2021-10-18 11:21:18 +00:00
|
|
|
|
```
|
2020-07-15 15:43:14 +00:00
|
|
|
|
-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)
|
|
|
|
|
```
|
2022-05-01 12:41:36 +00:00
|
|
|
|
## [GDA-android-reversing-Tool](https://github.com/charles2gan/GDA-android-reversing-Tool)
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
GDA也是一个强大而快速的反向分析平台。它不仅支持基本的反编译操作,还具有许多出色的功能,如恶意行为检测、隐私泄露检测、漏洞检测、路径解决、打包程序识别、变量跟踪分析、反混淆、Python和Java脚本、设备内存提取、数据解密和加密等等。
|
2020-11-23 10:05:59 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
仅适用于Windows。
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-06-06 22:57:49 +00:00
|
|
|
|
![](<../../.gitbook/assets/image (207) (1) (1).png>)
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2022-05-01 12:41:36 +00:00
|
|
|
|
## [Bytecode-Viewer](https://github.com/Konloch/bytecode-viewer/releases)
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
另一个进行静态分析的有趣工具是:[bytecode-viewer](https://github.com/Konloch/bytecode-viewer/releases)。它允许您同时使用多个反编译器对APK进行反编译。然后,您可以看到例如两个不同的Java反编译器和一个Smali反编译器。它还允许您修改代码:
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2021-10-18 11:21:18 +00:00
|
|
|
|
![](<../../.gitbook/assets/image (82).png>)
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
如果您修改了代码,那么您可以将其导出。\
|
|
|
|
|
bytecode-viewer的一个不好的地方是它没有引用或交叉引用。
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
## [Enjarify](https://github.com/Storyyeller/enjarify)
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
Enjarify是一种将Dalvik字节码转换为等效Java字节码的工具。这使得Java分析工具能够分析Android应用程序。\
|
|
|
|
|
Dex2jar是一个较旧的工具,也尝试将Dalvik转换为Java字节码。它在大多数情况下工作得相当好,但许多晦涩的特性或边缘情况会导致它失败,甚至悄悄地产生错误的结果。相比之下,Enjarify被设计为在尽可能多的情况下工作,即使是Dex2jar无法处理的代码。Enjarify正确处理Unicode类名、多个类型使用的常量、隐式转换、异常处理程序跳转到正常控制流、引用太多常量的类、非常长的方法、catchall处理程序之后的异常处理程序以及错误类型的静态初始值等等。
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2022-05-01 12:41:36 +00:00
|
|
|
|
## [CFR](https://github.com/leibnitz27/cfr)
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
CFR将反编译现代Java特性 - 包括Java 9、12和14等 - 但它完全使用Java 6编写,因此可以在任何地方使用!([FAQ](https://www.benf.org/other/cfr/faq.html))- 它甚至可以将其他JVM语言的类文件转换回Java!
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
可以使用该JAR文件如下:
|
2021-10-18 11:21:18 +00:00
|
|
|
|
```
|
2021-03-22 09:38:34 +00:00
|
|
|
|
java -jar ./cfr.jar "$JARFILE" --outputdir "$OUTDIR"
|
|
|
|
|
```
|
2023-08-03 19:12:22 +00:00
|
|
|
|
对于较大的JAR文件,我发现内存不足。如果你也遇到这个问题,你可以简单地调整JVM的内存分配池的大小。
|
2021-10-18 11:21:18 +00:00
|
|
|
|
```
|
2021-03-22 09:38:34 +00:00
|
|
|
|
java -Xmx4G -jar ./cfr.jar "$JARFILE" --outputdir "$OUTDIR"
|
|
|
|
|
```
|
2023-08-03 19:12:22 +00:00
|
|
|
|
这个示例将允许分配最多4GB的内存。
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
在输出目录中,您将找到反编译的`.java`文件,以及反编译的摘要。
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2022-05-01 12:41:36 +00:00
|
|
|
|
## [Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine)
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
接下来是[Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine),它是[IntelliJ IDEA](https://www.jetbrains.com/idea/)的一部分。每个人都提到它是一个“分析性”反编译器(正如他们的项目描述中所述),但没有人指出这实际上意味着什么。我只找到了[这个Stackoverflow问题](https://stackoverflow.com/q/62298929),但很遗憾,至今没有得到答案。
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
无论如何,由于没有自包含的发布版本,您需要自己构建它。作为一个基于[Gradle](https://gradle.org)的项目,您可以克隆它,然后在您的机器上安装了Gradle之后运行以下命令。
|
2021-10-18 11:21:18 +00:00
|
|
|
|
```
|
2021-03-22 09:38:34 +00:00
|
|
|
|
cd ./plugins/java-decompiler/engine && gradle jar
|
|
|
|
|
```
|
2023-08-03 19:12:22 +00:00
|
|
|
|
在这里,我们首先将工作目录切换到Fernflower的根目录。然后,我们指示Gradle构建文件`./build/libs/fernflower.jar`。
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
Fernflower的调用方式与CFR类似。
|
2021-10-18 11:21:18 +00:00
|
|
|
|
```
|
2021-03-22 09:38:34 +00:00
|
|
|
|
java -jar ./fernflower.jar "$JARFILE" "$OUTDIR"
|
|
|
|
|
```
|
2023-08-03 19:12:22 +00:00
|
|
|
|
在这里描述的反编译器中,这是唯一一个将生成的`.java`文件输出到JAR文件中的工具。您可以使用`unzip`轻松提取源文件。
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2022-05-01 12:41:36 +00:00
|
|
|
|
## [Krakatau](https://github.com/Storyyeller/Krakatau)
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
还记得上面提到的Enjarify吗?同样的作者也是[Krakatau](https://github.com/Storyyeller/Krakatau)的开发者。
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
与其他项目不同,这个项目是用Python编写的。我认为这就是它与其他项目有所不同的原因。
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
让我引用一下[该项目的README](https://github.com/Storyyeller/Krakatau/blob/master/README.md)。
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
> 接下来,确保您拥有包含任何外部类(即库)的定义的JAR文件,这些类可能被您尝试反编译的JAR文件引用。这包括标准库类(即JRT)。
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
根据描述,这些标准库类以`rt.jar`文件的形式随Java的8版本一起提供。对于更高版本,作者提供了[jrt-extractor](https://github.com/Storyyeller/jrt-extractor),可以为我们生成这个文件。
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
因此,我们下载该工具并运行以下命令。
|
2021-10-18 11:21:18 +00:00
|
|
|
|
```
|
2021-03-22 09:38:34 +00:00
|
|
|
|
cd ./jrt-extractor
|
|
|
|
|
javac JRTExtractor.java
|
|
|
|
|
java -ea JRTExtractor
|
|
|
|
|
```
|
2023-08-03 19:12:22 +00:00
|
|
|
|
这个文件应该写在目录中的`rt.jar`文件里。
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
有了这个文件,我们可以按照以下方式运行Krakatau。
|
2021-10-18 11:21:18 +00:00
|
|
|
|
```
|
2021-03-22 09:38:34 +00:00
|
|
|
|
./Krakatau/decompile.py -out "$OUTDIR" -skip -nauto -path ./jrt-extractor/rt.jar "$JARFILE"
|
|
|
|
|
```
|
2023-08-03 19:12:22 +00:00
|
|
|
|
让我参考项目的GitHub来了解参数的解释。只需注意,对于您的JAR文件使用的任何库,Krakatau将要求您将其作为JAR文件添加到`-path`标志中。
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2022-05-01 12:41:36 +00:00
|
|
|
|
## [procyon](https://github.com/mstrobel/procyon)
|
2021-03-22 09:38:34 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
安装完成后,使用方法很简单。
|
2021-10-18 11:21:18 +00:00
|
|
|
|
```
|
2021-03-22 09:38:34 +00:00
|
|
|
|
procyon -jar "$JARFILE" -o "$OUTDIR"
|
|
|
|
|
```
|
2023-08-03 19:12:22 +00:00
|
|
|
|
## 参考资料
|
2021-04-01 22:13:01 +00:00
|
|
|
|
|
2021-10-18 11:21:18 +00:00
|
|
|
|
{% embed url="https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr" %}
|
2022-04-28 16:01:33 +00:00
|
|
|
|
|
|
|
|
|
<details>
|
|
|
|
|
|
2023-04-25 18:35:28 +00:00
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
2022-04-28 16:01:33 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
* 你在一个**网络安全公司**工作吗?你想在HackTricks中看到你的**公司广告**吗?或者你想要**获取PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
|
|
|
|
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
|
|
|
|
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
|
|
|
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
|
|
|
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
2022-04-28 16:01:33 +00:00
|
|
|
|
|
|
|
|
|
</details>
|