2016-12-01 128 views
2

我想通過引入新的內置方法和函數來使用套接字與遊戲進行通信來破解遊戲(而不是爲了作弊)。這裏是什麼,我想完成一個小的「僞碼」的例子:黑客Lua - 注入新的函數到內置的Lua中

裏面的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試了一些東西,但我並不太成功。我能夠作弊^^,但這不是我正在尋找的。

回答

0

對不起,不提供答案,但如果你能提供自定義的Lua VM,改變標準庫,你應該能夠改變luaL_openlibs方法中的Lua源提供一個表my_hack()內的。

+0

我不太清楚,如果我理解,但這聽起來有點不可能。遊戲開發者當時編譯了他們自己的Lua版本並將其打包到遊戲中。聽起來相當沉重,試圖用編譯後的遊戲替換他們的Lua虛擬機。 – displayname

0

由於Lua解釋器通常靜態編譯到主機可執行文件中,因此可能無法以某種方式修改解釋器。

我認爲你最好的選擇是找到一些由主機調用的Lua代碼,並從該文件使用dofile來運行你自己的代碼。