劫持 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的函数,直接给映射过来,然后就可以为所欲为了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具