CS1.6-opengl简单透视分析

好奇,想看一下老游戏CS1.6是怎么做透视的(虽然已经过时),下载了个CS1.6游戏以及一个透视作弊器,透视作弊器名为CS2008.exe,以及一个动态链接库fxin.dll。

分析CS2008.exe

CS1.6-1

Hook了glBegin函数,如果追求速度的话,可以直接运行作弊器,然后attach上程序,glBegin函数下断,即可找到关键代码,这里我想先静态分析一下程序流程,看一看HookApiA里面具体是怎么操作的。

打开fxin.dll

CS1.6-2

关键的函数之一sub_600027A0实现堆上一些关键数据的排列,程序申请了一个堆,把CS2008.exe中的final_execute函数(实现透视函数)放在了堆末,从偏移554以后开始。从堆的42-554之间放的是动态链接库sub_600027A0处的函数,实现的是真正跳转到final_execute函数的代码,以及unhook等操作。堆的1-42字节存储一些关键数据,比如glBegin地址处原5字节等。

在sub_60004120函数中遍历进程,寻找目标,然后使用sub_60002B60的函数实现修改glBegin开头的5个字节。

当程序调用glBegin函数时,会跳转到sub_600027A0函数,执行final_execute函数。使用od看一看程序的流程是否如此。下断glBegin:

CS1.6-3

ctrl+f9返回调用glBegin的地方,应当是unhook以后,正常执行glBegin的位置,也就是sub_600027A0函数。

CS1.6-4

在final_execute函数中,实现透视功能靠的是glDisable函数

CS1.6-5

功能分析完以后,去网上查了查opengl透视,果然很早的时候就有文章分析了,CS1.6作为一款”过去式”的FPS游戏,是我接触的第一款FPS游戏,它的作弊方式在如今的FPS游戏中早已过时,不过,依然是我童年时候的美好回忆啊!