DrawGuessHelper:你画我猜的 DX11 注入辅助框架
DrawGuessHelper 是给 Steam 上 Draw & Guess(你画我猜)写的 DX11 注入辅助。游戏 Unity + Mono 写的,内存里基本明牌,拿来练逆向和注入正合适。做法是老套路:DLL 注进进程,MinHook hook 住 DX11 的 Present,游戏画完那帧叠一层 Dear ImGui overlay,Insert 或右 Shift 呼出面板;跟游戏逻辑打交道靠 Mono runtime 反射,attach 上线程就能直接读 C# 对象、调方法,答案透视这类客户端本地就有的数据读出来顺手。
我最上心的是框架不是功能。自动绘画、答案透视、分数伪造、绕改名冷却、网络层 DoS 这些能列很长,但对我都是“内容”,写一个多一个。核心是个极简插件框架:一个 IModule 接口、一个 ModuleRegistry,加个 REGISTER_MODULE 宏做静态自注册。加新东西就写一个自包含文件塞进 CMake 列表,别的都不碰,UI 面板按分类自动长出来,命令自动挂上远程接口。现在十八个模块这么堆起来,彼此不知道对方存在,改一个不崩另一个。
bridges/ 里的 RemoteBridge 在进程内起了个 HTTP 服务,听 127.0.0.1:9099,POST 个字符串就能控制。
curl -X POST http://127.0.0.1:9099 -d "STATUS"
curl -X POST http://127.0.0.1:9099 -d "ANSWER"
STATUS 回状态 JSON,ANSWER 吐当前答案,DRAW/DRAW_STOP 控自动绘画。最放飞的是 EVAL static <Class> <Method>,把 Mono 反射暴露成一条远程命令,运行时任意调静态方法,等于开了个后门。逆向调试省事,不用重编译注入,改行 curl 就试。服务只绑本地回环、没鉴权,纯本机调试用,别往外网暴露。
技术栈 C++17 + MSVC,DX11 Present hook 配 MinHook,ImGui 用 docking 分支,网络层走 Hazel/Photon 协议,经济系统涉及 PlayFab 的 CloudScript。坑在 Mono 这边:反射调用前一定先 attachThread 把线程挂到 Mono runtime,忘了就直接崩;本地缓存改动还得防服务器下发覆盖回去,所以做了缓存锁定。
纯粹是拿来研究 Unity/Mono 客户端、练手逆向和注入的玩具,只用于安全研究和学习。代码在这 https://github.com/dwgx/DrawGuessHelper。