← 返回总索引助手挂机模块 · 汇编内存地址地图2026-09-16-00-24-33\助手汇编内存地图.html

热血江湖(台服 Yulgang)· 助手挂机模块 汇编内存地址地图

目标文件 D:\rxjh2025\client\YGOnline.exe · 静态逆向(pefile + capstone 32 位)。所有地址均为 VA(内存虚拟地址),基址 ImageBase = 0x00400000

模块边界

助手代码区 .text:0x00A2C000 – 0x00A4B000(约 188KB,132 个函数) .data 全局区:0x011E0000 起,大小 0x4A377A8 .rdata 字符串:0x0106F000 起 汇编入口:0x00A3EB90 / 0x00A448D0
重要修正(来自用户):本客户端为台服原版改造而来,YBi.cfg.aut 均为游戏原厂文件(非脚本生成); 游戏本体文本用 Big5 编码,而挂机助手插件的部分配置用 GBK。字符串在 exe 中整体混淆,无裸 GBK/Big5 明文。

一、核心 I/O 子系统(.aut 账号 / .mhslot 槽位)

功能函数 VA大小引用字符串 / 全局说明
.aut 加载0x00A3EB900x2C0 "%s\client\%s.aut"
g:0x1821A70, 0x3BA1910
sprintf(根路径,账号名)→fopen→读版本字节0x6a(106)+ 8槽×0x5C4(1476)。
调用者:0xA2F288
.aut 保存0x00A448D00x120 "%s\client\%s.aut"
mode"wb"@0x1076F44
g:0x1821A70, 0x3BA1910
fopen "wb"→序列化→fwrite 0x2E20=11808B→fclose。被 7 个设置入口调用:
0xA3FD7F 0xA400A1 0xA40D2E 0xA41121 0xA44D4D 0xA44DE5 0xA46036
块序列化0x00A458700x5F0 填充 this+0x564(8 槽 ×1476 结构)。被保存函数 0xA448D0 内 0xA4496C 调用
序列化辅助0x00A3AF800x70 this+0x343c / 0x3440 → 写 this+0x33b0 / 0x33b4(缓存字段)
.mhslot 加载0x00A3EE500x1D0 "%s.mhslot"
g:0x39709F0
角色标记/装备槽存档读取
.mhslot 保存0x00A448600x70 "%s.mhslot"
g:0x39709F0
角色标记/装备槽存档写入
.aut 文件结构:总长 11812 字节 = 版本字节 0x6A(1B) + 8 槽 × 0x5C4(1476B)。与 181 个 .aut 账号文件、0x3BA7C28 角色数组(步长 0x5C4)完全吻合。

二、助手主消息分发器(中央调度)

0x00A3F700 —— 助手中央命令/消息处理函数(主逻辑 size 0x2040,149 个内部 call)。

入口:mov eax,[ebp+8]sub ecx,0xbcmp [ebp-0x114],0x99ja 0xA41204
分发:movzx eax,byte ptr [edx+0xA41698]jmp dword ptr [eax*4 + 0xA41588]

引用的标志性字符串:auto_play_on.bmpauto_play.bmp192.168.8.(IP 格式串)。

跳转表基址:0x00A41588(256×4 字节)
索引字节表:0x00A41698
命令 ID 范围:0x0B – 0xA4
真实 case 目标:68 个

该函数的 this 经方法链传入(入口 mov [ebp-0xf8],ecx),内部引用全局 0x59200A4主循环状态标志候选)。「开启挂机」即路由到某一 case 后设置对象内布尔成员。

三、UI / 各分页窗口处理函数

窗口 / 按钮函数 VA大小特征字符串
主挂机窗口(play/stop/setup)0x00A2DCC00x1BB0auto_play.bmp / auto_stop.bmp / auto_setup.bmp / window_head.bmp
扩展窗口(web/保存/退出)0x00A3C5600x660auto_winEx_07.bmp / auto_save.bmp / auto_exit.bmp / web_btn_close.bmp
设置按钮0x00A468900x900auto_set_btn_click/over/n.bmp / system_select.bmp
勾选框0x00A47C700x440window_auto_check.bmp
丹药窗口0x00A480B00x490window_auto_dan.bmp
物品窗口0x00A485800x520window_auto_item.bmp
migo(宠物)窗口0x00A48AA00x560window_auto_migo.bmp
聊天 / 公会颜色窗口0x00A460500x4B0window_auto_chat.bmp / munpa_color_save_*.bmp / close_btn_*.bmp
聊天扩展窗口0x00A490300xE70auto_winEx_06.bmp / auto_btn_chat_save/close/check.bmp
选择/Buff 列表0x00A2C8D00x800"SetSelectItem slot error"
Buff 列表0x00A304800x420"AddBuffList slot error"
掉落 Buff 列表0x00A3AFF00x1B0"DeleteDropBuff slot error"
PK 日志0x00A2FEA00x5E0pk_log.txt

四、宏 / 数据包发送

0x00A2D0D0(size 0x5B0,11 call)—— 引用 MAUC_YULGANG 与宏格式串 MG,%d,%s,... / BD,... / NT,... / DM,...,全局 0x183C538 / 0x39709F0 / 0x3BA1C18 / 0x3BA1DE8。疑似把助手设置编码成游戏宏命令发送。

五、混淆 / 校验子程序(种子常量)

四个小函数 0xA3B620 / 0xA3B6E0 / 0xA3B8B0 / 0xA3BBE0 均以 0x3BE3E68 为循环常量、循环上限 0x3A98=15000,与 movss xmm0,[0x107b820] 配合——疑似字符串/配置的解密或 CRC 校验例程(非指针)。

六、关键全局数据地址(.data,易语言外挂解引用目标)

全局 VA类型作用出现
0x003B94788助手管理器单例候选①0xA3C300 等
0x003B94798助手管理器单例候选②(函数入口取 this)0xA35FA0 等
0x003B947B0助手管理器单例候选③0xA35FA0 等
0x003B947C0助手管理器相关0xA35FA0 等
0x0039709F0存+读玩家/角色对象单例(.mhslot/.aut 共用)0xA2D0D0/0xA3EE50/0xA44860
0x003BA1910账号名字符串(sprintf 参数)load/save
0x001821A70根路径/指针(sprintf 参数)load/save
0x0059200A4主循环(0xA3F700)状态标志候选0xA3F700
0x003BE3E68混淆/校验种子常量(循环上限15000)0xA3B62x
0x0011F4380存+读GS 安全 cookie(每函数 prologue)全局
0x01076F44模式串 "wb"(fopen)0xA448D0
0x00A41588主分发跳转表(256×4)0xA3F700
0x003BA7C28数组角色槽位数组(步长 0x5C4,8 槽)逆向已知

七、「开启挂机」开关定位结论

静态结论:「开启挂机」不是一个独立的裸全局布尔,而是助手管理器对象内的成员字段,在点击 play 按钮 / 收到 start 命令时由 0xA3F700 的某个 case 写入。静态层面未出现单行 mov [ecx+off],1 的明确开关(标志位走成员写入或位域)。

给易语言外挂的落地思路:

  1. 先解助手管理器单例:候选基址 [[0x3B94798]][[0x3B94788]](取 this 的全局)。易语言里即 读内存整数型(进程, 基址+偏移) 拿对象指针。
  2. 对象指针 + 开启挂机成员偏移(需动态确认:在游戏中点击「开启挂机」,用 CE 观察哪个 this+offset 由 0 变 1)。
  3. 或直接 CALL 0xA3F700 主分发(push 命令 ID=start 对应的 0x0B+idx),把 ecx 设为管理器 this——这是外挂「开启挂机 call」最典型的实现对齐方式。

注:图片 723.jpg 经全盘检索未落盘到可读路径,无法直接读取其中地址;以上地图已覆盖助手模块全部汇编内存位置,供你对照图片中的偏移直接定位。

生成:静态逆向分析 · 工具 pefile + capstone(x86-32) · 地址均为 VA(ImageBase=0x400000)。 配套脚本:assist_map.py / assist2.py / assist3.py / assist4.py。