--- title: 我开发的第一款软件 description: 我的编程经历,包括接触程序设计的早期经历和开发外挂的经历。作者分享了在精益论坛和洛克王国游戏中的一些有趣故事,以及如何利用一个特殊的BUG来缩短宠物升级时间。 keywords: - 编程经历 - 外挂开发 - 游戏BUG - 洛克王国 tags: - Blog/开源 - Personal/Blog authors: - 7Wate date: 2021-04-26 --- 无意间发现 CSDN 显示自己拥有九年码龄,就勾起了很深的记忆。那时刚开始接触程序设计的时候,经常接触到易语言、精益论坛、吾爱破解、看雪论坛等等。所以就一个一个登录查看有没有当年留下的痕迹…… ## 邮箱群发 ![帖子](https://static.7wate.com/img/2021/04/26/bc80fc0155623.png) 当时是在精益论坛接的一个 200 元的一个单子,然而写好以后又被放鸽子…… 最后就开源放了出来,找不到源码了,蛮简单的一个邮件群发助手,简单测试功能还可以用! ![软件界面](https://static.7wate.com/img/2021/04/26/02c3d68c519fc.png) ![邮件](https://static.7wate.com/img/2021/04/26/a2ce82365e54b.png) 附件功能应该是有 BUG 了,其他的正常使用;顺带附一下帖子地址和软件地址,满足一下各位好奇心。 帖子地址:[QQ群发利器_精易论坛 (125.la)](https://bbs.125.la/forum.php?mod=viewthread&tid=13658866&extra=) 软件地址:[QQ群发利器软件](https://static.7wate.com/public/QQ%E7%BE%A4%E5%8F%91%E5%88%A9%E5%99%A8.zip) ``` 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](https://static.7wate.com/img/2021/04/26/c64ae18f83dd8.png)