首页
社区
课程
招聘
[原创]修正版ljd-2.1.0,最新支持到LuaJIT-2.1.0-beta3 lua-5.1
发表于: 2026-6-3 02:32 2997

[原创]修正版ljd-2.1.0,最新支持到LuaJIT-2.1.0-beta3 lua-5.1

2026-6-3 02:32
2997

2026.6.3 发布
好耶!
原项目在github上已删除,这是几年前的copy版本,改了一周,差不多能用了.
仍然不支持while循环反编译,以及还剩下已发现的local变量优化和upvalue处理的一点点乱七八糟的小bug.
使用方法:(python3)

python ./ljd-2.1.0/main.py test.lj > deced.lua

这两天为了完成某一道ctf题目,将优先增加处理花指令功能.将持续更新.

2026.6.7 更新到neo_v1.1
1.修复了local变量的优化问题
2.优化了反编译代码的函数名生成,luajit编译器会将local函数定义转化为闭包函数,作者就直接使用匿名函数,不处理了,我这里第一步将闭包函数转化为slot号定义,但发现会冲突,所以第二步修改后不使用难看的slot号了,而是按定义顺序生成函数名func_0,func_1,func_2等等,目前能看就行,还存在一点点问题#(滑稽)
还剩下几个问题:
1.upvalue的处理.
2.while循环的反编译.
3.局部函数的处理.
4.二元运算符表达式作为判断条件的处理.
5.全局函数slot变量优化问题.
6.do-end块支持问题.
7.函数定义作用域问题.
可造成问题的代码(部分):

local function barbarbar(b,c)
	local function barbar(b)
		return b
	end
	return barbar(b)*barbar(c)
end
ret=barbarbar(23333,66666)
local z=999
local y = z+z and ((z+z+z and z+z+z+z+z) or z)
function bar(b)
	return b
end
ret=bar(114514)

此外,我发现了一种奇怪的hack方式(肯定还有很多),这里给出一个例子(某些部分也可以修改),已基本确定原因,不作过多解释:

local function fff()
	local b
	return true or b+b and b
end
local ret=fff()

晚安,世界!

2026.7.5 说明
新版本将于近期发布,将在能够完全反编译lua5.1及以前版本并可正确运行之前,剩下以下几个问题:
1.local变量标记问题
2.while,repeat-until和迭代器循环处理问题
3.upvalue处理问题
4.do-end块识别问题
实现难度从低到高排序.

2026.7.21 说明
由于工作项目原因,暂无时间更新...

2026.8.16 更新到neo_v2.0
好耶!我回来了!
还剩下前面所述四个问题,其余问题全部修复!当前已能够基本还原源码(local变量除外)!!!
话不多说,直接放附件!
我要说的话都在注释和代码里(zx_lib.py),慢慢看吧#(滑稽)
长期吃药,该睡了...
还有一件事!古法coding万岁!万岁!!万万岁!!!
晚安,世界!

2026.8.20 更新到neo_v2.1
其实,前面还有三四个问题没有修复,现在才是真正的"还剩下前面所述四个问题,其余问题全部修复"...#(滑稽)
时间还早...继续古法coding...

2026.8.24 更新到neo_v2.2
根据官方原版的拷贝版本增加了部分测试代码,以及修复了这些测试代码中体现出的新bug,并支持了迭代器循环的反编译.
对剩下的四个问题的难度重新排序如下(升序):
1.while和repeat until循环的反编译.
2.local变量的标记.
3.upvalue的处理.
4.do end块的识别.
时间不早了...晚安,世界...

2026.8.26 更新到neo_v2.3
已完全支持while循环的反编译,并更新(拷贝官方)了while循环的测试文件.
写repeat until循环的反编译需要brainstorm一下...加油...

2026.9.5 更新到neo_v2.5
大规模修改了代码优化算法,增加了反编译代码的可读性,修复了几个与优化相关的bug(目前找不到bug了),并已完全支持所有循环的反编译.
更新(拷贝)了repeat-until部分的测试文件,并附带了一些魔改的东西#(滑稽)
"zx!你在干嘛!快去吃药!快去睡觉!"

2026.9.9 更新到neo_v2.666666 #(滑稽)
现在已完全支持upvalue的反编译,优化了反编译后代码的部分显示,还改了一些看着不顺眼的代码#(滑稽)
到项目初步完成还剩如下todo(按照计划实现的顺序排列):
1.增加local变量标记功能
2.增加表达式化简功能
3.增加do-end块识别功能(brainstorming...)
4.实际项目疯狂测试,压榨出可能存在的bug
P.S. 如果实现upvalue识别让版本号变成2.6,那么优化反编译代码显示就能让他到2.6.5,列出todo就到了2.666666了#(滑稽)

2026.10.2 更新到neo_v2.8
已经完全支持local变量标记,优化了执行反编译的方式,现在可以直接写入文件,避免使用重定向输出到文件产生多余字符.修复了10个左右的bug,改了挺多看着不顺眼的代码,拷贝了官方的全部测试文件,还有一些自己写的奇怪的东西#(滑稽) 测试了反编译后再回编译再反编译,基本看起来一样了...有些不一样的是回编译的时候被编译器优化掉了,反正在语义上没问题...
修复了一直存在的break反编译中的理论错误.在研究break反编译时,发现一个有趣的事实:

1.
if x then
	if y then
		print ("a")
	else
		break
	end
	print ("b")
end
2.
if x then
	if y then
		print ("a")
		print ("b")
	else
		break
	end
end

我觉得反直觉的是,这两段代码居然语义上相同,虽然语法上有很大差异.是我傻了#(滑稽)
新版执行方式:

python ./ljd_neo/main.py ./test.lj ./test_deced.lua

do-end块我认为从理论上来说无法准确识别,因为通过局部变量的slot号分布特征比较难看出do-end块的存在性,虽说可以通过判断local变量定义的slot号的先增后减区间中开始减少到开始增加的地址区间为do-end块的范围,但是这样也不能精准判断,甚至有时候成功率很低.而且我未来会在这个项目上做很多优化反编译代码的功能,这样就更看不出这种变化了.而且,do-end不会影响代码的运行,如果硬要去识别他,特别是在多次优化之后,会出现很多很难看的东西#(滑稽) 所以,从todo里删除了...

目前的todo(按暂定实现顺序列出):
1.增加逻辑表达式的化简功能
2.增加算数表达式和关系表达式的化简功能
3.增加控制流优化功能,包含常量if优化和空循环删除
4.疯狂压力测试#(滑稽)

休息一段时间,最近玩玩驱动,换个心情...

......

仅供学习参考,严禁用于非法用途!


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

最后于 2026-10-2 20:43 被n00bzx编辑 ,原因:
上传的附件:
收藏
点赞 ・4
打赏
分享
最新回复 (23)
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
2 楼
晚安,世界
2026-6-3 02:39
0
雪    币: 12211
活跃值: (9973)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3 楼
这个我一定要支持!!!!!
2026-8-24 23:29
0
雪    币: 12211
活跃值: (9973)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4 楼
再次支持楼主,希望楼主能继续下去!
2026-8-26 06:48
0
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
5 楼
ldljlzw 再次支持楼主,希望楼主能继续下去!
感谢支持
2026-8-26 15:23
0
雪    币: 12211
活跃值: (9973)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6 楼
加油... 永远支持楼主!!!!!
2026-8-29 21:01
1
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
7 楼
ldljlzw 加油... 永远支持楼主!!!!!
共勉
2026-8-30 10:21
0
雪    币: 12211
活跃值: (9973)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8 楼
继续支持,
2026-9-3 07:25
0
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
9 楼
ldljlzw 继续支持,
再次感谢
2026-9-3 15:23
0
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
10 楼
2026-9-4 16:11
0
雪    币: 12211
活跃值: (9973)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11 楼
谢谢老大又更新了!!
2026-9-13 18:27
0
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
12 楼
ldljlzw 谢谢老大又更新了!!
莫得老大啊师傅
2026-9-14 11:46
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13 楼
谢谢老大
2026-9-22 17:48
0
雪    币: 12211
活跃值: (9973)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14 楼

n00bzx老大,又来看你了,看到你的东西又更新了,很高兴!!  老大,  neo_v2.8什么地方下载?
2026-9-25 11:49
0
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
15 楼
ldljlzw n00bzx老大,又来看你了,看到你的东西又更新了,很高兴!! 老大, neo_v2.8什么地方下载?
快好了,这几天写了大几百行,感谢师傅支持
2026-9-27 15:48
0
雪    币: 12211
活跃值: (9973)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16 楼
n00bzx 快好了,这几天写了大几百行,感谢师傅支持
大佬辛苦了!!!
2026-9-28 06:25
0
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
17 楼
ldljlzw 大佬辛苦了!!!
不敢
2026-9-29 12:28
0
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
18 楼
这代码膨胀得有点快...
2026-10-2 13:46
0
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
19 楼
换掉这7年的老笔记本,新电脑再写新版本!
2026-10-2 13:47
0
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
20 楼
祝中国生日快乐!
2026-10-2 13:48
0
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
21 楼
任意门里我偶尔也疲倦...
2026-10-2 20:43
0
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
22 楼
玩腻了就玩玩别的
2026-10-2 20:44
0
雪    币: 12211
活跃值: (9973)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23 楼
谢谢老大,辛苦了!!!!! 休息一下吧.
2026-10-9 21:04
0
雪    币: 2703
活跃值: (4024)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
24 楼
ldljlzw 谢谢老大,辛苦了!!!!! 休息一下吧.
莫得老大,希望我随便写的代码能引起共鸣
2026-10-10 16:13
0
游客
登录 | 注册 方可回帖
返回