传奇私服漏洞扫描工具
去年冬天,传奇一个开传奇私服的私服扫描朋友半夜给我打电话,说服务器又被人刷了元宝。漏洞这已经是工具当月第三次。他怀疑是传奇某个老玩家干的,但查日志查了两天,私服扫描连入口在哪都没找到。漏洞我让他把服务端文件打包发过来,工具用自己写的传奇一套扫描脚本跑了一遍——十分钟后,在一个叫 传奇私服的私服扫描代码基础大多来自泄露的 M2Server 和 DBServer 引擎,这些老古董的漏洞代码质量参差不齐。很多版本在流传过程中被人为植入后门,有些是原作者留的“调试接口”,有些是二道贩子加的“远程管理功能”。我见过最离谱的一个版本, 手工查这些漏洞不现实。一个完整的服务端有几十个可执行文件,加上脚本和配置文件,代码量不小。我用的工具是自己用 Python 写的,核心就三块:静态特征扫描、网络行为探测、内存字符串提取。静态扫描负责找已知后门的硬编码特征,比如特定端口监听、可疑的 网络行为探测更有意思。很多漏洞不是靠读代码能发现的,得实际连上去试。比如 内存字符串提取是最后一道防线。有些后门不监听端口,也不响应网络请求,而是通过读取特定文件或者共享内存来触发。这种最难查。我的做法是在虚拟机里跑起服务端,用 工具本身不复杂,难的是规则库的维护和误报处理。传奇私服的引擎版本太多,同一个函数在不同版本里偏移量不一样,硬编码特征很容易失效。我现在的做法是尽量用行为特征代替字节特征,比如检测“是否有进程在非标准端口上监听”、“是否在启动后三秒内发起了外网连接”。这样虽然会多一些误报,但漏报率低很多。 如果你也在维护私服,别指望装个杀软就完事。那些东西对私服后门基本没用。最实际的办法是拿一个干净的服务端做基线,用 GameGate 的私服扫描模块里发现了一个后门,攻击者可以通过特定封包直接调用 GiveItem 函数。漏洞这个漏洞藏了快一年,工具期间被不同的传奇人利用过至少五次。LoginSrv 里有一段代码会检测当前日期,如果超过某个时间点就自动给指定账号发一套顶级装备。这种逻辑用普通文本搜索很难发现,因为变量名被混淆成了 a1、b2 这种。WinExec 调用、或者异常的文件写入路径。这部分规则库是我这几年攒下来的,大概两百多条,覆盖了常见的私服后门类型。GameGate 的封包处理,正常客户端发的封包长度和频率都有规律,但攻击者构造的畸形封包会触发缓冲区溢出或者逻辑绕过。我写了个简单的 fuzzer,对登录、角色操作、物品交易这几个高频接口做变异测试。有一次跑了一个下午,在 SelGate 里找到一个整数溢出,发送超长的角色名会导致服务器崩溃,配合特定操作还能覆盖返回地址。这个漏洞后来被确认是某版本引擎的通用问题。Process Hacker dump 内存,然后搜索可疑的 IP 地址、域名、或者像 cmd.exe、powershell 这样的字符串。有一次在一个 RunGate 进程里搜到一个陌生的域名,解析过去是个境外 VPS,上面挂着个简单的 HTTP 接口,接收服务器发来的玩家数据。这就是典型的“暗桩”,不主动连接,只被动外发。Process Monitor 记录所有文件、注册表、网络操作,然后对比你手上这个版本的行为差异。差异点就是重点排查对象。我那个朋友后来按这个思路自己查了一遍,又找出两个可疑的 DLL 注入点。虽然没完全清理干净,但至少知道该盯哪里了。
-
上一篇
-
下一篇
- 随机阅读
- 搜索
-
- 友情链接
-