无意间发现 CSDN 显示自己拥有九年码龄,就勾起了很深的记忆。那时刚开始接触程序设计的时候,经常接触到易语言、精益论坛、吾爱破解、看雪论坛等等。所以就一个一个登录查看有没有当年留下的痕迹……

邮箱群发

帖子

当时是在精益论坛接的一个 200 元的一个单子,然而写好以后又被放鸽子……

最后就开源放了出来,找不到源码了,蛮简单的一个邮件群发助手,简单测试功能还可以用!

软件界面

邮件

附件功能应该是有 BUG 了,其他的正常使用;顺带附一下帖子地址和软件地址,满足一下各位好奇心。

帖子地址:QQ群发利器_精易论坛 (125.la)

软件地址:QQ群发利器软件

Algorithm : SHA256
Hash      : 01E1E277B9BC173BA5E3A75E3D42E1AF18EA974AC91F42E8940AAE6FD1473452
Path      : C:\Users\ZZP\Downloads\Compressed\QQ群-发利器\QQ群发利器.zip

洛克王国

其实一开始我是做外挂出身的哈哈哈,其中洛克王国辅助外挂做的时间最长,简单记述分享一下当年巧遇 BUG 的事情,防止多年以后遗忘。

洛克王国是一款网页游戏,如果了解过相关的知识;就会知道这种游戏离不开数据包,所有游戏的操作都是基于数据包来完成的。当然所有类型的游戏互动都是基于数据包的,但是外挂不只有单一的数据包类型的外挂,在此仅简述数据包类型辅助外挂。

洛克王国简单来说就是一个宠物养成游戏,最枯燥的事情就是宠物升级需要不停的打怪。因此诞生了许多辅助外挂,当时最快的外挂辅助从 1 级到 100 级满级需要 2 小时 15 分钟左右;

因为洛克王国是一个偏向青少年的游戏,在其更新过防沉迷机制后,只有 4 个小时可以正常获取打怪经验。但是官方存在这样一个机制,就是在一个特定的场景:大剧院(就是在游戏内观看各种官方的电影等……),不会增加游戏时间。所以很多辅助外挂根据这个机制,衍生了很多延长获取经验时间的相关功能。

而我这当时发现这个 BUG,只需 12 分钟,对于当时游戏机制及其他辅助外挂是颠覆性的。

一个简单的打怪场景

如果在游戏内与场景怪物战斗升级,就会与服务器进行数据包通信。类似于 TCP 的三次握手、四次挥手。例如

  1. 客户端:我要与编号 0001 怪物战斗。
  2. 服务器:收到编号 0001 怪物战斗请求,当前地图场景编号是否 0001 的我需要确认一下?
  3. 客户端:我确定在编号 0001 怪物的地图场景,我要开始战斗了。
  4. 服务器:战斗开始校验……
  5. 客户端:我要用技能 A,干它。
  6. 服务器:技能 A 使用成功。
  7. 客户端:我要用技能 B,干它。
  8. 服务器:技能 B 使用成功。
  9. 服务器:怪物死亡……
  10. 服务器:宠物 A 获取 100 exp(经验)。

这是一个简单的战斗过程,实际校验以及数据包通信比较复杂繁琐。这时你可能想,我直接给服务器说怪物死亡,获取经验不完了。你想要的可能结果是这样的:

  1. 客户端:怪物死亡……
  2. 服务器:战斗异常(这玩意脑子抽风了?客户是上帝我还是委婉点。)

当时基本上 95% 的外挂辅助都是基于此原理开发的,通过不断重复的与服务器进行数据包通信,借此达到宠物升级的目的。

大剧院机制

不过后来大剧院的机制,很多外挂辅助便在进入战斗,确认战斗场景以后。更换场景进入大剧院,接着完成剩下的数据通信。简单来说就是在上述第 5 步之前,与服务器进行数据包沟通更换场景,然后继续战斗,以便达到节省正常游戏经验获取时间。因为并不影响游戏体验,所以官方是默许此机制存在的。

而且官方其实开发的也有外挂辅助,只是以民间的名义存在罢了。当时手动升级一个宠物需要一周左右,太影响游戏体验了,而且当时市面的游戏辅助并不影响 TX 挣钱,所以……

检测机制

当时作为外挂辅助开发者,我是不满足长达 2 个小时的时间,就一直在摸索官方的检测机制。因为数据包通信必须存在一定间隔,因为你不可能这样通信:

  1. 客户端:我要与编号 0001 怪物战斗。
  2. 客户端:我确定在编号 0001 怪物的地图场景,我要开始战斗了。
  3. 客户端:我要用技能 A,干它。
  4. 客户端:我要用技能 B,干它。
  5. 服务器:傻 X ……

所以当时每个数据包通信间隔最少需要 600ms(约为 0.6 秒),正是因为这个机制所以一只宠物需要 2 个小时才可以升到 100 级。

发现 BUG

当时反向思维搞了一波,就是如果数据包通信间隔过快,官方是如何检测我的违规操作,并进行封禁处理呢?

简单尝试一下,发现官方并不是检测到你状态异常,直接对你的用户状态进行封禁。而是很莫名其妙的,用这个机制进行封禁……

  1. 客户端:我要与编号 0001 怪物战斗。

100ms

  1. 服务器:收到编号 0001 怪物战斗请求,当前地图场景编号是否 0001 的我需要确认一下?
  2. 客户端:我确定在编号 0001 怪物的地图场景,我要开始战斗了。

100ms

  1. 封禁服务器:这 B 太快了,封禁。
  2. 封禁服务器:这 B 在那个地图?跟谁战斗?找到他封禁!
  3. 客户端:已被封禁

可能是因为每个功能具体分工不同,而且也不明白为什么要在游戏内找到这个角色再进行封禁……

基于这个机制,我是这样搞得哈哈 h

  1. 客户端:我要与编号 0001 怪物战斗。
  2. 服务器:收到编号 0001 怪物战斗请求,当前地图场景编号是否 0001 的我需要确认一下?
  3. 客户端:我确定在编号 0001 怪物的地图场景,我要开始战斗了。
  4. 服务器:战斗开始校验……
  5. 客户端:我要用技能 A,干它。
  6. 客户端:哎、我跑到这个地图了。

1ms

  1. 客户端:我要用技能 B,干它。
  2. 客户端:哎、我跑到这个地图了。

1ms

  1. 客户端:我要用技能 C,干它。
  2. 客户端:哎、我跑到这个地图了。

1ms

  1. 服务器:技能 A 使用成功。

  2. 服务器:技能 B 使用成功。

  3. 服务器:技能 C 使用成功。

  4. 服务器:怪物死亡……

  5. 服务器:宠物 A 获取 100 exp(经验)。

  6. 封禁服务器:这 B 太快了,封禁他

  7. 封禁服务器:这 B 在那个地图?跟谁战斗?找到他封禁!

  8. 地图服务器:在 001 地图(此时用户又更换了地图场景 002)

  9. 封禁服务器:找不到啊,赶紧告诉我位置!

  10. 地图服务器:在 002 地图(此时用户又更换了地图场景 003)

  11. 封禁服务器:找不到啊,赶紧告诉我位置!

  12. ……

简述如上,封禁服务器一直在屁股上追着你,而且永远追不到你!就这样每个数据包通信为 1ms,升级时间从两个小时缩短到 12 分钟。

后续

后续,我还没有发布这个版本,官方便停服维护了,进入战斗后 10 秒吧,禁止移动游戏场景……

我现在不开发外挂,Over!游戏外挂和逆向破解挺有成就感的,不过可不要贪杯哦哈哈!

接下来的日子,砥砺前行!

CSDN