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

[原创]修正版ljd-2.1.0,支持LuaJIT-2.1.0-beta3

2026-6-3 02:32
1168

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()

晚安,世界!

......

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


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 3小时前 被n00bzx编辑 ,原因:
上传的附件:
收藏
免费 1
打赏
分享
最新回复 (1)
雪    币: 2713
活跃值: (3494)
能力值: ( LV12,RANK:286 )
在线值:
发帖
回帖
粉丝
2
晚安,世界
2026-6-3 02:39
0
游客
登录 | 注册 方可回帖
返回