对某一漫画软件协议分析
字数 1747 2025-08-22 12:22:36
漫画软件协议分析与逆向工程教学文档
1. 目标应用框架分析
该漫画APP基于以下第三方开源模块构建:
- 数字联盟:设备指纹/反欺诈服务
- tv.cjump.jni:弹幕功能实现
- uk.co.senab.photoview:图片缩放技术
- Timber.log:日志记录工具
- Retrofit2 + OkHttp3:网络请求框架
- Fastjson:JSON解析库
- qalsdk:腾讯云SDK(可能用于质量监控)
- master.flame.danmaku:弹幕渲染引擎
- com.meituan.robust:美团热修复插件(动态更新代码)
关键点:
- 混合使用商业SDK(数字联盟、qalsdk)和开源库,需注意协议冲突。
- 美团热修复插件可能绕过应用商店更新机制,需关注其安全性。
2. 抓包与协议分析
工具:夜神模拟器 + 抓包工具(如Charles/Fiddler)
观察结果:
- 所有请求头包含
App-Info参数,疑似用于设备校验。 - 存在SSL Pinning,但已被绕过(方法未详述,通常使用Frida或Xposed Hook)。
关键点:
- SSL Pinning绕过是动态分析的前提,需掌握工具如
objection或Frida。 App-Info可能是服务端风控的核心参数。
3. 参数逆向分析
3.1 App-Info参数定位
- 通过全局搜索定位到
AppInfoModel类,发现参数经过Base64加密。 - 关键子参数
visitor_sign使用MD5加密,加密逻辑在MDUtils类中。
3.2 加密逻辑还原
-
原始参数构造:
- 调用链:
Client.p()→ 生成值A:34f770f3177f0146 Client.o()→ 生成值34f770f3177f0146- 拼接格式:
visiter=A:34f770f3177f0146&y-device=34f770f3177f0146
- 调用链:
-
MD5加密:
- 上述字符串经MD5哈希后生成
visitor_sign。 - 示例:在线MD5工具验证结果需与服务端一致。
- 上述字符串经MD5哈希后生成
关键点:
- 静态分析(JADX/Ghidra)结合动态调试(Frida)可还原加密逻辑。
- 设备指纹(
y-device)可能关联设备硬件信息,需进一步追踪Client.o()来源。
4. 动态调试验证
工具:objection(基于Frida的运行时工具)
步骤:
- Hook
MDUtils的MD5方法,打印输入/输出。Java.perform(() => { let MD5Utils = Java.use("com.example.MDUtils"); MD5Utils.a.implementation = function (input) { console.log("MD5 Input:", input); let result = this.a(input); console.log("MD5 Output:", result); return result; }; }); - 调用
Client.p()和Client.o()获取原始值,验证拼接逻辑。
关键点:
- 动态验证可确认参数是否依赖运行时环境(如设备ID、时间戳)。
- 若加密逻辑复杂,需转Native层分析(如
libqalsdk.so)。
5. 安全防护与对抗
- SSL Pinning:
- 默认使用OkHttp3的证书锁定,可通过Hook
CertificatePinner类绕过。
- 默认使用OkHttp3的证书锁定,可通过Hook
- 代码混淆:
- 类名/方法名混淆(如
a.b.c.d),需通过调用链上下文推断功能。
- 类名/方法名混淆(如
- 热修复:
- 美团Robust插件可能动态修复漏洞,需关闭其热更新功能进行静态分析。
6. 完整协议复现流程
- 设备指纹生成:
- 调用
Client.o()获取设备标识(可能基于IMEI/Android ID)。
- 调用
- 参数拼接:
raw_params = "visiter=A:34f770f3177f0146&y-device=34f770f3177f0146" visitor_sign = hashlib.md5(raw_params.encode()).hexdigest() - Base64编码:
- 将包含
visitor_sign的JSON结构体Base64编码为App-Info。
- 将包含
7. 扩展研究方向
- 数字联盟SDK:分析其设备指纹生成规则(可能涉及内核级信息)。
- Fastjson漏洞:检查历史反序列化漏洞(如CVE-2022-25845)。
- 弹幕协议:逆向
tv.cjump.jni的JNI层,解析实时通信逻辑。
附录:工具清单
- 静态分析:JADX、Ghidra
- 动态调试:Frida、objection
- 抓包:Charles(需配置ProxyDroid模拟器全局代理)
- 加密验证:CyberChef(在线编解码工具)
通过本教学,读者可掌握从抓包到算法还原的完整逆向流程,适用于类似APP的协议分析场景。