如前一篇文章所说,暴雪在1.10中加入packet 64/65检测。最早公布packet 64被用作hack检测的是jhj。当然Mousepad在jhj之前就已知道这一点,但是他当时正打算对maphack收费,反检测是一大卖点,因此一 直没有公布。在jhj公布了他的发现后,我检查了相关代码,又发现了packet 65也被用作hack检测。
如前文的分析,packet 64/65检测用的都是memory probe方法,那么memory probe该怎么对付呢?一种简单的想法是在客户端截获packet 64/65检测,不让它返回检测结果。截获packet 64/65检测思路是对的,但不返回检测结果其实也是一种信息,暴雪完全可能根据这点判断你在使用hacks,最不济也会把你踢下线,显然不是好的做法。 对付memory probe,更好的做法是伪造检测结果。这需要截获packet 64/65检测,然后根据要检测的内存地址返回该地址被修改前的数据(如果已经被修改了的话),这样无论检测哪个地址,检测结果都和没有使用hacks时 的一样。
具体到实现方法,大约又有三种。
一种是hack在安装旁路点时,先保存原先的数据,这样在遇到检测时就能知道patch前的数据。使用这种方法的有d2maphack、d2jsp等。这种方法最简单,实现起来也容易,占用额外内存也不大。缺点只能保护自己,不能保护其他hacks。
第二种方法由jhj实现,其原理是在加载任何hack之前,先对游戏中用到的重要的dll做备份,这样就获得了这些dll干净的副本。然后截获 packet 64/65检测入口,根据检测地址,从干净的副本中返回相应的数据。这就是jhj在 1.10时期发布的antidetecti