首页
社区
课程
招聘
[原创]cocos2dx lua 反编译(20170417增加补充说明)
发表于: 2017-4-1 17:33 59345

[原创]cocos2dx lua 反编译(20170417增加补充说明)

2017-4-1 17:33
59345

网上各种教程、各种工具用不了,才会有这个文章。附件是我修改的支持luajit 2.1.0-beta2反编译的LJD


lua bytecode解密


知己知彼很重要,搜索cocos2dx lua 加密”大概可以找到类似下面的代码。


我的目标是一个ANDROID游戏,APK文件直接解压。一般情况是libcocos2dlua.so,IDA 打开,函数窗口直接搜索applicationDidFinishLaunching,就能带你飞,可惜只有loadChunksFromZip,没有setXXTEAKeyAndSign,这保存解密KEY的被编译优化了。怎么办?IDA字符串窗口帮你忙,编译器编译代码的时候都是就近原则,只要是差不多地方出现的字符串,都会被放在一起。加密的ZIP文件,文件头几个字符就是setXXTEAKeyAndSignSIGN参数,加上ZIP文件本身的路径,搜索目标ZIP文件就可以了。如图,IDA显示附近也就几个字符串,剩下的KEY参数是哪个,一个一个试就可以了。


加密的ZIP文件:

 

 

IDA中的字符串,第一个黑块是SIGN参数,非常幸运,尝试第二个黑块就是KEY

 


https://github.com/cocos2d/cocos2d-x/search?p=1&q=loadChunksFromZip&type=&utf8=%E2%9C%93 找到cocos2dxloadChunksFromZip的源码



这里我遇到一点困难,cocos2dx的源码项目,没有xxtea的源码!不过还是让我在github搜索出来了,源码在此:

 

https://github.com/xxtea/xxtea-c

 

直接写个C++代码,就把加密的ZIP解出来了。顺带一提,Sign就是用来跳过,跟什么PE,MZ是一样的。



de_xxx.zip的头两个字节变成喜闻乐见的PK,解压,搞定。


Luajit ASM


解压出来的文件,都是LuaJITa Just-In-Time Compiler for Lua,文件头长这样:

 


http://luajit.org/download.html 可以下载到LuaJIT的源码,不过兼容性有点糟糕,需要找到正确的版本才有效。回到IDA字符串窗口搜索luajit,可以确认目标APK使用的是2.1.0-beta2。下载源码,编译之后,使用类似下面的命令行:


luajit.exe -bl xxx.lua.bytecode xxx.lua.asm

 

可以看到LUAASM代码了,LUA ASM长这样:


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 1
支持
分享
打赏 + 101.00雪花
打赏次数 2 雪花 + 101.00
 
赞赏  大宝章法王   +100.00 2017/06/12
赞赏  CCkicker   +1.00 2017/05/08
最新回复 (61)
雪    币: 71
活跃值: (920)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
厉害啊!!
2017-4-1 18:03
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
2017-4-3 20:09
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
图片挂了
2017-4-3 20:11
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不错!!!!!!
2017-4-4 02:22
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
6
caolinkai 图片挂了
已修复图片
2017-4-5 08:52
0
雪    币: 5318
活跃值: (3714)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
7
多谢版主分享
2017-4-5 13:30
0
雪    币: 2
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看得我一脸蒙蔽2333333
2017-4-5 19:27
0
雪    币: 42
活跃值: (487)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
崇拜的笨笨雄大神归来     
2017-4-6 14:14
0
雪    币: 27
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10

请问为什么报错啊?

2017-4-9 14:11
0
雪    币: 71
活跃值: (920)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11

楼主  能说说  那个  py的  脚本  要怎么用?  我试了  好久都不能用,  用了个  luajit  2.1.0-beta2    在加密  脚本  也没办法解 

上传的附件:
2017-4-10 15:31
0
雪    币: 27
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
求群主明示啊
2017-4-12 21:03
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
jecray 请问为什么报错啊?
一样的报错  不知为啥
2017-4-13 15:25
0
雪    币: 107
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习咯~~~~~~~~~~~~
2017-4-14 16:04
0
雪    币: 12688
活跃值: (4294)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
谢谢分享
2017-4-15 02:19
0
雪    币: 6094
活跃值: (3077)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
谢谢分享
2017-4-15 09:11
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
17
jecray 请问为什么报错啊?
需要先确定  LUA的版本,  不同版本,字节码不一定一样
2017-4-17 09:24
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
18
rongkao 楼主  能说说  那个  py的  脚本  要怎么用?  我试了&am ...
你这个下载早了,再下载一次附件吧,解压之后是“XXX-副本”,你出错的代码是我调试时遗留下来的
2017-4-17 09:29
0
雪    币: 1037
活跃值: (1780)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
楼猪6666
2017-4-17 11:09
0
雪    币: 71
活跃值: (920)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
笨笨雄 你这个下载早了,再下载一次附件吧,解压之后是“XXX-副本”,你出错的代码是我调试时遗留下来的
恩恩  好的  谢谢的大神
2017-4-17 11:09
0
雪    币: 6
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
请问一下‘utf-8’  codec  can't  decode  byte  ****:invalid  start  byte    这个应该怎么解决呢?
2017-4-18 13:24
0
雪    币: 204
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22

楼上的,utf-8问题我也碰到,是你的文件没有debug信息,解析时多读了这部分,所以出错,把对应py文件中解析debug部分注掉即可。另,解析很多if跳转的文件还是会生成不了

具体是rawdump/prototype.py下面的几行注释掉,如下图:

2017-4-19 21:59
0
雪    币: 204
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23

我类似这样的文件老是编译不了,因为if太多可能,老是出错,楼主能否帮忙看下?

----补充说明

  看了下,是在逻辑表达式处理这块上有点弱,会报错。看来这个不好修复了。郁闷。作者自己也说了:

There is a lot of work to do, in the order of priority

0. Logical subexpressions in while statements:
 ```lua
  while x < (xi and 2 or 3) do
   print ("Hello crazy world!")
  end
 ```

3. Features not supported:
 1. GOTO statement (from lua 5.2). All the required functionality is
  now in place, but that's rather a low-priority task right now.

 2. Local sub-blocks:
 ```lua
 do
  ...
 end
 ```

上传的附件:
2017-4-19 22:17
0
雪    币: 6
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
ranhoo 楼上的,utf-8问题我也碰到,是你的文件没有debug信息,解析时多读了这部分,所以出错,把对应py文件中解析debug部分注掉即可。另,解析很多if跳转的文件还是会生成不了 ...
感谢指点
2017-4-20 10:38
0
雪    币: 7006
活跃值: (4217)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
感谢分享!!!
2017-4-20 16:13
0
游客
登录 | 注册 方可回帖
返回
//