劫持 Opengl32.dll 实现游戏MOD

Posted jeason1997

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了劫持 Opengl32.dll 实现游戏MOD相关的知识,希望对你有一定的参考价值。

前提是你的游戏是用的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的主要内容,如果未能解决你的问题,请参考以下文章

使用 EGL 1.4 查询 OpenGL32.dll 版本问题

VS2010下用OpenGL“缺少glut32.dll”

错误提示 - WeChatWeb.exe - 损坏的图像(OPENGL32.dll)

c++ opengl nvoglv32.dll错误

OPENGL中执行时显示_glutInitWithExit无法定位于动态链接库glut32.dll上

opengl编译通过运行时报错计算机中丢失glut32.dll