【问题标题】:Hacking Lua - Inject new functions into built LuaHacking Lua - 将新功能注入内置 Lua
【发布时间】:2017-04-16 16:25:12
【问题描述】:

我试图通过引入新的内置方法和函数来破解游戏(但不是为了作弊),以便使用套接字与游戏通信。这是我想要完成的一个小的“伪代码”示例:

在 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 动态加载。

如果对我应该在哪里以及如何继续寻找内置函数有一点点线索,这个问题就发给任何人。我已经用 Cheat Engine 尝试了一些东西,但我并不太成功。我可以作弊一点^^但这不是我想要的。

【问题讨论】:

    标签: lua


    【解决方案1】:

    很抱歉没有提供完整的答案,但如果您可以提供自定义 Lua VM 并更改标准库,您应该能够将 Lua 源代码中的 luaL_openlibs 方法更改为提供一个包含my_hack() 的表格。

    【讨论】:

    • 我不太确定我是否理解,但这听起来有点不可能。当时的游戏开发者编译了他们自己的 Lua 版本并将其打包到游戏中。在已编译的游戏中尝试用我自己的 Lua VM 替换他们的 Lua VM 听起来很繁重。
    【解决方案2】:

    由于 Lua 解释器通常静态编译到宿主可执行文件中,因此可能无法以某种方式修改解释器。

    我认为你最好的办法是找到一些被主机调用的 Lua 代码,然后从那个文件中使用 dofile 来运行你自己的代码。

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 1970-01-01
      • 2016-05-13
      • 2011-02-05
      • 2020-06-01
      • 2014-08-06
      • 2019-05-18
      • 2015-02-21
      • 2020-12-27
      相关资源
      最近更新 更多