介绍cocos2d游戏中常用的jsc格式文件的解密。

01

在破解游戏应用中,经常会碰到后缀为jsc的文件,这是基于cocos2d开发的游戏的加密代码,本质上是js文件,只是被加密了。

例如之前分析的网络赌博应用奥迪棋牌和它的兄弟途游斗地主,都是cocos2d游戏,其游戏代码主体就是使用js写的,然后加密成jsc格式。

如果想对这两款应用的加密及破解进行了解,可参考之前的文章:

途游斗地主加密协议分析及破解

博彩应用奥迪棋牌协议破解分析与揭秘

如果想了解一个jsc游戏的逻辑,就需要将它解密,但是,这个jsc加密,网上相关的资料很少。

在分析这两款应用的过程中,本来准备偷点懒,看看网上有没有现成的工具,找了很久都没找到,于是只好苦逼地自己来破解它了,参考了一些找到的资料,但资料与实际情况有些出入,所以,一切应以实战为准。

本文去除了繁琐的探索步骤,只展示破解jsc格式文件的方法,相信大家看完后也能够解cocos2d游戏代码中的jsc文件。

解密的完整源码已经在github上公开,在这里就不放了,大家如果有需要可以去上面找。

02

前面已经提到,jsc文件是js加密后的数据,常在cocos2d游戏中用到。

其实,真正在js和jsc文件中进行转换的是SpiderMonkey,一个Mozilla项目中用c写的JavaScript脚本引擎。

cocos2d中使用了SpiderMonkey来进行JavaScript脚本的处理。

SpiderMonkey已经迭代了很多版本,早期的版本为方便调试,默认生成jsc文件时,原始的js脚本就在这个文件的尾部,直接就能抠出来用了,网上很多资料所谓的解密就是指的这个。

网上另外还有一个非虫写的解密jsc的文章,是真的解密,但是按他的文章进行无脑傻瓜式操作,编译SpiderMonkey都过不去,只能参考下使用的接口,自己来写了。

在解密之前,需要注意jsc文件的最开始有文件的版本,具体解密过程中,如果使用的SpiderMonkey版本不对,是不会解的,版本号有大版本和小版本,需要完全一致才可以,能够和cocos2d匹配的SpiderMonkey在cocos2d的github内可以找到,大版本是v33,如果需要其它版本,就去SpiderMonkey官网找找,不一定能找到。

虽然SpiderMonkey看着很大,但解密jsc文件只需要其中一点点,都在js/src/里面,另外,针对具体使用的编译环境,需要修改configure文件内的编译器,我当时的环境是修改configure.in内c99为gnu99。

真正的解密过程,其实就是调用接口,解密接口为JS_DecodeScript,为了解密后的数据能够输出,还需要实现一个将解密结果输出的函数,我使用的名称是js_DumpJSC,是从SpiderMonkey代码中其它地方拷出来的。

具体各个接口怎么用,SpiderMonkey代码中其实都有,我采用的是比较省事的方法,直接模仿gdb-tests.cpp来玩,代码量很少,主要是有一套使用框架,照葫芦画瓢就行了。

关键的解密代码是这样子,入参cx为照葫芦画瓢初始化好的JSContext,jsc_file_path为jsc文件路径:JSContext

bool decode_jsc(JSContext *cx,char *jsc_file_path) {
uint32_t datalen = 0; void *bytecode_data = load_string_from_file(jsc_file_path,(int *)&datalen);
if (bytecode_data!=NULL) { JS::RootedScript *script = new JS::RootedScript(cx); *script = JS_DecodeScript(cx, bytecode_data, datalen,nullptr); char outfilename[255]={0}; sprintf(outfilename,"%s.jsdec",jsc_file_path); if(js_DumpJSC(cx,*script,outfilename)) //js_DumpJSCFile(cx,*script,outfilename) { printf( "run ok."); } } return true;}

它的编译,可以参考SpideMonkey官网的资料,大概是这样子:

autoconf-2.13

cd build-linux

../configure --enable-debug --disable-optimize

make

然后,你就可以使用你写的解密器进行jsc的解密了。

当然,SpideMonkey的使用过程有很多小坑。

03

是不是看着摸不着头脑,没关系,动手去搞就是了,搞一次就全明白了。

如果有jsc解密的需求,可以自己动手去玩玩。


长按进行关注,时刻进行交流。

点击“在看”,与朋友一起分享↘

cocos2d游戏jsc文件格式解密,SpideMonkey大冒险的更多相关文章

  1. 菜鸡学C语言之真心话大冒险

    题目描述 Leslie非常喜欢真心话大冒险的游戏.这一次游戏的规则有些不同.每个人都有自己的真心话,一开始每个人也都只知道自己的真心话.每一轮每个人都告诉指定的一个人他所知道的所有真心话,那么Lesl ...

  2. cocos2d 游戏开发实战

    文章转自:http://uliweb.clkg.org/tutorial/read/40 6   cocos2d 游戏开发实战 6.1   创建cocos2d项目 6.2   cocos2d v3 & ...

  3. 如何在Cocos2D游戏中实现A*寻路算法(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  4. 如何在Cocos2D游戏中实现A*寻路算法(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  5. 一卡通大冒险(hdu2512)

    一卡通大冒险 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  6. HDU 2512 一卡通大冒险(第二类斯特林数+贝尔数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2512 题目大意:因为长期钻研算法, 无暇顾及个人问题,BUAA ACM/ICPC 训练小组的帅哥们大部 ...

  7. 【CSWS2014 Summer School】大数据下的游戏营销模式革新-邓大付

    大数据下的游戏营销模式革新 邓大付博士腾讯专家工程师 Bio:毕业于华中科技大学,现任腾讯IEG运营部数据中心技术副总监,负责腾讯游戏的数据挖掘相关工作,包括有用户画像,推荐系统,基础算法研究等.主要 ...

  8. HDUOJ----2512一卡通大冒险

    一卡通大冒险 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  9. 一卡通大冒险(hdu 2512)

    因为长期钻研算法, 无暇顾及个人问题,BUAA ACM/ICPC 训练小组的帅哥们大部分都是单身.某天,他们在机房商量一个绝妙的计划"一卡通大冒险".这个计划是由wf最先提出来的, ...

随机推荐

  1. mysql视图的基本操作

    1. 创建视图 CREATE VIEW 视图名 AS 查询语句 [WITH CHECK OPTION] - 这里WITH CHECK OPTION要求插入或者更新要满足查询语句where后面的条件 2 ...

  2. Spring bean 初始化失败

    在一个*context.xml 配置文件 A 中, 有个定义的bean B, 把 A 添加到 application-context.xml 中,发现B不能正常初始化. 解决办法: 添加 <co ...

  3. luogu P3110 [USACO14DEC]驮运Piggy Back |最短路

    题目描述 Bessie and her sister Elsie graze in different fields during the day, and in the evening they b ...

  4. luogu P2783 有机化学之神偶尔会做作弊 |Tarjan+LCA

    题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 有一天他一边搓炉石一边监考,而你作为一个信息竞赛的大神也来凑热闹. 然而你的化竞基友却向你求助了. "第1354题怎么做"&l ...

  5. Zookeeper Watcher接口

    在ZooKeeper中,接口类Watcher用于表示一个标准的事件处理器,其定义了事件通知相关的逻辑,包含KeeperState和EventType两个枚举类,分别代表了通知状态和事件类型,同时定义了 ...

  6. 2018NOIP赛后总结+后阶段信奥学习个人规划

    目录 2018NOIP赛后总结 赛前 赛时 赛后 后阶段信奥学习个人规划 主要方针 学习安排 比赛安排 刷题安排 2018NOIP赛后总结 赛前 在无数次的思想挣扎后,我在倒数 3 天的时候请假了.这 ...

  7. 洛谷 题解 P1372 【又是毕业季I】

    这题... 只能说:n / k罢了... 但是: 代码没有最短,只有更短! #include <stdio.h> int n, k; int main() { return scanf(& ...

  8. cookie、session和token那些事

    cookie 和 session 众所周知,HTTP 是一个无状态协议,所以客户端每次发出请求时,下一次请求无法得知上一次请求所包含的状态数据,如何能把一个用户的状态数据关联起来呢? 比如在淘宝的某个 ...

  9. 大数据学习笔记——Linux完整部署篇(实操部分)

    Linux环境搭建完整操作流程(包含mysql的安装步骤) 从现在开始,就正式进入到大数据学习的前置工作了,即Linux的学习以及安装,作为运行大数据框架的基础环境,Linux操作系统的重要性自然不言 ...

  10. intellij cpu占有高解决办法(亲测有效!)

    File---Settings---Inspections---把勾都去掉或者选自己需要的部分.