================================================================ 热血江湖 rxjh2025(D:\rxjh2025\client\YGOnline.exe) NPC 功能 / 对话 CALL 基址分析 ================================================================ 说明:本文件基于 OD 原始状态 dump 的地址整理,仅作逆向分析参考, 非外挂/作弊用途(游戏本身不可开挂,照视频逐步跟即可)。 一、模块基址(最关键结论) ---------------------------------------------------------------- 主程序模块:YGOnline.exe(非 Client.exe,OD 里 “Client.” 只是通用标签) PE 校验(已用 PE 头实测): ImageBase = 0x00400000 ← 固定加载基址 DllCharacteristics = 0x8100 ← 不含 0x40(ASLR/DYNAMIC_BASE) 位 => 关闭随机基址,ASLR 未启用 ★ 结论:进程里 dump 出的“绝对地址”就是可直接复用的【稳定基址】, 不需要每次按模块实际加载地址重算偏移。 换算写法:YGOnline.exe + (地址 - 0x400000) 节表(验证全局地址都落在本模块内): .text 0x1000 -> 0x0C6E5B1 (代码) .rdata 0xC6F000 -> 0x0DDF356 .data 0xDE0000 -> 0x58177A8 (大 .data,全局指针都在这) .fptable 0x5818000 -> 0x5818080 .rsrc 0x5819000 -> 0x582D320 镜像上界 ≈ 0x5C2D320(约 92MB) 核对:0x1267B54 / 0x2E51409 / 0x2E5AC64 / 0x11A91C0 全部 in-image ✅ 二、核心基址一览(绝对地址 = 基址+偏移) ---------------------------------------------------------------- 地址 偏移(相对0x400000) 含义 ---------------------------------------------------------------- 0x1267B54 +0xE67B54 玩家/角色管理器根(4级指针起点) 0x2E51409 +0x2A51409 “是否在NPC对话中”标志(byte,1=对话中) 0x2E5AC64 +0x2A5AC64 关闭对话call所用对象指针([它]=对象) 0x11A91C0 +0xDA91C0 另一UI对象指针(见下,非关闭call本体) 0x007E4F50 +0x3E4F50 打开NPC功能 call(真·可用) 0x004FD750 +0x0FD750 关闭NPC对话 call(真·可用) 0x0077B140 +0x37B140 关闭对话流程里相邻的 call(标注“不是”,别用) 注:0x00900000(关闭call处 edx 指向的 00900000 结构)是【运行时堆上 分配的窗口对象】,不是模块基址,不可当基址固化。 三、玩家对象(功能call 的 ecx) ---------------------------------------------------------------- 玩家对象 = [[[0x1267B54] + 0x2FC] + 0x344] + 0x4 (= 国服19.0 里同一个根 0x1267B54,两个版本共用,稳定) 实测示例值:0F927EF8 = dd [[[0x1267B54]+0x2FC]+0x344]+0x4 四、打开 NPC 功能 call(007E4F50) ---------------------------------------------------------------- 定位特征(OD 搜索字节): 81 FB ** ** ** ** 0F 8D ** ** ** ** 53 8B CE // 0x10 长度特征 调用形式(thiscall): push 0x0 ; 第3参(保留/未用) push 0x1 ; 第2参(固定 1) push <功能编号> ; 第1参:见下表(如 3=买卖) mov ecx, <玩家对象> ; ecx = [[[0x1267B54]+0x2FC]+0x344]+0x4 call 0x007E4F50 已验证测试码: push 3 ; 买卖 push 1 push 0 mov ecx,0F927EF8 ; = 玩家对象 call 007E4F50 【功能编号对照表】 3 买卖 4 确认任务/领赏 5 仓库 6 丢弃 7 强化 8 赋予 9 取回 10 交换 11 移动 12 任务列表 13 回复 16 门派 19 修炼 21 门派战斗 22 战争 28 结婚 29 热血 31 百宝 33 邮件 37 药店 38 武器店 39 防具店 40 其他店 41 血兽 42 灵兽 43 合成 44 分解 45 兑换 46 提取 51 书 60 门派战 71 转职 81 比武 82 武林 84 收购 90 小游戏 91 师门 92 答题 93 兑换2 99 其他2 109 修炼2 110 活动 180 角色信息 181 队伍 182 好友 183 屏蔽 五、关闭 NPC 对话 call(004FD750) ---------------------------------------------------------------- 定位片段(OD): 00521CAB 8B0D ???????? mov ecx, dword ptr ds:[0x2E5AC64] 00521CB1 6A 00 push 0x0 00521CB3 E8 38ABF8FF call 0x004FD750 ; 真·关闭NPC对话框 调用形式(thiscall): push 0x0 mov ecx, [0x2E5AC64] ; 对话/UI 管理对象 call 0x004FD750 相邻(非关闭本体,标注“不是”): 00521CA6 call 0x0077B140 ; ecx=[0x11A91C0],此 call 不是关闭 实战建议:先读 0x2E51409 字节判断是否在对话中(==1),再调 004FD750 关闭。 六、与国服19.0 的差异提示 ---------------------------------------------------------------- - 19.0:打开NPC对话框(显UI) call = 00512150(ecx=NPC对象,参数 0x401/0/0) NPC对象根 = [0x2E79C40 + 4*[[0x2E79C3C]+0x1A64]] - 2025:本 dump 只给了【功能 call 007E4F50】+【关闭 call 004FD750】 (玩家对象根 0x1267B54,与 19.0 同源但结构不同) => 2025 的“打开对话框(显UI)”底层 call 未在本数据中给出, 若需要,参照 19.0 思路在 007E4F50 上层重新跟一遍交互流程。 - 两版本玩家根 0x1267B54 一致,可作为跨版本稳定锚点。 七、使用顺序(自动对话/功能) ---------------------------------------------------------------- 1. 选中目标 NPC(选中call 另查) 2. (可选)读 0x2E51409 确认尚未在对话 3. call 007E4F50(ecx=玩家对象, push 功能编号/1/0)打开对应功能窗 4. 操作完后 call 004FD750(ecx=[0x2E5AC64])关闭对话 ================================================================