用 pefile + capstone 对
D:\rxjh2025\client\YGOnline.exe做全量模式匹配(push 小立即数+push 资源名指针配对、分派函数cmp [ebp+0xC], 立即数),共扫出 58 条控件登记、65 个已分派命令 ID,每条带 VA 可复核。⚠ 旧文档写的
D:\rxjh\client\YGOnline.exe路径已失效,实际为D:\rxjh2025\client\。
构造函数 0xA2DCC0:push 控件ID 与 push <资源名指针> 配对硬编码,随后 call 0x609410(工厂)。ID 存放偏移随控件变体:普通按钮 +0x364,列表项 +0x370(登记点 0xCB7317),特殊控件 +0x440(登记点 0xCBD5C8)。
| ID | 资源名 | 含义 | 登记点 VA | 存放偏移 | 备注 |
|---|---|---|---|---|---|
| 0x31 | auto_play | 开始挂机 | 0xA2E3E6 | +0x364 | 文本 0xD15 |
| 0x32 | auto_stop | 停止挂机 | — | +0x364 | |
| 0x33 | auto_setup | 打开设置 | — | +0x364 | |
| 0x34 | auto_close | 关闭窗口 | — | +0x364 | |
| 0x35 | auto_btn_save | 保存(双态按钮) | 0xA2EB83 | this+0x3940 | |
| 0x36 | cancel_click | 取消 | 0xA2EBF6 | this+0x3800 | |
| 0x2C | — | — | — | +0x364 | 分派函数处理 |
| ID | 含义 | 证据位置 | 备注 |
|---|---|---|---|
| 0x35 | 保存(auto_btn_save,双态按钮) | 0xA2EB83 | 存 this+0x3940 |
| 0x36 | 取消(cancel_click) | 0xA2EBF6 | 存 this+0x3800 |
| 0xA3 / 0xA4 | 弹窗确定 / 取消(ok_click / cancel_click) | 0xA2F4D9 / 0xA2F54F | 文本 0x187B |
| 0xA5 | 勾选框(window_auto_check.bmp) | 0xA2F792 | |
| 0x94 / 0x97 | 设置窗保存 / 退出(auto_save / auto_exit) | 0xA3C6BC / 0xA3C713 | 存 0x4E8 / 0x4EC |
| 0x76 | 高级付费按钮(Premuim) | 0xA46FA0 | 存 this+0x43C,文本 0xF83 |
结构性控件落位:
push [ecx+0x36C0] 完全互证)0x0 ~ 0xF
0x16 / 0x17 / 0x1E / 0x1F
0x28 ~ 0x2C
0x31 ~ 0x3C
0x41 ~ 0x46
0x4F ~ 0x63
0x6D ~ 0x71
msg >= 0x435 走跳转表 0x68EDC8助手_发送UI命令 换 ID 常量调用,无需改代码结构。0xA3/A4/A5、0x94/0x97、0x76 属设置窗/子弹窗,由各自窗口类的 WndProc 分派(InterAutoPlay 自己的 0xA3F3D0 无 cmp [ebp+0xC],imm 形式,用跳转表)。对这些 ID 调用前必须先确认目标窗口实例是谁,直接套"总控父窗口"会落空。
push 0x3F4 精确字节计数 = 235 处,与《助手CALL调用链反汇编》完全吻合call(E8 搜索为空)——它经函数指针/尾跳转被调mov eax,[edx+0x34B4] 在 0xA3E676 与 0xA46FB4(Premuim 登记处)均出现 → +0x34B4 = 对话对象里"助手窗口指针"成员