本来想写点儿别的东西。但是看来大家还是对外挂比较感兴趣<wbr></wbr>,就接着再写写吧。
1.10时期的成功,使得一些黑客不免自我得意,Mousepad甚至扬言<wbr></wbr>,暴雪应该请他来做hacks检测。
2005 年8月1号,暴雪正式发布1.11 patch,紧接着在9月13号又更新到1.11b,宣告了1.11时代的到来。从功能上来讲,1.11相对于1.10的改变,远远小于1.10相对于 1.09d的改变。最大的变化在于anti-hack机制,可以这么说,在某种程度上1.11是冲着黑客来的。暴雪下了不少功夫。比如游戏代码的编译器由原来的VC6<wbr></wbr>升级为VC 7.1(VS .NET 2003);很多原有的内部函数在新的编译器下都inline化<wbr></wbr>;全局优化的增强、寄存器更加有效的使用导致反汇编代码可读性变差<wbr></wbr>;大部分关键数据结构的内存布局进行了重新排列;还有所有游戏DL<wbr></wbr>L的导出函数的序号全部打乱重新编号,等等。不过这些改变对于技巧<wbr></wbr>纯熟的黑客来说算不了什么,我只花了一周的业余时间就把d2hackmap从1<wbr></wbr>.10移植到了1.11。最大的改变,无疑是引入了Warden System。
The Warden,据ZoiD(D2 zPickit的作者,WC3、Diablo II和WOW的游戏黑客)的说法,最初出现在WC3(魔兽争霸3<wbr></wbr>)中,后来引入到WOW,最后在1.11 patch中引入D2。这种说法应该是可信的,我在研究1.11的一段跟Warden有关的汇编代码时,赫然看到过Maiev.mod的字样(见文末)。Maiev Shadowsong正是魔兽争霸3中的英雄之一-The Warden(典狱官)。值得指出的是,D2中的Warden机制和WOW的非常相似,因此这里对warden的分析也同样适用于WOW。
1.11中的hacks检测机制,除了1.10时期就有的version-checking.dll/extrawork.dll和memory probe (packet 8F),还增加了Warden system。Warden的基本原理是在进入游戏后服务器端会发送一个warden检测模块(通过packet AE,warden检测模块类似于DLL)给客户端,随后warden检测模块在客户端运行,监控客户端状态并定期(大约每隔不到一分钟)返回检测结果。原理有点类似version-checking/extrawork机制,不同的是warden检测模块设计的非常紧凑且传输时经过压缩处理,这样有效地减轻了网络传输负担,而且在客户端经过简单处理就可运行,不需先存到本地。另外,warden client和server端的传输都是加密的。
Warden的出现,对黑客造成了极大的麻烦:阻止warden运行会被踢下线;伪造检测结果只对某个具体检测模块有效,由于warden可能随时变化,也很困难。比较有效的策略是隐藏起来不让warden检测到。早期的Ward<wbr></wbr>en模块简单,对付起来很容易,但是由于Warden检测模块具有很强的动态更新能力,黑客们颇为忌惮,使得1.11时期的hacks进一步减少。比如d2hackit、zPickit不再更新,D2JSP到目前为止只出了一个没有防检测功能的试用版(Trial Version)。这一时期比较有名的公开发布的hacks只剩下几个:具有不错的反检测功能的d2maphack;有一定反检测功能的EasyMap/EasyPlay;有不错反检测功能的d2hackmap安全开地图版和没有反检测功能的完全版;以及没有反检测功能的C3PO。
到目前为止<wbr></wbr>,在我的印象中,暴雪针对使用hacks的玩家至少进行了4次比较大规模的BAN CD KEY和封帐号活动,其中使用EasyMap/EasyPlay的玩家损失最为惨重。最近一次(2006年7月22日),暴雪BAN了30000+个CD KEY和35000+帐号,涉及以上提到所有hacks(d2hackmap安全开地图版从技术上分析应该不受影响,但是也有一些用户报告被BAN)。EasyMap/EasyPlay的作者netter更是收到暴雪的律师函,目前已经宣称不再开发。最著名的老牌hack d2maphack,为了对付warden经过了长达超过半年的全部代码重写,在进行beta 4测试时不幸中招,作者MousePad随即宣称无限期搁置d2maphack的开发(虽然他本人认为其beta 5版本可以避过这次检测)。Diablo II中的hacks开发陷入全面停顿,这是Diablo II发布以来从来没有过的。目前为止,在这场战争中暴雪取得了暂时的胜利,但这并不表明Warden是不可战胜的。
到底Warden具体是怎么工作的呢?黑客们还有没有机会呢?且看下篇文章。
附D2 1.11b中出现Maiev.mod字串的汇编代码:
.text:XXXX9CA1 mov [esp+130h+var_11C], 5Fh
.text:XXXX9CA6 mov [esp+130h+var_11B], 7Bh
.text:XXXX9CAB mov [esp+130h+var_11A], 53h
.text:XXXX9CB0 mov [esp+130h+var_119], 0E7h
.text:XXXX9CB5 mov [esp+130h+var_118], 0F2h
.text:XXXX9CBA mov [esp+130h+var_117], 5Ah
.text:XXXX9CBF mov [esp+130h+var_116], 0BFh
.text:XXXX9CC4 mov [esp+130h+var_115], 75h
.text:XXXX9CC9 mov [esp+130h+var_114], 8Ch
.text:XXXX9CCE mov [esp+130h+var_113], 0
.text:XXXX9CD3 xor ecx, ecx
.text:XXXX9CD5 loc_XXXX9CD5:
.text:XXXX9CD5 mov al, [esp+ecx+130h+var_11C]
.text:XXXX9CD9 mov dl, 0D3h
.text:XXXX9CDB imul dl
.text:XXXX9CDD mov [esp+ecx+130h+var_11C], al
.text:XXXX9CE1 inc ecx
.text:XXXX9CE2 cmp ecx, 0Ah
.text:XXXX9CE5 jb short loc_XXXX9CD5
转换成C语言为: