黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客文章 >> 黑客入门 >> 电脑新手 >> 文章正文
[图文]nProtect技术详细介绍及破解
        ★★★★★
nProtect技术详细介绍及破解
文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2007-1-15

nProtect的保护原理如下

nProtect GameGuard在启动后使用SetWindowsHookEx(Inject DLL)方式进入所有的进程,并且在
OpenProcess()
ReadProcessMemory()
WriteProcessMemory()
PostMessage()
......等等
函数的头部加入JMP XXXXXX的代码跳入监测程序进行监测,如发现对游戏进行操作便拦截该操作。所以以上函数均无法正常工作。于是我们便针对它的原理来考虑对付的办法

方法一:

运行时将要使用的动态连接库(如:user32.dll kernel32.dll等)复制后改名,使用LoadLibrary和GetProcAddress载入函数。

要使用LoadLibrary和GetProcAddress载入函数,你需要有Visual Studio .NET,或者其中的Visual Basic和Visual C++,当然,你还要会使用他们,而且你还要知道nProtect GameGuard运行时到底调用了哪些动态连接库(这时候大家就八仙过海各显神通吧,想尽一切办法,如果你搞错了的话。。。。。后果自己负责咯。。。。。。。。。)


方法二:

既然硬的不行。。我们就来玩玩软的。嘿嘿

跳过nProtect

首先要清楚,nProtect通过连接其更新服务器获得当前最新文件内容,然后与本地文件作比较,如发现服务器端的文件与本地的不一致,则从更新服务器重新下载文件更新本地的nProtect文件。如果nProtect更新成功,而新版nProtect又拦截外挂,那么理所当然地nProtect每更新一次外挂就失效一次了。

通过分析游戏客户端用于解析该游戏各程序与其对应远端连接的IP列表文件,找出nProtect更新服务器的地址,并分析出nProtect官方更新服务器上的目录文件结构。
目录文件结构一般为: "更新服务器的名称//GameGuard"先自己构建一台模拟nProtect更新服务器,服务器上目录文件结构与官方的相同,更新下载文件内容使用旧版nProtect的内容(旧的客户端先别忙着删除。。。。。)
将真实nProtect更新服务器的地址,解析到你构建的模拟nProtect更新服务器的IP地址.
例: 127.0.0.1gg.muchina.com
写入到 system32//drivers//etc 的 host 文件中

这个 host 文件为系统TCP/IP协议配置IP解析服务, 没有后缀名,可用记事本或UE32打开编辑。
通常一个网游的顺利运行,是要连接服务器端多个IP的("nProtect服务","连接服务","数据服务","登陆服务","主服务"。。。。。。。)
而这一系列的服务都是由一个游戏主程序的启动运行来完成(如"命运"的"WYDLaucher.exe","奇"的"Main.exe",“冒险岛”的“MapleStory.exe”)由于host文件已被修改过,其中nProtect更新的连接IP被解析为指向自己模拟的更新服务器,而模拟服务器上的"更新文件"是旧版本的,所以nProtect不但不会被更新为新版,反而会版本倒退。并且往后都不会再更新。

另一个方法,则是直接修改游戏主程序代码内容,就是暴力修改了。
由于nProtect的功能是附在游戏主程序的开头独立执行的,所以,通过对游戏主程序进行破解处理后,将游戏主程序关于nProtect的执行部分的代码打上无效化标记,就很自然地跳过了nProtect了。

补充一下,构建模拟nProtect更新服务器可用本地机器完成(nProtect更新IP:127.0.0.1 有的安全软件会屏蔽掉此个本地自连接IP);用VM虚拟机完成(VM虚拟的多系统可各自设置不同IP);或者。。。。。另外组一台机器来做也可以。

下面附一个高手的破解nProtect的过程。给大家参考。

代码级破解

首先看导入函数,用到了IoAttachDeviceToDeviceStack,似乎走的还是设备栈的老路。于是祭出WinDbg查看KeyboardClass0/1的设备栈,居然没有异常,那八成就是挂键盘中断了,导入的函数HalGetInterruptVector就是用来干这个的。列出所有中断向量(WinDbg没有类似SoftICE的idt命令,不爽的很),一眼就发现n个80开头的地址中有个f7开头的,哈,就是它。

  再次重启系统,先列出原先的IDT,启动QQ后还原被修改的条目,然后尝试键盘记录,无效。再看IDT,又被改回去了!在这个中断向量的地址上设内存读写断点,只断到了读操作,却没有写操作。但明明就被改回去了啊。郁闷了一分钟之后,我开始看驱动的反汇编代码。从被断到的读操作开始跟踪,我发现读到的值被保存在全局变量里,而所有对这个变量的操作中,几乎都是赋值,只有一个cmp指令,比较保存的值和读取的值,如果不同就关中断,然后修改成QQ自己的中断服务地址(难怪断不到,关中断了嘛)。

  到这里问题就算解决了,把紧随cmp之后的jz改为jnz,中断向量再也不会被改回去啦,键盘记录(不管是哪种)当然也有效了,金锁还是老样子。所谓的“国际先进技术”原来只是从DOS时代就被大玩特玩的中断挂钩,钩住键盘中断后直接把ScanCode传给应用程序。如果QQ能绕过Windows的中断映射机制,控制PIC或APIC重新映射键盘中断,那还有点看头。

至此破解完毕。

下面说一说一字节补丁的位置:npkcrypt.sys驱动模块(文件版本2005.6.22.1,大小20,386字节)加载基址偏移0x14b3,从0x74(jz)改为0x75(jnz),当然键盘中断向量也要还原。还有一种改法更简单,直接在QQ的键盘中断服务入口添加跳转指令,跳回到原服务地址。注意,这些都只是内存补丁,文件补丁比较麻烦,QQ似乎会在加载驱动前先对文件做校验。

 补充: QQ密码输入框失去键盘焦点后,会还原中断向量。再次得到焦点时,又会修改IDT。这个修改不判断原中断向量,与前文说的jz指令无关。具体代码位置是基址偏移0x1e06(cli)至0x1e26(sti)这一段。用jmp指令跳过这段代码,IDT终于不会再被改了。实际破解时,还是在QQ的中断服务入口加jmp的办法简便易行。

上一页  [1] [2] 

文章录入:cainiaowang    责任编辑:sygbox 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    VIP 专 区
    抽根憋闷烟的心声
    学习网页制作的理由
    加入终身会员的理由!!!
    学习黑客编程的5大理由
    学习免杀的6大理由
    学习软件破解的理由
    会员账号开通查询
    常见问题解答
    汇款向导
    学员报名咨询
    最 新 热 门
    Vista+谷歌拼音输入法重现输入法04-06
    45种可以拿到Webshell的技巧04-02
    0起步接触黑客--实用价值相当高04-02
    普通文件的欺骗手法03-21
    黑客技术-ARP欺骗03-19
    跨站Script攻击和防范03-19
    超级兔子+WinRAR轻松破解收费加密03-16
    浏览器执行exe文件的探讨03-15
    菜鸟"搜"大量Web Shell的思路03-14
    轻松录制在线网络电视的方法03-14
    突破单位网管封杀QQ、MSN 端口的03-14
    菜鸟找漏洞—渗透网站的“反思”02-06
    相 关 文 章
  • 利用WINDOWS XP登陆来破解pubwin EP 5.

  • 黑客初级技术概述

  • 各种破解vista的方法

  • 无线局域网嗅探技术与防范策略

  • 安全无价 带你揭秘联通无线VPN组网技术

  • 黑客破解Email账号常用的三种方法

  • 另类破解鸽子连接密码

  • 快速破解丢失密码的笔记本电脑

  • 黑客技术-ARP欺骗

  • 超级兔子+WinRAR轻松破解收费加密软件

  • 破解超级保镖的密码

  • Flash文件的破解与加密方法

  • Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
    ICP备案:冀06009886