杂谈:
蛮难的。前前后后差不多经过了一个月的时间,这是一个比较大的项目,读懂项目的代码并不容易。但这也是从0到1的过程,我对游戏hack的实现有了新的理解,以后会继续学习。
学习笔记:
IDXGISwapChain
类(交换链类) 是 DirectX Graphics Infrastructure (DXGI) 中的一个核心接口,用于管理显示表面的交换链(swap chain),这是实现双缓冲或三缓冲渲染的关键组件。IDXGISwapChain
中Present函数主要负责最终渲染。- 相同的类维护着同一张虚表,不同进程间
IDXGISwapChain
类的虚表地址可能不一样,但是内容是一样 - 因为最终会把这个DLL注入到游戏进程中,所以后续执行的所有代码都在游戏的进程空间中运行。先手动创建一个“假”的 IDXGISwapChain 实例,内存会给这个实例化的类开辟连续的内存空间,在这个实例化的IDXGISwapChain类的内存空间的前8字节找到了类的虚表指针,因为同一个进程所有实例化的IDXGISwapChain类的虚表指针指向同一个地址,游戏也会自己实例化一个IDXGISwapChain类用来渲染画面。至此我就变相的找到了虚表,然后再在虚表的第九个位置找到Present函数的地址。
- 难泵,写了老半天发现有个公开的kiero库写好了上述步骤。
- #if、#elif、#else 和 #endif 预编译指令。
个人学习流程图:
查阅的网站和视频等链接:
- C++语言面试中,如何深入理解虚函数和多态?
- MinHook – 精简的 x86/x64 API 钩取库
- vcpkg 文档 | Microsoft Learn
- ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies
- TsudaKageyu/minhook: The Minimalistic x86/x64 API Hooking Library for Windows
- djkaty/Il2CppInspector: Powerful automated tool for reverse engineering Unity IL2CPP binaries
- jadis0x/Il2CppInspectorPro: Continuation of Il2CppInspector – A powerful automated tool for reverse engineering Unity IL2CPP binaries.