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