跳过内容

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"
    }
}

动态分析

应使用静态分析来验证调试符号。