首页
社区
课程
招聘
LuaJIT ByteCode 初探
发表于: 2015-8-1 06:07 19570

LuaJIT ByteCode 初探

2015-8-1 06:07
19570
最近接触到了一个LUA脚本, 但是发现有些许不同, 百度之, 发现是叫做 JIT. 据说,不可还原.

下载一份,回来仔细研究了下代码, 发现挺好玩的.

LuaJIT 自带的,DUMP出来的伪码, 只是一份简单的逆向. 如TABLE,是完全不可见的. 那么,有没有方法可以看到呢? 答案是, 有!

ByteCode 格式

一个文件头, 后面跟着一个又一个的函数体

函数体包含了编译后的伪码,和函数使用的数据.

有意思的地方来了, 每一条伪指令, 均只有4字节.

如 : 37020102

0x37 查表是 TGETS
A,B,C 分别是  2,2,1

其中,1 对应 GC索引中的字符串. (索引建立的时候, 序号采用倒序)

在实际解析中, 发现, LuaJIT 的 ByteCode 是存在还原的可能的, 不过也和IDA 的 F5 类似了.

打算写个解析引擎出来, 尝试还原出可读性更强的工具来.  有没有有兴趣一起的?

资料1: JIT 格式
' /* -- Bytecode dump format ------------------------------------------------ */
' /*
' ** dump   = header proto+ 0U
' ** header = ESC 'L' 'J' versionB flagsU [namelenU nameB*]
' ** proto  = lengthU pdata
' ** pdata  = phead bcinsW* uvdataH* kgc* knum* [debugB*]
' ** phead  = flagsB numparamsB framesizeB numuvB numkgcU numknU numbcU
' **          [debuglenU [firstlineU numlineU]]
' ** kgc    = kgctypeU { ktab | (loU hiU) | (rloU rhiU iloU ihiU) | strB* }
' ** knum   = intU0 | (loU1 hiU)
' ** ktab   = narrayU nhashU karray* khash*
' ** karray = ktabk
' ** khash  = ktabk ktabk
' ** ktabk  = ktabtypeU { intU | (loU hiU) | strB* }
' **
' ** B = 8 bit, H = 16 bit, W = 32 bit, U = ULEB128 of W, U0/U1 = ULEB128 of W+1


资料2: Lua LuaJit 指令表(整理)
http://blog.csdn.net/zzz3265/article/details/41146569

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 193
活跃值: (1018)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
很好
2015-8-1 11:54
0
雪    币: 248
活跃值: (3203)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
非常好!
2015-8-1 12:34
0
雪    币: 81
活跃值: (100)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
感觉不用从头写引擎,写一个ida处理器模块会节省不少时间
IDA Pro权威指南里有Python字节码处理器模块的例子
Hex-ray说从ida5.7开始可以开发出所有脚本语言的处理器模块,Lua-JIT应该也是可行的
2015-8-1 16:50
0
雪    币: 631
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
关键是一些简单的脚本, 可以还原, 这需要自己实现了- -!
2015-8-1 18:31
0
雪    币: 403
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼主,现在luajit能逆向吗?
2015-9-15 18:40
0
雪    币: 44
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
有我最近就要做!有兴趣的联系下我!
2015-12-29 13:04
0
雪    币: 2
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
做luajit反编译?
2015-12-30 22:31
0
雪    币: 44
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
已经搞的差不多了,明白是咋回事了,感慨lua的作者如此短小的东西,可以实现一个强大的脚本
2016-1-7 14:47
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
@寻找allblue  有联系方式,交流交流一下!
2016-6-27 00:10
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
求指导。
2016-9-30 11:23
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
大神,现在逆向了吗,求交流!!!!
2017-4-1 10:46
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
解决了吗,楼主
2017-4-14 16:50
0
游客
登录 | 注册 方可回帖
返回
//