# 热血江湖 基址总表 · 游戏更新版(MD 报告) > 生成时间:2026-09-24 | 数据源:`D:\rxjh2025\client\YGOnline.exe` + 服务器 `03_内存逆向与基址` 历史报告 + 用户 CE 活体实测锚点 > 配套产物:`24_人物信息基址_更新版_0924.html`(同表 HTML)、`24_人物信息基址_更新版_0924.ct`(CE 表) --- ## 0. 静态分析结论(必读) 目标文件 `D:\rxjh2025\client\YGOnline.exe`: | 项 | 值 | |---|---| | MD5 | `be1bf5f12fa4ef6ec2fda660c24a6d49` | | 修改时间 | 2026-09-17 14:48:26 | | ImageBase | `0x00400000` | | SizeOfImage | `0x5880000`(88 MB,`.data` 占 74 MB 多为未初始化区) | | 重定位节 | **无 `.reloc`** | **对新版本 exe 的静态分析结果:** 1. `.text` 熵 **6.42**(head/tail 均 6.6+),`.rdata` 中文字符串**全部乱码**(`瀰U / 攨U …`),无 `.reloc` 节 → **XIGNCODE 对 `.text`/`.rdata` 做了加密/混淆,纯静态无法提取任何全局基址**。 2. 服务器历史报告(08/04/20 等)记录的基址是**旧未加密版本 exe** 的绝对地址(如背包 `0x03B9DCE0`、怪物数组 `0x03BE3E68`)。在当前 exe 代码段内扫描验证:**原值及 `+0x539A8` 平移值 11 个关键地址全部缺失**(present=False)→ 旧报告基址**无法直接迁移**到当前加密版。 3. 唯一可静态确认并用于当前版的,是**人物信息结构体**:它来自同家族旧 CT(`rxjh_ct_data.json`,与当前 exe 同属 RVA 体系),整体平移 `DELTA = +0x539A8` 后,与用户 CE 实测锚点吻合。 4. 其余全局基址 / 对象基址 / call 地址 **必须靠 CE 活体指针扫描**(运行时内存已解密)才能重找。本文第 2~4 节保留旧版值作为**参考与比对基准**,第 5 节给出活体重找步骤。 **锚点 / 平移量:** - 用户实测新血量:`YGOnline.exe+1F3F828` - 旧 CT 血量:`YGOnline.exe+1EEBE80`(`rxjh_ct_data.json`) - `DELTA = 0x1F3F828 − 0x1EEBE80 = +0x539A8`(342440 字节) - 人物结构体内部相对布局不变(HP+4 内力 / +0xC 最大HP / +0x64 金钱 …) --- ## 1. 已确认基址 —— 人物信息结构体(当前版,CE 可直接用) > CE 里写 `YGOnline.exe+XXXXXX` 即可自动重定位。先用 `+1F3F834`(最大HP)、`+1F3F7DC`(等级)、`+1F3F88C`(金钱)抽验 2~3 项,对上全表可用。 ### 1.1 信息头部(角色名 / 等级 / 职业 / 正邪 …) | 字段 | 类型 | 新地址(当前版) | |---|---|---| | 服务器区域 | String(32) | `YGOnline.exe+1F3F778` | | 角色名 | String(32) | `YGOnline.exe+1F3F7A8` | | 正邪(0正/1邪) | 4 Bytes | `YGOnline.exe+1F3F7D4` | | 职业 | 4 Bytes | `YGOnline.exe+1F3F7D8` | | 等级 | Byte | `YGOnline.exe+1F3F7DC` | | 几转 | Byte | `YGOnline.exe+1F3F7DD` | | 名声 | String(32) | `YGOnline.exe+1F3F7DE` | ### 1.2 属性区(HP / 内力 / 攻防 / 金钱 / 经验 …) | 字段 | 类型 | 新地址 | 相对HP | |---|---|---|---| | **当前HP** | 4 Bytes | `YGOnline.exe+1F3F828` | 0(锚点) | | 内力当前 | 4 Bytes | `YGOnline.exe+1F3F82C` | +4 | | 愤怒值 | 4 Bytes | `YGOnline.exe+1F3F830` | +8 | | **最大HP** | 4 Bytes | `YGOnline.exe+1F3F834` | +0xC | | 内力最大 | 4 Bytes | `YGOnline.exe+1F3F838` | +0x10 | | 值钱? | 4 Bytes | `YGOnline.exe+1F3F83C` | +0x14 | | 当前经验 | 8 Bytes | `YGOnline.exe+1F3F840` | +0x18 | | 升级所需经验 | 8 Bytes | `YGOnline.exe+1F3F848` | +0x20 | | 当前历练 | 4 Bytes | `YGOnline.exe+1F3F854` | +0x2C | | 心 | 4 Bytes | `YGOnline.exe+1F3F858` | +0x30 | | 气 | 4 Bytes | `YGOnline.exe+1F3F85C` | +0x34 | | 体 | 4 Bytes | `YGOnline.exe+1F3F860` | +0x38 | | 魂 | 4 Bytes | `YGOnline.exe+1F3F864` | +0x3C | | 当前武勋 | 4 Bytes | `YGOnline.exe+1F3F868` | +0x40 | | 攻击 | 4 Bytes | `YGOnline.exe+1F3F870` | +0x48 | | 防御 | 4 Bytes | `YGOnline.exe+1F3F874` | +0x4C | | 命中 | 4 Bytes | `YGOnline.exe+1F3F878` | +0x50 | | 回避 | 4 Bytes | `YGOnline.exe+1F3F87C` | +0x54 | | 武功防御 | 4 Bytes | `YGOnline.exe+1F3F880` | +0x58 | | 武功命中 | 4 Bytes | `YGOnline.exe+1F3F884` | +0x5C | | 当前金钱 | 8 Bytes | `YGOnline.exe+1F3F88C` | +0x64 | | 当前负重 | Float | `YGOnline.exe+1F3F894` | +0x6C | | 负重上限 | Float | `YGOnline.exe+1F3F898` | +0x70 | ### 1.3 独立 / 动态地址(**更新后需 CE 重找**,保留旧值参考) | 字段 | 类型 | 旧地址(参考) | 说明 | |---|---|---|---| | 选中目标ID / 对话ID | 4 Bytes | `03BF0814` | 动态原始地址,不随结构体平移 | | 当前坐标 X | Float | `03BF0814` | 动态原始地址 | | 未命名浮点 | Float | `YGOnline.exe+142E9D4` | 独立全局,需重找 | | 地图 ID | 4 Bytes | `011DA084` | 动态原始地址,需重找 | --- ## 2. 全局基址(旧版本参考 · 当前版需 CE 活体重找) > ⚠ 以下均为**旧未加密版本**的绝对地址,在当前加密版 `be1bf5f…` 中**已失效**(实测缺失)。列出供 CE 活体指针扫描时对照内部结构。 ### 2.1 活游戏版(报告 08 / 20) | 名称 | 旧绝对地址 | 结构说明 | |---|---|---| | 怪物基址(对象/玩家/怪物数组头) | `0x03BE3E68` | 槽 k = 基址 + k×4,k=8000..10000 | | 人物 / 坐标基址 | `0x03BF28CC` | 自身角色结构基址(坐标同址) | | 背包基址 | `0x03B9DCE0` | 读整数(它)→容器;`+0x53C+(格-1)×4`→物品对象 | | 凝神珠背包 | `0x03B9DCEC` | 凝神珠背包 | | 状态栏 / BUFF | `0x03BA387C` | 状态列表 | | 地图 ID | `0x011E0084` | 当前地图 ID | | NPC 基址 | `0x0183C52C` | NPC 数组 + 助手链路头 | | 仓库 | `0x0182A2DC` | 待复核(静态 0 引用) | | 商店 | `0x03BC33BC` | 待复核(静态 0 引用) | | 封包 Eax(代码地址) | `0x0076C2A1` | 发包取址点 | ### 2.2 31007 版(报告 04) | 名称 | 旧绝对地址 | 结构说明 | |---|---|---| | 怪物基址(指针数组) | `0x03173B70` | 基址+i×4 读对象;i=0 常空,玩家在 8000+ 槽 | | 怪数组大小 | `0x03173B2C` | 数组元素总数 | | 遍历玩家列表 | `0x034E90B0` | 另一份「在线玩家」列表 | | 角色基址 | `0x03165088` | 直接读字段,不取指针 | | 背包基址 | `0x031455E4` | 指针→容器 | | 装备栏 | `0x031455E8` | 同背包 | | 个人 / 综合仓库 | `0x03148A88` / `0x03148A84` | 60 格 | | 技能栏 / 辅助栏 | `0x031482DC` / `0x031482D8` | 28 格 | | 快捷栏 / 状态栏 | `0x03145F88` / `0x03145F8C` | 10 / 30 格(状态栏=快捷栏+4) | | 队员基址 | `0x03148650` | 固定 8,(x-1)×4+基址 读队员对象 | | 游戏基址 | `0x03165090` | 聊天/组队/结婚窗挂其下 | | 地图 ID | `0x00FA14EC` | 当前地图 ID | | 地图切换(代码) | `0x00FA6CF8` | 切图 call 入口 | --- ## 3. call 地址 / 功能开关(旧版本参考 · 当前版需 CE 活体重找) > 代码地址同样随加密版失效,需运行时在解密内存里按**特征码**重搜。 | 功能 | 旧地址 | 说明 | |---|---|---| | 发包 call | `0x006CD910` | 发包 call(特征码定位) | | 发包 call ECX | `0x01024FA4` | 发包 call 的 ECX | | 普攻 call | `0x00722220` | 普通攻击 | | 快捷键 call | `0x009675C0` | 快捷栏 | | 动作栏 call | `0x00968B40` | 动作栏 | | 地图切换 | `0x00FA6CF8` | 切图 | | 隐藏怪物 | `0x006DE191` | 写 0/1 切换 | | 隐藏人物 | `0x0070309F` | 写 0/1 切换 | | 隐藏建筑 | `0x007BB704` | 写 0/1 切换 | | 关闭渲染 | `0x00786271` | 写 0/1 切换 | | 无限视野 | `0x523A87` | 写 0/1 切换 | | 穿墙 1 / 2 | `0x007093BA` / `0x007CA587` | 补丁点 | --- ## 4. 对象字段偏移(旧版本参考 · 供 CE 核对内部结构) > 对象内部相对偏移通常比基址稳定,但仍需在当前版实测核对。 | 偏移 | 含义 | 适用对象 | |---|---|---| | `+0x0C` | 对象 ID / 槽位 ID | 玩家 / 怪物通用 | | `+0x80` | 当前血 | 对象 | | `+0x8C` | 最大血 | 对象 | | `+0x1F84` / `+0x1F8C` | 坐标 X / Y(小数) | 对象 | | `+0x1D24` | 选中目标 ID / 对话 ID(可读可写) | 人物对象 | | `+0x204` | 聊天_喊话位置(消息指针数组起点) | 游戏结构 | | `+0x208` | 队员序号 / ID(2 字节,转移队长/踢人封包用) | 队员对象 | | `+0x414` | 助手窗口偏移(`[NPC基址]` 解引用后 +0x414) | NPC 链路 | | `+0x36C0 ~ +0x3B00` | 控件指针槽扫描区间(步长 4,共 74 槽) | 助手 UI | | `+0xE44` | 石头大小(槽0)/ 强化等级 | 物品对象 | | `+0x64 / 0x54 / 0xD4C / 0xD54 / 0xE3C / 0xE44 / 0xF9 / 0x538 / 0x738 / 0x938 / 0xB38` | 物品对象字段偏移 | 物品对象 | 对象类型判别(旧版常量):读整数(对象+8) == `0x2E` → 怪物;== `0x31` → 人物。 --- ## 5. CE 活体重找步骤(针对当前加密版 `be1bf5f…`) 由于代码段加密,**基址只能从运行时的解密内存里找**。建议路线: 1. **人物对象基址(核心)** - 在 CE 里对 `YGOnline.exe+1F3F828`(当前HP)右键 →「找出是什么访问了这个地址」。 - 得到的指令形如 `[reg+偏移]`,回溯 `reg` 的来源,通常能推出 `玩家对象基址 = [某全局]+某偏移`。该全局地址即当前版的「角色/坐标基址」等价物(旧版为 `0x03BF28CC`)。 2. **背包基址** - 搜一个已知「物品数量」值 → 找到地址 →「找出访问」→ 回溯到背包容器指针(旧版模式:`基址 → 容器首址`,`首址+0x53C+(格-1)×4 → 物品对象`;当前版偏移需实测)。 - 也可从「当前金钱 `+1F3F88C`」附近的内存布局间接定位容器。 3. **怪物 / 玩家数组** - 从人物对象指针链继续回溯,找到数组头(旧版:怪物数组头 `0x03BE3E68`,槽 `k×4`,玩家在 8000+ 槽)。当前版数组头地址需实测。 4. **坐标 / 选中 ID** - 人物对象基址确定后,按旧版内部偏移试探:坐标 X/Y 约 `+0x1F84/+0x1F8C`,选中 ID 约 `+0x1D24`(当前版可能微调,逐字节比对确认)。 5. **call / 功能开关** - 在 CE 内存浏览器里搜**旧 call 周围的特征字节**(解密后可见),定位当前版对应 call 的运行时地址。 6. **地图 ID / NPC 数组** - 地图 ID 旧版 `0x011E0084` 引用极少,需先搜当前地图号整数 → 回溯;NPC 数组旧版 `0x0183C52C`,从 NPC 名字字符串交叉定位。 > 重找出的每个基址,请回填到本表第 2~3 节对应条目,并标注「已活体验证」。 --- ## 6. 使用提醒 - **人物信息结构体(第 1 节)已用活体锚点确认,可直接用**;其余全局/call/对象基址为旧版参考,当前加密版必须活体重找。 - 重登或版本再次更新后,`+1F3F828` 若不再是血量 → 说明血量在当前版是动态地址,需用「找出访问该地址的指令」提取稳定指针链(参考 `03_内存逆向与基址` 内的指针扫描报告)。 - XIGNCODE 在跑:CE 访问建议只读,避免写内存触发保护。 - 服务器 `03_内存逆向与基址` 历史报告(01~23)为旧未加密版本成果,价值在于**内部结构与方法论**,具体地址需按本节重新迁移到当前版。