============================================================================== 「自己名字」来源梳理与验证方案 2026-09-28 对象:D:\rxjh2025\client\YGOnline.exe(XIGNCODE 保护,基址恒 0x400000) ============================================================================== 一、你贴的这行的确切含义 ------------------------------------------------------------------------------ 自己名字 = 编码_BIG5到简体 (内存_读文本型 (全局_进程句柄, #当前血量值 - 128)) #当前血量值 = 0x03970A70(绝对地址,不是模块内偏移) - 128 = - 0x80 → 读取地址 = 0x03970A70 - 0x80 = 0x039709F0 这是 2023 版辅助的「人物结构体」写法:整个结构体以 0x03970A70 为原点, 名字放在原点**之前**,血量在原点**之上**: 名字 -0x80 (0x039709F0) ← 本行读的就是这里 等级 -0x4C (0x03970A24) 内存_读字节型(#当前血量值 - 76) 当前血 +0x00 (0x03970A70) 当前内功 +0x04 (0x03970A74) 当前经验 +0x18 (0x03970A88) 当前历练 +0x2C (0x03970A9C) 当前金钱 +0x64 (0x03970AD4) 其余 +0x88 愤怒 / +0xC8 攻击 / +0xE4 金钱 / +0xEC 最大负重 … 同源证据:D:\AI空间\rxjh\旧版本更新.代码\代码\窗口程序集_MainDialogWnd.form.e.txt 2091/2093/2155/2271 行(读名字并设窗口标题)、842/862 行(等级 -76)、 3373/3538/3539/3540 行(内功 +4 / 经验 +24 / 金钱 +100 / 历练 +44)。 二、这条现在还活着吗?(要更正我上一轮的说法) ------------------------------------------------------------------------------ ★ 更正:我上一轮说「0x03970A70 已读 0 失效」是不准确的。那个结论来自 《背包物品负重字段探测_0926.txt》第 16.3 节的 **静态 .text 扫描"零命中"**—— 意思是新版代码里找不到对该地址的**立即数引用**,不等于变量本身不存在。 实测证据(本轮重新查证): 1) 本轮 VirtualQueryEx(不开 CE 直接问内核): 0x03970A70 所在区域 = base 0x03970000,size 0x22FA000, State=MEM_COMMIT(4096),Protect=PAGE_READWRITE(4),Type=MEM_IMAGE(16777216) → 地址空间**存在且可读写**,属于模块镜像的数据区,不是空洞。 2) 《IFManager单例与通用范式活体验证.md》(2026-09-18)§五 活体实测: "0x3970A70=当前血量(写者 0x6DBC8F,旁有 imul ×0x64 百分比)" "血量继续用 0x3970A70(活体=482 与 UI 一致)" → **血量这一侧是活的**,0x3970940~0x3970B90 整块 = 玩家状态变量簇。 结论:**血量读数有效;但 −0x80 处是否还写着名字,从来没有实测过** (0918 那次只逐个验证了血量/状态码/计时器/阈值,没查字符串)。 2023 版结构体的偏移不能默认沿用,必须活体读一次才算数。 三、硬阻塞:XIGNCODE 拒绝外部进程读游戏内存 ------------------------------------------------------------------------------ 本轮做了对照实验(Python + ctypes 直接调 ReadProcessMemory / NtReadVirtualMemory): · 目标 explorer.exe → STATUS_SUCCESS(0x00000000),读到 8 字节正常 · 目标 YGOnline.exe → STATUS_ACCESS_DENIED(0xC0000022),连 0x400000 都读不了 · 我们已是管理员(NIUNIU\Administrator) 且成功启用 SeDebugPrivilege, 仍被拒;OpenProcess 能成功返回句柄,但 **VM_READ 被内核回调剥掉了** (典型反外挂手法:ObRegisterCallbacks 剥离 PROCESS_VM_READ) → 所以读游戏内存**只能走 CE 那条链路**(CE 有自己的驱动/已获信任)。 我这边不是"脚本写错",是内核层面挡的。CE 开着挂上桥,我立刻能读数。 四、「自己名字」的四条候选来源(按可信度排序) ------------------------------------------------------------------------------ A. 旧写法 地址 0x039709F0 = #当前血量值 − 128 状态:区域活的,但名字内容**未实测**;偏移来自 2023 版,风险高。 B. 玩家全局结构体 [[0x0188C60C] + 0x338] 来源:《背包物品负重字段探测_0926.txt》16.4 节静态确认 0x0188C60C = 玩家全局结构体指针(静态 .text 18 处引用,与本版本 同区的任务根 0x0188C61C 仅差 0x10)。 且该结构体字段频次统计 +0x330 ×1588 / +0x334 ×574 / +0x338 ×394 —— 与「队员记录」类的布局(+0x334 序号、+0x338 名字)**完全对齐**。 ★ 这是目前最像答案的一条:一句 内存_读文本型 就能拿到。 C. 角色记录链 角色记录类(虚表 0x10EBD8C)+ 0x338 本会话已活体抓到自己的记录并读出名字,例如 0x65993758 +0x338 = 一至尊霸王花一 0x65993390 +0x700 = 一至尊霸王花一 结构:+0x334 序号 / +0x338 名字(Big5) / +0x816 有效 / +0x860 队长, 与队伍表同一套常量。 缺:**还没找到指向它的静态指针**(地址是堆动态分配的)→ 差最后一步。 D. 静态名字表 0x03BF3848,stride 0x50,索引 0~6 活体已看到内容(本会话 dump): +0x000 沒有男朋友 +0x100 一至… +0x140 一至尊一美美一 +0x280 (…) +0x1E0 沒有男朋友 … 代码侧证据(名字 0x3bf3848 的引用 0x7870B6 附近): cmp [ebp-0x78],6 / imul ecx,[ebp-0x78],0x50 / add ecx,0x03BF3848 / push ecx / call → 这是一张**固定地址**的名字池(很可能是"附近玩家/NPC 名单"), 但**哪一格是"自己"未确认**,不适合直接拿来当"自己名字"。 五、验证方案(CE 一开就跑,一次定死) ------------------------------------------------------------------------------ 脚本已就绪:D:\ce_mcp\_verify_selfname.py · ① 读 0x03970A70(血量)与 0x039709F0(旧名字),并扫 0x3970900~0x3970C00 里的全部 Big5 串(判 A 是否活着) · ② 逐格 dump 0x03BF3848 + n×0x50(n=0..9),列出每格名字(判定 D 的槽位含义) · ③ 本机已知的 3 个角色名全内存定位,标出落在静态区(<0x10000000)的命中 · ④ 顺手读 [0x0188C60C] 与 [[0x0188C60C]+0x338](验 B) 用法:CE 挂桥 → 改脚本顶部 PID → python _verify_selfname.py → 读 D:\ce_mcp\verify_selfname.txt 若 B 成立,最终子程序只多两行: 人物对象 = 内存_读整数型 (全局_进程句柄, #玩家结构体基址) ' 0x0188C60C 自己名字 = 编码_BIG5到简体 (内存_读文本型 (全局_进程句柄, 人物对象 + #人物名字值)) ' #玩家结构体基址 = "188C60C" #人物名字值 = 824 (0x338) 若 B 不成立,就转 C:在 CE 里对 0x65993758 做指针扫描(找指向它的静态地址), 拿到后再补一条常量即可。 六、当前三个客户端的角色名(用户确认) ------------------------------------------------------------------------------ token010 = 有男朋友(待确认是否即「沒有男朋友」) token012 = 一至尊一美美一 token013 = 一至尊霸王花一 进程:pid 13360 / 2540 / 13872(本会话 namescan 是在 13360 上做的) ==============================================================================