如何利用hook拦截系统进程消息某游戏的键盘消息

<专注网络游戏工作室赚钱项目攻略!
当前位置: &#62;&#62;
&#62;&#62; 正文
日 18:35:19&&分类: 游戏工作室建立
最近腾讯大封号,并且严打,不少作者都跑路了,这个行业还真是难做!今天闲来无事,跟朋友们聊聊网络游戏防封号的事儿。也是做游戏工作室的最想解决的一个大问题。有那么一句话叫作“如果能不封号,任何游戏都赚钱,呵呵”万事无绝对,没有百分百的防封技术,但也没有不存在游戏工作室的网游,只是从一个程序员的角度闲聊一下防封方法,不鼓勿喷!一,服务器数据库上记录些什么1,帐号信息: 充值记录,元宝消费,登陆时间,ip地址,mac码等。2,角色信息: 物品获得记录,金钱,宠物交易记录等。所以有很多时候被,并不是发现了你用了脚本或外挂,而是官方在后台数据库搜索匹配条件找到而已。二,游戏检测外挂方法1,服务器上有些游戏会对数据包进行严格检查,有些不会。不过服务器上的对数据包的检验都很严格,数据的真实性都是以服务器上为准。对于不加密的数据包,即使你发现了,也别高兴太早,如果游戏真的火了,把加密弄上也就一周左右的工作时间,而且更换加密方式也很快,现在封包挂不是个出路了。2,客户端上主要检测力度很多公司都不一样,像TX,网易这些公司就很严格,很多小公司干脆是祼奔,其实只要游戏赚钱了,检测外挂肯定会多少加上点。说下我所知道检测方法:(1)对关键api Hook进行保护,网络相关send recv,(2)dll注入检测可能是hook loadlibrary,也可能是定时检测进程模块(找到非法模块就退出)(3)对于用od进行调试客户端,似乎都没有彻底的办法,一般就是加些花指令,加壳做些干扰,不过这也足以挡住大部分水平不够的作者(4)很多游戏都会对PE,OD,按键精灵,简单游等进行检测,主要是枚举窗口名字,进程名字。(5)按键类外挂检测,对于后台脚本主要是用GetCursor,GetForegroundWindow,检测窗口位置和鼠标位置是否正确,还有些是对WM_ACTIVE消息进行处理(神武就是这么干),对于前台脚本除了把鼠标弄偏移外,也就没有什么更好的办法了,不过这个偏移对普通玩家也很不友好,也影响游戏公司留存玩家。(6)对于有些人说检测鼠标点击位置的重复度,这个多半是他们自己的猜想,这样做很容易造成误封。三,现在个人觉得目前最好的辅助方式是,图像识别加鼠标移动和点击call结合起来,或者hook GetCursor,GetForegroundWindow等后台相关api,图像识别,任何游戏都不可能检测得到,而且现在的图像识别方式也已经很成熟,可以做到识别人脸程度。&&&& 四,外挂脚本开发语言:简单的功能,可以用按键TC,易语言,个人不看好按键,语法扩展性差,也容易被针对。推荐c++和python或者lua脚本语言结合起来,c++实现具体功能,注入,远程call,后台,前台消息发送,按键模拟等。脚本层语言负责写具体的逻辑就可以。基本上我所了解的游戏检测方法与防封号策略也就这些了,大神们见笑了。说的对也好,错也罢,请批评教育,不接受侮辱谩骂。
此文&&原创,转载请注明地址:
标签:&&&&&&&&
昵称(必填)
记住我,下次回复时不用重新输入个人信息
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
Post: 10:23:34
狗逼一条,天朝就是有这种垃圾网游界才这么烂
Post: 11:26:47
防封主要两个方面 一《服务器数据特征》也是你的行为数据产生的特征二 《客户端检测》 就是他的客户端 对于汇编大牛 二 是非常容易搞定 一个游戏汇编大牛 几个月就把他的客户端给逆向了 什么取MAC 硬盘信息 操作系统 找到他调用API的地方直接给他NOP掉或者让他取到假的信息就行了
第一个是关键
Post: 16:20:43
你是个懂行的。。。。
Post: 16:22:57
其实我有一套完全防封的理论和方案,但只可惜我不会写软件,如果有程序员(要求起码有过写call外挂的经验)和我合作,我一定能让他赚到钱
Post: 17:14:56
给个游戏防封的成功案例出来分析下
Post: 17:14:06
能不能自己开发一个挂
Post: 21:52:38
阅。完全同意
Post: 20:35:45
图像识别确实不容易封号,但是也不好用啊!
【相关文章】 20:16:28 9:34:36 17:37:25 17:44:11 12:9:7 12:27:22 17:13:2 17:5:31 18:6:58 10:35:19
站内搜索_游戏工作室项目
网游工作室_猜你喜欢
网游工作室_最热文章
备案号: 辽ICP备号-1
【NBE游戏工作室】我们一直被采集,但从未被超越!和NBE一起做吧。痛,并快乐着!!!Api hook函数,拦截鼠标键盘的消息。_按键精灵吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
Api hook函数,拦截鼠标键盘的消息。收藏
Api hook函数,拦截鼠标键盘的消息。比如用QQ = WaitKey()如果QQ=81 //按下Q键。后面按一大串键。条件判断结束。………………但它前面还是多输出一个Q键。有办法让热键Q不输出吗?方法还是人想出去的。………………方法就是使用系统系统自带api hook函数,拦截鼠标键盘的消息。
hook与消息有着非常密切的联系。它的中文含义是“钩子”,这样理解起来我们不难得出:“hook是消息处理中的一个环节,用于监控消息在系统中的传递,并在这些消息到达最终的消息处理过程前,处理某些特定的消息”。这也是hook分为不同种类的原因。hook的这个本领,使它能够将自身的代码“融入”被hook住的程序的进程中,成为目标进程的一个部分。………………api hook是什么?………我们可以通过api hook,改变一个系统api的原有功能。基本的方法就是通过hook,“接触”到需要修改的api函数入口点,改变它的地址指向新的自定义的函数。………api hook并不属于msdn上介绍的13类hook中的任何一种。所以说,api hook并不是什么特别不同的hook,它也需要通过基本的hook提高自己的权限,跨越不同进程间访问的限制,达到修改api函数地址的目的。
不明觉厉……
不过很可惜的是按键不能像C/C++那样传函数址,不能实现函数回调,这是一个缺陷。别说传址了,就连个最简单的引用传递ByRef都只是放那边做个样子的。。
回复 XYDDE :VB的类与物件,这个按键也不需要,因为它是用来做软件的。还有VB的什么Public Private ByVal ByRef之类的,不过按键其实都不需要这些。但是最可惜的还是缺少了结构体,ByRef和Addressof,结构体我已经找到解决办法了。而要写钩子就要用到Addressof取函数地址,所以按键想要写钩子是不可能的,只能通过C++写个DLL然后调用
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或如何利用HOOK拦截某游戏的键盘消息
我定义了一个全局HOOK钩子,本来想拦截某款游戏的键盘消息的,结果发现其它程序的键盘消息都能拦截,就这款游戏的键盘消息不能拦截。查询资料得知可能是它设置了局部钩子,优先级要高于系统钩子。请问是这样的吗?还有我该怎么解决这个问题呢?
用汇编直接调用BIOS中断呗
试试&&在游戏启动后&&用低级键盘钩子&WH_KEYBOARD_LL
结果发现其它程序的键盘消息都能拦截,就这款游戏的键盘消息不能拦截。查询资料得知可能是它设置了局部钩子
----------------------------------------------------------------------
不要用全局钩子,SetWindowsHookEx函数的最后一个参数设置为游戏的主线程ID
很多游戏为了提高键盘的反应。
使用的是&DirectInput。
你试试拦截&DirectInput。
引用&3&楼&lsq&的回复:结果发现其它程序的键盘消息都能拦截,就这款游戏的键盘消息不能拦截。查询资料得知可能是它设置了局部钩子
----------------------------------------------------------------------
不要用全局钩子,SetWindowsHookEx函数的最后一个参数设置为游戏的主线程ID
我用FindWindow找到了游戏主窗口,然后用GetWindowThreadProcessId得到了主线程ID,并且把SetWindowsHookEx最后一个参数设为了主线程ID。但是这样我在自己写的小程序上测试能成功,在这个游戏上还是不行。
引用&2&楼&zgl7903&的回复:试试&&在游戏启动后&&用低级键盘钩子&WH_KEYBOARD_LL还是不得行
引用&5&楼&sinat_&的回复:Quote: 引用&3&楼&lsq&的回复:
结果发现其它程序的键盘消息都能拦截,就这款游戏的键盘消息不能拦截。查询资料得知可能是它设置了局部钩子
----------------------------------------------------------------------
不要用全局钩子,SetWindowsHookEx函数的最后一个参数设置为游戏的主线程ID
我用FindWindow找到了游戏主窗口,然后用GetWindowThreadProcessId得到了主线程ID,并且把SetWindowsHookEx最后一个参数设为了主线程ID。但是这样我在自己写的小程序上测试能成功,在这个游戏上还是不行。
这个不行的话,貌似就HOOK不了了
引用&3&楼&lsq&的回复:结果发现其它程序的键盘消息都能拦截,就这款游戏的键盘消息不能拦截。查询资料得知可能是它设置了局部钩子
----------------------------------------------------------------------
不要用全局钩子,SetWindowsHookEx函数的最后一个参数设置为游戏的主线程ID
引用&5&楼&sinat_&的回复:我用FindWindow找到了游戏主窗口,然后用GetWindowThreadProcessId得到了主线程ID,并且把SetWindowsHookEx最后一个参数设为了主线程ID。但是这样我在自己写的小程序上测试能成功,在这个游戏上还是不行。
倒数第二参数要设置NULL
即使是一小步也想与你分享C++技巧:用HOOK禁用鼠标与键盘点击_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C++技巧:用HOOK禁用鼠标与键盘点击
上传于||暂无简介
你可能喜欢  在&#8220;&#8221;中,介绍了基本的Key Hook API函数
  在&#8220;&#8221;中,提到按键消息的修改是不能通过更改参数调用CallNextHookEx函数来实现的。
  本文就是要解决这个问题,如何来实现按键消息的修改。这里我们要引入一个函数
  Private Declare Sub keybd_event Lib "user32" (ByVal bvk As Byte, ByVal scan As Byte, ByVal dwflags As Integer, ByVal dwextrainfo As Integer)
  这个函数的目的是模拟按键消息,就像真的在点击键盘似的。
  keybd_event(Keys.Z, 0, 0, 0)  表示模拟按下Z键
  keybd_event(Keys.Z, 0, 2, 0)  表示模拟弹起Z键
  但是不管是真的点击键盘还是模拟按键消息。这个按键消息都会被我们的消息处理函数拦截到。我们该如何区分呢?
  先看看消息处理函数
  Private Function KeyboardHookProc(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Integer    Dim MyKeyboardHookStruct As KeyboardHookStruct = DirectCast(Marshal.PtrToStructure(lParam, GetType(KeyboardHookStruct)), KeyboardHookStruct)
    自己处理的一些代码,例如:记录、屏蔽、映射等
    Return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam)  End Function
  由于安装的是WH_KEYBOARD_LL钩子。按键消息的详细信息是在lParam指向的KeyboardHookStruct中。故在上面的函数中,第一句就是获得该结构的详细信息。我们来看看该结构在MSDN中的解释
  Public Structure KeyboardHookStruct    Dim vkCode As Integer    Dim ScanCode As Integer    Dim Flags As Integer    Dim Time As Integer    Dim DwExtraInfo As Integer  End Structure
  其中各个参数意义如下:
    VkCode:按键的虚拟键码。键盘上的每个按键对应一个虚拟键码
    ScanCode:硬件的扫描码
    Flags:按键消息的详细信息。是一些标识位的组合
    Time:时间。
    DwExtraInfo:扩展到按键消息的信息
  参数Flags是一个八位的二进制,各个位的标识信息如下:
    0位:扩展键的标识位。1表示该键是扩展键;0表示不是。
    1位~3位:保留位,一般是0。
    4位:标识消息的类型,1表示该消息是模拟的;0表示该消息是真实的
    5位:Alt键的标识位。1表示Alt是按下的;0表示Alt键没有被按下
    6位:保留位,一般是0
    7位:按键的状态标识位。1表示按键是弹起的,0表示按键是按下的
  从上面的文字可以看出,在Flags参数中的第四位是能区分消息的类别的。当我们点击键盘的时候,这位是0,是真实的按键消息;当我们用keybd_event函数模拟按键消息时,这位是1。
  这下思路有了。我们在消息处理函数中,将模拟按键消息一律放过,只处理真实的按键消息。就能实现按键消息的修改(映射)。我们以例子来说明,键盘消息的修改,按下A,反馈的是Z。参看下面的函数
  Private Function KeyboardHookProc(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Integer    Dim MyKeyboardHookStruct As KeyboardHookStruct = DirectCast(Marshal.PtrToStructure(lParam, GetType(KeyboardHookStruct)), KeyboardHookStruct)
    If (MyKeyboardHookStruct.Flags And 16) = 16 Then      Return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam)    End If
    If MyKeyboardHookStruct.vkCode=Keys.A Then
      Dim KeyStatue&As Integer=(MyKeyboardHookStruct.Flags And 128) / 64
      keybd_event(Keys.Z, 0, KeyStatue, 0)      Return 1    Else      Return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam)    End If  End Function
  函数的第一句是获得KeyboardHookStruct结构。后面一个判断是将模拟键盘消息放过。然后紧接着判断是否是A,若是A,则模拟键盘消息Z,并丢弃A这个消息;若不是,放过消息丢给后面的程序。这样一段代码就实现了对键盘消息的修改(映射),将A改成Z。当然,也能实现其他的键盘消息的映射。
阅读(...) 评论()}

我要回帖

更多关于 拦截键盘消息 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信