一丶透视简介
我们涉及到FPS游戏.免不了说透视.自瞄什么的. 在CS1.6中. 有OpenGl.也有D3D.
透视的方法很多. gl透视(也就是CS中可以实现的透视) D3D透视. HOOKD3d的绘图函数.设置渲染状态就可以实现透视. 方框透视.
根据敌人坐标以及我们的坐标. 使用三角函数(sin cos tan) 以及转换屏幕比例算法. 求出的透视. 这种透视是通用的. 因为是算法计算出来了.依赖的就是游戏中的敌人跟我们的坐标.
二丶透视原理
Gl透视. 所讲的这个透视是说CS中的透视.
首先知道两个函数 openGL32.DLL 中的 glBegin(渲染ID) glDisable(ID) 关闭渲染.
其实在CS中实现透视很简单.
1.HOOK glBegin函数. 过滤ID. 看看那个是人物ID.
2.HOOK之后.判断是否是人物ID.如果是.则关闭渲染.
3.跳转回去.继续执行.
根据这个方法.也可以知道闪光弹绘制的时候的ID.我们也可以判断.这样也就实现了无视闪光了.
三丶HOOK代码.
1.寻找Opengl32.dll. 从导出表中查看glBegin的偏移. 以及glDisable的偏移.
2.申请一块内存空间.
3.内存空间中写入我们的ShellCode. 也就是我们的HOOK代码.
4.重定位到glBegin函数位置. 进行HOOK. 跳转到我们ShellCode执行位置.
关于HOOK以及HOOK重定位函数不多说了. 做逆向的话这些必须需要会.
1.HOOK glBegin位置.跳转到我们申请的空间. 当然.这里需要重定位. 目的地址 - 源地址 - 5
2.执行我们的ShellCode
上图汇编代码的意思是 比较esp 4 也就是参数值是否是人物ID. (cs中 5 6 )都可以
如果不想等.则恢复以前的HOOK地址位置值.并且跳转回去.
如果相等. 调用glDisable函数.参数的值是 0xB71
这样就可以完成一个HOOK.
当然写HOOK代码注意的问题很多. 比如Call glDisable的时候.你需要重定位glDisable.并且写入到里面.
JMP回来的时候.也需要重定位.