诸多工作室在项目测试功能稳定后,为了更高效率的榨干电脑性能,尽可能的多开会选择将画面黑屏,零渲染!!今天我们来拆解分析实现原理和方案。
大部分游戏画面渲染基本用的都是DX系列,除了DX9 现在很多游戏也用到了DX11,他们版本有差异,在逆向程序员眼里区别不大。
通过OD就可以查看游戏加载了哪些模块,很多游戏都有加载d3d9.dll或者d3d11.dll 这也说明了他们在正向开发过程中用到了 D3D进行了渲染。所以也就可以在这些模块里HOOK劫持修改他的渲染函数在他的最后一步直接给他渲染成纯黑从而实现黑屏优化的效果。
渲染过程可以大概分为
1)BeginScene开始渲染
2)EndScene结束渲染
3)Present显示后置缓冲的动画
重点是我们去HOOK Present这个函数
Present函数会最终等待所有绘制命令结束并将结果从back buffer拷贝到front buffer。渲染到游戏窗口
技术难度也不高 无非就是要定位到这个虚函数 然后HOOK一个新的函数替换他 并且在执行完Clear函数在执行原来的Present函数。
效果如下
转自:https://zhuanlan.zhihu.com/p/450723567