热血江湖助手 · 分析资料站← 报告总目录助手主页
分区:13_内挂配置逆向源文件:内挂配置读写_使用说明.md篇幅:8.0 KB收录:2026-10-19 17:10

内挂配置读写工具 —— rxjh_aut.py 使用说明

目标:读写 <游戏目录>\client\<账号>.aut,也就是「被封印的内挂丸」保存的那份配置。
结构全部来自 110+ 个样本实测,2026-10-18/19 复核。
工具路径:D:\AI空间\rxjh\tools\rxjh_aut.py

一、结构速查(背下来这四条就够)

.aut  =  4 字节头(6A 00 00 00) + 4 个「配置槽」× 2952 字节   =  11812 字节(恒定)

每个槽 = 2 个「页」× 1476(0x5C4) 字节     ← 页 = 一套独立设置,两页互不影响

页内布局(页基址 = 槽基址 + 0x5C4 × 页号):

页内偏移长度内容
0x0002页标记 01 01
0x0064版本标记 16 43 01 01
0x00C / 0x0104+4两个 float(实测 0.78 / 0.40)
0x01C ~ 0x06F12×8数值区(攻击/恢复/范围类,前 4 字节是 float)
0x07435★ 功能开关位图,每字节 1 个开关(0 关 / 1 开)
0x0981★ 数量档位(实测 0 / 3 / 5 / 7 / 50)
0x09C5标志位(实测 01 01 01 01 01)
0x0A913×78★ 名单:BIG5 字符串,辅助武功/道具名,如 /邀請 TD26871020
0x4A8 ~ 0x550—第二组设置(0x4BA 有 16 43 标记)
0x56C29×2★ 参数表(每项取第 1 字节,99 = 空/未设置)
0x5A6 ~ 0x5C3—尾部

保存机制:fopen(path,"r+b") → fwrite(整块 11812) → fclose(内含 SetEndOfFile 截断)。<br>定长结构体整块覆写,没有增量、没有 ini、没有注册表。


二、命令

cd D:\AI空间\rxjh\tools
set PY=C:\Users\Administrator\.workbuddy\binaries\python\envs\default\Scripts\python.exe

:: 1) 四个槽一眼看全
%PY% rxjh_aut.py list orzo
%PY% rxjh_aut.py list mumber0010

:: 2) 详细内容(不写盘,随便看)
%PY% rxjh_aut.py dump mumber0010
%PY% rxjh_aut.py dump mumber0010 --slot 1
%PY% rxjh_aut.py dump mumber0010 --slot 1 --json     :: 机器可读

:: 3) 改:开关 / 参数 / 档位 / 名单
%PY% rxjh_aut.py set chang1 --slot 0 --switch 3=1 --switch 16=0
%PY% rxjh_aut.py set chang1 --slot 0 --param 0=20 --param 2=35
%PY% rxjh_aut.py set chang1 --slot 0 --count 5
%PY% rxjh_aut.py set chang1 --slot 0 --item "0=/邀請 TD26871020"
%PY% rxjh_aut.py set chang1 --slot 0 --page 1 --switch 1=1      :: 改第 2 页

:: 4) 槽之间搬运
%PY% rxjh_aut.py copy chang1 --from 0 --to 2
%PY% rxjh_aut.py diff chang1 --a 0 --b 1
%PY% rxjh_aut.py init chang1 --slot 3 --from 0                  :: 空槽做成合法骨架
%PY% rxjh_aut.py clear chang1 --slot 3

:: 5) 备份成 JSON / 用 JSON 还原
%PY% rxjh_aut.py export chang1 my_chang1.json
%PY% rxjh_aut.py import chang1 my_chang1.json --slot 2 --src-slot 0

:: 任何写操作都可以先看不动
%PY% rxjh_aut.py set chang1 --slot 2 --switch 0=1 --dry

参数说明:


三、真实输出长什么样

> python rxjh_aut.py list mumber0010
文件 D:/rxjh2025/client\mumber0010.aut   11812 字节   4 槽 × 2 页
当前生效槽(非零最多): 槽1
──────────────────────────────────────────────────────────────────────────────
槽    非零字节  页0开关  页1开关  页0档  页1档  页0参数  页0名单
──────────────────────────────────────────────────────────────────────────────
0    0        0       0       0      0      0       0
1    260      7       3       5      5      0       5
2    21       1       0       0      0      0       0
3    0        0       0       0      0      0       0
──────────────────────────────────────────────────────────────────────────────
槽1 页0 已开启开关序号: [1, 2, 3, 30, 31, 32, 34]
槽1   非零字节 260   (当前生效)
  ── 页0 ──
    标记 01 01  版本标记 16 43 01 01  数值A 0.7800 数值B 0.4000
    开关(35) : 01110000000000000000000000000011101
    已开启   : [1, 2, 3, 30, 31, 32, 34]
    档位     : 5      标志: [1, 1, 1, 1, 1]
    参数(29) : [0, 0, ...]
    名单(13) :
        [ 0] /邀請 TD26871020
        [ 1] /邀請 TD26871030

chang1 那种「挂机在跑」的号则是:

槽0  非零字节 144  页0开关 13  页0档位 3  页0参数 29 项全填
已开启开关序号: [2, 3, 5, 6, 7, 8, 9, 10, 13, 16, 30, 31, 32]
参数(29): [15, 99, 25, 2, 99, 99, 99, 99, 99, 29, 2, 99, 99, 99, 30, 2, 5, 99,
           40, 99, 99, 5, 99, 80, 10, 99, 10, 99, 99]

(参数表里 99 当「空/不设」用,其余是百分比或秒数。)


四、当库用

import sys
sys.path.insert(0, r"D:\AI空间\rxjh\tools")
from rxjh_aut import AutFile

f = AutFile(r"D:\rxjh2025\client\chang1.aut")

print(f.active_slot)          # 当前生效槽
s = f.slot(0)
print(s.nonzero, s.switches, s.count, s.params, s.items)

p0 = s.page(0)
print(p0.float_a, p0.float_b, p0.numbers())

p0.set_switch(3, 1)           # 打开 3 号开关
p0.set_param(0, 20)           # 参数 0 = 20
p0.set_count(5)
p0.set_item(0, "/邀請 TD26871020")

f.save()                      # 自动 .bak

import/export 走的是 Page.to_dict()/from_dict(),里面带 raw(1476 字节十六进制),<br>所以导出再导入是逐字节一致的(已实测 0 差异)。


五、必须知道的坑

  1. 游戏开着改 = 白改。客户端把整份结构体放在内存里,点「保存设定」时整块写回,你改的文件会被覆盖。

顺便说:orzo 这种刚登录从没点过保存的号,.aut 里 4 个槽几乎全 0,页面上看到的勾选只是运行时默认值。

  1. 空槽不能直接写。新槽的 0x000 是 00 00 而不是 01 01,游戏可能不认。用 init(或直接 set,工具会自动按模板初始化)。
  2. 索引/槽号不是账号的「方案名」。4 个槽是 4 套预设,页 0/页 1 是同一槽里的两套独立设置,别搞混。
  3. 35 个开关的序号 ↔ 面板上哪个勾选框,还没钉死。

已知对照:chang1 开着 [2,3,5,6,7,8,9,10,13,16,30,31,32],mumber0010 开着 [1,2,3,30,31,32,34],<br>但缺「点一下 → 看哪个字节变」的对照实验。补齐方法:<br>> 游戏里只改一个勾选 → 点「保存设定」→ python tools\_watch_save.py 会报出改动的字节偏移 → 换算成开关序号。

  1. .aut 里的名字是 BIG5。工具已经自动解码/编码,中文不会乱;但命令行里名字别以 / 开头(在 Git-Bash 下会被当路径改写成 C:/...),用 cmd/PowerShell 或在前面加引号加空格都行。

六、和其它资料的关系

文件内容
分析报告汇总\05_助手UI控件逆向\助手控件实机对照表.html面板上每个控件的窗口偏移 / 控件 ID / 名称(CE 实机 98 个)
分析报告汇总\05_助手UI控件逆向\控件对照表_20261018.csv上面那份表的原始数据
内挂配置_保存机制_20261018.md.aut / .mhslot / .scs 三种存档的结构与保存机制
tools\_watch_save.py轮询监控存档写入,写入即存快照并算差异(补齐开关对照用)
tools\_aut_cfg.py早期版本(结构没拆到「页」这一层,保留作参照)
本页由 Markdown 报告自动转排;如需原始 md,可在原会话工作区取用。