记一次渗透中遇见的apk逆向 sign解码分析
字数 1630 2025-08-06 12:20:59
APK逆向分析:Sign签名解码与绕过技术详解
1. 前言:Sign签名机制概述
Sign签名校验是移动应用常见的安全防护手段,其本质是对客户端传输数据合法性的一种校验机制。典型实现方式为:
- 在客户端传输数据中加入时间戳和特殊字符
- 对整个数据集进行加密(常用MD5、SHA1等算法)
- 生成签名值(sign)随请求一起发送
- 服务端使用相同算法验证签名一致性
这种机制使得攻击者在不知晓签名生成方法的情况下,无法有效篡改传输数据,因为任何修改都会导致签名验证失败。
2. 初步渗透测试发现
2.1 测试环境配置
- 使用Burpsuite配置HTTPS代理
- 安装并信任Burpsuite的CA证书
- 对目标APK进行抓包分析
2.2 发现的安全问题
-
用户枚举漏洞:
- 不存在的用户返回"未注册"
- 存在的用户返回"已发送短信"
- 可通过修改mobile参数进行手机号爆破
-
签名保护机制:
- 请求中存在sign参数
- 修改mobile参数会导致"认证失败"
3. Sign签名绕过方法探索
3.1 初步尝试方法
-
测试弱加密:
- 分析sign值长度和特征
- 尝试CMD5等在线解密平台
- 结果:非标准MD5,解密失败
-
置空绕过:
- 尝试将sign参数置空或删除
- 结果:服务端返回认证失败
-
APK逆向分析:
- 由于前两种方法失败,必须进行APK逆向
4. APK逆向分析详细过程
4.1 查壳与脱壳
-
使用多种查壳工具检测:
- 确认APK未加壳(省去脱壳步骤)
-
尝试使用AndroidKiller分析:
- 遇到工具报错问题(具体错误未说明)
-
备用方案:frida-dexdump
- 使用frida-dexdump工具脱取DEX文件
- 将DEX转换为JAR格式查看源码
4.2 源码分析
-
搜索sign关键字:
- 在Java代码中未发现相关加密逻辑
-
转向非Java代码分析:
- 将APK后缀改为ZIP并解压
- 在assets或res等目录查找JS等脚本文件
-
发现加密逻辑:
- 加密算法实现在JS文件中
- 找到secretKey加密密钥
- 通过代码跳转确认密钥有效性
5. 加密算法分析与脚本编写
5.1 加密参数确定
面临问题:不确定哪些参数参与加密
解决方案:
-
Hook方法:
- 使用Xposed框架+Inspeckage
- 配置步骤:
adb forward tcp:8008 tcp:8008 访问127.0.0.1:8008 确保App is running和Module enable都为true - 结果:未能捕获到加密前的原始数据
-
测试方法:
- 修改不同参数测试sign变化:
- 修改cookie/token → sign不变
- 修改data内容 → sign变化
- 结论:仅请求体(data)参与签名计算
- 修改不同参数测试sign变化:
5.2 自动化脚本实现
- 使用ChatGPT辅助编写Python加密脚本
- 验证脚本有效性:
- 对比脚本生成sign与真实请求sign
- 确认一致后可进行自动化攻击
6. 完整技术总结
6.1 关键知识点
-
Sign签名机制:
- 基于请求内容的加密校验
- 防止数据篡改
-
逆向分析流程:
- 查壳 → 脱壳 → 反编译 → 关键代码定位
- 考虑Java和JS等多语言实现
-
加密参数确定方法:
- Hook技术尝试
- 参数修改测试法
6.2 防御建议
-
对客户端:
- 使用代码混淆加固
- 考虑白盒加密方案
-
对服务端:
- 增加时间戳有效期验证
- 使用动态密钥
- 关键操作增加二次验证
7. 附录:常用工具列表
| 工具类型 | 工具名称 | 用途 |
|---|---|---|
| 抓包工具 | Burpsuite | 拦截分析HTTP请求 |
| 逆向工具 | AndroidKiller | APK静态分析 |
| 脱壳工具 | frida-dexdump | DEX文件提取 |
| 转换工具 | dex2jar | DEX转JAR |
| Hook框架 | Xposed+Inspeckage | 运行时分析 |
| 查壳工具 | 多种查壳工具 | 检测APK加壳情况 |
通过本案例可以学习到完整的APK逆向和签名绕过流程,掌握从初步测试到深入分析的全套技术方法。