作者:小白 ???? | 日期:2026-03-29本文首发于CSDN/看雪论坛,转载请注明出处在移动游戏开发领域,Cocos2d-x 作为一款成熟的开源游戏引擎,被广泛应用于各类手游开发。然而,随着游戏安全需求的提升,对 Cocos2d-x 游戏的逆向分析也成为了安全研究人员和游戏开发者关注的重点。本文将深入剖析一个实际的 Cocos2d-x iOS 游戏逆向案例,分享完整的技术细节和实战经验。通过静态分析和动态调试,我们识别出以下技术栈:我们开发了一个全面的 Frida 逆向分析工具,整体架构如下:Lua脚本拦截:JavaScript脚本拦截:在开发过程中,我们遇到了多个技术挑战并进行了优化:问题:原始实现中遍历所有模块导出和ObjC类,导致Frida超时。解决方案:问题:尝试Hook数据符号地址导致崩溃。解决方案:问题:直接传递JS字符串给ObjC方法导致类型不匹配。解决方案:为了提供更稳定的游戏数据监控,我们开发了原生iOS Tweak,将关键功能从Frida脚本迁移到原生代码中。通过我们的工具,成功捕获了以下关键脚本:通过分析捕获的脚本,我们还原了游戏的架构:我们的工具能够实时监控游戏状态:难点:Cocos2d-x支持多种脚本引擎(Lua、JavaScriptCore、SpiderMonkey)。解决方案:难点:游戏脚本可能被加密或混淆。解决方案:难点:Hook过多影响游戏性能,Hook过少无法获取足够信息。解决方案:通过我们的工具,可以深入分析游戏的核心逻辑:基于我们的逆向经验,为游戏开发者提供以下防护建议:通过本次逆向分析实战,我们取得了以下成果:我们计划将核心工具开源,包括:感谢以下开源项目和工具的支持:版权声明:本文仅供技术学习和研究使用,请勿用于非法用途。任何商业使用需获得原作者授权。作者:小白 ????联系方式:通过技术论坛私信联系发布日期:2026年3月29日更新日志:graph TD
A[Cocos2d-x游戏引擎] B[JavaScriptCore脚本引擎]
A C[OpenGL ES图形渲染]
B D[JSC字节码预编译]
B E[明文JS脚本]
F[游戏逻辑] G[房间管理]
F H[牌局处理]
F I[用户交互]
haoyousai.app/
├── haoyousai # 主可执行文件 (15.9MB)
├── Frameworks/ # 依赖框架
├── script/ # 游戏脚本目录
├── src/ # 源代码目录
├── res/ # 资源文件
├── project.json # Cocos项目配置
├── project.manifest # 资源清单
└── main.js # 入口JS文件
// 工具架构示意图
class Cocos2dxFridaToolkit {
// 1. 基础模块
- Helper Functions
- Configuration Manager
- Logger System
// 2. 检测模块
- Cocos2dxDetector
- ScriptEngineDetector
// 3. 分析模块
- LuaScriptAnalyzer
- JSScriptAnalyzer
- CocosGameAnalyzer
// 4. 监控模块
- InputOutputMonitor
- PerformanceProfiler
// 5. 控制模块
- ToolkitController
- RPC Exports
class Cocos2dxDetector {
// 检测Lua引擎
detectLuaEngine() {
const exports = ['luaL_loadbuffer', 'lua_pcall', 'lua_getglobal'];
return this.findExportsInMainModule(exports);
// 检测JavaScriptCore
detectJavaScriptCore() {
const exports = ['JSEvaluateScript', 'JSObjectCallAsFunction'];
return this.findExportsInMainModule(exports);
// 检测SpiderMonkey
detectSpiderMonkey() {
const exports = ['JS_EvaluateScript', 'JS_ExecuteScript'];
return this.findExportsInMainModule(exports);
// 检测Cocos JS绑定
detectCocosBindings() {
const patterns = ['jsb_', 'cocos2d::', 'ScriptingCore::'];
return this.searchExportsByPattern(patterns);
class LuaScriptAnalyzer {
hookLuaFunctions() {
// Hook luaL_loadbuffer 拦截Lua脚本加载
Interceptor.attach(Module.findExportByName(null, 'luaL_loadbuffer'), {
onEnter: function(args) {
const buffer = args[1]; // 脚本缓冲区
const size = args[2]; // 脚本大小
const chunkname = args[3]; // 脚本名称
// 提取并保存脚本
this.scriptData = Memory.readByteArray(buffer, size);
this.scriptName = Memory.readUtf8String(chunkname);
onLeave: function(retval) {
if (this.scriptData) {
this.saveLuaScript(this.scriptName, this.scriptData);
});
class JSScriptAnalyzer {
hookJavaScriptCore() {
// Hook JSEvaluateScript 拦截JS执行
Interceptor.attach(Modul
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290564.htm
[原创]Cocos2d-x iOS游戏逆向分析实战
112 浏览
2 回复
rbq
牛逼