记一次渗透中遇见的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 发现的安全问题

  1. 用户枚举漏洞

    • 不存在的用户返回"未注册"
    • 存在的用户返回"已发送短信"
    • 可通过修改mobile参数进行手机号爆破
  2. 签名保护机制

    • 请求中存在sign参数
    • 修改mobile参数会导致"认证失败"

3. Sign签名绕过方法探索

3.1 初步尝试方法

  1. 测试弱加密

    • 分析sign值长度和特征
    • 尝试CMD5等在线解密平台
    • 结果:非标准MD5,解密失败
  2. 置空绕过

    • 尝试将sign参数置空或删除
    • 结果:服务端返回认证失败
  3. APK逆向分析

    • 由于前两种方法失败,必须进行APK逆向

4. APK逆向分析详细过程

4.1 查壳与脱壳

  1. 使用多种查壳工具检测:

    • 确认APK未加壳(省去脱壳步骤)
  2. 尝试使用AndroidKiller分析:

    • 遇到工具报错问题(具体错误未说明)
  3. 备用方案:frida-dexdump

    • 使用frida-dexdump工具脱取DEX文件
    • 将DEX转换为JAR格式查看源码

4.2 源码分析

  1. 搜索sign关键字:

    • 在Java代码中未发现相关加密逻辑
  2. 转向非Java代码分析:

    • 将APK后缀改为ZIP并解压
    • 在assets或res等目录查找JS等脚本文件
  3. 发现加密逻辑:

    • 加密算法实现在JS文件中
    • 找到secretKey加密密钥
    • 通过代码跳转确认密钥有效性

5. 加密算法分析与脚本编写

5.1 加密参数确定

面临问题:不确定哪些参数参与加密
解决方案:

  1. Hook方法

    • 使用Xposed框架+Inspeckage
    • 配置步骤:
      adb forward tcp:8008 tcp:8008
      访问127.0.0.1:8008
      确保App is running和Module enable都为true
      
    • 结果:未能捕获到加密前的原始数据
  2. 测试方法

    • 修改不同参数测试sign变化:
      • 修改cookie/token → sign不变
      • 修改data内容 → sign变化
    • 结论:仅请求体(data)参与签名计算

5.2 自动化脚本实现

  1. 使用ChatGPT辅助编写Python加密脚本
  2. 验证脚本有效性:
    • 对比脚本生成sign与真实请求sign
    • 确认一致后可进行自动化攻击

6. 完整技术总结

6.1 关键知识点

  1. Sign签名机制

    • 基于请求内容的加密校验
    • 防止数据篡改
  2. 逆向分析流程

    • 查壳 → 脱壳 → 反编译 → 关键代码定位
    • 考虑Java和JS等多语言实现
  3. 加密参数确定方法

    • Hook技术尝试
    • 参数修改测试法

6.2 防御建议

  1. 对客户端:

    • 使用代码混淆加固
    • 考虑白盒加密方案
  2. 对服务端:

    • 增加时间戳有效期验证
    • 使用动态密钥
    • 关键操作增加二次验证

7. 附录:常用工具列表

工具类型 工具名称 用途
抓包工具 Burpsuite 拦截分析HTTP请求
逆向工具 AndroidKiller APK静态分析
脱壳工具 frida-dexdump DEX文件提取
转换工具 dex2jar DEX转JAR
Hook框架 Xposed+Inspeckage 运行时分析
查壳工具 多种查壳工具 检测APK加壳情况

通过本案例可以学习到完整的APK逆向和签名绕过流程,掌握从初步测试到深入分析的全套技术方法。

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 配置步骤: 结果:未能捕获到加密前的原始数据 测试方法 : 修改不同参数测试sign变化: 修改cookie/token → sign不变 修改data内容 → sign变化 结论:仅请求体(data)参与签名计算 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逆向和签名绕过流程,掌握从初步测试到深入分析的全套技术方法。