跳转至

Debug Symbols Present in the Android Application

Android应用程序中存在调试符号

描述

该应用程序附带了调试符号和调试信息,例如调试信息、行号和描述性的函数或方法名称,这使得逆向工程变得更加容易。

值得注意的是,大多数崩溃报告工具支持上传符号以执行堆栈跟踪(stack trace)符号化,并且不需要符号存在于应用程序中。

要验证本机库是否未附带调试符号,请使用以下命令:

readelf --debug-dump=info <library>

建议

从应用程序中删除所有符号和调试数据。

为此,这里有一些建议:

  • 通过在发布模式(release mode)下编译来配置构建类型(build type)以排除调试信息。
  android {
      ...
      buildTypes {
          release {
              debuggable false
              ...
          }
      }
  }
  • 使用 ProGuard 去除本机调试符号。
buildTypes {
        ...
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            ...
        }
    }
  • 使用 strip 命令从本机库中删除符号:
strip -s <library>

链接

标准

  • OWASP_MASVS_L1:
    • MSTG_CODE_3
  • OWASP_MASVS_L2:
    • MSTG_CODE_3
  • PCI_STANDARDS:
    • REQ_2_2
    • REQ_6_2
  • OWASP_MASVS_v2_1:
    • MASVS_RESILIENCE_3
  • HIPAA_CONTROLS:
    • SECURITY212
    • SECURITY213