点击上方蓝字[协议分析与还原]关注我们

 介绍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. 微信h5游戏模板:测试问答大冒险,真假朋友大考验

    如果异性间想测试是否适合谈婚论嫁有个最有效的办法就是出去旅游一次!那么朋友间该如何判断是否适合一起旅行呢?TOM游戏小编告诉你,通过一款游戏就能做到了! 游戏名:测一测你最适合与谁一起旅行 用户选择与 ...

  2. 《雷曼大冒险》之游戏的分析与设计

      阅读Tracy Fullerton, GAME DESIGN WORKSHOP第2-4章(游戏结构.基本元素.戏剧元素).选择一款你喜欢的中等规模游戏如"植物大战僵尸体"为案例 ...

  3. 坑爹大冒险html5游戏在线玩,《史上最坑爹的大冒险》 图文全通关攻略

    <史上最坑爹的大冒险>是一款趣味解谜小游戏,目前已经登录了iOS平台.让我们一起来解密这款游戏吧. 这是一款很虐心的游戏,总共只能点击游戏150下.超过就需要重来.或者是去appStore ...

  4. android图片资源加密解密,[原创]cocos2d游戏图片资源解密

    0x00 序 之前遇到过一个有意思的cocos2d游戏.里面的图片资源全都加密了.今天突然想起来.整理一下发出来. 0x01 开干 ak 打开软件 发现是cococs游戏,并且资源文件里面全是mp3, ...

  5. Cocos2dx游戏开发笔记23:《奇怪的大冒险》源码学习,附下载

    懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 青岛) 以后有的忙了 抽空先来一发笔记 网上找了个demo:LOGO叫奇怪的大冒险(应该是@熊同学的 ...

  6. 指尖大冒险、跳一跳升级版html5游戏全代码

    指尖大冒险.跳一跳升级版html游戏全代码 博主的话 文件目录 运行图片 指尖大冒险.html style.css 进行下一个游戏的开发! 博主的话 这是最后一个纯原生js代码编出来的游戏了.我连这个 ...

  7. createjs开发h5游戏: 指尖大冒险

    之前看到一个指尖冒险游戏,觉得挺有意思,就想学习一下怎么实现,毕竟当产经提出类似的需求时,问我等开发可不可以实现的时候,不至于回答不知道. 本文的主要思路,参考的是凹凸实验室的这篇文章:H5游戏开发: ...

  8. 寻求真心话大冒险之猜数游戏的最佳策略

    去年的高中同学会上,吃完饭后大家就坐成一圈开始玩猜数游戏了.主持人自己在手机上输入一个1到,比如说500,的数,然后大家轮流猜数,并由主持人告之是猜大了还是猜小了.猜中了的那个人接受惩罚,真心话,或者 ...

  9. 真心话大冒险HTML5小游戏,真心话大冒险游戏怎么玩才有趣

    说到真心话大冒险,这应该是年轻人都喜欢玩的一个游戏,下面小编为大家整理了关于真心话大冒险的游戏玩法,欢迎大家阅读. 真心话大冒险游戏怎么玩才有趣 包厢里几个人围坐在一起,分散着坐在包厢里的各个角落,会 ...

最新文章

  1. 仅剩一周!!CSDN年终大放血!人人有份的大奖你确定不来?
  2. 硬盘老大哥被曝豪掷200亿美元,要收了全球第二大闪存芯片厂,外媒:半导体行业秩序要变...
  3. 用 Flask 来写个轻博客 (33) — 使用 Flask-RESTful 来构建 RESTful API 之二
  4. Pywinauto 应用后端类型选择错误:AttributeError: ‘NoneType‘ object has no attribute ‘backend‘. 原因及解决办法
  5. 微信公众号自动回复 node
  6. 英语怎么说_日常英语怎么说
  7. 字符集和编码规范:ASCII,Unicode和UTF-8, latin1,BIG5,GBK
  8. Fotolog对memcached的应用
  9. 如何在多个SQL Server上运行备份
  10. PHP $_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 与 $_SERVER['REQUEST_URI'] 之间的区别
  11. Python读取微信朋友圈
  12. 防关联超级浏览器(超级防关联浏览器)的应用场景和技术原理
  13. ValueError: operands could not be broadcast together with shapes、numpy广播错误
  14. 大数据时代下的网络安全与数据隐私论文
  15. 使用cntv(原cctvbox-中国网络电视台)下载视频
  16. c语言qq自动回复,QQ自动回复
  17. gta4android2018,gta4apk手机版
  18. python爬取拉钩网招聘信息
  19. 关于D3D9 Stretchrect
  20. 计算机语言有许多种其中与硬件直接相关的是,【单选题】计算机语言有许多种,其中与硬件直接相关的是 A. 机器语言 B. 网络语言 C. 高级语言 D. 自然语言...

热门文章

  1. js插件 webp_(转)让浏览器支持Webp
  2. iOS的KVO实现剖析
  3. React 组件绑定点击事件,并且传参完整Demo
  4. iOS 11 安全区域适配总结
  5. 苹果手表可以运行 ruby 脚本了
  6. LeetCode 125 Valid Palindrome(有效回文)(*)
  7. 启用CORS实现Ajax跨域请求
  8. Spring注解@Component、@Repository、@Service、@Controller,@Autowired、@Resource用法
  9. 基于Sql Server 2008的分布式数据库的实践(一)
  10. Visual C++ 2010 简介