cocos creator jsc 逆向解码为js

article/2025/10/3 15:55:35

cocos creator 下的jsc

cocos creator 编译之后的所生成的jsc文件,虽然后缀是jsc,但其实和js虚拟机所执行的字节码(jsc)是二个不同的东西,只是使用xxtea对js文件进行加密而已。xxtea是可逆的,所以cocos creator下的jsc是完全可逆的,因为本质上是一个加解密过程。
当然creator在构建之后形成的js文件本身已经有过一些混淆&压缩,所以jsc还原成js看到的也不是开发时候的源文件了。

一、如何解码文件

涉及到解码文件,我比较常用的方法分为静态分析、动态调试。

1.1、静态分析

静态分析就是利用一些工具(我一般用IDA、nodepad++、Hworks、ILspy),查看被编译之后的加密算法/解码算法。如果是一些三方的加密算法,网上应该能找到很多现成的逆向实现;如果是项目自有实现的加密,就得自己写一个逆向实现了。

1.2、动态调试

动态调试我一般用IDA(具体的动态调试过程以后再单独写一篇),直接在解码之后的位置输出明文即可。当然也先进行静态分析,查找到解码的位置。
动态调试的好处就是不需要关心算法。有些时候自有实现的算法代码量大或看不懂别人算法的时候,用动态调试就很省力。

二、准备工作

了解了cocos creator 的jsc的本质之后,逆向就变得很简单,就是xxtea的解码。那么xxtea如何解码呢,对xxtea算法有所了解的或使用xxtea算法加密过文件的(cocos2d的lua加密也是用的这算法)应该都知道,在加密时候会设置一个key值,解码就是利用这个key值去反着运行一次加密过程。所以逆向之前我们需要准备2样东西,一是加密时所设置的key值;二是xxtea算法的实现:

  1. 加密时所设置的key值;
  2. xxtea加密算法的逆向实现;

2.1、如何查询xxtea的key

基于前文1.1、1.2中提到2种分析方式都可以进行key的查找。
不过creator的jsc文件中的key我一般直接用HWorks直接打开查看。key值查询
利用HWorks打开libcocos2djs.so文件,查询jsb-adapter/jsb-builtin.js字符串即可,在jsb-adapter/jsb-builtin.js之前的16字节长度的字符串就是key了。

2.2、xxtea的解码实现

这一块网上已经各种语言版本的实现了,用的较多的应该是python版本的。不过我用的是c++,好处就是我是直接编译的引擎自带的xxtea文件,所以保证算法实现一定没问题,也省去了算法理解和编程过程。将引擎自带的xxtea编译成dll文件,可以给其他程序直接调用。
使用vstudio的,可以基于cocos工程直接去调用xxtea解码。不过现在cocos creator 用vscode的较多,所以这里在编译cpp文件的时候,会有一个vscode下配置cpp环境和编译成dll,这一点单独会在写一篇vscode下的c++开发环境配置&dll动态库生成。
请添加图片描述

最后

这里主要是分析一个crator的jsc文件的本质以及逆向的思路。具体的实现其实也不难,加上网上已经很多的现成案例,这里就不展开了(主要难得打字和组织语言)。有什么问题欢迎交流,整个逆向的工程,放在github上了,工程是基于c++的,运行源码的话需要编译环境,可查看另一篇关于vscode配置c++开发环境的笔记。


http://chatgpt.dhexx.cn/article/E2uRoj2t.shtml

相关文章

Cocos2dx-js 资源.jsc和.pkm反编译

.jsc 解密 1. 找到apk里面的libcocos2djs.so. 用编辑器utf-b模式打开 2. 搜索Cocos Game 紧接着的 220404db-d3df-4b 就是密码 3. 使用工具decrypt.exe 即可解密 下载地址:https://download.csdn.net/download/liutietuo/86511410 cocos creator script decrypt version 1.0…

jsc 解码窥探

先使用 JS_DecodeScript反编译jsc 得到AST树 AST树词法解析 http://esprima.org/ AST还原成源码: npm install escodegen AST树遍历:npm install estraverse https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals/Byte…

cocos2d-js中jsc逆向为js

1.mac系统 2.安装php7以上的版本 ubuntu $ sudo apt install php7.0 mac $ brew install php7.0 windows just google an binary one 查看php安装的版本这里mac电脑为例子: 输入:php -v 只要7以上的版本即可 3.cd到自己的项目位置 cd path/to/project 安装composer,…

如何设置input默认值

之前聊过input最大字数限制&#xff0c;今天看下如何设置输入框默认值 placeholder属性 如下&#xff1a; <input type"text" maxlength"11" placeholder"名字"/> 输入框展示效果如下&#xff1a;

input标签点击移除默认值

使用onfocus事件检查当前输入框内的值,如果是默认得值,就将value属性置空. <input type"text" value"请输入内容" onfocus"javascript:if(this.value请输入内容)this.value;"> 操作之前: 操作之后:

Python input输入超时选择默认值自动跳过

Python input输入超时选择默认值自动跳过 Python input 等待键盘输入&#xff0c;超时选择默认值&#xff0c;释放input&#xff0c;之后重新进入等待键盘输入状态&#xff0c;直到用户输入可用数据。 一、调用 func_timeout 模块实现超时控制 1、安装 func_timeout 库 pip…

html文本框设置默认值,HTML input文本框设置和移除默认值

这里想实现的效果是&#xff1a;设置和移除文本框默认值&#xff0c;如下图鼠标放到文本框中的时候&#xff0c;灰字消失。 1.可以用简单的方式&#xff0c;就是给input文本框加上onfocus属性&#xff0c;如下代码&#xff1a; οnfοcusif(this.value"请输入关键字进行搜…

使用js代码修改input的默认值

内容&#xff1a;使用js代码来对input设置的默认值进行修改&#xff0c;点击按钮修改input的默认值 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><scrip…

html设置input默认值,使用jQuery给input标签设置默认值

由于项目需求&#xff0c;简单地写了一个input默认值设置&#xff0c;实现给.form中所有的input设置默认值的方法。input默认值设置 $(function() { //集体调用 $(".form input").each(function(){ $(this).setDefauleValue(); }); //单个调用 $("#key").s…

antd 给input设置值_Antd 中 Input 组件默认值的显示

1、input标签中有placeholder可以显示默认值 但是有少量样式的问题(字体颜色会淡一点) placeholder属性 2、用Input组件中的defaultValue属性 defaultValue属性 3、form表单组件中的initialValue参数 注意&#xff1a;当Form组件和Input组件一起用时&#xff0c;defaultValue在…

Ant Design React中 Form.Item 中设置Select,Input.TextArea,Input默认值

<Formref{this.formRef}name"dynamic_rule"initialValues{{ one: 0, two: 0, three: "0", desc:"尝试一下" }}></Form>在Form 使用initialValues{{ name:"value" }}>

踩坑 antd Form表单获取input默认值失败,Form表单校验input 必填 默认值为undefined

问题描述&#xff1a;1&#xff0c;跳转页面后&#xff0c;通过url传参&#xff0c;将参数自动回填到下一个页面的input输入框里&#xff0c;打开页面后&#xff0c;input成功显示回写内容。2&#xff0c;为FormItem添加必填校验required:true。3&#xff0c;提交表单&#xff…

js压缩混淆加密工具,解密工具

js压缩混淆加密有什么不同 压缩 compress&#xff1a; 去掉空格&#xff0c;换行&#xff0c;注释等&#xff0c;格式紧凑&#xff0c;节约存储空间。 混淆 obfuscate/garble&#xff1a;替换变量名或方法名&#xff0c;让js不容易看懂。也做到了压缩的效果。 加密 encrypt&…

对JS文件中每个函数单独混淆加密

自动化脚本&#xff1a;单独对JS代码中的每个函数进行混淆加密 用自动化脚本工具&#xff0c;对JS代码中的每个函数分别进行单独混淆加密。这样加密得到的JS代码&#xff0c;比直接对整个JS代码进行混淆加密&#xff0c;效果要好很多。所谓“好”体现在&#xff1a;加密结果安…

js常见混淆加密技术

下面&#xff0c;我将通过一个案例来演示如何使用JavaScript混淆加密技术来保护你的网站。 假设你有一个网站&#xff0c;其中包含一个登录页面&#xff0c;该页面的JavaScript代码如下所示&#xff1a; function login(username, password) {if (username "admin"…

JS混淆原理

JS混淆原理 •eval 加密 通过eval去执行函数通常和webpack打包拼接一起使用• 变量混淆 ​ 变量名混淆&#xff0c;十六进制替换&#xff0c;随机字符串替换• 属性加密 ​ 一套组合算法&#xff0c;将属性加密生成• 控制流平坦化 逻辑处理块统一加上前驱逻辑块&#xff0c…

在线Javascript加密混淆工具

在线Javascript加密混淆工具 在线Javascript加密混淆工具 在线Javascript Obfuscator 使 javascript 代码更难阅读以保护它。该工具提供了四种使用工具。你可以压缩或格式化你的代码&#xff0c;也可以使用 eval 混淆你的代码并对其进行解码。混淆的 javascript 代码在你的工作…

JavaScript代码混淆加密教程 JS无解加密

正文: 今天给大家写一篇原创JS加密教程&#xff0c;大家都知道由于JS属于前端的内容&#xff0c;任何人都可以直接对代码进行查看&#xff0c;直接暴漏JS代码&#xff0c;自己的劳动成果无法保护就算了&#xff0c;别人还可以直接复制你的代码变为自己的。 所以说&#xff0c…

Js混淆代码、加密数据工具-JShaman

官网&#xff1a;JShaman - 专业的JS代码混淆加密平台 - JS混淆、JS加密 由于客户信息安全检测到系统源码没有加密&#xff0c;容易被仿造&#xff0c;故建议对重要js文件进行加密。

js混淆加密,通过混淆Js代码让别人(很难)无法还原

1、为什么需要js混淆 在web系统发展早期&#xff0c;js在web系统中承担的职责并不多&#xff0c;只是简单的提交表单&#xff0c;js文件非常简单&#xff0c;也不需要任何的保护。 随着js文件体积的增大&#xff0c;为了缩小js体积&#xff0c;加快http传输速度&#xff0c;开始…