【逆向工程-Cocos2d-x 游戏逆向分析文档】此文章归类为:逆向工程。
Cocos2d-x 游戏逆向分析文档
项目名称: 好友赛 (haoyousai)分析日期: 2026-03-29分析者: 小白 ????目标路径: /Users/a/back/PycharmProjects/iosx/coco2D
目录结构概览
coco2D/
├── CLAUDE.md
├── cocos2dx_frida_toolkit.js
├── CardRecorder/
│ ├── Makefile
│ ├── Tweak.mm
│ └── control
├── haoyousai.app/
│ ├── haoyousai
│ ├── Info.plist
│ ├── main.js
│ ├── project.json
│ ├── project.manifest
│ ├── script/
│ ├── src/
│ ├── res/
│ └── Frameworks/
└── scripts/
├── *.jsc_*.bin
└── js_*.js
1. 目标应用分析
1.1 基本信息
- 应用名称: 好友赛 (haoyousai)
- Bundle ID:
com.oedere.lid23
- 版本: 1.0 (59)
- 平台: iOS (iPhoneOS 18.2)
- 架构: arm64
- 引擎: Cocos2d-x + JavaScriptCore
1.2 应用特性
- 横屏游戏: 仅支持横屏方向
- 微信集成: 包含多个微信 SDK 配置
- 权限要求: 定位、麦克风、相册、运动健康、语音识别
- 网络配置: 允许任意 HTTP 加载 (NSAllowsArbitraryLoads: true)
1.3 技术栈识别
- 游戏引擎: Cocos2d-x (JavaScript 绑定)
- 脚本引擎: JavaScriptCore (iOS 内置)
- 脚本格式: JSC 字节码 + 明文 JS
- 资源管理: project.manifest 资源清单
- 加密方式: 可能存在简单 XOR 或自定义加密
2. 逆向分析工具集
2.1 cocos2dx_frida_toolkit.js (v1.1)
文件大小: 76.8KB (1610行)功能: 全面的 Cocos2d-x 游戏逆向分析工具
2.1.1 核心功能模块
脚本引擎检测
- Lua 引擎检测 (luaL_loadbuffer, lua_pcall)
- JavaScriptCore 检测 (JSEvaluateScript)
- SpiderMonkey 检测 (JS_EvaluateScript)
- Cocos JS 绑定检测 (jsb_* 函数)
脚本拦截与解密
- Lua 脚本拦截与导出
- JS 脚本拦截与导出
- JSC 字节码捕获
- 实时脚本监控
游戏逻辑分析
- Cocos2d-x 类方法 Hook
- 游戏状态监控
- UI 事件追踪
- 网络通信分析
输入输出监控
- 触摸事件监控
- 键盘输入监控
- 游戏控制器监控
- 文件 I/O 监控 (可选)
- 网络 I/O 监控 (可选)
性能分析
2.1.2 关键技术修复 (v1.1)
- 超时崩溃修复: 限制扫描范围,避免遍历所有模块
- Hook 稳定性: 增加可执行地址检查,避免数据符号 Hook
- ObjC 桥接修复: 正确包装字符串和指针类型
- 目录创建修复: 使用正确的 ObjC 方法调用
- 性能优化: 限制 ObjC 类遍历数量 (maxHooksPerCategory: 50)
2.2 CardRecorder Tweak
类型: Theos Tweak (原生 dylib)目的: 将 Frida 脚本中的出牌记录功能原生实现
2.2.1 核心功能
- JSEvaluateScript Hook: 拦截 JavaScript 执行
- JSContext 捕获: 自动识别游戏 JS 上下文
- 手牌监控注入: 向游戏注入监控脚本
- 定时数据采集: 每秒轮询游戏状态
- 本地日志存储: 将数据写入沙盒 Documents/card_log.json
2.2.2 注入逻辑
// 检测包含 "setRoomData" 的大型脚本
if (strstr(buf, "setRoomData") != NULL) {
// 注入监控代码
injectCardMonitor(ctx);
}
2.2.3 监控脚本内容
setInterval(function(){
try {
if(typeof iGame==='undefined'||!iGame.Data||!iGame.Data.roomData||!iGame.Data.roomData.players)return;
var self_seat=iGame.Data.getSelfSeatNo?iGame.Data.getSelfSeatNo():0;
var players=iGame.Data.roomData.players;
var result={self_seat:self_seat,my_hold:[],players:[]};
players.forEach(function(p){
if(p.seat_no===self_seat){
result.my_hold=(p.hold||[]).filter(function(c){return c>0;});
}
result.players.push({seat:p.seat_no,out:p.out||[],kou:p.kou||[]});
});
window.__cardData=JSON.stringify(result);
}catch(e){}
},1000);
3. 动态分析结果
3.1 捕获的脚本文件
在 scripts/ 目录中发现以下文件:
3.1.1 JSC 字节码文件
G212.jsc_1774770976633.bin (101KB) - 游戏模块 212
G30.jsc_1774770909867.bin (29KB) - 游戏模块 30
SYG30.jsc_1774770968778.bin (49KB) - 系统模块 30
SYHall.jsc_1774770963515.bin (584KB) - 大厅模块
3.1.2 明文 JS 脚本
js_1774770963709.js (1.7MB) - 主游戏逻辑
js_1774770976843.js (302KB) - 游戏模块
js_1774770968967.js (147KB) - 系统模块
- 多个小型 JS 文件 (88B-2KB) - 配置和工具函数
3.2 游戏架构分析
通过分析捕获的脚本,识别出以下游戏架构:
3.2.1 模块系统
__require = function t(e, i, a) {
};
3.2.2 游戏对象模型
iGame: 全局游戏对象
iGame.Data: 游戏数据管理
iGame.Data.roomData: 房间数据
iGame.Data.getSelfSeatNo(): 获取玩家座位号
3.2.3 数据结构
{
seat_no: number,
hold: number[],
out: number[],
kou: number[]
}
{
self_seat: number,
my_hold: number[],
players: player[]
}
4. 逆向技术要点
4.1 Frida 注入方法
frida -U -n haoyousai -l cocos2dx_frida_toolkit.js
frida -U -b com.oedere.lid23 -l cocos2dx_frida_toolkit.js
frida -U -f com.oedere.lid23 -l cocos2dx_frida_toolkit.js --no-pause
4.2 交互命令
cocos.getReport()
cocos.searchMemory(pattern)
cocos.startProfiling()
quickHook(addr, name)
findCocosFunctions(keyword)
monitorObjCClass(className)
4.3 Theos Tweak 编译
cd CardRecorder
make
make package install
5. 安全分析
5.1 加密机制
- JSC 字节码: iOS JavaScriptCore 预编译字节码
- 资源加密: project.manifest 可能包含加密配置
- 网络通信: 可能存在自定义加密协议
5.2 反调试检测
- 未发现明显的反调试代码
- 可正常使用 Frida 注入
- Theos Tweak 可正常运行
5.3 数据安全
- 游戏状态数据在内存中明文存在
- 可通过 JSContext 直接访问游戏对象
- 网络通信可能加密,但本地数据可读
6. 应用场景
6.1 游戏分析
- 理解游戏逻辑和状态机
- 分析游戏平衡性和算法
- 研究游戏经济系统
6.2 自动化工具开发
6.3 安全研究
7. 总结与建议
7.1 技术总结
- 目标应用: 使用 Cocos2d-x + JavaScriptCore 的 iOS 游戏
- 逆向工具: 开发了完整的 Frida 工具包和原生 Tweak
- 分析深度: 从脚本拦截到游戏逻辑分析的完整链条
- 实用性: 工具稳定可用,已修复多个关键 Bug
7.2 后续工作建议
- 扩展分析范围: 支持更多 Cocos 版本和脚本引擎
- 性能优化: 进一步减少 Hook 对游戏性能的影响
- 自动化增强: 开发更智能的游戏状态识别
- 跨平台支持: 扩展到 Android 平台
7.3 使用注意事项
- 法律合规: 仅用于学习和研究目的
- 游戏公平: 避免用于破坏游戏平衡
- 技术伦理: 尊重开发者劳动成果
- 数据隐私: 保护用户隐私数据
更多【逆向工程-Cocos2d-x 游戏逆向分析文档】相关视频教程:www.yxfzedu.com