暴雪和黑客的战争二:暴雪的第一击

暴雪在WOW开发的后期,终于能够腾出人手来升级持续了2年之久的D2X 1.09d。由于1.09d时期hacks泛滥,暴雪觉得有必要打击一下这种嚣张的气焰,于是加入了hacks检测机制,这就是在1.10时期经常提起的packet 64/65检测。

何谓packet?packet即网络数据包,D2中服务器端和客户端之间的交互是通过互相发送packet进行的。D2中的packet又分为out-of-game(进入游戏前)packet和in-game(游戏内)packet两种,这里提到的都是in-game packet。in-game packet的第一个字节为packet ID,指示该packet的含义,接着的是相应的(可变长)参数。比如ID 01代表walk命令,长度为5字节,ID后面跟两个16位参数,指示walk的目的坐标,因此它的格式为:01 [WORD x] [WORD y]。需要注意的是D2中不同patch版本的packet ID含义是不一样的,不能通用。1.10中的一个比较完整的in-game packet列表可以在这里找到:http://www.edgeofnowhere.cc/viewtopic.php?t=303771

跟hacks检测有关的是packet 64和65。packet 64长度是9字节,格式为:64 [DWORD address 1] [DWORD address 2],后面的两个DWORD是服务器端想检测的两个内存地址;packet 65长度为1字节(没有参数),检查4个最有可能被patch的地址。packet 64/65的检查结果经过简单的混淆处理(增加sniffer抓包分析的难度)后发送回服务器端,如果被检测地址里的指令或数据被改过,检测结果自然就和原先的不符,因此暴雪就知道你在用hack。这种检测方法就是所谓的memory probe,即内存探测法。那暴雪怎么知道应该检测哪些地址呢?hack的detour patch(旁路点)是固定的,像maphack和d2jsp这种著名的公开发行的hack,暴雪当然会拿来研究因此也会知道它们patch了哪些地方。至于那些自己开发自娱自乐的,暴雪是没法知道的,因此相对安全点儿。但是如果你的patch点正好和maphack、d2jsp这些相同,那还是有可能不幸中标。

以下为packet 64检测中的相关代码片断,其中eax和ecx分别为两个待检测的内存地址,检测结果分别存入局部变量var_result1和var_result2中随后发送回服务器端:

.text:XXXXF362 $CHECK_RESULT1: ; CODE XREF: CheckDetectionResult+87j
.text:XXXXF362 cmp eax, esi ; not zero
.text:XXXXF364 jz short $CLEAR_RESULT1 ; Jump if Zero (ZF=1)
.text:XXXXF366 mov [ebp+arg1], esi
.text:XXXXF369 mov eax, [eax]
.text:XXXXF36B mov [ebp+var_result1], eax
.text:XXXXF36E mov [ebp+arg1], -1
.text:XXXXF375 jmp short $CHECK_RESULT2 ; Jump

.text:XXXXF39B $CHECK_RESULT2: ; CODE XREF: CheckDetectionResult+A5j
.text:XXXXF39B ; CheckDetectionResult+C4j
.text:XXXXF39B cmp ecx, esi ; Compare Two Operands
.text:XXXXF39D jz short $CLEAR_RESULT2 ; Jump if Zero (ZF=1)
.text:XXXXF39F mov [ebp+arg1], 1
.text:XXXXF3A6 mov ecx, [ecx]
.text:XXXXF3A8 mov [ebp+var_result2], ecx
.text:XXXXF3AB mov [ebp+arg1], -1
.text:XXXXF3B2 jmp short $SEND_DETECT_RESULT ; Jump

packet 65的检测代码和packet 64类似,除了它检测的是几个固定地址。

packet 64/65的memory probe机制,结合前一篇介绍过的已有的version-checking.dll和extrawork.dll,就构成了暴雪在Diablo II 1.10 patch中采用的hacks检测机制。

下图显示了d2jsp 1.2.0中使用的部分旁路点(d2jsp 1.2.0用于Diablo II 1.11b,但意思是一样的)。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值