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

5.2 KiB
Raw Blame History

从零到英雄学习AWS黑客攻击 htARTE (HackTricks AWS Red Team Expert)

支持HackTricks的其他方式

如何反混淆

反混淆策略取决于混淆方法。本节介绍适用于静态分析或逆向的静态反混淆技术:

  • 对于DEX字节码Java常见的方法是识别并复制应用程序的反混淆方法到一个Java文件中然后对混淆元素执行该文件。
  • 对于Java和Native Code另一种技术涉及将反混淆算法翻译成熟悉的脚本语言如Python强调理解算法不如能够执行它重要。

混淆的指标

识别混淆涉及识别某些指标,以下提供了一些例子:

  • 在Java和Android中字符串缺失或出现乱码字符串暗示字符串混淆。
  • 资产目录中存在二进制文件或DexClassLoader调用的存在表明可能进行代码解包和加载。
  • 使用Native库而没有可识别的JNI函数表明可能进行了本地方法混淆。

字符串反混淆练习

提供了一个练习以在静态分析环境中练习字符串反混淆。任务涉及一个具有特定SHA256摘要的样本文件要求分析师在不动态运行应用程序的情况下揭示一个混淆的Javascript字符串。

解决方案涉及一个Python脚本该脚本解密编码字符串揭示了一个来自coinhive.com的嵌入式脚本并启动了一个矿工。

额外资源

可以在BlackHat USA 2018和REcon 2019的讲座中进一步了解反混淆Android应用程序特别是关注高级混淆技术每个讲座都涵盖了Android应用程序混淆的独特方面。

练习来自https://maddiestone.github.io/AndroidAppRE/obfuscation.html:

enc_str = "773032205849207A3831326F1351202E3B306B7D1E5A3B33252B382454173735266C3D3B53163735222D393B475C7A37222D7F38421B6A66643032205849206477303220584920643D2223725C503A3F39636C725F5C237A082C383C7950223F65023F3D5F4039353E3079755F5F666E1134141F5C4C64377A1B671F565A1B2C7F7B101F42700D1F39331717161574213F2B2337505D27606B712C7B0A543D342E317F214558262E636A6A6E1E4A37282233256C"

length = len(enc_str)
count = 0
dec_str = [0] * (length/2)
while (count < length):
dec_str[count/2] = (int(enc_str[count], 16) << 4) + int(enc_str[count + 1], 16) & 0xFF
count += 2
print dec_str


key = [75, 67, 81, 82, 49, 57, 84, 90]
enc_str = dec_str
count = 0
length = len(enc_str)
while (count < length):
dec_str[count] = chr(enc_str[count] ^ key[count % len(key)])
count += 1
print ''.join(dec_str)

参考文献和进一步阅读

  • https://maddiestone.github.io/AndroidAppRE/obfuscation.html
  • BlackHat USA 2018: “解包装的包装器逆向工程一个Android反分析库” [视频]
  • 这个演讲主要讲述了逆向工程一个Android应用程序所使用的最复杂的反分析本地库之一。它主要涵盖了本地代码中的混淆技术。
  • REcon 2019: “通往有效载荷的路径Android版本” [视频]
  • 这个演讲讨论了一系列混淆技术仅在Java代码中一个Android僵尸网络使用这些技术来隐藏其行为。
从零开始学习AWS黑客技术成为 htARTE (HackTricks AWS红队专家)

支持HackTricks的其他方式