某某校园 App 协议与逆向分析
字数 1581 2025-12-26 12:15:19
某某校园 App 协议与逆向分析教学文档
1. 概述
本教学文档基于对“某某校园”App的逆向分析,重点解析其安全机制、通信协议及核心功能接口。该App采用了多层次的反作弊(anti-cheat)防护策略,包括环境检测、代码保护及通信加密等。
注意:本文档仅用于安全研究与学习目的,严禁用于非法活动。
2. 反作弊机制分析
新版“某某校园”App集成了以下反作弊检测功能:
- 多开环境检测:防止应用在多开分身环境中运行。
- 模拟器/虚拟机检测:识别是否在模拟器(如Android Studio AVD)或虚拟机中运行。
- SO注入检测:监控动态链接库是否被非法注入。
- Hook框架检测:检测Xposed、Frida等Hook工具。
- 调试器附加检测:防止动态调试。
- SSL Pinning:严格校验服务器证书,阻断中间人抓包。
3. 抓包与绕过策略
3.1 SSL Pinning 绕过
- 方法:使用旧版本APK(未强化SSL Pinning)或重写版本检测API。
- 工具推荐:Reqable(支持Python脚本、类似Fiddler的局域网抓包及API测试功能)。
3.2 抓包发现
- 接口返回数据均为加密格式。
- 请求头中包含动态生成的
sign字段,用于签名验证。
4. 逆向分析流程
4.1 脱壳与解包
- App使用网易易盾加固。
- 脱壳平台:
https://56.al(支持哈希匹配,已有脱壳记录时可秒脱)。 - 脱壳后使用JADX等工具分析DEX文件。
4.2 定位关键代码
- 搜索添加
Sign请求头的代码段。 - 跟踪签名生成函数,逆向调用链以理解完整流程。
4.3 密钥提取
- 密钥生成逻辑中通过
x7.d.b()判断运行环境(初始值为9)。 - 示例解密密钥:
F44B0282BEA83557。 - 通过跟踪相关函数获取加密所需第二密钥及配套参数。
4.4 算法复现(Python)
根据逆向结果,核心算法包括:
- 动态签名生成(基于时间戳、设备信息等)。
- 请求数据加密(AES或自定义算法)。
- 响应数据解密。
5. 核心接口解析
5.1 阳光跑相关接口
-
querySchoolFences
- 功能:查询电子围栏信息(经纬度范围、开放时间、打卡点数量、人脸识别要求等)。
- 围栏数据为包含至少3个经纬度点的数组。
-
checkSunRunConfig
- 功能:检查跑步计划配置(打卡方式、围栏规则、人脸识别等)。
-
querySunRunAbstractInfoV2
- 功能:获取阳光跑计划摘要及学校规定(如禁止连接WiFi跑步)。
-
uploadRunRecord
- 功能:每15秒上报一次数据(包含5个采样点,每3秒采集一次)。
- 数据内容:围栏距离、经纬度、卫星信息等。
-
finishSunRun
- 功能:结束跑步并上传最终数据(步数、距离、轨迹、配速),用于成绩计算。
-
异常处理接口
queryUnFinishRun:查询未完成的运动记录。abnormalFinishSunRun:终止异常运动(数据不被记录)。
5.2 反作弊后台逻辑
- 服务器通过上传的数据(如轨迹连续性、速度合理性)进行作弊判定。
- 高频测试可能触发风控,需谨慎模拟。
6. 技术总结
6.1 逆向要点
- 优先绕过环境检测(修改环境判断函数返回值)。
- 定位签名算法需跟踪网络库初始化代码。
- 密钥可能硬编码或动态生成,需结合运行时逻辑分析。
6.2 风险提示
- 该App后台具备多重反作弊检测,直接模拟请求可能被封禁。
- 建议在隔离环境中测试,避免影响真实账号。
7. 扩展研究方向
- 分析SO文件中的加密逻辑(可能涉及白盒加密)。
- 探索Hook框架的对抗方案(如Frida脚本绕过检测)。
- 研究人脸识别接口的调用协议。
免责声明:本文内容仅限技术研讨,任何滥用行为与作者无关。