FPS游戏可以说一直都比较热门,典型的代表有反恐精英,穿越火线,绝地求生等,基本上只要是FPS游戏都会有透视挂的存在,而透视挂还分为很多种类型,常见的有D3D透视,方框透视,还有一些比较高端的显卡透视,本教程将学习D3D透视的实现原理,并通过DLL注入的方式实现透视。
Direct3D 透视是一种主流的透视方式,因为现如今大部分游戏都会使用Dx9图形接口,那么我们该如何实现D3D透视?
在D3D中普遍会使用深度缓存区(Depth Buffer)来进行消隐处理,通过使用Z轴深度缓存即可实现将人物实体被遮挡的部分不被显示出来,而我们的目的就是要让它强制显示出来,D3D的核心功能主要集成在COM组件中,只要Hook其中EndScence(), DrawPrimitive(),DrawIndexedPrimitive()函数就可以感知绘图操作,然后通过调用SetRenderState()渲染函数,改变其中的渲染参数即可实现不同的透视效果.
如上概述可知:我们需要找到 DrawIndexedPrimitive 这个渲染函数并 hook 这个函数即可实现透视,但需要注意,该函数与普通的API函数不一样,由于DirectX的功能都是以COM组件的形式提供的类函数,所以普通的Hook无法搞它,我这里直接找到了函数地址直接hook,或者你也可以使用Detour库,利用Detour也可以HOOK COM对象里的函数。
未完待续。。。。。
来源:博客园
作者:lyshark
链接:https://www.cnblogs.com/LyShark/p/11670487.html