吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1668|回复: 6
上一主题 下一主题
收起左侧

[Android 原创] 某手游cocos2djs逆向分享之分析思路及切入方法

[复制链接]
跳转到指定楼层
楼主
ai474427793 发表于 2025-2-17 18:27 回帖奖励

某手游cocos2djs逆向分享之分析思路及切入方法

一,初探

目标APP :  0bC1wLTzx6c=

拿到APP,先解压查看下加固情况,因为游戏类app一般都是使用cocos2d或者unity框架开发,先初步确定app开发框架,方便后续寻找大佬的成功经验,可以使用关键词做相关搜索.

可以在./lib/arm64-v8a/路径下,看到最大的so文件为libcocos2djs.so,可以初步确定本样本为cocos2djs开发.

二,需求

某个接口有个sign算法需要确定其计算的方式,先抓包看看

三,抓包

直接使用root真机,安装样本app,尝试使用postern全局代理,发现app会出现断网的情况.改用proxydroid,还是断网.最后使用WIFI代理,成功抓取到对应的数据包.

可以看到sign的位置,以及其他一些线索关键词:create_order_v2,apipayh5

四,分析

解压app到文件夹,直接cmd命令通过grep工具搜索关键词

可以看到在classes.dex里面有线索,jadx-gui直接拖入dex文件进行搜索

通过交叉引用一直往上找,最终定位到

尝试hook,查看一下调用堆栈.

let YqSdkMgr = Java.use("org.cocos2dx.javascript.plugin.YqSdkMgr");
YqSdkMgr["sdkVip"].implementation = function (str) {
    console.log(`YqSdkMgr.sdkVip is called: str=${str}`);
    this["sdkVip"](str);
};

可以看到sign是作为参数传入的,咨询AI可知在cocos2djs框架开发的app中jsc文件里面才有对应的线索.在/assets里面随便找一个后缀jsc的文件打开看看先

不出意外,核心代码做了加密,那么接下来就是寻找jsc的解密方法.

五,尝试

1,根据经验,先将libcocos2djs.so拖入到winhex中搜索main.js,结果如下

附近找到一个目测有点奇怪的字符串:c03ef3b<$21a4)11,长度也和之前研究过的jsc的key长度一样,填入解密工具,并拖入jsc文件尝试解密.

解密失败.看来得上强度了.

六,动手

根据大佬的分享可知jsc文件一般是使用xxtea算法进行加解密.以下是frida脚本

var so_name = "libcocos2djs.so";
var fun_name = "xxtea_decrypt";
function do_hook() {  
  var addr = Module.findExportByName(so_name, fun_name);
  console.log(addr); 
  Interceptor.attach(addr, {
      onEnter: function (args) {
                console.log('key: ' + Memory.readCString (args[2]));
      },
      onLeave: function (retval) {
      }
  })
}
function load_so_and_hook() {
  var dlopen = Module.findExportByName(null, "dlopen");
  var android_dlopen_ext = Module.findExportByName(null, "android_dlopen_ext");
  Interceptor.attach(dlopen, {
      onEnter: function (args) {
          var path_ptr = args[0];
          var path = ptr(path_ptr).readCString();
          console.log("[dlopen:]", path);
          this.path = path;
      }, onLeave: function (retval) {
          if (this.path.indexOf(so_name) !== -1) { // 如果包含我想要的so文件
              console.log("[dlopen:]", this.path);
              do_hook();
          }
      }
  });
  Interceptor.attach(android_dlopen_ext, {
      onEnter: function (args) {
          var path_ptr = args[0];
          var path = ptr(path_ptr).readCString();
          this.path = path;
      }, onLeave: function (retval) {
          if (this.path.indexOf(so_name) !== -1) {
              console.log("\nandroid_dlopen_ext加载:", this.path);
              do_hook();
          }
      }
  });
}
load_so_and_hook();

通过spwan方式启动app,并且在加载对应的so后执行xxtea_decrypt的解密,可以hook到对应的秘钥

可以看到已经hook到对应的秘钥,再次尝试拖入JscDecodeCsharp进行解密:

可以看到,已经解密得到核心js代码.但是还有一个问题,assets里面的jsc文件很多,一个一个解密定位很浪费时间.尝试寻找有没有批量解密的工具或者代码

最终在万能的github找到

https://github.com/MikaCybertron/Tool-Encryption-Decryption-JSC-Files-for-Cocos2djs-Games

里面有两份工具,一份是exe格式的,经测试,无法解密.还有一份是python代码,尝试在window10上面根据流程安装依赖库并执行,提示缺少C++14,无法运行.

于是更换使用ubuntu系统,成功批量解密所有jsc文件.

然后使用grep最终定位到核心代码位置如下

可以看到sign是通过protobuf,服务器下发的,signParam应该就是用来签名的原始文本,但是具体算法在服务器执行,无法本地还原.

至于分析protobuf协议,看着头大,直接拖回收站去吧 -_-

七,后记

分析到此结束,侵权请联系我删贴.

记得之前分析过一个LuaJIT的样本,所有核心代码,都是字节码的形式,感觉安全系数要高得多.

最后,如果你看到了这里,麻烦伸出你发财的右手,帮我转评赞来一套,也欢迎小伙伴一起学习交流,完结,撒花!

ps:不接单,谢谢.

免费评分

参与人数 4吾爱币 +10 热心值 +4 收起 理由
GGbomb + 1 + 1 我很赞同!
110120009 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
FitContent + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
chenquanjun 发表于 2025-2-18 16:26
已经上了frida的话,也可以直接hook加载文件解密的接口,这样可以直接转存解密完的文件
3#
tyrell 发表于 2025-3-14 12:03
4#
yhys 发表于 2025-3-22 12:04
5#
q751740863 发表于 2025-4-13 17:40
大佬,我将 libcocos2djs.so 加载到 IDA 中搜索 xxtea,但是并没有相关的function,应该怎么找到 jsc 的解密key

1.png (88.99 KB, 下载次数: 0)

1.png
6#
 楼主| ai474427793 发表于 2025-4-14 10:53 |楼主
q751740863 发表于 2025-4-13 17:40
大佬,我将 libcocos2djs.so 加载到 IDA 中搜索 xxtea,但是并没有相关的function,应该怎么找到 jsc 的解 ...

上面我贴了hook代码,搜不到就直接hook
7#
cjf411 发表于 2025-4-19 09:08
windows感觉不区分文件、文件夹大小写,很多情况下不适合做逆向。专业的事情很多时候害的靠linux
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-23 15:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表