01
代码审计03_内存逆向与基址/01_易语言项目分析报告_热血江湖挂机辅助.html
辅助工程整体架构与功能清单,附具体 Bug 与维护性风险清单。
- DLL 注入 + 窗口线程架构,约 9000+ 行主窗口代码、300+ 子程序
- 【严重】etxt 转换产物把几乎所有局部变量都标成「数组」
- 【Bug】遍历背包红/蓝药找不到药时返回值错误;【隐患】线程强杀、跨线程 UI 访问
打开报告 →
02
关键修正03_内存逆向与基址/02_D盘rxjh2025_目录分析.html
确认被分析的活游戏就是 D:\rxjh2025\client\YGOnline.exe,并推翻 31007 那套基址表。
- 31007 模块的 0x03173B70 与活游戏 0x03BE3E68 的 RVA 不同 → 不是同一构建
- 活游戏为 32 位、模块固定 0x400000(无 ASLR),绝对地址可直接对应模块内 RVA
- 目录里存在辅助写出的 Default.ini / ybopt2.cfg / YBpos3.cfg / YBc.cfg 与角色文件夹
打开报告 →
03
CE 实测03_内存逆向与基址/03_CE分析报告_对象数组与邀请封包.html
对象数组基址身份确认 + 数组结构规律(对象 ID == 槽位下标),并纠正「邀请包」的误判。
- 数组基址 0x03BE3E68 属主模块 .data 静态地址,不需指针扫描、不随重登改变
- 对象指针 = 读整数(基址 + k×4),玩家槽从 8000 起,玩家类型 ptr+8 == 0x31
- ★ 抓到的那条 0x30 包不是组队邀请;对象 ID 会随会话变化
打开报告 →
04
参考表(已过期)03_内存逆向与基址/04_基址总表_31007.html
旧版 31007 模块的完整基址/偏移/call 速查表,仅作对照参考,对本游戏已失效。
- 数组基址、对象字段偏移、物品/聊天/组队窗口对象、关键 call 地址
- 字段偏移部分跨版本稳定仍可用;基址数值换版本即失效
- 聊天数组 = 游戏基址 + 4×283;组队请求窗口 = 游戏基址 + 26708
打开报告 →
05
检测报告03_内存逆向与基址/05_基址总表_检测报告.html
对 31007 基址逐条做检测分类:仅对象数组一项活实测,其余标「待本机指针扫描确认」。
- 平移量 delta = 0x03BE3E68 − 0x03173B70 = 0x00A702F8(仅对象数组适用)
- 对象字段偏移(+0x08 类型 / +0x0C ID / +0x18 名 / +0x5F8 血)跨版本稳定,可用血值反查验证
- 唯一死矛盾:#组队_队员名称 源码值 824(0x338) 与注释 0x20C 不一致
打开报告 →
06
二进制验证03_内存逆向与基址/06_基址更新_验证与修复报告.html
把「基址更新」子程序里 34 条 FindData 特征在本机 exe 逐条精确匹配,分出可修与不可修。
- 20 条精确命中可直接用;3 条帧偏移漂移可一键修复(人物基址、全局大列表、攻击列表)
- 14 条无法自动修复:整段不存在,其中 9 条是 64 位客户端特征(架构不符永远 0 命中)
- 周围列表基址 0x9E09AC 是实体数组指针变量的位置(模块相对偏移,抗 ASLR)
打开报告 →
07
数据校验03_内存逆向与基址/07_基址数据验证报告.html
十进制↔十六进制逐条互算,修正 6 处十六进制注解错误、标出 1 处必须运行时确认的矛盾。
- 易语言常量以十进制参与编译 → 十进制始终权威,问题只在文档注解
- 6 处修正仅影响标注;CE_对象分析_按总表.lua 全用十进制,运行不受影响
- 待确认:#组队_队员名称 偏移 0x20C vs 0x338
打开报告 →
08
结论表03_内存逆向与基址/08_活游戏基址总表_已确认.html
本游戏唯一可信的活基址清单(常量有值 + exe 字节命中双条件),并解释队功能读不到人的根因。
- 命中次数 = 代码区引用该全局变量的次数,作为可信度判据
- 队员基址在常量文件里根本没有值定义;31007 的 0x03148650 活 exe 命中 0 次
- 各基址相对 31007 的 delta 各不相同(角色 +0xA0D844、背包 +0x8477FC),无法平移推导
打开报告 →
09
验证清单03_内存逆向与基址/09_对象字段偏移_验证清单.html
按 ✅ 二进制确认 / 📁 源码权威 / 🔍 需指针扫描 / ⚠ 自相矛盾 四级给全部字段标注状态。
- 对象数组、数组大小、背包基址 0x03B9DCE0 三项被二进制确认
- 其余基址不在 exe 静态数据里,必须 CE 指针扫描
- 遍历公式:对象指针 = 0x03BE3E68 + i×4,玩家槽 8000+
打开报告 →
10
权威字段表03_内存逆向与基址/10_玩家对象字段_数组指针偏移.html
按活游戏实跑子程序 _人物遍历_被单击 得出的玩家对象布局,推翻 31007 旧值。
- 基址变量 #怪物基址值 = 0x03BE3E68(exe 命中 1971 次)
- 玩家 type 0x31,与怪物是不同 C++ 类,偏移不通用
- 配套 CE_玩家对象字段验证.lua 可直接挂进程出报告
打开报告 →
11
权威字段表03_内存逆向与基址/11_怪物对象字段_数组指针偏移.html
按 _NPC遍历_被单击 得出的怪物对象布局;强调必须先按 +0x08 类型分流。
- 怪物 type 0x2E,与玩家对象同数组不同类
- 遍历:怪物位置 = 读整数((8000+x)×4 + #怪物基址值)
- 31007 / 早期分析的怪物字段旧值全部作废
打开报告 →
12
权威字段表03_内存逆向与基址/12_物品对象字段_数组指针偏移.html
背包容器与物品对象结构;背包基址已二进制确认为本游戏活基址。
- 背包基址值 0x03B9DCE0(exe 命中 3495 次)→ 读整数得容器指针
- 物品位置 = 读整数(背包基址 + 0x53C + (格子-1)×4),≤0 跳过
- 石头/宝石槽数组结构取自旧版本代码,待验证
打开报告 →
13
结构总览03_内存逆向与基址/13_遍历代码_数组结构分析.html
把「遍历」程序集里所有列表型数据的寻址方式归纳成统一规律。
- 通用规律:基址 + 索引×4 读指针 → 指针 + 字段偏移 读字段
- 确认用户一直在找的「队伍基址」就是 #队员基址(8 元素指针数组)
- 覆盖背包/任务包/仓库/快捷栏/技能辅助栏/聊天/结婚窗口
打开报告 →
14
二进制验证03_内存逆向与基址/14_道具遍历基址_验证报告.html
确认 道具遍历基址 是「地面掉落物」世界容器,与背包、副本道具是三套不同数据。
- 运行时常量 0x1801170(模块相对 0x1401170),指向 6400 槽指针数组
- 元素 element+8 关联回实体数组 0x03BE3E68 → 证明是场景掉落物
- GetAt(i) 于 VA 0x769BA0,主循环 VA 0x768D22
打开报告 →
15
CE 实测03_内存逆向与基址/15_队伍结构定位报告.html
用行为对比排除法证明:队伍关系不在玩家对象内部,是独立的一张表。
- 判据一(队内 3 人相同/队外不同)→ 0 个字段;判据二(槽位标记小值)→ 0 个字段
- 主模块数据区里队长名字共 5 处出现点,候选表 0x03BA1F40 起 0x50 步长
- 下一步:一次「行为对比」即可定案
打开报告 →
16
待解问题03_内存逆向与基址/16_队员结构_指针扫描分析.html
队员基址静态不可得,给出两阶段指针扫描方案与手动 CE 兜底步骤。
- 核心矛盾:名字偏移 0x20C 还是 0x338(必须活测)
- 阶段1 锚定一个队员对象指针 → 阶段2 反查队员基址
- 静态路径全灭:31007 值 0 命中、delta 平移候选 0x03bb8948 也 0 命中
打开报告 →
17
操作手册03_内存逆向与基址/17_CE_队员基址_手动手册.html
脚本跑不动或队友名特殊时的兜底流程,6 步拿到队员基址并回填常量。
- 先遍历 k=8000..10000 找 ptr+8==0x31 且 ptr+0x18 名字匹配的对象指针
- 对该指针做指针扫描,找 8 槽连续的全局变量
- 回填 #队员基址 / #组队_队员名称(824 或 524) / #组队_队长名称 908 / #组队_队伍等级 928
打开报告 →
18
封包分析03_内存逆向与基址/18_组队_名字组_发包分析.html
用两条抓包逐字节对照,纠正 A440 定界符的误判,给出正确的发包构造器。
- ★ A440 不是定界符——那两字节是名字自带的「一」字的 BIG5 编码
- 正确结构 = 固定头 + 名字 BIG5 + 00 00 + 补零到 40 字节
- opcode 30001400;已用 Python 逐字节复现两条真实抓包
打开报告 →