hacktricks/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md

4 KiB
Raw Blame History

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式

手动去混淆技术

软件安全领域中,使被混淆的代码变得可理解的过程,即去混淆,至关重要。本指南深入探讨了各种去混淆策略,重点放在静态分析技术和识别混淆模式上。此外,它介绍了一个实际应用的练习,并为那些有兴趣探索更高级主题的人提供了进一步的资源。

静态去混淆策略

在处理被混淆的代码时,可以采用几种策略,具体取决于混淆的性质:

  • DEX字节码Java一种有效的方法涉及识别应用程序的去混淆方法然后在Java文件中复制这些方法。执行此文件以反转目标元素上的混淆。
  • Java和本地代码另一种方法是将去混淆算法转换为Python等脚本语言。该策略强调的是主要目标不是完全理解算法而是有效地执行它。

识别混淆

识别被混淆的代码是去混淆过程中的第一步。关键指标包括:

  • 在Java和Android中字符串的缺失或混淆,可能暗示字符串混淆。
  • 在assets目录中二进制文件的存在或对DexClassLoader的调用,暗示代码解压缩和动态加载。
  • 使用本地库以及无法识别的JNI函数,表明可能对本地方法进行了混淆。

去混淆中的动态分析

通过在受控环境中执行代码,动态分析允许观察被混淆代码的实时行为。这种方法特别适用于揭示旨在隐藏代码真实意图的复杂混淆模式的内部工作方式。

动态分析的应用

  • 运行时解密:许多混淆技术涉及加密字符串或代码段,仅在运行时解密。通过动态分析,可以在解密时捕获这些加密元素,揭示它们的真实形式。
  • 识别混淆技术:通过监视应用程序的行为,动态分析可以帮助识别正在使用的特定混淆技术,如代码虚拟化、打包工具或动态代码生成。
  • 揭示隐藏功能:被混淆的代码可能包含通过静态分析无法明显看出的隐藏功能。动态分析允许观察所有代码路径,包括有条件执行的路径,以揭示这些隐藏功能。

参考资料和进一步阅读

  • https://maddiestone.github.io/AndroidAppRE/obfuscation.html
  • BlackHat USA 2018: “解包打包解包器逆向工程Android反分析库” [视频]
  • 本讲座涵盖了我见过的Android应用程序使用的最复杂的反分析本地库之一的逆向工程主要涵盖了本地代码中的混淆技术。
  • REcon 2019: “通往有效载荷的路径Android版” [视频]
  • 本讲座讨论了一系列混淆技术仅涉及Java代码一个Android僵尸网络正在使用这些技术来隐藏其行为。