因为项目需要,我需要检测出变速类辅助工具正在对项目程序进行加速。从网上找了很多资料,有很多高手提出HOOK API等解决方案。本人小菜一枚,看得不太明白,经过一番尝试,找到了另外一个方式来实现目的。
首先,我看了一位高手对变速齿轮的分析,原文地址:http://tieba.baidu.com/p/3127683095
他说变速齿轮主要对GetTickCount() 和 timeGetTime() 进行了修改,于是我想到Sleep函数是直接与操作系统打交道的(具体的原理我不清楚,有高手看到还请指教),它应该不会受到影响,也就是说Sleep(1000),基本上也就是挂起线程1000ms。于是我得到一个启发,在时间校验线程里首先通过GetTickCount()得到一个时间start,然后Sleep(1000),接下来再次通过GetTickCount()得到一个时间end,这两个时间相减(end-start)应该就是Sleep(1000)中过去的时间,单位毫秒。如果相减的结果超过了1100毫秒(我主要考虑到一个容错值)那么就可以判定启用了变速齿轮,我这里主要是检测加速,所以这样就行了。减速也是一样的,非常的容易。