首页
社区
课程
招聘
[求助]请教某款CocosCreator 3.x 小游戏 jsc逆向
发表于: 2025-5-29 18:09 292

[求助]请教某款CocosCreator 3.x 小游戏 jsc逆向

2025-5-29 18:09
292

作为一名游戏前端开发者,对市面上一款游戏实现流程比较好奇,所以抱着学习的态度尝试对该游戏的源码jsc进行逆向。翻看了论坛相关的文章,但是始终没成功。汇报下我当前的进度:

  1. 通过frida针对libcocos.so加载时进行Hook:一直失败。通过Process.enumerateModulesSync()打印出的加载的so列表找不到libcocos.so.

  2. 查看了CocosCreator 3.x的相关源码,确定在CocosActivity启动后会通过 System.loadLibrary(cocos)加载cocos动态库。

  3. 通过frida扫描游戏启动后的内存段: 成功扫描出libcocos.so文件。遂尝试手动解析ELF文件,来确定xxtea_decrypt符号的地址。但是解析ELF文件的动态段地址一直出错,根本找不到相关符号。。。

新人逆向小白,想请教各位大佬可否指点一下,当前情况如何破局。还有没有其它办法,也可以贴一些教程。。。

新人首次发帖,如有违规,必改之。

PS:附件是我的hook脚本,可以看看有无问题。



[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 126
活跃值: (1128)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
//8.0以下所有的so加载都通过dlopen
function hook_dlopen() {
    var dlopen = Module.findExportByName(null, "dlopen");
    Interceptor.attach(dlopen, {
        onEnter: function (args) {
            this.call_hook = false;
            var so_name = ptr(args[0]).readCString();
            if (so_name.indexOf("libxxxx.so") >= 0) {
                console.log("dlopen:", ptr(args[0]).readCString());
                this.call_hook = true;//dlopen函数找到了
            }

        }, onLeave: function (retval) {
            if (this.call_hook) {//dlopen函数找到了就hook so
                inline_hook();
            }
        }
    });
    // 高版本Android系统使用android_dlopen_ext
    var android_dlopen_ext = Module.findExportByName(null, "android_dlopen_ext");
    Interceptor.attach(android_dlopen_ext, {
        onEnter: function (args) {
            this.call_hook = false;
            var so_name = ptr(args[0]).readCString();
            if (so_name.indexOf("libhxxxx.so") >= 0) {
                console.log("android_dlopen_ext:", ptr(args[0]).readCString());
                this.call_hook = true;
            }

        }, onLeave: function (retval) {
            if (this.call_hook) {
                inline_hook();
            }
        }
    });
}


最后于 2025-5-29 18:52 被vmoveq编辑 ,原因:
2025-5-29 18:49
0
雪    币: 21
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
vmoveq //8.0以下所有的so加载都通过dlopen function hook_dlopen() {   &nbsp ...

多谢大佬指点。

我尝试过直接hook so的方法。但是会出现闪退,不知是不是本地frida版本的问题,我当前版本是 16.7.19。

下面是我的代码:

function startHook() {

    Java.perform(function(){

        console.log(">>>>  Hello Frida>>>");

        const dlopenFuc = Module.findExportByName(null, "android_dlopen_ext")

        if (dlopenFuc)

        {

            console.log("Frida hook dlopenFuc succ !");

            Interceptor.attach(dlopenFuc, {  

                onEnter: function (args) {

                    var pathptr = args[0];

                    if (pathptr !== undefined && pathptr != null) {

                        try {  

                            this.path  = ptr(pathptr).readCString();

                            console.log(`[!]  dlopen so 触发: ${this.path}`);  

                        } catch (e) {  

                            console.error(`内存访问异常: ${e}`);

                        }  

                    }

                },  

                onLeave: function (retval) {  

                    if (this.path == "libcocos.so")  {  

                        console.log(`[+]  目标库已加载: ${this.path}`);

                         

                    }  

                }

            });

        }

    })

}


setImmediate(startHook);


执行脚本挂载后会出现报错,并崩溃,详细信息如下:

Spawned `com.test.hellcc`. Resuming main thread!

[Android Emulator 5554::com.test.hellcc ]-> >>>>  Hello Frida>>>

Frida hook dlopenFuc succ !

[!]  dlopen so 触发: /system/lib64/arm64/nb/libtcb.so

Process crashed: Trace/BPT trap


***

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

Build fingerprint: 'Android/aosp_marlin/marlin:9/PQ3A.190605.03202111/3793265:user/release-keys'

Revision: '0'

ABI: 'x86_64'

pid: 3515, tid: 3515, name: com.test.hellcc  >>> com.test.hellcc <<<

signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------

    rax 0000000000000000  rbx 0000000000000dbb  rcx 00007c79e5dadbf8  rdx 0000000000000006

    r8  00007c79e9349190  r9  00007c79e9349190  r10 00007c79e9349190  r11 0000000000000246

    r12 00007c79e9349948  r13 0000000000000000  r14 0000000000000dbb  r15 00007c79e93498f8

    rdi 0000000000000dbb  rsi 0000000000000dbb

    rbp 000062a1e0fb63f0  rsp 00007c79e93498e8  rip 00007c79e5dadbf8


backtrace:

    #00 pc 0000000000026bf8  /system/lib64/libc.so (offset 0x26000) (syscall+24)

    #01 pc 000000000002a7b5  /system/lib64/libc.so (offset 0x2a000) (abort+101)

    #02 pc 0000000000000412  <anonymous:00007c79e5b7d000>

***


2025-5-29 19:02
0
游客
登录 | 注册 方可回帖
返回