当前位置:首页 > 行业动态 > 正文

安卓代码审计

安卓代码审计需审查权限配置、组件暴露风险,检测数据存储加密,排查Intent破绽及第三方库隐患,确保应用安全合规

安卓代码审计核心流程

阶段 关键操作
环境准备 搭建Android Studio/命令行开发环境
配置逆向工程工具(如Jadx/Apktool)
准备代码版本管理工具(Git/SVN)
静态分析 代码结构审查(包名规范/目录结构)
权限体系检查
敏感API调用追踪
加密实现验证
动态分析 沙盒环境部署
运行时日志监控
网络流量捕获
异常处理测试
结果处理 破绽分级(高危/中危/低危)
修复建议生成
复测验证闭环

关键审计维度与检测点

权限体系审计

权限类型 审计重点
危险权限 • 定位权限滥用(后台持续定位)
• 读写存储权限与文件操作匹配性
特殊权限 • 无障碍服务权限使用场景
• 系统警报窗口权限合理性
权限动态申请 • 是否符合Android 6.0+运行时权限机制
• 权限申请时机合理性

组件安全审计

组件类型 风险点
BroadcastReceiver • 隐式广播注册
• 未设置exported属性导致外部调用风险
Service • 未设置android:exported=”false”
• Intent过滤器暴露风险
ContentProvider • 未明确定义read/write权限
• URI路径遍历破绽

加密实现审计

加密场景 常见错误
本地存储 • Hardcode密钥(SharedPreferences/SQLite)
• 弱加密算法(DES/MD5)
网络传输 • HTTP明文传输
• TLS版本低于1.2
• 证书锁定不完整
代码混淆 • ProGuard规则不完善(保留类/方法)
• 混淆强度不足导致逆向破解

典型破绽案例分析

WebView安全隐患

<WebView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:javascriptEnabled="true" />

风险点

安卓代码审计  第1张

  • 未开启domStorageEnabled限制
  • 未设置webViewClient导致URL跳转劫持
  • 未启用safeBrowsingEnabled防御反面网页

SQL注入风险代码

public void login(String username, String password) {
    String query = "SELECT  FROM users WHERE name='" + username + "' AND pwd='" + password + "'";
    // 执行SQL查询...
}

修复方案

SQLiteStatement stmt = db.compileStatement("SELECT  FROM users WHERE name=? AND pwd=?");
stmt.bindString(1, username);
stmt.bindString(2, password);

审计工具矩阵

工具类别 推荐工具
静态代码分析 • LintChecks
• FindSecBugs
• PMD with Android ruleset
逆向工程 • Jadx(Java反编译)
• Apktool(资源解析)
• Frida(动态hook)
行为监控 • Burp Suite(代理分析)
• Charles(HTTPS抓包)
• Systrace(性能追踪)
自动化扫描 • MobSF(移动安全框架)
• AppScan
• Accuvant

代码加固建议清单

防护层级 实施措施
代码混淆 • 启用ProGuard/R8混淆
• 过滤关键类(防核心逻辑被逆向)
完整性校验 • APK签名防改动
• 关键文件MD5校验
• 安全启动页(防二次打包)
运行时防护 • PIE(位置无关执行)
• JNI层地址空间布局随机化(ASLR)
• 堆栈保护

【问题与解答】

Q1:如何检测安卓应用中的硬编码敏感信息?
A1:可通过以下方式检测:

  1. 静态扫描:使用正则表达式搜索.java/.xml文件中符合密钥特征的字符串(如-----BEGIN CERTIFICATE-----
  2. 字节分析:通过xxdstrings命令查看APK二进制,搜索连续数字/特殊字符组合
  3. 行为监控:在动态调试时,关注网络请求头/加密函数参数中的固定值
  4. 工具辅助:MobSF等自动化工具会标记明文密钥和硬编码凭证

Q2:如何防范安卓应用被逆向工程?
A2:多层防护策略:

  1. 代码层面
    • 启用ProGuard混淆(最小化保留类)
    • DEX文件加密(如微信的mm.jar)
    • 关键逻辑拆分到NDK层(增加逆向难度)
  2. 运行时防护
    • 检测调试器(Debug.isDebuggerConnected()
    • 校验应用完整性(签名校验+文件哈希比对)
    • 防内存dump(PTRACE_TRACEME反调试)
  3. 法律手段
    • 添加版权声明和反爬虫条款
    • 关键接口加入频率限制和IP黑名单
0