1. 程式人生 > >劫持 Opengl32.dll 實現遊戲MOD

劫持 Opengl32.dll 實現遊戲MOD

oca 方式 api img blank scrip 我只 assembly 方法

前提是你的遊戲是用的Opengl,如果是DX的,自行谷歌方法,應該差不多,參考GTA5

最近玩了款《天命奇禦》的國產網遊,自己手動寫了個MOD,本來是直接修改Chap-Assembly.dll來實現修改遊戲的,

但想想這種方式不雅,每次遊戲更新都要重新寫一遍,再說替換原遊戲文件的方式,總是有點不符合設計模式裏的“多拓展,少修改”的原則

於是,投機取巧,Unity不是調用了opengl32.dll庫嘛?我只要劫持它就行,將它修改,註入我的代碼,然後放在遊戲根目錄(原理是,win系統,

Load外部dll,會先從遊戲根目錄掃描,找不到該dll,再去系統目錄找,一般情況下,遊戲根目錄是沒有opengl32.dll的,U3D的遊戲啟動後,

都是去系統目錄裏找的,我只要把opengl32.dll放到根目錄,就可以了。

Hack的入口,就從openg裏的 glEnable,glBegin入手,在那裏註入我的代碼,然後Unity調用到GL庫時,就會跳轉到我的代碼。

至於我如何通過C++代碼調用Unity/C#的API來實現修改遊戲,則有兩種思路,一種是利用c++調用c#的原理調用(有個現成的庫,但我沒使用過,Unity Scripting in C++)

另一種比較簡單粗暴,就是從mono入手,GetModuleHandleW(L"mono.dll"),GetProcAddress(me.hModule, "mono_thread_attach")

找到mono的進程,

然後將mono裏那堆操作IL的函數,直接給映射過來,然後就可以為所欲為了。

技術分享圖片

劫持 Opengl32.dll 實現遊戲MOD