所以我试图“破解”一个游戏,但不是为了作弊。我希望通过一个可以查找进程并返回它们的 DLL 来扩展游戏脚本功能。我正在寻找的游戏是 Train Simulator(我知道,不要笑)并且该游戏使用 lua 来编写游戏中所有引擎功能的脚本。所有 3rd 方开发人员只能看到他们编写的 lua 脚本。
在游戏 lua 中有核心功能。主要的:
function Initialise()
end
function Update(time) -- time is the interval since the last update
end
也有这样使用的 C 函数:
Call("SetControlValue", name, index, value)
or
Call("GetIsPlayer")
这些返回不同的值。
到目前为止,我的 DLL 如下:
#include <windows.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
/* The DLL is being loaded for the first time by a given process.
Perform per-process initialization here. If the initialization
is successful, return TRUE; if unsuccessful, return FALSE. */
MessageBoxA(0, "TSDll has been attached !", "Train Sim Dll", MB_ICONEXCLAMATION | MB_OK);
break;
}
return TRUE;
}
这有效。在我的火车模拟引擎脚本中,我使用 loadlib 库来加载 DLL。
libinit, err = loadlib("plugins\\TSDll.dll", "libinit")
if _G["libinit"] then
Print("TSDll Library Loaded!")
libinit()
else
Print("loadlib on TSDll failed: ")
Print(err)
end
所以dll正确初始化。
我面临的问题是 Lua 库直接内置到游戏二进制文件中(据我所知),这意味着我无法为 lua_pushstring 等基本功能引用 lua.dll。这里有谁知道我如何找到这些函数的地址。我知道以前已经制作过这样的 dll,但是制作它的人对于它是如何制作的非常保密。
谢谢,丹
