目标:读写热血江湖 游戏内挂助手 的配置(不是我们助手外挂的配置)。
存储载体:D:\rxjh2025\client\<账号>.aut,固定 11812 字节
(4 字节文件头 + 4 槽 × 2952,每槽2 页 × 1476)
| 入口 | 位置 | 适合 |
|---|---|---|
| 图形界面(推荐) | 双击 D:\AI空间\rxjh\内挂设置读写工具.bat | 看配置、勾开关、改对话、改参数 |
| 命令行 | python tools/rxjh_aut.py | 批量、脚本、对拍 |
| CE 在线读写 | tools/rxjh_cfg.lua(Cheat Engine Lua) | 游戏运行中直接读写内存 |
三者读写的是同一套字节,只是通道不同。
双击 内挂设置读写工具.bat → 自动打开浏览器(http://127.0.0.1:8765/),<br>命令窗口留着别关,关掉即停服务。
┌ 账号下拉(自动扫描 client\*.aut,按修改时间倒序) 游戏状态 文件 MD5/时间 ┐
│ [新建档] [克隆] [备份/还原] [联动探针] │
│ ┌──────────┬──────────────────────────────────────────────────────┐ │
│ │ 槽 1~4 │ 开关(35) │ 對話(13) │ 參數(29) │ 原始字節 │ │
│ │ 页 1 / 2 │ │ │
│ │ 快照信息 │ │ │
│ └──────────┴──────────────────────────────────────────────────────┘ │
│ ● 未保存改动 N 项 [放弃改动] [保存到文件] │
└──────────────────────────────────────────────────────────────────────┘
新建档:按出厂默认生成一份新账号档(可顺带指定要开的开关序号,如 30,31)。<br>克隆:把当前选中账号的槽 0 配置整份复制给新账号(保留目标版本号、血蓝字段归 50%)。
| 标签 | 内容 | 对应文件位置 |
|---|---|---|
| 开关 | 35 个复选框,位 0~34 | 页内 0x074 + i |
| 對話 | 每秒重複對話(3~999)+ 13 行内容 + 13 个勾选 | 0x098(uint16) / 0x0A9+78×i / 0x09C+i |
| 參數 | 29 个 0~255 数值(99=未设置) | 页内 0x56C + i×2 |
| 原始字節 | 只读 hex dump,可核对任意偏移 | 整页 1476B |
<账号>.aut.bak_YYYYmmdd_HHMMSS解决「35 个开关位分别对应界面哪个勾选框」这个还没闭合的问题:
槽? 页? 开关[12] 0 → 1一次测一位,测几次整张表就齐了。
文件 ──登录进游戏,读一次──▶ 内存镜像 ──只有点面板「儲存」──▶ 文件
(正常退出不写盘)
| 结论 | 证据 |
|---|---|
| 文件是唯一真源,登录时读一次 | 改成 Z01-NXE7HQ 后重开,13 行一字不差 |
| 正常退出游戏不写盘 | 关游戏后 MD5 与关前完全一致 |
| 只有面板「儲存」会写盘 | 面板改 999 → 文件 0x098 = E7 03 |
| 游戏运行中改文件不会被定时覆盖 | 改完连采 15 秒纹丝不动;只有碰面板才被反写 |
| 内存镜像与文件逐字节同构 | 11808 字节差异 0 处 |
完全退出游戏 → 改文件 → 重新登录进游戏 → 内挂面板才会是新值
注意:游戏运行期间,只要你在面板上点了「儲存」,内存里的旧值会把你的改动覆盖掉。<br>界面顶部会出现黄色提示条,就是提醒这件事。
页基址:文件偏移 = 4 + 2952×槽 + 0x5C4×页(槽 0~3,页 0~1)
| 偏移 | 长度 | 含义 | 备注 |
|---|---|---|---|
0x000 | 2 | 页标记 01 01 | 非 01 01 视为该页未启用 |
0x006 | 4 | 版本标记 16 43 01 01 | 随账号变 |
0x00C / 0x010 | 4+4 | float(实测 0.84 / 0.55) | 混有运行时数据(疑似 HP%/MP%) |
0x01C~0x06F | 12×8 | 数值区 | 每组前 4 字节 float |
0x074 | 35 | 功能开关位图 | 每字节一个开关,0/1 |
0x098 | 2 | 每秒重複對話次数 uint16 小端 | 面板限制 3~999,999 = E7 03 |
0x09C | 13 | 13 行对话的勾选位 | 每字节 0/1 |
0x0A9 | 13×78 | 13 行对话内容 | BIG5,00 结尾,剩余补零 |
0x4A8 | 196 | 第二组设置 | 0x4BA 处另有版本标记 |
0x56C | 29×2 | 参数表 | 取每项低字节;面板上 99 = 未设置 |
0x5A6~0x5C3 | — | 尾部 | — |
对话内容存 BIG5(繁体)。<br>输入简体字会编码失败 —— 工具会明确报「含 BIG5 无法表示的字符」并拒绝保存,<br>不会静默写成 ?。要写中文请用繁体字。
cd D:\AI空间\rxjh\tools
python rxjh_aut.py list # 所有账号档一览
python rxjh_aut.py list orzo # 某档 4 槽概览
python rxjh_aut.py pages orzo # 各页字段明细
python rxjh_aut.py dump orzo --slot 0 # 槽 0 两页十六进制
python rxjh_aut.py fields orzo --slot 0 --page 0
# 改(--dry 只预演;默认自动备份)
python rxjh_aut.py set orzo --page 0 --count 555
python rxjh_aut.py set orzo --page 0 --switch 12=1 --switch 13=0
python rxjh_aut.py set orzo --page 0 --param 0=42 --param 3=99
python rxjh_aut.py set orzo --page 0 --item "0=測試內容"
# 槽操作
python rxjh_aut.py copy orzo --from 0 --to 1 # 复制槽
python rxjh_aut.py clear orzo --slot 1 # 清空槽
python rxjh_aut.py diff orzo --a 0 --b 1 # 比较两槽
# 导出 / 导入(JSON,含每页原始字节)
python rxjh_aut.py export orzo --out bak.json
python rxjh_aut.py import orzo --src bak.json --src-slot 0 --to-slot 1
# 新建 / 克隆(给新角色带配置)
python rxjh_aut.py default # 打印出厂默认骨架(不写文件)
python rxjh_aut.py new abc001 # 生成空白默认档
python rxjh_aut.py new abc001 --switches 30,31 # 默认 + 开 30、31
python rxjh_aut.py clone orzo abc001 # 把 orzo 槽0 配置复制给 abc001
python rxjh_aut.py clone orzo abc001 --dry # 只看会做什么
游戏在跑时 set 会被拦下,确认要写加 --force(new / clone 新建不存在的档不会拦)。
新建/克隆的语义:出厂默认 = 全 0 + 11 个骨架字节(文件头 6A + 页标记 01 01 + 版本 AA 42 + 01 01 + 两个 1F(float 0.5) + 版本镜像 AA 42)。<br>开关全关 / 每秒重复 0 / 对话空 / 参数 0 / 血蓝阈值 50%。克隆时会保留目标档的版本标记、把实时血蓝字段归 0.5。<br>详见 内挂默认档_来源与新建_20261019.md。
tools/ 下已放两份可直接用的初始档,改名即用:
| 文件 | 版本标记 | 说明 |
|---|---|---|
rxjh_初始模板_AA42.aut | 0x42AA | 与真实存档 loldsx3.aut MD5 完全相同(差异 0 字节) |
rxjh_初始模板_4316.aut | 0x4316 | 跟当前客户端版本,与该模板只差 4 字节 |
# 直接用(复制到 client 目录并改成账号名)
copy "D:\AI空间\rxjh\tools\rxjh_初始模板_4316.aut" "D:\rxjh2025\client\我的号.aut"
# 重新生成
python rxjh_aut.py default 我的模板.aut --version 0x42AA
python rxjh_aut.py default 带开关.aut --switches 30,31
默认档来源的反汇编取证见 内挂初始化配置_来源_20261019.md:exe 里没有静态模板数据块,是代码 memset(11808) + 写 4 个 01 现场生成的。
python rxjh_aut.py switches orzo # 35 项对照表:偏移 / 110 档实测开启率 / 判定 / 当前值
python rxjh_aut.py switches orzo --page 0 # 只看页 0
i ↔ 偏移 0x074+i。#17~#23、#26~#28 共 10 项是死位(115 个真实页从未为 1,改它无效);#30(0x092) 80%、#31(0x093) 77% 是几乎必开的两项。
tools/switches.json 写 {"1":"自动攻击","2":"自动喝红"},命令行和网页立刻生效。python _aut_switch_probe.py orzo,然后去面板点一个勾选 + 儲存設定,脚本会报出动了第几项。详见 内挂35项开关_实测对照_20261019.md。
tools/rxjh_cfg.lua(30 个函数)+ tools/rxjh_ctrl.lua(控件库)。
先复制到纯 ASCII 路径(CE 的 loadfile 对中文路径不稳):
cp "D:/AI空间/rxjh/tools/rxjh_cfg.lua" C:/rxlib/
cp "D:/AI空间/rxjh/tools/rxjh_ctrl.lua" C:/rxlib/
CE → Table → Show Cheat Table Lua Script,粘贴执行:
local cfg = assert(loadfile([[C:\rxlib\rxjh_cfg.lua]]))()
cfg.locate([[D:\rxjh2025\client\orzo.aut]]) -- AOB 自动定位当前进程的内存镜像
cfg.show(0, 0) -- 打印槽0页0全部字段
cfg.set_count(0, 0, 555) -- 改每秒次数
cfg.switches(0, 0) -- 看 35 个开关
cfg.dump_to([[D:\rxjh2025\client\orzo.aut]]) -- 内存导出成 .aut(MD5 与真实存档一致)
⚠ 内存基址每次启动都变,必须 locate() 重新定位,不要写死地址。<br>⚠ 改内存不会自动落盘,也不会刷新已打开的面板;只有点面板「儲存」才会写回文件。
已验证
0x074 35 位开关读写、0x098 uint16(3~999 双向回归:888→78 03、3→03 00、越界拒绝)0x09C 13 位勾选、0x0A9 13×78B BIG5 文本(写后回读逐字节一致)0x56C 29 参数读写未闭合
+0x360 到底是纯 UI 还是驱动源(写它改不了配置,已证)| 现象 | 原因 / 处理 |
|---|---|
| 双击 bat 一闪而过 | 命令窗口里会有错误;确认 python 路径存在,或改成系统 python |
| 浏览器打不开 | 端口被占会自动 +1,看命令窗口打印的地址 |
| 保存后游戏里没变 | 必须完全退出游戏再重进(登录才读文件) |
| 改完又变回去了 | 你在面板点了「儲存」,内存旧值反写了 → 用「备份/还原」恢复 |
| 提示「含 BIG5 无法表示的字符」 | 输入了简体字,改成繁体 |
| 提示「每秒重複對話只能是 3~999」 | 面板本身的硬限制 |
| 文件列表是空的 | 确认 D:\rxjh2025\client\ 下有 .aut,且大小为 11812 |