生成可防WPE的高强度封包加密密钥

《研究rAthena自带的封包加密机制》一文中,我们已经讲过如何启用rAthena最新支持的封包加密机制,但大家可能会发现好像防止不了WPE等封包重发器。这是因为我们的封包加密密钥的取值是有学问的,如果密钥取值不对,那么整个封包加密机制在应对WPE的时候,就如同虚设。

准备工具

在我们开始之前,我们需要准备一个工具,整个工具用来生成高强度封包加密密钥。也可以测试一组你自己提供的密钥看其是否能否防住WPE封包重发器,这个工具叫“高强度封包密钥生成器”,请先下载下来并运行它,可以看到如下界面。

生成强力密钥

直接点击“生成强力密钥”按钮,可以看到界面如下图所示,生成三个密钥出来,复制他们然后填写到packet_db.txt里面对应的packet_keys字段中。

我这里生成到的随机密钥是:0x2e9ad87c,0x2006ee31,0x37c1b121 我将它放在了我需要用到的2013-08-07客户端封包的packet_keys字段中,如下图所示:

然后按照《研究rAthena自带的封包加密机制》一文中提到的方法,将这三个密钥也在DIFF的时候写入到游戏客户端中,如下图所示:

完成后可以生成客户端程序,并替换到游戏安装目录下,启动游戏,测试一下是否可以正常进入游戏。

特殊情况,第二个密钥和第三个密钥一致

上面讲到的是一般情况,客户端需要的是三个不同的密钥。但是也有一些特殊情况,比如2013-12-23的客户端,它的第二个和第三个密钥就是一致的,而且在NEMO中如果你企图去修改第二个密钥,会得到以下提示信息:

如果碰到这种情况的话,在生成密钥时一定要勾选“生成第二和第三个密钥一致的强力密钥”选项,否则生成出来的密钥并不能防止WPE封包重发器。

进行暴力测算

当你生成了一组高强度密钥后,或者是你自己手里有三个密钥想要验证其强度是否足够高到可以防住WPE的话,你可以将这三组密钥放到软件下方的输入框中(可以带0x开头,也可以不带),然后点击“进行暴力测算”,如下图所示:

比如我们刚刚生成的这组密钥,可以点击按钮进行测算,结果如下图所示,是可以防住WPE的:

但是如果你拿着2013-08-07自带的那组密钥:0x7E241DE0,0x5E805580,0x3D807D80来测试的话,结果是,防不住WPE的……

原理说明

由于篇幅原因,我这里就不详细的说明了,感兴趣的同学可以看源代码,并跟踪一下为什么会出现这样的情况……简单的理解就是:

错误的密钥组合会很快的就得出一个固定的密码,比如上图左侧窗口的“Key:13258”一样,后面加密多少次封包用的都是这个固定密码,那么实际上发送的封包就不会有变化。封包重发器抓到第一次是被13258加密的封包,重发多少次服务端也认13258这个密码,所以就防不住WPE了。

而合理的密钥组合,每次都会得到一个和上一个不同的密码(暴力测算结果窗口中的Key每次都会变),这样就算封包重发器抓到了第一个封包,当他企图重发的时候,服务端已经认为封包应该变成另外的样子了,而WPE还重复发送用上一个密码加密的封包,那么他就会掉线,这样也就妥妥的防住了WPE等封包重发器了。