劫持 Opengl32.dll 實現遊戲MOD
阿新 • • 發佈:2018-08-19
oca 方式 api img blank scrip 我只 assembly 方法
找到mono的進程,
前提是你的遊戲是用的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裏那堆操作IL的函數,直接給映射過來,然後就可以為所欲為了。
劫持 Opengl32.dll 實現遊戲MOD