我正在尝试通过引入新的内置方法和函数来破解游戏(虽然不是作弊),以便使用套接字与游戏进行通信。下面是我想要完成的一个小的"伪代码"示例:
在 Lua 代码中,我调用my_hack()
并传递当前游戏状态:
GameState = {}
-- Game state object to be passed on
function GameState:new()
-- Data
end
local gameState = GameState:new()
-- Collect game state data and pass it to 'my_hack' ..
my_hack(gameState)
在my_hack
里面,物体被送走了:
int my_hack(lua_State * l)
{
void* gameState= lua_topointer(l, 1);
// Send the game state:
socket->send_data(gameState);
return 0;
}
现在,最大的问题是如何将my_hack()
引入游戏?
我假设所有内置函数都必须保存在某种查找表中。由于所有Lua代码都被解释,import
等函数必须是静态可用的,对吧?如果这是正确的,那么找出这段代码的驻留位置应该"足够",以便将我的代码偷运到游戏中,从而允许我在Lua脚本中调用my_hack()
。
应该有两个选项:第一个是构建的Lua嵌入在可执行文件中并且是完全静态的,第二个是所有Lua代码都是从DLL动态加载的。
这个问题会问任何对我应该在哪里以及如何继续寻找内置函数有丝毫线索的人。我已经尝试了一些作弊引擎,但我不太成功。我能够作弊^^但这不是我想要的。
很抱歉没有提供完整的答案,但如果可以提供自定义 Lua VM 并更改标准库,您应该能够更改 Lua 源代码中的luaL_openlibs
方法,以提供一个包含my_hack()
的表。
由于 Lua 解释器通常静态编译到主机可执行文件中,因此可能无法以某种方式修改解释器。
我认为你最好的选择是找到一些被主机调用的Lua代码,并从该文件中使用dofile
运行你自己的代码。