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一下...加油...
......
仅供学习参考,严禁用于非法用途!
传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!
最后于 4天前
被n00bzx编辑
,原因:
上传的附件: