# 我开发的第一款软件
我的编程经历，包括接触程序设计的早期经历和开发外挂的经历。作者分享了在精益论坛和洛克王国游戏中的一些有趣故事，以及如何利用一个特殊的BUG来缩短宠物升级时间。.

2021年4月26日11分钟阅读

- Blog/开源
- Personal/Blog

无意间发现 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！游戏外挂和逆向破解挺有成就感的，不过可不要贪杯哦哈哈！

接下来的日子，砥砺前行！