MASTG-TEST-0040: 测试调试符号
此测试即将更新
此测试目前可使用,但将作为新的 OWASP MASTG v2 指南 的一部分进行全面修订。
请通过提交 PR 来帮助我们:MASTG v1->v2 MASTG-TEST-0040:调试符号测试 (android)
概述¶
静态分析¶
通常在构建过程中会删除符号,因此你需要已编译的字节码和库,以确保已丢弃不必要的元数据。
首先,在你的 Android NDK 中找到 nm
二进制文件并导出它(或创建一个别名)。
export NM = $ANDROID_NDK_DIR/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-nm
显示调试符号:
$NM -a libfoo.so
/tmp/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-nm: libfoo.so: no symbols
显示动态符号:
$NM -D libfoo.so
或者,在您喜欢的反汇编程序中打开该文件并手动检查符号表。
可以通过 visibility
编译器标志来剥离动态符号。添加此标志会导致 gcc 丢弃函数名称,同时保留声明为 JNIEXPORT
的函数名称。
确保以下内容已添加到 build.gradle:
externalNativeBuild {
cmake {
cppFlags "-fvisibility=hidden"
}
}
动态分析¶
应使用静态分析来验证调试符号。