tongtong123 发表于 2019-8-6 20:58

jsc反编译以及二进制修改

本帖最后由 tongtong123 于 2019-8-7 09:29 编辑

参考:https://www.52pojie.cn/thread-814217-1-1.html

       最近碰到jsc的游戏,游戏中有跳过功能但有限制,想着对游戏进行修改达到无条件跳过。
       首先,反编译jsc文件,使用这个工具https://github.com/irelance/jsc-decompile-mozjs-34(大致就是安装一个php环境,然后用composer导入项目所需)注意这里只能反编译SpiderMonkey 34 这个版本,反编译后的文件能看大部分的代码。
       在文件中搜索skip,观察可知如下的代码就是跳过按钮的判断
https://img-blog.csdnimg.cn/20190806204414688.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ3NTM3NDg=,size_16,color_FFFFFF,t_70
      接下来,根据字节码对照表寻找这段代码在jsc中对应的位置,字节码 对照表 https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals/Bytecode
      在反编译的js搜索canSkip,上面代码的canSkip是最后一个
https://img-blog.csdnimg.cn/20190806204716968.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ3NTM3NDg=,size_16,color_FFFFFF,t_70
      这块字符串对应的代码在它前面,如图中所标3B 00 00 00 00是取下标为0的字符串cc,而我们要找的canSkip小标是0x11,可以从头往下跟着代码找,熟悉的话就知道35 00 00 00 11这个就是获取canSkip字符串,后面跟着的20是取反,再后面07就是IFEQ的判断语句,后面的52是else执行的地方,而我们的跳过功能执行的地方刚好是else之后,我们就可以将07改成06(GOTO),直接goto执行跳过代码了。改完之后替换原来的jsc文件,这样就可以无条件跳过了。

whale.alice 发表于 2019-8-6 21:10

谢谢分享

那年春天 发表于 2019-8-6 21:50

感谢分享

5夜HX 发表于 2019-8-6 22:12

学习了,谢谢

kaixinyingying 发表于 2019-8-6 22:41

{:1_893:}感谢分享,很受用

kll545012 发表于 2019-8-7 08:29

图呢??

tongtong123 发表于 2019-8-7 09:35

发错版块了,怎么删除或者移动到其他版块

千里送机毛 发表于 2020-1-6 16:43

学习谢谢
页: [1]
查看完整版本: jsc反编译以及二进制修改