突破NP屏蔽,实现按键模拟!


突破NP屏蔽,实现按键模拟!

nProtect GameGuard、XTRAP是两款比较著名的防作弊软件,在玩家使用外挂(无论任何游戏的外挂,就算不是当前游戏的外挂也不可以)的时候

会提示"检测到游戏被破解修改"并强行关闭游戏。

什么是nProtect?

nProtect是设计用于保护个人电脑终端不被病毒和黑客程序感染的新概念的基于网络的反黑客和反病毒的工具。他帮助确保所有输入个人电脑

终端的信息在网络上不落入黑客手中。在最终用户在执行电子贸易时,可以通过将nProtect配置在那些提供电子商务、进口贸易,电子贸易的

金融机构的网站上,来提高安全等级。

nProtect怎样工作?

nProtect是一种基于服务器端的解决方案并且当那些需要保护的任何网络应用被运行时而自动启动。nProtect被载入内存,所以最终用户不需

要安装任何应用程序,只要nProtect启动,就开始拒绝黑客工具和病毒的入侵!

nProtect如何工作?

用户登陆时nProtect自动启动。
浏览器确认和自动安装安全模块到用户的个人电脑。
扫描黑客工具和病毒
通知用户目前的安全状态
如果有黑客工具和病毒尝试删除  
在被入侵时端驻留内存来锁定黑客工具直到电脑或者nProtect关闭。

nProtect 的主要功能介绍:

实时侦测并封锁修改游戏之黑客程序。
实时侦测并封锁各类型系统病毒。
实时侦测并封锁加速程序。
实时侦测并封锁自动鼠标(连点)程序。
封锁不当外挂程序。
封锁各种意图远程控制玩家个人计算机的动作。
限制意图侧录键盘鼠标动作的恶性程序。
限制可疑间谍程序,加强安全性。

使用此软件的网络游戏有很多,比如:冒险岛、蒸汽幻想、惊天动地、神话等等。

这篇文章只讲如何突破NP对按键类的封锁。

NP对按键的封锁方式主要有3种:

1、封系统API函数,按键模拟类的API函数有KeyBoard_Event(键盘模拟)、Mouse_Event(鼠标模拟)、SetCursor(模拟鼠标移动)、SendInput()

、SendMessage(发送消息)PutMessage(发送消息)。这种封API函数的方法在NP早期被应用,主要手段是通过钩子函数修改API的CALL地址。但这

种手段很快被人破解,破解方法有2种,1种方法是移植这些API函数的代码(具体移植方法请见相关的专业资料)我曾用这方法,把整个

kernel32.dll系统库文件更名复制,然后调用该库的API,从而绕过NP;第2种方法是使用WINIO.SYS驱动,硬件模拟按键动作(此驱动只支持

8042端口,即只能模拟PS2键盘鼠标动作)。
2、鉴于上面原因,NP不再封系统API,而是封按键模拟相关的内核API。移植系统API来模拟按键就不能实现了,因为移植的系统API最终要调用

内核API。这样留给我们的工作只能是通过驱动硬件来模拟按键动作了。
3、网上流行的硬件模拟是通过对8042端口驱动来实现的,这种操作端口来实现硬件模拟的方法必须要在系统RING0层才能进行。所以,这类操

作都必须通过驱动或中断程序来实现。目前网络上流行的端口操作驱动程序有2种:WINIO.SYS及PortTalk.SYS,WINIO.SYS操作端口效率较高。

它们的主要缺陷是只能模拟PS2的键盘、鼠标,当键盘或鼠标是USB的,或者频繁模拟鼠标时就会出现卡死现象。但这类操作端口的模拟也没长

久,NP也把这类模拟给封了。封的办法很简单,这2个驱动特征太明显了:WINIO把端口操作从RING0层暴露给RING3层,这样的暴露给系统安全

带来隐患,所以有的杀毒软件会对WINIO进行查杀!NP封这种具有典型特征驱动程序易如反掌;PortTalk是用户级驱动程序,可以通过调用

DeviceIoControl函数来操作端口,但正因是用户级驱动,其发出IRP在下传时容易被NP截获屏蔽。这样NP给我们剩下的操作空间就不多了:
1、 改写或移植内核API,这种方法因系统及版本不同实现起来相当困难,极容易造成机器死机。
2、虚拟一个设备,通过该设备驱动程序来操作端 口,最好是将其设备虚拟成键盘和鼠标设备。这种方法可行,因为NP难以实现封设备驱动(封错了机器就死机了)。但这方法也有缺陷,驱动程序需要安装,安装弹出微软的认证签名窗口
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微软WindowsXP自出世以来就在中国市场中获得了广泛好评和客户的认同,它出色的兼容性和移动性也被业界所推崇。但是金无足赤、WindowsXP也照样存在着系统漏洞。如果我们对此不加强防范的话,网上黑客就会利用系统的漏洞让你无法上网,甚至对一些分区进行格式化操作,侵入你的计算机盗取……,这样造成的损失可是巨大的!怎样才能保证你的WindowsXP安全呢?比较好的办法就是下载Windows安全补丁,既然Microsofe公司时不时就会在网上提供一些免费的补丁,我们只要有时间就要去打打补丁。这样既可以增强兼容性,又可以堵上已发现的安全漏洞,何乐而不为!下面就让我们来看看究竟WindowsXP有哪些安全漏洞,如何堵住这些漏洞呢?   一、切换功能漏洞   WindowsXP快速用户切换功能存在漏洞,当你单击“开始”/注销/“切换用户”启动快速用户切换功能,在传统登陆方法下重试登录一个用户名时,系统会误认为有暴力猜解攻击,因而会锁定全部非管理员账号。   解决办法:单击控制面板/用户帐户/更改用户登录或注销的方式,取消“使用快速用户切换”,以便禁用用户快速切换功能。   二、不可靠的即插即用   UPnP亦称通用即插即用软件(全称UniversalPlugandPlay),微软这个软件是基于互联网协议的,它允许不同的设备如电脑、扫描仪、打印机联成网络,可以在彼此之间自动识别,并进行通信,这样用户不需要再挨个地为每个外设来配置计算机了,安坐家中可以开视频会议,打联网的视频游戏了,而且XP操作系统在发售时就已经激活了UPnP功能,给用户带来极大的方便。然而,事实上并没有完美的,UPnP也存在安全漏洞。黑客可以利用该软件上的漏洞控制同一网络上的电脑,或者发动_blank>dos攻击。当然更为严重的是,来自同一网络的其它用户甚至不需要知道该计算机的IP地址,就可以对其发对攻击。具体来讲,UPnP服务可以导致以下两个安全漏洞:   (1)缓冲溢出问题   UPNP协议存在安全漏洞问题,最早是由eEye数字安全公司发现并通知微软的。其中的UPnP存在缓冲区溢出问题,也是Windows中有史以来最严重的缓冲溢出漏洞,当处理NOTIFY命令中的Location字段时,如果IP地址、端口和文件名部分超长,就会发生缓冲区溢出,由此会造成服务器程序的一些进程,其内存空间的内容被覆盖。由于UPnP服务运行在系统的上下文,攻击者如果利用漏洞成功,可以完全控制主机。更为严重的是SSDP服务器程序同样也监听广播和多播接口,所以攻击者可以同时攻击多个机器而不需要知道单个主机的IP地址。   解决方法:由于WindowsXP打开了UPnP(通用即插即用)功能,因此所有WinXP用户都应该立即安装该补丁;而WinME的用户,只有在运行了UPnP的情况下才需要该补丁,因为WindowsME的UPnP功能在安装时是关闭的;至于Win98,由于其中并没有UPnP,只有当用户自己安装了UPnP的情况下,才需要使用该补丁。下载并安装补丁:   _blank>MicrosoftWindows98/98SE:_blankindex.shtml?72342371945218048SoftChannelwww.yesky.comhttp:>asp?ReleaseID=34991″>http://www.microsoft.com/Downloads/Release.asp?ReleaseID=34991   MicrosoftWindowsME:http://download.microsoft.com/download/winme/Update/22940/WinMe/EN-US/314757USAM.EXE   MicrosoftWindowsXP:http://www.microsoft.com/Downloads/Release.asp?ReleaseID=34951   (2)系统容易被欺骗   对运行了UPnP服务的系统实施攻击并非难事,只要向该系统的1900端口发送一个UDP包,其中“LOCATION”域的地址指向另一个系统的Chargen端口,就可能使系统进入一个无限的连接循环,这将会导致受影响系统CPU和内存占用率达100%,使远程XP系统完全不能使用而拒绝了服务,只有通过重启后系统才能恢复正常。另外,攻击者只要向某个拥有众多XP主机的网络发送一个伪造的UDP报文,也可能会导致目标网络上所有的XP主机通过所选择的URL,执行了一个攻击的选择。而且当UPNP的部分服务被当作UDP来执行的时候,他产生的所有这些攻击都是难以找到的。   解决办法:最明智的做法是完全关闭UPNP服务,因为大多数的人都不用他们。要记住:服务开得越少,你就越安全。单击XP的控制面板/管理工具/服务,双击“UniversalPlugandPlayDeviceHost”服务,在启动类型中选择“已禁用”关闭UPnP服务。
如果你想用NumPy实现类ChatGPT的AI,你需要先构建一个文本数据集,然后使用NumPy将其转换为数字序列。然后,你需要使用NumPy定义一个神经网络模型,该模型可以接受数字序列作为输入,并生成相应的文本输出。 以下是一个简单的示例代码,说明了如何使用NumPy实现一个基本的文本生成器模型: ```python import numpy as np # 定义数据集 text = "This is a sample text for our NumPy based AI model." chars = list(set(text)) char_to_idx = {ch:i for i,ch in enumerate(chars)} idx_to_char = {i:ch for i,ch in enumerate(chars)} text_len = len(text) vocab_size = len(chars) # 将文本转换为数字序列 text_as_int = np.array([char_to_idx[ch] for ch in text]) # 定义神经网络模型 hidden_size = 256 learning_rate = 0.1 Wxh = np.random.randn(hidden_size, vocab_size) * 0.01 Whh = np.random.randn(hidden_size, hidden_size) * 0.01 Why = np.random.randn(vocab_size, hidden_size) * 0.01 bh = np.zeros((hidden_size, 1)) by = np.zeros((vocab_size, 1)) # 定义softmax函数 def softmax(x): e_x = np.exp(x - np.max(x)) return e_x / e_x.sum(axis=0) # 定义前向传播函数 def forward_pass(inputs, hprev): xs, hs, ys, ps = {}, {}, {}, {} hs[-1] = np.copy(hprev) for t in range(len(inputs)): xs[t] = np.zeros((vocab_size,1)) xs[t][inputs[t]] = 1 hs[t] = np.tanh(np.dot(Wxh, xs[t]) + np.dot(Whh, hs[t-1]) + bh) ys[t] = np.dot(Why, hs[t]) + by ps[t] = softmax(ys[t]) return xs, hs, ys, ps, hs[len(inputs)-1] # 定义损失函数 def loss_func(ps, targets): loss = 0 for t in range(len(targets)): loss += -np.log(ps[t][targets[t],0]) return loss # 定义反向传播函数 def backward_pass(xs, hs, ys, ps, targets, hprev): dWxh, dWhh, dWhy = np.zeros_like(Wxh), np.zeros_like(Whh), np.zeros_like(Why) dbh, dby = np.zeros_like(bh), np.zeros_like(by) dhnext = np.zeros_like(hprev) for t in reversed(range(len(targets))): dy = np.copy(ps[t]) dy[targets[t]] -= 1 dWhy += np.dot(dy, hs[t].T) dby += dy dh = np.dot(Why.T, dy) + dhnext dhraw = (1 - hs[t]*hs[t]) * dh dbh += dhraw dWxh += np.dot(dhraw, xs[t].T) dWhh += np.dot(dhraw, hs[t-1].T) dhnext = np.dot(Whh.T, dhraw) for dparam in [dWxh, dWhh, dWhy, dbh, dby]: np.clip(dparam, -5, 5, out=dparam) return dWxh, dWhh, dWhy, dbh, dby, hs[len(targets)-1] # 定义训练函数 def train(text_as_int, char_to_idx, idx_to_char, vocab_size, hidden_size, learning_rate, num_epochs): Wxh = np.random.randn(hidden_size, vocab_size) * 0.01 Whh = np.random.randn(hidden_size, hidden_size) * 0.01 Why = np.random.randn(vocab_size, hidden_size) * 0.01 bh = np.zeros((hidden_size, 1)) by = np.zeros((vocab_size, 1)) hprev = np.zeros((hidden_size, 1)) for epoch in range(num_epochs): loss = 0 for i in range(0, text_len-1): inputs = text_as_int[i:i+1] targets = text_as_int[i+1:i+2] xs, hs, ys, ps, hprev = forward_pass(inputs, hprev) loss += loss_func(ps, targets) dWxh, dWhh, dWhy, dbh, dby, hprev = backward_pass(xs, hs, ys, ps, targets, hprev) Wxh -= learning_rate * dWxh Whh -= learning_rate * dWhh Why -= learning_rate * dWhy bh -= learning_rate * dbh by -= learning_rate * dby if epoch % 10 == 0: sample_ix = sample(hprev, inputs, 200) txt = ''.join(idx_to_char[ix] for ix in sample_ix) print('----\n %s \n----' % (txt, )) print('Epoch: ', epoch, ' Loss: ', loss) # 定义采样函数 def sample(h, seed_ix, n): x = np.zeros((vocab_size, 1)) x[seed_ix] = 1 ixes = [] for t in range(n): h = np.tanh(np.dot(Wxh, x) + np.dot(Whh, h) + bh) y = np.dot(Why, h) + by p = softmax(y) ix = np.random.choice(range(vocab_size), p=p.ravel()) x = np.zeros((vocab_size, 1)) x[ix] = 1 ixes.append(ix) return ixes # 训练模型 train(text_as_int, char_to_idx, idx_to_char, vocab_size, hidden_size, learning_rate, num_epochs=100) ``` 这是一个简单的模型,仅用于演示如何使用NumPy实现类ChatGPT的AI。如果你想要更复杂的模型,你需要深入学习NumPy和神经网络的相关知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值