记一次App通信协议快速加解密
字数 1302 2025-08-22 12:22:24
App通信协议快速加解密分析教学文档
一、前言
本教学文档将详细介绍如何快速分析App通信协议中的加解密过程,通过hook技术定位加解密方法,并实现BurpSuite的自动加解密功能。该方法适用于Android应用的通信协议分析,能够显著提高安全测试效率。
二、准备工作
所需工具
- HTTPDecrypt:用于hook Android应用方法
- BurpSuite:用于拦截和分析网络请求
- Frida:底层hook框架
- 目标App:本例中包名为
com.xxxxxx.xxxxxnning
三、分析流程
1. 初步观察
- 安装App后进行注册操作
- 抓包发现三处加密:
- Code的签名值
- Post请求加密
- 返回包的签名
2. Hook包名下所有类
- 在HTTPDecrypt的Hooks模块填写目标包名
com.xxxxxx.xxxxxnning - 点击Confirm开始hook
- 操作App触发加密函数(如注册操作)
- 在HTTPDecrypt日志中查找触发的加密函数
3. 定位关键方法
通过分析发现:
com.xxxxx.encrypt:可能是解密函数com.xxxxx.EncoderByMd5:可能是Code签名算法- 算法输入:固定key + 数据包中的时间戳
- 输出:Code值
4. 方法参数分析
使用Finds模块分析com.xxxxx.encrypt方法:
- 在Finds模块填写类名
com.xxxxx - 点击Confirm查看方法详情
- 发现该方法:
- 参数1:
android.content.Context对象 - 参数2:字符串
- 方法类型:static静态方法
- 参数1:
四、实现BurpSuite自动加解密
1. 生成脚本
- 在encrypt方法上右键发送到toBurp模块
- 点击Confirm按钮
- 点击Add按钮将方法信息添加到info面板
- 点击"Generate export static script"生成静态方法脚本
2. 自定义脚本编写
由于自动生成的脚本不适用于多参数方法,需要手动修改:
// 获取Context对象
var context = Java.use('android.app.ActivityThread').currentApplication().getApplicationContext();
// 加密函数
function encrypt(data) {
return Java.use('com.xxxxx').encrypt(context, data);
}
// 解密函数
function decrypt(data) {
return Java.use('com.xxxxx').decrypt(context, data);
}
注意调整参数顺序:第一个参数是context,第二个是要加密/解密的原文。
3. 使用技巧
- 点击编写框后按F11可全屏编辑
- 点击loadScript加载脚本
- 配置Burp插件实现远程调用
4. Burp插件使用
- 自动加解密:点击"Body Auto"开启整个body的自动加解密
- 自定义加解密:HTTPDecrypt提供对外接口,可编写特定格式的自动化加解密插件
五、Code签名处理
- 算法已在
com.xxxxx.EncoderByMd5中实现 - 输入:固定key + 时间戳
- 输出:Code值
- 如果Code不正确,服务端会返回错误
六、流程图解
[操作App触发加密] → [HTTPDecrypt Hook包名下方法] → [定位加密/解密方法]
→ [分析参数和方法类型] → [生成/修改脚本] → [配置Burp插件] → [实现自动加解密]
七、总结
本方法优势:
- 通过hook包名快速定位加解密点
- 利用HTTPDecrypt导出App内方法
- 避免分析算法、实现算法、编写插件等耗时操作
- 实现真正的快速加解密分析
注意事项:
- 注意方法类型(静态/实例)
- 正确处理多参数情况
- 确保Context对象正确获取
通过这种方法,可以显著提高App通信协议分析效率,快速实现安全测试。