mangot5.com)。
原厂启动器 launcher.exe(韩版 MFC,2015 年)代码干净,工作流就是「拉公告 → 查版本 → 下补丁 → 起客户端」。
所有通信强制依赖迅游加速器中转,补丁走 HTTP 明文从官方 S3 桶下载。
客户端 CFG 用固定 150 字节密钥表 XOR 加密,已完全破解;内存基址已实测锁定。
| 维度 | 核心结论 | 可信度 |
|---|---|---|
| 运营状态 | 游戏在运营中 —— 抓取当天(2026/09/17)就有「例行性維護開機公告」;补丁每周四发版 | 实测 |
| 启动器性质 | 韩服原厂通用启动器,无壳无签名、无进程注入 API;私服目录那份是原件照搬(哈希一致) | 静态+哈希 |
| 更新链路 | HTTP 80 明文 GET,非 FTP;补丁地址运行时动态下发,exe 里没有 | 抓包铁证 |
| 网络前提 | 全部流量经迅游本地代理(192.168.100.189:61753),内地直连官方 IP 会被 DROP | 实测 |
| 客户端加密 | 29 个 .cfg = 150 字节密钥表 XOR,密钥在 exe .rdata;已全解 | 已破解 |
| 内存基址 | 旧「31007 模块」基址已过期;活游戏对象数组基址实测 0x03BE3E68 | CE 实测 |
| 风险点 | ①补丁明文 HTTP 无签名校验 ②加速器会改写请求头 ③客户端带 XIGNCODE 反作弊,调试/读写有封号风险 | 提示 |
May 26 2015 自洽)HomunclusLauncher(FileDescription 为韩文「MFC 응용 프로그램」)78446D20904802619B2660E987D7B25AFDD9E2EEDC5D30F741D35D3C807B8A84D:\rxjh2025私服\launcher.exe 完全一致 → 私服未修改启动器| DLL | 关键点 |
|---|---|
WININET.dll | HTTP + FTP 双通道全函数:InternetOpenA / InternetConnectA / HttpOpenRequestA / HttpSendRequestA / FtpFindFirstFileA / FtpOpenFileA(FTP 部分是遗留导入,实测未被调用) |
WSOCK32.dll | 原始 socket(版本握手 / 心跳) |
ole32 / OLEAUT32 / OLEACC | MFC OLE 支持 —— 为了内嵌 IE WebBrowser 控件渲染公告页 |
SHELL32 / SHLWAPI | ShellExecuteExA → 启动客户端 / 建快捷方式 / 开浏览器 |
ADVAPI32 | 注册表读写 RegCreateKeyExA / RegSetValueExA |
WriteProcessMemory / CreateRemoteThread / SetWindowsHookEx 类的进程注入 API。启动器不做注入。launcher.exe
├─① 读 launcher.ini [YB_ONLINE] Name/Exec/VERSION/GROUP/Path/WRITELINK
├─② 读注册表 Software\KRGsoft\YBOnline\YB_ONLINE + SOFTWARE\WAYI\WSM
├─③ HTTP 拉公告 → hot.mangot5.com(内嵌 IE 控件 {8856F961-…} 渲染 notice01/02.html)
├─④ 版本校验 → hotsession.mangot5.com(包标识 "Yulgang_File_Update")
├─⑤ 下载补丁 → 字符串指向 \downlog\ + temp.zip(实测未落地,见 §3)
├─⑥ 解压覆盖 \Client\
└─⑦ runas 提权拉起 YGOnline.exe
Msg.txt —— 全部 46 条中文提示文案外置在该文件(第 21 条「无法连接下载服务器。(查看服务器的 ID,PW)」曾误导判断为 FTP)| 端点 | DNS | 实测状态 |
|---|---|---|
hot.mangot5.com | Cloudflare 104.26.10.73 等 | 在线HTTP 302 |
hotsession.mangot5.com | 台湾中华电信 113.196.245.139/140 | 内地直连超时域名有效、服务在 |
211.115.86.67(唯一裸 IP) | 韩国 KRG Soft 原厂补丁服 | 已下线21/80/443 全超时 |
exe 里硬编码的网页地址只有 4 条,全部 ASCII 明文:
| # | 地址 | 用途 | 实测内容 |
|---|---|---|---|
| 1 | http://hot.mangot5.com | 「主页」按钮 | 302 → landing.mangot5.com/template/hot/event/260430_Revision/ |
| 2 | …/game/hot/launcher_event | 右侧公告滚动列表(440×155) | 200,4386 B,4 条实时公告 |
| 3 | …/notice01.html | 公告图位① | 200,758 B,单张活动图 |
| 4 | …/notice02.html | 公告图位②(商城特惠) | 200,1949 B,<ul> 为空 → 当前无在售内容 |
9/17(四)例行性維護開機公告 contentNo=70068 2026/09/17 ← 当天维护完刚开服
9/17(四)例行性維護公告 contentNo=70009 2026/09/16
9/10(四)例行性維護開機公告 contentNo=69978 2026/09/10
9/10(四)例行性維護公告 contentNo=69913 2026/09/09
meta charset=euc-kr、CSS 字体写韩文 돋움(Dotum)—— 韩国原版模板直接搬来没改。
notice01.html 挂的活动图是 8/6 上传的,落地页却还是 4/30 的改版页(活动期 4/30–5/14 早已过期)。
| 域名 | 角色 |
|---|---|
landing.mangot5.com | 所有图片 + 活动页(CMS 落地页) |
www.mangot5.com | 会员注册 / 登录 / 储值(MyCard) |
download.mangot5.com | 客户端安装包(直链已取得) |
| 外链 | 巴哈 forum.gamer.com.tw/A.php?bsn=8294 · facebook.com/HOT.mangot5 · GTM GTM-PB58S8 |
mangot5.com("快樂玩")。同一平台还运营笑傲江湖4K、勁舞團、LOST ARK、封印者CLOSERS 等十余款。抓包时间 2026-09-17 16:17:55 – 16:19:21 | 工具:Windows 内置 pktmon(NIC 层全包)+ 进程/连接/DNS 轮询
GET /yg_patch/patch_645.zip HTTP/1.1 Accept: */* User-Agent: NetGame ← launcher.exe 自己的 UA,确认由它发出 Host: patch-hot.mangot5.com.tw.wyjsq.com User-Agent: xunyou.com ← ① 迅游代理插入 Connection: Keep-Alive Cache-Control: no-cache User-Agent: xunyou.com ← ② 迅游代理又插一次(正常请求只有 1 个 UA)
HTTP/1.1 200 OK Content-Type: application/zip Content-Length: 15306429 Server: openresty X-SteamCache-Processed-By: vm-24-118-ubuntu.xunyou.com ← 铁证:迅游缓存节点 EO-Cache-Status: HIT X-Client-Host: patch-hot.mangot5.com.tw.wyjsq.com Last-Modified: Thu, 17 Sep 2026 06:03:30 GMT ← 补丁当天早上刚生成 Cache-Control: max-age=3600
正文首字节 PK\x03\x04,是真 ZIP,首个条目 = Client/YBdrop.cfg(解包即覆盖客户端目录)。
| 时刻 | 事件 |
|---|---|
| 16:17:55.316 | 启动 launcher.exe(PID 2464),cwd = D:\rxjh2025 |
| 16:17:57.586 | 一口气建立 11 条 TCP 连接 → 192.168.100.189:61753(xunyou.exe 本地代理) |
| 16:17:58.802 | DNS 查询 patch-hot.mangot5.com.tw.wyjsq.com(.wyjsq.com = 迅游包装后缀) |
| 16:17:58.938 | 发出 GET /yg_patch/patch_645.zip |
| 16:17:59.345 | 200 OK,15,306,429 字节 |
| 16:18:02.234 | 下载完成(4 秒 ≈ 3.8 MB/s)→ YGOnline.exe(PID 14608)被拉起 |
| 16:18:05 | 客户端日志 log_14608.txt:Map Loading Success 1000001 → Login Interface |
| 16:18:xx | launcher.ini 被改写:VERSION 644 → 645(与 patch_645.zip 闭环) |
| 之后 | launcher 自动退出(交接给客户端,正常行为) |
| 目标 | 包数 / 流量 | 归属 |
|---|---|---|
| 49.119.123.181:80 | 17,470 / 15.3 MB | 迅游节点 热江补丁下载(全部) |
| 113.96.15.21:2089 / 139.199.2.66:2089 | 602 / 68 KB | 迅游加速隧道 |
| 47.108.x:29200 | 24 / 4 KB | 迅游测速 POST /v1/speed_report |
| 其余 | — | 腾讯系(copilot / telemetry)、向日葵远控、WorkBuddy 自身(噪音) |
hotsession.mangot5.com(零流量)、hot.mangot5.com(零流量)hotsession 请求走本地代理,pktmon NIC 组件看不到环回。
| 域名 | 解析结果 | 判定 |
|---|---|---|
| hotsession.mangot5.com | 113.196.245.139 / .140 | 真实官方 IP台湾中华电信 |
| patch-hot.mangot5.com.tw | 183.232.200.0 | 内地段受加速器/DNS 改写,走加速器才通 |
| hot.mangot5.com | 104.26.10.73 / 172.67.74.230 | Cloudflare公告站 |
GET http://patch-hot.mangot5.com.tw/ 返回的不是网页,而是
S3 风格桶清单 XML(ListBucketResult,桶名 happytuk-tw-hot,109,067 字节)。
一次请求即可同时读出:服务器在不在 + 最新版本号 + 最后更新日期 + 补丁总数。
HTTP/1.1 200 OK Content-Type: application/xml Server: openresty Content-Length: 109067 Cache-Control: max-age=3600 EO-Cache-Status: HIT ← CDN 缓存快照 <ListBucketResult><Name>happytuk-tw-hot</Name><IsTruncated>false</IsTruncated><MaxKeys>1000</MaxKeys> 365 个 <Contents>,每条含 Key / LastModified / ETag / Size / Owner: - 7z.exe 1,589,510 B - yg_patch/ (目录) - yg_patch/patch_282.zip … patch_644.zip (363 个补丁)
| 补丁 | patch_640 | 641 | 642 | 643 | 644 |
|---|---|---|---|---|---|
| 日期 | 08-06 | 08-13 | 08-27 | 09-03 | 09-10 |
| 大小 | 510 KB | 1.41 MB | 7.65 MB | 1.40 MB | 1.38 MB |
→ 每周四发版;超过一个月没新补丁即可判为停更。
Cache-Control: max-age=3600 且 EO-Cache-Status: HIT,
清单只到 v644 / 2026-09-10,而客户端 launcher.ini 已是 v645。
需再探一次状态码纠正:实测 patch_645.zip → 200(存在)、patch_644.zip → 200、patch_999.zip → 404(区分有效)。
patch-hot.mangot5.com.tw 这个串根本不在 exe 里——exe 明文只有 hotsession.mangot5.com 和 4 条 hot.mangot5.com 页面地址。
→ 补丁地址是运行时由 hotsession 动态下发的。
hotsession.mangot5.com 的 TCP 握手足额成功,应用层却一个字节都不回,
V1 会把一个"进程在听但服务已死"的端误报成「已开服」。TCP 层在 NAT / 防火墙 / CDN / 加速器面前几乎没有判别力。
| 级别 | 判据 | 实测 |
|---|---|---|
| 主 | patch-hot.mangot5.com.tw/ 正文含 ListBucketResult |
200,363 个补丁,最新 v644 |
| 副 | hot.mangot5.com/game/hot/launcher_event 正文含 contentNo= |
200,4 条公告,最新 2026/09/17 |
| 参考 | hotsession.mangot5.com |
直连超时(内地被 DROP,不参与结论) |
meta charset=euc-kr 且字体写韩文 돋움,用中文匹配必然踩编码坑。
InternetOpenUrlA + InternetReadFile(V1 只有 HttpQueryInfoA,拿不到正文)InternetOpenUrlA 的 flags 传 -2147483648(INTERNET_FLAG_RELOAD),否则读到 1 小时前的旧清单InternetSetOptionA option 2=CONNECT / 3=SEND / 5=RECEIVE,否则默认 30 秒卡界面已读 位置补 0 终止符再 指针到文本,避免读到缓冲区尾部残留.如果真 不能配 .否则(只有 .如果 可以)—— 4 层嵌套时极易写错补丁服务器 ● 已开服 最新v645 清单日期2026-09-10 共363个补丁 本地v645 已最新 (清单为CDN缓存) 公告站 ● 已开服 4条公告 最新公告2026/09/17 版本服务器 ○ 直连超时 (内地直连被拦, 需加速器; 不影响开服判定) 本地版本 v645 综合结论 ● 服务器正常运营中
plain[i] = cipher[i] ^ KEY[i % 150] // 150 字节常量密钥表 KEY 位置:YGOnline.exe .rdata VA 0x10705A0(文件偏移 0xC6EFA0),首 4 字节 2D 97 84 F2 验证:7D 85 84 F2 ^ 2D 97 84 F2 = 50 12 00 00 = 小端魔数 0x1250
.cfg 被加密(客户端共 153 个)→ 解密后为 Big5 繁体文本D:\rxjh\cfg_decrypted\(29 繁体)+ cfg_decrypted_sc\(29 简体 UTF-8)D:\rxjh\rxjh_cfg_decrypt.py(自解析 EXE 取密钥 + 解密 + --to-simple)| 项 | 说明 |
|---|---|
| 魔数 | 50 12 00 00(0x1250) |
| 两种头 | 校验 cd cc 8c 3f → rec@12 / fcnt@16 / 名字@20;校验 00 00 80 3f → rec@8 / fcnt@12 / 名字@16 |
| 字段 | 名字和值均为 <1字节长度><字节内容>,长度 = 精确字节数 |
| 坑 | 头部声明记录数恒比实际多 1;cfg_decrypted_sc(UTF-8 版)不可按长度解析(长度前缀仍是原 Big5 字节数) |
| 文件 | 内容 |
|---|---|
cfg数据总表.html + cfg_tables\*.csv×29 | 29 个 CFG 全量表(表头已中文化),含 NPC 编号名称对照 |
客户端明文文件总表.html | 153 个客户端文件清单 + .ini 明细(根目录 10 + 各角色 UserConfig.ini×191 / 购买物品列表.ini×137) |
全部数据整理表.html | 武功 / 状态异常 / 地图城镇 等游戏数据汇总 |
npcnames.csv | 1137 行 NPC 编号↔名称(519 条资料站收录 + 618 条本地摆放坐标) |
| 乱码(Big5 误解) | 原始字节 | CP949 真身 | 中文 |
|---|---|---|---|
| 骯顫犒(鼠晝)(陴) | BB EA C5 B8 … | 산타복(무급)(남) | 圣诞服(无等级)(男) |
| 橾霜紫 | — | 일직도 | 一直刀 |
| 奩錯紫 | — | 반월도 | 半月刀 |
| 撖寡情 | E5 AF B9 E8 B1 A1 | UTF-8 中文「对象」被按 Big5 解 → 还原即得 | |
rxjh_text_dec.py(三态判定模块)prefer='korean',其余表 'chinese'(纯字节层无法区分)0x03173B70 等)
对当前活游戏已过期。实测活游戏对象数组基址 = 0x03BE3E68(= YGOnline.exe + 0x37E3E68)。
两者 RVA 不同(0x37E3E68 vs 0x2D73B70)→ 不是同一游戏构建。
YGOnline.exe(32 位,FileVersion 1.0.0.23,构建于 2026-09-14)0x00400000 / 约 88.2 MB(无 ASLR,绝对地址 = RVA)数组基址 = 0x03BE3E68 槽位 k 的地址 = 0x03BE3E68 + k * 4 ← 每槽 4 字节,存对象指针;k 从 8000 起 对象 (obj) 结构 : +0x08 = 对象类型 0x31=人物 0x18=物品 0x20=? 0x22=怪物 +0x0C = 对象ID 实测 == 槽位号 k(34/34 全部满足) +0x14 = 全服ID = 邀请组队封包目标 +0x18 = 名字(BIG5 内联串)
角色基址 / 背包基址 / 队员基址 / 技能 / 状态 / 快捷 / 装备 / 仓库 / 聊天 / 地图ID 等在 31007 模块里的值同样可能已过期,
本轮 CE 只坐实了对象数组基址。权威途径二选一:①CE 指针扫描逆推 ②解密辅助的 Update.dll[data](运行时下发的当前版本基址,最准)。
mov ecx, [YGOnline.exe + 37E5FC4] // = 0x4DAC5008,助手管理对象 push 0 // arg2 push <命令码> // arg1(如 0x31 对应某个按钮) call YGOnline.exe + 63D8C0 // 0xA3D8C0 = 真·总调度器(thiscall)
UI 按钮点击
→ call 63D590(ecx = 0x4DAC5008, arg1 = 0x3F4, arg2 = 0x31, arg3 = 0)
→ case 0x3F4
→ call 63D8C0(arg1 = 0x31, arg2 = 0, ecx = 0x4DAC5008)
| 项 | 值 |
|---|---|
| 总调度器 | YGOnline.exe + 63D8C0(0xA3D8C0)· 命令码有效范围 0x0B ~ 0xA4(sub 0x0B 后 cmp 0x99) |
| 上层分发器 | YGOnline.exe + 63D590(0xA3D590)· case: 3/6/7/8/0x3EE/0x3F4 |
| 管理对象(ECX) | [YGOnline.exe + 37E5FC4] = 0x4DAC5008(静态,可作稳定入口) |
| 虚表 | 0x10953B0(+0:0xA2D9E0, +4:0xA3D590) |
| 封包发送函数 | 0x0076C080(读 buf+4 作长度字,上限 0x90) |
| 发包公式 | 组队 opcode = 30001400,名字 BIG5 + 00 00 + 补零到 40 字节;名字两端不加 A440 |
0x30 包不是组队邀请 —— 目标槽位对象类型全是 0x18/0x22/0x20(物品/怪物/NPC),
而人物是 0x31。判断那些是挂机程序自己发的「打怪 / 拾取」包(封包拦截 hook 的是统一发包函数,自己的包同样被拦到)。
本次多轮分析中,后一轮实测推翻了前一轮静态推断的地方,逐条列出以备查:
| 原结论 | 实测结果 | 性质 |
|---|---|---|
补丁下载走 FTP(因导入表含 FtpFindFirstFileA) |
实际走 HTTP 80 明文 GET,Content-Type: application/zip |
推翻FTP 函数是遗留导入,从未被调用 |
hotsession.mangot5.com「应用层静默 → 服务已停摆」 |
DNS 正常(台湾真实 IP),仍是唯一承载版本/补丁配置下发的服务 | 推翻是「内地直连被 DROP」,不是「已停摆」 |
| 补丁地址写在 exe 里 | patch-hot.mangot5.com.tw 不在 exe 中,明文只有 hotsession + 4 条 hot 页面地址 |
推翻地址为运行时动态下发 |
补丁落地 \downlog\temp.zip |
该目录不存在,实际是「下载 → 校验 → 就地覆盖 Client」 |
补充字符串存在但未落地 |
| 0x30 包 = 组队邀请(带对象ID) | 目标槽位对象类型非 0x31(是物品/怪物),不是邀请包 | 推翻系挂机自身发出的打怪/拾取包 |
辅助「31007 模块」基址可用(0x03173B70 等) |
活游戏对象数组基址为 0x03BE3E68,RVA 不同 → 不是同一构建 |
推翻旧基址已过期 |
| 「经验基址 = 当前血量值 + 24」 | 常量 24(0x18)在字段表里是名字偏移,读名字前 4 字节当经验 → 判定恒真 | 致命无经验检测假阳性 |
| CFG 文本编码 = Big5 | 外观/资源类原文是韩文 CP949,被按 Big5 解成了伪汉字 | 修正需按文件区分编码偏好 |
| 检测器 V1:TCP 可连 = 已开服 | hotsession TCP 握手成功但应用层零响应 → 会误报 | 推翻V2 改用 S3 清单 + 公告页 ASCII 判据 |
| 文件 | 内容 | 所在位置 |
|---|---|---|
| 热血江湖分析总报告.html | 本文件 · 全部结论汇总 | 当前工作区根目录 |
| launcher启动器分析报告.html | launcher.exe 静态分析(PE / 导入表 / 资源 / 私服对比) | 当前工作区根目录 |
| 启动器抓包分析报告.html | 实机抓包分析(时间线 / HTTP 报文 / 流量全景) | 当前工作区根目录 |
| 易语言_游戏服务器开服检测.txt | V2 检测器源码(可直贴「_启动窗口」程序集) | 当前工作区根目录 |
| cfg数据总表.html | 29 个 CFG 全量表(21 标签页) | WorkBuddy\2026-09-17-12-57-40\ |
| 客户端明文文件总表.html | 153 个客户端文件清单 + .ini 明细 | WorkBuddy\2026-09-17-12-57-40\ |
| 全部数据整理表.html | 武功 / 状态 / 地图等游戏数据 | WorkBuddy\2026-09-17-12-57-40\ |
| CE分析报告_对象数组与邀请封包.md | 对象数组结构 + 封包定位 | WorkBuddy\2026-09-16-13-19-49\ |
| D盘rxjh2025_目录分析.md | 基址 31007 过期修正 | WorkBuddy\2026-09-16-13-19-49\ |
| rxjh_cfg_decrypt.py | CFG 解密工具 | D:\rxjh\ |
| rxjh_text_dec.py | 三态文本解码模块(CP949/Big5/UTF-8) | WorkBuddy\2026-09-17-12-57-40\ |
| 文件 | 内容 |
|---|---|
| _launcher_report.txt | PE / 导入表 / 资源 / 字符串 全量提取 |
| _launcher_net.txt | 网络端点与连通性探测 |
| _launcher_extra.txt | 注册表字符串 + 私服配置提取 |
| _launcher_ui.txt | 界面资源与对话框文字 |
| _launcher_webpages.txt | 4 个内嵌页面完整响应 + 资源链接清单 |
| _web_detail.txt | 客户端下载页 + 活动页全文 |
| capture\rxjh.pcapng (22 MB) | 抓包原始文件 |
| capture\monitor.log | 进程/连接/DNS 轮询日志 |
| capture\http_sessions.txt | HTTP 会话重组 |
| capture\patch_timeline.txt | 补丁下载时间线 |
| capture\endpoints.txt | 端点统计 |
| _patch_index.xml (109 KB) | S3 桶清单原始正文(365 条目) |
| _patch_index.txt | 清单解析结果 |
| _verify.txt | 三个判据联合逻辑实测输出 |
| _probe_new.txt | 各端点响应实测(状态码/正文长度) |
export PATH="/c/Windows/System32:<managed-python>:…PortableGit…/usr/bin:/usr/bin:/bin"reg.exe 在程序黑名单中禁止调用;grep -a -o -E 在本环境报错 → 改用 Python 做字符串搜索re 的 bytes 模式不支持 \uXXXX 转义OffsetToData 高位置 1 表示指向子目录(需递归),清 0 才是指向 DATA_ENTRYpktmon start --capture --pkt-size 0 --comp nics --flags 0x012 -f <绝对路径>.etl(管理员,立即返回)tasklist /fo csv /nh + netstat -ano + ipconfig /displaydns 对比基线pktmon stop → pktmon etl2pcap x.etl -o x.pcapng → 自己写 Python 解析 pcapngpktmon etl2txt --brief 只输出包头不含 payload,搜 HTTP 关键字必然为空,必须走 pcapnglist --all 只有 NIC 组件、无 loopback → 抓不到本地代理的明文