在已编译的应用程序中通过 C/C++ 调用 Lua

逆向工程 dll C++
2021-06-19 09:09:55

所以,目前我一直在对一个允许 Lua 编码的应用程序进行逆向工程。因为为了一些特殊的目的,我需要通过C/C++编码直接调用Lua。但是,由于这个应用程序是明显编译的,我不能简单地编写一个调用它的函数。我需要原始函数的签名(包括掩码),然后编写函数原型、调用约定、返回类型等,然后将其编译为 DLL,然后注入它。

这一切都已经完成了。我使用 SigMaker 插件获得了 IDAPro 的签名,制作了用于扫描模式和掩码的基本功能。

所以,这就是 Lua 打印函数的样子:

DEC_FUNC(__cdecl, DWORD, print, int a1); 

查看 Lua 源代码,a1 是“lua_State *L”。我现在如何调用这个函数,例如在 Lua 中打印“hello world”?请原谅我在这样的事情上无能,但我已经坚持了几天了。

为了进行比较,您可以在此处查看 lbaselib.c 中的代码部分(在 Lua 源中):

static int luaB_print (lua_State *L) {
int n = lua_gettop(L);  // number of arguments
int i;
lua_getglobal(L, "tostring");
for (i=1; i<=n; i++) {
const char *s;
lua_pushvalue(L, -1);  // function to be called
lua_pushvalue(L, i);   // value to print
lua_call(L, 1, 1);
s = lua_tostring(L, -1);  // get result
if (s == NULL)
  return luaL_error(L, LUA_QL("tostring") " must return a string to "
                       LUA_QL("print"));
if (i>1) fputs("\t", stdout);
fputs(s, stdout);
lua_pop(L, 1);  // pop result
}
fputs("\n", stdout);
return 0;
}    

提前致谢。如果需要更多信息,我当然可以提供。

0个回答
没有发现任何回复~