{{#include ../../banners/hacktricks-training.md}} ## 手动 **去混淆技术** 在 **软件安全** 的领域中,使模糊代码可理解的过程,称为 **去混淆**,至关重要。本指南深入探讨了各种去混淆策略,重点关注静态分析技术和识别混淆模式。此外,它还介绍了一个实践应用的练习,并建议了进一步的资源,以供有兴趣探索更高级主题的人士。 ### **静态去混淆策略** 在处理 **混淆代码** 时,可以根据混淆的性质采用几种策略: - **DEX 字节码 (Java)**:一种有效的方法是识别应用程序的去混淆方法,然后在 Java 文件中复制这些方法。执行该文件以逆转目标元素的混淆。 - **Java 和本地代码**:另一种方法是将去混淆算法翻译成像 Python 这样的脚本语言。这一策略强调,主要目标不是完全理解算法,而是有效地执行它。 ### **识别混淆** 识别混淆代码是去混淆过程的第一步。关键指标包括: - Java 和 Android 中 **字符串的缺失或混乱**,这可能表明字符串混淆。 - 资产目录中 **存在二进制文件** 或对 `DexClassLoader` 的调用,暗示代码解包和动态加载。 - 使用 **本地库和不可识别的 JNI 函数**,表明本地方法可能被混淆。 ## **去混淆中的动态分析** 通过在受控环境中执行代码,动态分析 **允许观察混淆代码在实时中的行为**。这种方法在揭示旨在隐藏代码真实意图的复杂混淆模式的内部工作原理方面特别有效。 ### **动态分析的应用** - **运行时解密**:许多混淆技术涉及加密字符串或代码段,这些内容仅在运行时解密。通过动态分析,可以在解密时捕获这些加密元素,揭示其真实形式。 - **识别混淆技术**:通过监控应用程序的行为,动态分析可以帮助识别正在使用的特定混淆技术,例如代码虚拟化、打包器或动态代码生成。 - **揭示隐藏功能**:混淆代码可能包含通过静态分析无法显现的隐藏功能。动态分析允许观察所有代码路径,包括那些有条件执行的路径,以揭示这些隐藏功能。 ## 参考文献和进一步阅读 - [https://maddiestone.github.io/AndroidAppRE/obfuscation.html](https://maddiestone.github.io/AndroidAppRE/obfuscation.html) - BlackHat USA 2018: “解包打包解包器:逆向工程一个 Android 反分析库” \[[视频](https://www.youtube.com/watch?v=s0Tqi7fuOSU)] - 本次演讲讨论了我所见过的 Android 应用程序使用的最复杂的反分析本地库之一的逆向工程。主要涵盖了本地代码中的混淆技术。 - REcon 2019: “通往有效载荷的路径:Android 版” \[[视频](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)] - 本次演讲讨论了一系列仅在 Java 代码中使用的混淆技术,Android 僵尸网络使用这些技术来隐藏其行为。 {{#include ../../banners/hacktricks-training.md}}