MASTG-TEST-0051: 测试混淆
此测试即将更新
此测试目前可使用,但将作为新的 OWASP MASTG v2 指南 的一部分进行全面修订。
Help us out by submitting a PR for: MASTG v1->v2 MASTG-TEST-0051: Testing Obfuscation (android)
概述¶
静态分析¶
反编译 APK ( 反编译 Java 代码) 并对其进行审查 ( 审查反编译的 Java 代码) 以确定代码库是否已被混淆。
下面您可以找到一个混淆代码块的示例
package com.a.a.a;
import com.a.a.b.a;
import java.util.List;
class a$b
extends a
{
public a$b(List paramList)
{
super(paramList);
}
public boolean areAllItemsEnabled()
{
return true;
}
public boolean isEnabled(int paramInt)
{
return true;
}
}
以下是一些注意事项
- 有意义的标识符,例如类名、方法名和变量名,可能已被丢弃。
- 二进制文件中的字符串资源和字符串可能已被加密。
- 与受保护功能相关的代码和数据可能已被加密、打包或以其他方式隐藏。
对于本机代码
- libc APIs (例如 open, read) 可能已被 OS syscalls 替换。
- Obfuscator-LLVM 可能已被应用于执行 "控制流平坦化" 或 "虚假控制流"。
Gautam Arvind 在博文 "Android 本机代码的安全强化" 中以及 Eduardo Novella 在 "APKiD:快速识别应用防护产品" 演示文稿中讨论和分析了其中一些技术。
为了进行更详细的评估,您需要详细了解相关威胁和所使用的混淆方法。诸如 APKiD 的工具可能会为您提供有关目标应用所使用的技术(例如混淆器、打包器和反调试措施)的其他指示。
动态分析¶
您可以使用 APKiD 来检测应用是否已被混淆。
使用 Android UnCrackable L4 的示例
apkid mastg/Crackmes/Android/Level_04/r2pay-v1.0.apk
[+] APKiD 2.1.2 :: from RedNaga :: rednaga.io
[*] mastg/Crackmes/Android/Level_04/r2pay-v1.0.apk!classes.dex
|-> anti_vm : Build.TAGS check, possible ro.secure check
|-> compiler : r8
|-> obfuscator : unreadable field names, unreadable method names
在这种情况下,它检测到该应用具有不可读的字段名称和方法名称等。