给 REPO 写个 DX11 overlay: RepoDLL
RepoDLL 是注进 REPO 进程的一个 overlay DLL, hook 掉 DX11 交换链, 在画面上叠一层 ImGui, 让你边玩边看内存边改数值。REPO 是个 Unity/Mono 的联机搬运游戏, 血量、坐标、货币这些都在托管层, 能读能画。
没走裸地址扫描那套, 太脆, 游戏一更新偏移全废。REPO 是 Mono 的, 托管层带符号信息, 运行时能解析, 所以注入后先定位 Mono 运行时, 按名字解 Assembly-CSharp 里的类、字段、方法, 读到的是有语义的东西不是一串裸地址。目标类名 SemiFunc、PlayerAvatar、PhysGrabber、ExtractionPoint、ValuableDiscover、PunManager 全塞在 config.h, 换个游戏理论上改这一个文件就行。
入口在 dllmain.cpp, attach 时先装异常过滤器兜底, 起主线程调 HookDx11(), 用 MinHook 把 DXGI 的 Present 和 ResizeBuffers 拦下来, 之后每帧在 hook 过的 Present 里画 ImGui, 顺便子类化窗口 WndProc 抢输入, Insert 呼菜单。ESP 从 Unity Camera 拿 View/Projection 矩阵做 WorldToScreen, 把玩家、贵重品、敌人投到屏幕上。
最难搞的是崩溃, 枚举物品和敌人时托管对象随时失效, 渲染线程读到脏指针整个游戏就挂, 后来把这些读取全包一层 SEH 的 Safe 包装器, 稳了不少。联机还得判房间和主机权限, 不是所有值都能写, 该只读就只读。玩具功能堆了一堆: 移速覆写、多段跳、无敌、抓取范围、第三人称, 还把 ValuableDiscover 的原生高亮 hook 成常亮。
工程是 C++20 的 MSBuild 方案, MinHook 那块是 C, v145 + Win10 SDK, 链 d3d11.lib、dxgi.lib, ImGui 和 MinHook 直接 vendored 在 third_party/ 不用包管理器, VS 选 Release | x64 出 RepoDLL.dll 就行, 只产 DLL, 注入器不在仓库里。早期实验, 一堆假设绑死在当时那版 REPO 上, 换环境大概率得改。MIT。