← 返回总索引热血江湖助手 UI 逆向 — 偏移总表🔑 卡密引导05_助手UI控件逆向/助手UI逆向_偏移总表.html

热血江湖私服 · 小助手 UI 逆向工程 — 偏移总表

整理时间 2026-09-19 15:30 · 数据来源:实机 CE 转储 diff(14:10:31 / 14:15:27 两份 496 槽全量日志)· 全部结论均经二次转储交叉验证

目录

① 控件对象内存结构(头区 0x00~0x4F)

偏移类型含义实测值 / 备注
+0x00dwordvtable 指针(区分控件族)0x010B0E7C 常规控件 · 0x010BA280 编辑框 · 0x010B9E34 系统对象
+0x04dword父窗口对象指针主窗口 0x233611C0、页签栏 0x4E69C238(每次启动会变)
+0x08dword未知(恒见 0x22)疑为窗口类标记
+0x0Cdword创建序号(连续递增)0x109A 起;同一控件在数组中的稳定键
+0x10dword类型码0x13=常规控件 · 0x0E=编辑框 · 0x0D/0x11=少见
+0x14dword常量 -10xFFFFFFFF,不是"不可用"标志(曾误判,已纠正)
+0x28dwordX 坐标(相对父窗口)复选框三列网格 X 步进 45px
+0x2CdwordY 坐标复选框行距 20~50px
+0x30dword宽 W13=复选框 · 24=按钮 · 18=设定按钮 · 46=大按钮 · 8/16=滚动条/编辑框
+0x34dword高 H同上配对(13x13 / 24x25 / 18x34 / 46x44)
+0x40dword页面激活/组内可见标志1=当前页可见;切页时整组翻转(序号2成员 0→1、序号5成员 1→0 实测 31 个对象)
+0x44dword恒 0—
+0x48dword组内序号(=所属页签页号)0~5;页签栏自身编号 1~6 也带 2/5 双份
+0x4Cdword组 ID助手主窗口复选框共用 0x109E;其它窗口 0x11A4/0x12DE/0x1320…

② 状态位 — 本次逆向核心成果

偏移含义验证证据
+0x360 复选框勾选状态:0=未勾,1=已勾。
对"设定…"按钮=已配置状态;对大按钮=已设定状态。
不随页面切换变化,与 +0x40 完全独立。
四魂复选框 88/89/90/155 勾选后 0→1;切页 diff 中 8 个状态位纹丝不动
+0x40 当前页激活标志:控件所属页被打开=1,否则 0。
组内序号(+0x48)=页号。
14:15 diff:31 对象按"序号2全 0→1、序号5全 1→0"规律翻转
当前勾选快照(14:15):+0x360=1 共 8 个 —— 88 戀人之魂、89 刺客之魂、90 商人之魂、155 東嶺之魂(四个 13×13 复选框)+ 91 撿取道具種類、113 赤蛇鬥關、156 解除異常武功(18×34 设定钮)+ 118 環龍之魂(46×44)。57 自動撿取=0。
程序化勾选方案(待实测):内存_写整数型(句柄, 控件对象+十六到十("360"), 1),建议拿槽92(编号57 自動撿取)做写入实验;写入只改状态位,是否触发助手内部逻辑/写回 .aut 需验证,必要时配合 vt[1] CALL 路径。

③ 扩展区结构(0x320~0x3CF)— 常规控件

偏移含义实测值 / 备注
+0x320 / +0x324float = 1.0 ×20x3F800000,缩放系数
+0x328类型相关小值复选框 0x9D、多行编辑框 0x70、滚动条 0x9D、小编辑框 0x08
+0x32C / +0x32B布局计数如 0x25/0x26(页签内行号类)
+0x334计数 A常见 9~10
+0x338计数 B0x3C/0x4D 等(编辑框行高类);速度框=0x64(100,最大值?)
+0x33D~+0x33F颜色/渐变常量BE000000 / BEFFFFFF / DCFFFFFF
+0x345第二父指针编辑框族指向页签栏 0x4E69C238
+0x346 / +0x347成对值(同值×2)疑为资源句柄/缓存对
+0x350 / +0x358可互换指针对0x00642A3C(静态地址)与 0 的位置互换 = 选中态表现之一
+0x364功能号与 .aut/.scs 存档功能号一致;过滤条件 ≥0 且 <3000
+0x368BIG5 悬停提示文本(变长,0 截断)如「勾選後,將自動撿取地上掉落的道具」;编辑框族此位置=长度计数(见④)
+0x3A0第二段 BIG5 文本(提示续/扩展)较长提示溢出部分

④ 编辑框族专用结构(vtable 0x010BA280)

编辑框的 +0x360 段布局与常规控件完全不同:+0x368 不是文本!
偏移含义实测值
+0x360共享编辑组件指针多行框=滚动条族统一 0x1ADEF714;小单行框另有 +0x32F=0x1ADEF654(两址相邻 0xC0,为共享编辑组件对)
+0x364恒 1(非功能号)—
+0x368文本字节长度类计数槽49 输入文本 44→95;槽48 文本变短 130→110
+0x36C恒定(Y 相关?)等于控件 Y 坐标
+0x380第二计数(滚动/光标位置)槽49 新增文本 0→46;滚动条拖动 60→40
结论:文字本体不在对象 0x320~0x3CF 区间内,存在堆缓冲区。已验证"99/101"不在已转储区间(唯一 3939 命中=槽183 提示文案「3~999秒」误报)。读取文字需顺 +0x330 指针定点转储缓冲区,或弹窗打开时全量转储 diff 新控件后追踪其专属指针。

⑤ 功能号 ↔ 控件名对照表(实解)

功能号控件类型
1~6页签按钮(攻擊/設定/恢復/輔助/回城/其他)19×35 按钮
13是否攻擊复选框
18/19墨魂箱·體力恢復藥設定复选框/设定
20/21墨魂箱·內功恢復藥設定复选框/设定
28輔助武功复选框
40/41墨魂箱回城符組(开/关)11×11 复选框
44回城自動關閉遊戲复选框
45神獸自動補飼料复选框
47自動開寶箱复选框
49啟動內掛丸24×25 按钮
50停止內掛丸24×25 按钮
51設定內掛丸24×25 按钮
52關閉內掛丸24×25 按钮
功能号控件类型
55反覆聊天复选框
57自動撿取道具复选框(勾选实验目标)
59設定反覆聊天訊息18×34 设定钮
84重複對話時間(3~999秒)= .aut +0x9C编辑框
88啟動戀人之魂13×13 复选框
89啟動刺客之魂13×13 复选框
90啟動商人之魂13×13 复选框
91設定撿取道具種類18×34 设定钮
99反覆聊天訊息文本编辑框
113赤蛇鬥關設定18×34 设定钮
118環龍之魂(已設定)46×44 大按钮
152~156東嶺之魂/解除異常狀態武功等复选框/设定钮
11/87 等墨魂箱回城符組合相关复选框
墨魂的箱子弹窗内另有滑条值:體力/內功恢復 59%×2、速度 4、回城页道具數 101 —— 均未在已转储区间发现,待弹窗打开状态全量转储后定位。

⑥ 类型识别特征

特征值类型
尺寸(W×H)13×13复选框本体
24×25功能按钮(啟動/停止/設定/關閉)
18×34「設定…」子弹窗按钮
46×44魂类大按钮
8×161 / 16×116滚动条 / 多行编辑框
vtable(+0x00)0x010B0E7C常规控件
0x010BA280编辑框
0x010B9E34系统对象(编号1061/1246/2239)
网格布局复选框三列网格:X 步进 45px、Y 步进 20~50px

⑦ 关键全局地址与 CALL 链(2026-09-19 游戏更新后新版)

项目地址备注
全局大列表基址模块基址 + 58939224 (0x3835758)活体验证 158~1000 槽有效;旧 0x03BE80D0 已作废
背包全局0x03BEF5D0特征码命中;旧 bag+0x4A3F0 换算式失效
小助手 CALL 入口0xA82880(模块偏移 0x682880)旧 0xA3F700 已作废;stdcall 自清参
按钮分发器按钮对象+4 → 父UI → vtable 0x010E7070 → vt[1]=0xB39430executeCodeEx(0,false,addr) 路径可用;pushad/push0/push功能号/call/popad
控件数组大列表 1000 槽,每槽 4 字节对象指针过滤:编号≥0 且 <3000;-827994200=字符串资源「道具吗?」;F00DBAAD=哨兵
ECX 取值[obj+4] 一层解引用两层 [[obj+4]] 拿到 .rdata vtable 必崩
2026-09-24 活体核验(同进程):全局大列表 1000/1000 槽全为合法堆指针(首偏移 vtable 如 0x10F1EE4×92、0x10FB388×53…),表给基址正确;背包全局 0x03BEF5D0 → P=0x497F45B8。aob_scan 默认 protection=+X-C-W 只扫代码段,扫数据/名字须传 protection="-X"(否则 0 命中)。

⑧ 存档文件格式(client 目录,定长结构体直接写盘,无加密)

文件大小结构
.aut11812 B 账号配置。头 dword=106;float 参数区;+0x9C=喊话间隔(字节);0x60~0xA8 布尔开关区;0xA9 起宏表 78B/条×13(BIG5 文本+4 偏移,=对话设定 13 个编辑框)
.scs403 B 角色配置。0x00 起 15B BIG5 角色名 + 0x0F 魔数 28 04;0x11 起 12B/条记录:[00][功能号2B大端][00][参数2B][数值4B LE]
.mhslot292 B 角色拾取配置。头 dword=2;+0x0C/+0x24 物品ID;+0x60 起 16B/条(槽号 + float 0.0090857 + 8B UID)
ybopt2_tokenXXX.cfg— 账号↔角色权威映射(<N_角色名> 标签 BIG5 内嵌)。token006=親親徒弟2 · 008=親親徒弟1 · 009=一明天一 · 010=沒有男朋友 · 011=TM加速器 · 012=一至尊一美美一 · 013=一至尊霸王花一
写入注意:① 宏文本必须 BIG5 可编码(繁体);② 助手退出时整文件覆盖写回——改文件要趁该账号配置未运行时;③ .scs/.mhslot 文件名是 BIG5→Unicode 私用区乱码,按名 exists 会 False,需扫目录枚举。

⑨ 转储与解析方法论(可复用流程)

环节要点
性能优化转储每控件仅 2 次整块读:内存_读字节集(句柄, 对象, 80) 取 0x00~0x4F;内存_读字节集(句柄, 对象+800, 176) 取 0x320~0x3CF。跳过全零段 0x50~0x31F。
日志格式---- 槽N 对象=X 编号=Y ---- + 每行 +偏移 32个hex(16 字节、16 对齐)
解析关键坑每行只有 16 字节且 16 对齐:+0x364/+0x368 藏在 +360 行内偏移 4/8;0x00~0x4F 必须拼 +00/+10/+20/+30/+40 五行;+0x360 在拼接块第 64 字节
diff 定位法单一变量操作(只勾一个框/只改一个数字)→ 前后两份转储逐槽逐段比对 → 变化字节即状态位。误报排除:悬停提示文案里可能含数字(如 3~999)
易语言工具链字节集转HEX 需自建子程序(补零);无 0x 字面量 → 十六到十("320");存盘用 写到文件(路径, 到字节集(文本))

⑩ 待验证事项(下一步)

优先事项方法
高+0x360 程序化勾选写入闭环写槽92(编号57)=1 → 转储验证 → 看游戏界面是否勾上、.aut 是否落盘
高编辑框文本本体定位墨魂箱子窗口保持打开 → 全量转储 → diff 新控件 → 顺 +0x330 指针定点读缓冲区(预期看到 "101"/"59"/"4")
中+0x14 定性复核现为"常量 -1",观察是否存在 0 的情况
中滑条百分率存储位置59/4/59 三值联合指纹搜索(成对 0x3B + 夹 4)
低+0x350/+0x358 指针对互换语义0x00642A3C 静态地址内容分析

⑪ 墨魂之箱子 / 凝神珠背包(2026-09-24 活体补充)

用户更正:凝神珠背包里装的"箱子"即 墨魂之箱子。其时间制记录以指纹 80 3A 09 00(=604800=7天秒数)标记;过期的箱子指纹为 0/负数,不在指纹列表,仅活跃(未过期)箱能被扫到——与"读箱子"逻辑一致。
项目值 / 偏移说明
活跃箱定位aob_scan 80 3A 09 00数据区扫描(须 protection="-X",默认只扫代码会 0 命中);命中处=箱记录基址
到期时间命中 +0x20 起 5×WORD年/月/日/时/分;即 读箱子 的 基址=命中+32 取法
当前实况活跃箱=11 个2026-09-24 同进程实测;过期箱数无指纹,需另行推算
名字存储不在内存物品名经 item-ID 查表解析,背包对象内不存名字串(aob_scan "墨魂" 全 protection 均 0 命中);"槽名字"实为「墨魂之箱子 + 到期」
箱子对象位置游戏侧数据墨魂之箱子 对象 不在 本表 1000 槽 UI 控件大列表中(实测:11 个指纹均不落在大列表对象体内/首偏移),属游戏背包容器,须经 背包全局 0x03BEF5D0 走游戏侧路径
背包管理器内部布局已变:本进程 P=0x497F45B8,其 +0x00=0x10FAE94 / +0x04=0x3A309D30 / +0x38=0x49695EC8 / +0x3C=0x49695ECC;而 +0x08=31、+0x0C=985 为计数类小整数,不再是 E2TXT 的 +0/+8/+0xC 三容器指针写法,凝神珠容器具体槽偏移待进一步钉死。
遍历建议:活跃箱直接用"读箱子"式指纹扫描 + 读到期即可(过期箱不在列表,符合预期);要数全部格位(含过期)须先钉死凝神珠容器槽数组偏移,再枚举其对象指针。
热血江湖助手 · 分析资料站← 报告总目录助手主页