想不通了,那些游戏是怎么判定按键精灵的

许文君 2010-01-31 12:47:49
前几天玩了个游戏,因为懒,写了个类似按键精灵的东西挂机,无非就是用个定时器发送keybd_event,人离开之。
回归,杯具的发现被判定用按键精灵。。。。。。。
我在想,它是怎么判定按键精灵的呢?这么说来人工键盘不是发送keybd_event?或者是根据按键的间隔判定?(这个似乎不太可能).求真相。
...全文
3500 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yqw14908 2012-05-01
  • 打赏
  • 举报
回复
系统分为三层ring0-2,ring0就是最底层,就是硬件层了,每层都不能直接访问,
rollrock1987 2010-01-31
  • 打赏
  • 举报
回复
你玩游戏的时候可以达到100%的正确吗??
rendao0563 2010-01-31
  • 打赏
  • 举报
回复
不知道你说的是哪家的?腾讯有个是从驱动层记录。比如你有消息过去。他判断这个消息是否经过了驱动层。模拟的一般不走驱动层。直接走的应用层。
hlpdgt 2010-01-31
  • 打赏
  • 举报
回复
搭车问一个,是否有办法发出一个最底层的Key消息呢?
用户 昵称 2010-01-31
  • 打赏
  • 举报
回复
如此说来最终的解决方法要找我等做机械的了?
liyoubaidu 2010-01-31
  • 打赏
  • 举报
回复
我一下,你是xp系统吧。
  • 打赏
  • 举报
回复
什么游戏啊 有些游戏是通过枚举窗体 获取窗体信息做的简单处理 出现列表中的关键字就发出警告 不是所有游戏防外挂都那么牛的 要不靠外挂吃饭的兄弟们怎么谋生啊
小麻侬 2010-01-31
  • 打赏
  • 举报
回复
Up, 真正的按键和API实现的按键的消息机制应该不一样
bilaopao 2010-01-31
  • 打赏
  • 举报
回复
通过keybd_event 来模拟按键肯定不一样了。

如果想防止屏蔽可以使用驱动级别的模拟按键。

就是call KeyboardClassServiceCallback
MoXiaoRab 2010-01-31
  • 打赏
  • 举报
回复
人家看下键是不是真的按下去了,就知道是虚假模拟按键了
许文君 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ahao 的回复:]
那把定时器加些随机抖动试试

他也可能是hook了keybd_event
[/Quote]
我用的随机数做时间种子
抽空看下是不是HOOK
许文君 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhouzhipen 的回复:]
引用 4 楼 xuddk727 的回复:
意即通过API实现挂机总能被分辨啦?


这要看你具体针对哪些游戏,如果游戏是响应系统的消息,可以加入随机性,如果是hook了keybd_event,你可以清除hook,反正办法多着.

不过有一种方法可以针对大多数游戏.自己写键盘驱动,把系统的驱动换成你的.
[/Quote]

这个。。。。。为了个游戏。。。。
zhouzhipen 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xuddk727 的回复:]
意即通过API实现挂机总能被分辨啦?
[/Quote]

这要看你具体针对哪些游戏,如果游戏是响应系统的消息,可以加入随机性,如果是hook了keybd_event,你可以清除hook,反正办法多着.

不过有一种方法可以针对大多数游戏.自己写键盘驱动,把系统的驱动换成你的.
ahao 2010-01-31
  • 打赏
  • 举报
回复
那把定时器加些随机抖动试试

他也可能是hook了keybd_event
gjhave 2010-01-31
  • 打赏
  • 举报
回复
按键精灵,即是你每个周期重复同一个动作,这些都很好判断啊,如果你的解色很长一断时间内完全同时续的重复一系列动作,就可以断定你是按键精灵,因为人为操作不可能周期性这么强
许文君 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhouzhipen 的回复:]
当然不一样了,真正的键盘是在硬件底层产生中断,然后通过驱动通知系统,然后由系统产生消息,最后消息才到达应用程序,而keybd_event只是只模拟一个键盘消息,发给程序.

有些游戏可能会直接接管驱动,比如游戏中使用DDINPUT的独占设备模式,这时游戏会直接接管驱动,你的keybd_event则会完全失效,
但有些游戏是直接响应系统的消息,keybd_event虽然会起作用,但仍然可以通过一些方法分辩出来.
[/Quote]
意即通过API实现挂机总能被分辨啦?
许文君 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rollrock1987 的回复:]
你玩游戏的时候可以达到100%的正确吗?? 
[/Quote]
100%正确率?什么意思?
zhouzhipen 2010-01-31
  • 打赏
  • 举报
回复
当然不一样了,真正的键盘是在硬件底层产生中断,然后通过驱动通知系统,然后由系统产生消息,最后消息才到达应用程序,而keybd_event只是只模拟一个键盘消息,发给程序.

有些游戏可能会直接接管驱动,比如游戏中使用DDINPUT的独占设备模式,这时游戏会直接接管驱动,你的keybd_event则会完全失效,
但有些游戏是直接响应系统的消息,keybd_event虽然会起作用,但仍然可以通过一些方法分辩出来.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧