lua虚拟机字节码修改_用 Lua 简单还原 OpCode 顺序

本文介绍如何通过 Lua 脚本将 Lua 虚拟机中被修改的 OpCode 顺序还原。首先,获取目标 Lua 程序和正常 Lua 程序的字节码文件,然后比较它们的差异,找出乱序的 OpCode。通过 Lua 的 string.dump 函数,可以在 Lua 虚拟机中直接输出 OpCode 顺序。最后,文章强调了 Lua 版本一致性和测试函数覆盖性的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原标题:用 Lua 简单还原 OpCode 顺序

前段时间外出游荡,遇上个大兄弟说能不能跑个 Lua 脚本把 Lua 里被修改的 OpCode 顺序弄出来,最近有空自己尝试一下。

准备材料

① 被修改 OpCode 顺序的 Lua 虚拟机程序一个,不限 SO/DLL/EXE;

② 同版本的正常 Lua 虚拟机程序一个,不知道版本的同学可以从字符串里找,这里是 Lua 5.1.5;

③ 随便写一个能正常编译的 Lua 函数。

思路

1、dump 出 Lua虚拟机中的脚本字节码文件;

2、用正常的字节码去校对OpCode乱序的字节码。

一般情况下 *.luac 文件由 luac 程序生成,其中的数据是由luaU_dump函数产生,在luac.c文件中被调用,而luaU_dump的另一个入口在lapi.c的lua_dump,被绑定到Lua 的string.dump函数。

通过在 Lua 脚本中对需要 dump 的函数用 string.dump,可以得到对应的字节码。

分别在目标 Lua 和正常 Lua 虚拟机中运行以下这段代码,获得 OpCode 乱序后的 luac 文件和正常的 luac 文件:

-- lua

function test()

-- ...略

end

localdata= string.dump( test)

localfp = io.open( "test.luac", "wb")

fp:write( data)

fp: close()

拿得到的两份 luac 文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值