← 返回总索引03_内存逆向与基址 03_内存逆向与基址/22_全局地址与基址分析报告.html
03_内存逆向与基址更新:2026-09-18对象:D:\rxjh2025\client\YGOnline.exe

全局地址与基址分析报告 —— 静态引用图视角

对象D:\rxjh2025\client\YGOnline.exe(14,752,768 字节,ImageBase 0x400000,无重定位)
方法:capstone 逐指令线性反汇编 + MSVC RTTI 校验 + 引用形态分类
与前面几篇的区别:前面是「拿已知地址去验证」;这一篇反过来 —— 把 exe 里所有被绝对寻址引用的地址全挖出来,把已知的摘掉,剩下的按引用数排序 + 聚类 + 反推语义
生成:2026-09-18


一、结论速览

结论 内容
方法论升级 字节扫描会误报(把指令流字节当地址,例如扫出 0x05050505);改用 capstone 后 373 万条指令仅 0.04% 未解码,引用数变成「真实指令口径」
全景 全 exe 共 5978 个被绝对寻址引用的目标(104,011 处引用)+ 1812 个索引寻址基址
★ 拿到类名 通过 RTTI 解出 764 个真虚表762 个 C++ 类名,其中 203 个 Inter* 功能/控件类
★ 助手类名 助手窗口 = .?AVInterAutoPlay@@,虚表 0x010A20F8
★ 范式通用 所有 Inter* 类共用 9 槽布局,槽1 = 动作分派0x3EE/0x3F4 两个通用动作码在多个类的槽1 里都出现 → 你驱动助手的这套手法对其它窗口同样适用
修正旧结论 InterInGameTotalShop 虚表是 0x01079A68(不是 0x01079A6C)→ 因此 0x68B2B0 是「槽1」不是「槽0」
新识别的高价值地址 0x01844360 = MAPID(当前地图ID)(铁证:旁边就是 MAPID : %d 格式串)
确认的死值 仓库基址值 0x0182A2DC商店基址值 0x03BC33BC —— 两种寻址形态都 0 引用,且 ±0x80 内一个活跃地址都没有

二、方法:三代扫描器的差异(为什么引用数变了)

做法 结果 问题
第 1 代(早期) 只认 [disp32] 一种形态 大量地址被误判「0 引用」 漏了 [reg*4+disp32] 索引形态
第 2 代(verify_all2.py 字节扫描 + 补 SIB 形态 8721 目标 / 105,342 引用 仍有误报:在指令中段/数据里扫出假地址(如 0x05050505
第 3 代(本次) capstone 逐条反汇编,只取真实解码出的内存操作数 5978 目标 / 104,011 引用,未解码仅 0.04% 口径更严,引用数比第 2 代略低(去掉误报)

这一代还多了两个能力:

  1. 读写区分 —— 用 capstone op.access 判断该地址是「只读」还是「运行时被赋值」。有写入点的地址才可能是指针型基址
  2. 引用形态分类 ——
普通     mov ecx, dword ptr [0x183c520]         ← 全局标量/指针
索引     mov ecx, dword ptr [eax*4+0x3be3e68]   ← ★数组/对象表基址
指针槽   call dword ptr [0x76c080]              ← ★函数指针(发包就是这么调的)

三、全景统计

节区 被引用目标数 说明
.data 3515 全局变量(真正能当基址的地方)
.rdata 2425 虚表 / 跳转表 / 延迟导入槽 / 字符串
.fptable 32 浮点常量表
.text 6 代码内自引用
索引寻址基址 数量
全部 1812 个基址 / 6814 处索引访问

exe 节区:

.text    VA=0x00401000  VS=0x0C6D5B1
.rdata   VA=0x0106F000  VS=0x0170356
.data    VA=0x011E0000  VS=0x4A377A8   ← 注意:文件原始大小只有 0x1F800
.fptable VA=0x05C18000  VS=0x80
.rsrc    VA=0x05C19000  VS=0x14320

.data 99.6% 在文件里没有初值 → 静态只能知道「代码碰过这个地址」,值必须活体读


四、★ RTTI 类名地图(本次最大的收获)

exe 带完整 MSVC RTTI。结构关系:

vtable[-1] → _RTTICompleteObjectLocator(COL)
                +0x0C → _TypeDescriptor
                          +8 → ".?AVInterAutoPlay@@"   ← 类名直接可读
数量
TypeDescriptor(类型名) 785
COL(完整对象定位器) 861
真虚表(-4 处有 COL 支撑) 764
其中游戏/业务类 · 标准库类 762 · 2

4.1 助手的类名 = InterAutoPlay

证据
助手窗口虚表 0x010A20F8 其 -4 处 0x010A20F4 = 0x0118A238(COL)
COL → 类型名 .?AVInterAutoPlay@@ COL+0x0C → TD 0x011F92F4 → 名字符串
槽0(Init/构造) 0x00A2FBF0 字节 dump 直接读出
槽1(动作分派) 0x00A3F3D0 同上 —— 与你实机日志 虚表=010A20F8 槽1=A3F3D0 完全吻合
构造函数 0x00A2DCC0 该函数里 c7 00 F8 20 0A 01 = mov dword ptr [eax], 0x010A20F8

这条自洽链同时验证了三件事:这套 RTTI 定位法可靠虚表首地址没有偏移你日志里的值是对的

4.2 全部 Inter* 类(203 个)

槽0 = 构造/Init,槽1 = ★动作分派(点控件的入口)

# 类名 虚表 槽0 (Init) 槽1 (★分派)
1 Inter2048Game 0x01075268 0x00617370 0x00617DA0
2 InterAge 0x010A1A04 0x00A18680 0x00A18A40
3 InterAttChangeSoulStone 0x010753BC 0x00619EC0 0x0061B390
4 InterAttribute 0x010A1AD8 0x00A194E0 0x00A1A6D0
5 InterAttributeJesukbu 0x010A1B60 0x00A1D980 0x00A1E500
6 InterAttributeSoulStone 0x01075394 0x00619F00 0x0061B570
7 InterAuction 0x010A1BE8 0x00A250C0 0x00A26190
8 InterAuction 0x010A1C10 0x00763AC0 0x00763AD0
9 InterAutoPlay 0x010A20F8 0x00A2FBF0 0x00A3F3D0
10 InterAutosell 0x01075530 0x0061DEB0 0x006254F0
11 InterByulho 0x010A2BEC 0x00A58CB0 0x00A59C10
12 InterCallToGuild 0x010A2D1C 0x00A5B6A0 0x00A5D8A0
13 InterCastleWar 0x01076108 0x00631960 0x00636960
14 InterCenterMessage 0x01076EB0 0x00637F60 0x00638450
15 InterChangeLooksPet 0x010A2DDC 0x00A61F10 0x00A632C0
16 InterChat 0x010A30B4 0x00A69360 0x00A930D0
17 InterCoatChange 0x010A4724 0x00A9CAF0 0x00A9D430
18 InterConfirmBox 0x01077010 0x0063C1E0 0x0063C360
19 InterCouple 0x010B0B34 0x00CA5CE0 0x00CA5EF0
20 InterCoupleBreakUp 0x010B0B5C 0x00CA64B0 0x00CA6AB0
21 InterCoupleGift 0x010B0B84 0x00CA8040 0x00CA8B00
22 InterCouplePropose 0x010B0CB0 0x00CA98D0 0x00CAA360
23 InterCoupleStatus 0x010B0D20 0x00CAB8C0 0x00CABDF0
24 InterCreate 0x010A47C8 0x00A9E560 0x00AA6070
25 InterDamhwarinCombo 0x010770B4 0x0063CC50 0x0063D210
26 InterEmoticon 0x01077380 0x00641230 0x006428D0
27 InterEnchantEquip 0x01080D54 0x00730EA0 0x00738690
28 InterEnchantMuhoonEquip 0x01080D2C 0x00730EE0 0x00738F90
29 InterEscape 0x010A5088 0x00AAD7C0 0x00AAEAF0
30 InterEvent 0x010A51E4 0x00AAF500 0x00AB0100
31 InterExcangeHeroWeapon 0x010775C8 0x00645380 0x00646080
32 InterExchange 0x010A5270 0x00AB2210 0x00AB44B0
33 InterExchangeAttributeAccessory 0x010777A8 0x00647540 0x00647BC0
34 InterExchangeGroupEquipment 0x01077810 0x00648B50 0x00649280
35 InterExit 0x010A5408 0x00AB6610 0x00AB6780
36 InterFighterCombo 0x01077878 0x00649EC0 0x0064A560
37 InterFireworksEvent 0x01080DCC 0x00730F20 0x007390E0
38 InterGenderChange 0x01077A6C 0x0064BEC0 0x0064C5C0
39 InterGibo 0x01079714 0x00670F30 0x00672730
40 InterGifticon 0x01077A94 0x0064D130 0x0064D310
41 InterGroup 0x0107993C 0x006742A0 0x00674590
42 InterGuildNameChange 0x01077B18 0x0064E2D0 0x0064FB50
43 InterGwisokbu 0x01080D7C 0x00730F60 0x007391E0
44 InterHCoinExchange 0x01080D04 0x00730FA0 0x007392C0
45 InterHairdressing 0x010A5574 0x00AB9080 0x00ABAB90
46 InterHanbigwangQuest 0x01079964 0x00674F70 0x00675490
47 InterHelp 0x010A5664 0x00ABBEB0 0x00ABBF00
48 InterHonorRank3 0x01077D98 0x00650180 0x0065B660
49 InterImage 0x010B1090 0x00CC3C50 0x00CC3DB0
50 InterInGameTotalShop 0x01079A68 0x0067C180 0x0068B2B0
51 InterIndunQuest 0x01079264 0x00662C30 0x00667B80
52 InterInitiateAbility 0x010A568C 0x00ABE480 0x00AC1350
53 InterInventory 0x010A5890 0x00AC67E0 0x00AE3760
54 InterItemReg 0x010A5EB4 0x00AE62C0 0x00AE63E0
55 InterItemRooting 0x010A5F44 0x00AE7040 0x00AE77E0
56 InterJedanbu 0x010A5FCC 0x00AE7ED0 0x00AE8050
57 InterJesukbu 0x010A5FF4 0x00AEA860 0x00AED410
58 InterKeyboard 0x010A6078 0x00AF2300 0x00AF33D0
59 InterKeyboardControl 0x0107B8C8 0x006968A0 0x00698840
60 InterKeyboardNumOnly 0x010A6440 0x00AF3CF0 0x00AF4390
61 InterLOGIN 0x010A6830 0x00AF8880 0x00AFACE0
62 InterList 0x010B1130 0x00CC5AA0 0x00CC65D0
63 InterLuckyBag 0x010A7428 0x00B033C0 0x00B03480
64 InterLuckyBox 0x010A7450 0x00B036B0 0x00B04440
65 InterMAIN 0x010A7D40 0x00B22380 0x00B465B0
66 InterMacro 0x010A7590 0x00B06550 0x00B06E20
67 InterMaeyuExchangeItem 0x0107B8F8 0x00699650 0x00699D80
68 InterMail 0x010A75DC 0x00B08910 0x00B10A30
69 InterMainGageBar 0x010A8A0C 0x00B54C60 0x00B551B0
70 InterManufacture 0x010A8B7C 0x00B58970 0x00B5CE70
71 InterMarbleEvolve 0x0107B960 0x0069A980 0x0069BB70
72 InterMarriageAdmission 0x010A8E04 0x00B64840 0x00B657E0
73 InterMarriageInvitation 0x010A8F18 0x00B680D0 0x00B68D00
74 InterMarriageRing 0x010A9320 0x00B6BC40 0x00B6BE60
75 InterMarriageWeding 0x010A9394 0x00B6C870 0x00B6D310
76 InterMedicineMaking 0x010A97B8 0x00B78450 0x00B79F00
77 InterMemberParty 0x010A9840 0x00B7BBA0 0x00B7BC50
78 InterMessenger 0x010BA7B8 0x00D9D470 0x00DA4DA0
79 InterMessengerAdd 0x010BA768 0x00D9D4B0 0x00DA4EF0
80 InterMessengerChat 0x010BA790 0x00D9D4F0 0x00DA4F90
81 InterMiniMap 0x010A9930 0x00B81320 0x00B83F60
82 InterMinimapMove 0x0107BA1C 0x006A2690 0x006A5660
83 InterMsgBox 0x010B1204 0x00CCABE0 0x00CCBC60
84 InterMugong 0x010A9E24 0x00B8DC10 0x00B93180
85 InterMugongHanbigwang 0x0107BB90 0x006ABBD0 0x006B39D0
86 InterMugongLearn 0x010AA2F0 0x00B98A00 0x00B98B10
87 InterMunpa 0x010AF928 0x00C64E80 0x00C6B2E0
88 InterMunpaCloth 0x010AF57C 0x00C56C90 0x00C578E0
89 InterMunpaWar 0x010AF810 0x00C5AE60 0x00C5B070
90 InterMunpaWearSynthesis 0x010AF8AC 0x00C5E420 0x00C5EA00
91 InterMyAging 0x010AA384 0x00B99D50 0x00B9B6A0
92 InterMyParty 0x010AA44C 0x00BA2570 0x00BA2800
93 InterNPCAging 0x010B030C 0x00C8C4E0 0x00C8DEC0
94 InterNPCBloodBattle 0x0107C204 0x006C4440 0x006C5690
95 InterNPCEnchant 0x010B03F8 0x00C90DE0 0x00C92120
96 InterNPCItemSeal 0x010B0420 0x00C93420 0x00C936C0
97 InterNPCKawibawibo 0x0107C3C8 0x006C6EA0 0x006C7140
98 InterNPCKawibawiboInfo 0x0107C3F0 0x006C6EE0 0x006C7730
99 InterNPCLock 0x010B04A0 0x00C94950 0x00C95F30
100 InterNPCManufactureUnion 0x010B06A0 0x00C98290 0x00C98450
101 InterNPCMunpa 0x010B073C 0x00C99F20 0x00C9AF20
102 InterNPCNewAging 0x0107C860 0x006C9D40 0x006CB420
103 InterNPCPetEnchant 0x010B07CC 0x00C9C420 0x00C9D200
104 InterNPCPetYongmuldan 0x010B0820 0x00C9E6A0 0x00C9F550
105 InterNPCReturneeRollBook 0x0107E798 0x00704EA0 0x00705610
106 InterNPCRoastBungeoppang 0x0107CAB4 0x006CFA70 0x006D0910
107 InterNPCSMS 0x010B04F0 0x00C94990 0x00C96430
108 InterNPCStore 0x010B08EC 0x00CA0D10 0x00CA3180
109 InterNPCTrans 0x010B098C 0x00CA3A40 0x00CA4570
110 InterNPCUnLock 0x010B04C8 0x00C949D0 0x00C967C0
111 InterNPCWarEx 0x0107CD94 0x006DBBE0 0x006E25E0
112 InterNPCWarFilter 0x0107DD8C 0x006E7E70 0x006E7FE0
113 InterNPCWarTwo 0x0107DFE0 0x006EE940 0x006F2170
114 InterNPCWarp 0x010B0B0C 0x00CA4F00 0x00CA55D0
115 InterNPCYGTalk 0x0107E218 0x006F45C0 0x006F4830
116 InterNPC_ACCDisassemble 0x010AFEC4 0x00C82580 0x00C82AD0
117 InterNPC_ACCUpgrade 0x010AFF60 0x00C83D10 0x00C84B10
118 InterNPC_AttendanceBook 0x0107E308 0x006F5C20 0x006F6690
119 InterNPC_COSTUME_Disassemble 0x0107E49C 0x006F7340 0x006F78A0
120 InterNPC_COSTUME_Transference 0x0107E550 0x006F8670 0x006F8FC0
121 InterNPC_COSTUME_Upgrade 0x0107E5EC 0x006F9F40 0x006FAA30
122 InterNPC_EQUIPMENT_Upgrade 0x0107E668 0x006FBFF0 0x006FC8A0
123 InterNPCcollate 0x010B0358 0x00C8F340 0x00C8FD60
124 InterNameChange 0x010AA818 0x00BA3AA0 0x00BA5080
125 InterNewBoard 0x0107C0B0 0x006C0690 0x006C0980
126 InterNewSoulRevive 0x0107C144 0x006C2220 0x006C22C0
127 InterNotice 0x010AA8C4 0x00BA53F0 0x00BA5810
128 InterNpc 0x010AFDB8 0x00C77180 0x00C7FCC0
129 InterNpcManufacture 0x010B0678 0x00C974D0 0x00C97760
130 InterNpcMunpaRestore 0x0107C7D0 0x006C8790 0x006C8F20
131 InterNpcRepair 0x0107C918 0x006CC440 0x006CCC20
132 InterNpcWarToogi 0x0107DDB4 0x006EA370 0x006EA760
133 InterNpc_GuildWar_Cancel 0x010B0184 0x00C87CE0 0x00C87F30
134 InterNpc_GuildWar_Enter 0x010B01AC 0x00C88C20 0x00C88DB0
135 InterNpc_GuildWar_ShowRank 0x010B00A8 0x00C867D0 0x00C86B20
136 InterNpc_OrgWear_Requital 0x010B0220 0x00C8AB20 0x00C8ACF0
137 InterNumber 0x010B1430 0x00CCCAB0 0x00CCCCF0
138 InterOption 0x010AA950 0x00BAF570 0x00BB11E0
139 InterPCStore 0x010AB608 0x00BCC7C0 0x00BD2620
140 InterParty 0x010AADBC 0x00BBA4B0 0x00BBE970
141 InterPartySearch 0x010AB318 0x00BC84D0 0x00BC3750
142 InterPartySearchChat 0x010AB480 0x00BCA190 0x00BCA8D0
143 InterPath 0x0107E6CC 0x006FF0F0 0x00A4EEA0
144 InterPayStorage 0x0107CB28 0x006D1E70 0x006D51D0
145 InterPcRoomBenefit 0x010AB5B4 0x00BCB620 0x00BCBC60
146 InterPetMenuPopup 0x010AB8AC 0x00BD71E0 0x00BD7290
147 InterPetNaming 0x010AB9A0 0x00BD7990 0x00BD7F50
148 InterPetStore 0x010ABA00 0x00BD8550 0x00BD8FC0
149 InterPkPropensityQuestNotice 0x010ABA8C 0x00BD9650 0x00BD9980
150 InterPopup 0x010ABAB4 0x00BD9BB0 0x00BD9C00
151 InterPopupMenu::NameSpace_PopupMenu 0x010B15BC 0x00CCF100 0x00CCF400
152 InterPouch 0x010ABADC 0x00BDA150 0x00BDA260
153 InterPouchClothes 0x0107E728 0x00704390 0x007043D0
154 InterPouchEvent 0x0107E7C0 0x00705D30 0x00705DD0
155 InterPremiumCashItem 0x010ABB74 0x00BDC710 0x00BDD640
156 InterPremiumCharm 0x010ABD7C 0x00BE0080 0x00BE0E40
157 InterPremiumSelect 0x010AC074 0x00BE57B0 0x00BE5CE0
158 InterPremiumWin 0x010AC1EC 0x00BE7BD0 0x00BE95F0
159 InterQuestEx 0x010AC340 0x00BF2F90 0x00BFB320
160 InterRaid 0x0107E830 0x0070AF90 0x0070E1E0
161 InterSTATIC 0x010B15EC 0x00CD3050 0x00CD3780
162 InterSaJeMugongWnd 0x010802D8 0x007158A0 0x00715E90
163 InterScenario 0x01080348 0x00718490 0x00718EE0
164 InterSecretCode 0x010AD3B0 0x00C076F0 0x00C08210
165 InterSelect 0x010AD534 0x00C0D790 0x00C114A0
166 InterSendPackage 0x010804C0 0x0071B670 0x00723070
167 InterSerialItem 0x01080CDC 0x00730FE0 0x00739370
168 InterServerMove 0x01080BC4 0x0072C100 0x0072CDD0
169 InterServerSelectForTournament 0x01081338 0x0073C3D0 0x0073C760
170 InterSoulPetEvolve 0x01081460 0x0073D260 0x0073ECF0
171 InterSoulPetReinforce 0x010814F4 0x0073FB00 0x00741680
172 InterSoulPetSeal 0x010815E0 0x007426A0 0x007431F0
173 InterSoulPetWareHouse 0x01081668 0x00743BA0 0x00744AB0
174 InterSoulStone 0x010816D4 0x007453E0 0x00746420
175 InterStatus 0x010AE084 0x00C1CDC0 0x00C291E0
176 InterStatusReply 0x010AE4BC 0x00C32C00 0x00C34220
177 InterTargetingUI 0x010817A8 0x00747660 0x00748070
178 InterTextInput 0x010B1614 0x00CD4AF0 0x00CD53C0
179 InterTextOutput 0x010B163C 0x00CD6DA0 0x00CD75E0
180 InterTimer 0x01081964 0x0074A4F0 0x0074A7F0
181 InterToolTipBox 0x0108198C 0x0074AF20 0x0074AF70
182 InterTotalShopPreview 0x01081A20 0x0074CDA0 0x0074E650
183 InterUI_AllFunction 0x01081D24 0x007573D0 0x00757CF0
184 InterUI_CharacterInfo 0x01082554 0x00758DA0 0x00759710
185 InterUI_Community 0x01082B04 0x0075A2C0 0x0075ACD0
186 InterUI_Manufacture 0x010831E0 0x0075B7B0 0x0075BBD0
187 InterUI_Option 0x010835F4 0x0075C840 0x0075CF30
188 InterUI_Quest 0x01083AA8 0x0075D790 0x0075DBB0
189 InterVIPCashMallReward 0x01083C98 0x0075EC80 0x0075F480
190 InterValentineRank 0x01080DA4 0x00731020 0x007394D0
191 InterWar 0x010AE588 0x00C35C20 0x00C37180
192 InterWarStateMap 0x01083DFC 0x00761830 0x00761A70
193 InterWarpToGuard 0x01083D60 0x007600A0 0x00760170
194 InterWarpToGuild 0x010AE5E4 0x00C38730 0x00C38C80
195 InterWarpToParty 0x010AE63C 0x00C39800 0x00C39F60
196 InterWeb 0x010AE688 0x00C3C260 0x00C3ED70
197 InterWebFlash 0x010841C4 0x00763A80 0x00764300
198 InterWebFlash 0x010841EC 0x00763AC0 0x00763AD0
199 InterWebPreview 0x010AEAFC 0x00C41E40 0x00C43510
200 InterWebShop 0x010AEDE0 0x00C46AE0 0x00C46C50
201 InterWindow 0x010B1664 0x00CD9E20 0x00CDABE0
202 InternalContextBase::details::Concurrency 0x01111D80 0x00F909E0 0x00F90A0E
203 InternalContextBase::details::Concurrency 0x01111DA8 0x00F909E4 0x00F90A2A

完整含槽2~槽8 的清单:_g4_inter.tsv(制表符分隔,可直接导入表格软件)


五、★ 9 槽布局与「通用调用范式」

5.1 槽位指纹:哪些槽是每类专属,哪些是共用基类

统计全部 Inter* 类各槽取值分布:

主要取值 占同类比例 判定
槽0 每类都不同 各类自己的 Init/构造
槽1 每类都不同 各类自己的动作分派
槽2 0x00567450 98% 基类共用(mov eax,1; ret
槽3 0x00568CA0 94% 基类共用
槽4 0x00568C90 98% 基类共用
槽5 0x00568CB0 98% 基类共用
槽6 0x00A58370 98% 基类桩(xor al,al; ret → 返回 false)
槽7 0x00A58350 97% 基类桩(ret 0x10 → 4 参数空实现)
槽8 0x00A58360 97% 基类桩(mov al,1; ret 0x10 → 返回 true)

结论:槽 2~8 全是共用基类桩函数,没有任何按功能定制的逻辑。真正有意义的只有槽0 和槽1。

5.2 ★ 槽1 的函数形态:助手那套机制是通用的

把几个类的槽1 反汇编前几条摆一起看:

InterAutoPlay  槽1  0xA3F3D0
   push ebp; mov ebp,esp; sub esp,0x20; push esi
   mov [ebp-4], ecx          ; this
   mov eax,[ebp+8]           ; ← 动作码(第一个参数)
   mov [ebp-8], eax
   cmp [ebp-8], 8 / jg ...   ; 分派

InterInventory 槽1  0xAE3760        ← 背包
   push ebp; mov ebp,esp; sub esp,0x40
   mov [ebp-8], ecx
   mov eax,[ebp+8]            ; ← 同一个参数位
   mov [ebp-0xc], eax
   cmp [ebp-0xc], 0x3EE ; jg ...   ; ★ 0x3EE!

InterStatus 槽1  0xC291E0           ← 状态/属性
   push ebp; mov ebp,esp; mov eax,0x82a4; call __chkstk
   mov eax,[0x11f4380]; xor eax,ebp   ; GS 栈保护
   mov [ebp-0x80a8], ecx
   mov eax,[ebp+8]
   cmp [ebp-0x80b8], 0x3EE ; jg ...   ; ★ 0x3EE!

三点一致:

  1. 第一个参数([ebp+8])= 动作码,槽1 就是「按动作码分派」的方法;
  2. 0x3EE 这个魔法动作码InterInventoryInterStatus 里都出现;
  3. 助手(InterAutoPlay)里是 0x3EE + 0x3F4 两个,其中 0x3F4 分支把 (控件ID, lParam) 转给 0xA3F700 ——这就是你点控件的通路

5.3 由此得到的推论(★ 待活体验证)

你现在的调用是:

控件对象 → [+4] 取父窗口 → [窗口] 取虚表 → call [虚表+4](槽1)
                                    push 0x3F4(msg)
                                    push [控件+0x364](命令ID)
                                    push 0(lParam)

既然父窗口的槽1 在各类里都是同一个「动作码分派」协议,那么这套流程理论上对背包、状态、NPC、组队等任意 Inter* 窗口都成立 ——
区别只在于「控件对象的偏移」和「该窗口认的命令ID」。

⚠ 这是本报告唯一没有活体验证的结论,因为它是从「多个类槽1 形态一致 + 同一个魔法动作码」推出来的,不是直接读到的。
要证实,只需按第七节的方法对任意另一个窗口(比如背包)复现一次。


六、★ 修正两条旧结论(含我自己上次的错)

6.1 InterInGameTotalShop 的虚表首地址是 0x01079A68

字节级证据:

0x01079A64 : 0x011842E8   (.rdata)  ← 这一格是 COL 指针
0x01079A68 : 0x0067C180   (.text)  ← 槽0
0x01079A6C : 0x0068B2B0   (.text)  ← 槽1
0x01079A70 : 0x00567450   (.text)  ← 槽2(基类共用)

0x011842E8 作为 COL 的解:

+0x00 = 00000000   (signature)
+0x0C = 0x011F66D4  → TD → ".?AVInterInGameTotalShop@@"   ← 类名对上了

构造函数也印证:0x00679D040x0067B21D 处都是 c7 00 68 9A 07 01mov [eax], 0x01079A68)。
立即数 0x01079A6C 在整个 .text 里出现 0 次 —— 没有任何一处把 0x01079A6C 当虚表头写入。

6.2 因此 0x68B2B0 是「槽1」,不是「槽0」

版本 说法 对错
早期报告 虚表 0x01079A6C,槽0 = 0x68B2B0 ❌ 虚表地址偏了 4 字节
我上次的「修正」 「0x68B2B0 是槽0 不是槽1」 反了
本次(RTTI 校验) 虚表 0x01079A68,槽0 = 0x67C180,槽1 = 0x68B2B0

而且这次的结果反而更符合助手那边的规律

虚表 槽0 槽1
InterAutoPlay(助手) 0x010A20F8 0xA2FBF0 0xA3F3D0
InterInGameTotalShop 0x01079A68 0x67C180 0x68B2B0
InterGroup(组队) 0x0107993C 0x6742A0 0x674590
InterInventory(背包) 0x010A5890 0xAC67E0 0xAE3760
InterNpc 0x010AFDB8 0xC77180 0xC7FCC0
InterStatus(状态) 0x010AE084 0xC1CDC0 0xC291E0

每个类的「分派槽」都规规矩矩待在槽10x68B2B0 归位。


七、未知高引用地址的语义判定

把已知的摘掉后,按引用数排序,逐个看「谁在用它、怎么用、旁边的字符串是什么」。

7.1 分类结果

⛔ A 类:CRT / 运行时,不要当基址

地址 引用 判定 铁证
0x011F4380 6581 __security_cookie(GS 栈保护 cookie) 每个受保护函数序言:mov eax,[0x11f4380]; xor eax,ebp; mov [ebp-4],eax;退出时 xor esi,[0x11f4380] 校验。6581 处 = 6581 个受保护函数
0x011F423C 572 CRT 函数指针槽 570 处是 call dword ptr [0x11f423c],写入点 mov [0x11f423c], edx
0x011F4244 148 同上 146 处 call
0x011F4238 / 0x011F4248 64 / 52 同上(同区块) 都在 .data 最头部 0x11F42xx
0x05C0DABC 646 第三方库全局状态 引用者全部落在 0xE5xxxx~0xF9xxxx(CRT/WebView2 区)
0x0106F9040x106Fxxx 934 / 827 / 293… 延迟导入跳转槽.rdata 起始) 全是被 call 且成片排列

记住一句话.data 开头 0x11F42xx~0x11F44xx 这一段是 CRT 的地盘,0x11E0000 往后才慢慢进入游戏数据。

🎮 B 类:图形/D3D,半可用

地址 引用 判定 证据
0x017EF52C 4623 D3DX 设备/纹理工厂接口指针 引用点:mov ecx,[0x17ef52c]; push ecx; call 0x40a4be,压参 0xc8(200) / 0x64(100) / 0x15;旁边字符串 BALLOON - D3DXCreateTexture()
0x017EF528 192 浮点常量槽(D3D 相关) 全被 movss / addss / mulss / subss 使用
0x017EF7B0 / 0x017EF7B4 998 / 653 同区块配置指针 引用点伴 Taiwan / %s 字符串

✅ C 类:游戏逻辑,可以当基址用

地址 引用 判定 证据 / 用法
0x01844360 1406 ★★ MAPID 当前地图ID 引用点用两个格式串打印它:TYPE\t\t: %dMAPID\t\t: %d;并与 0x9c41(40001) / 0xa029(41001) 比较 → 地图ID判断
0x0183C520 5460 全局单例管理器指针 被 735 个函数当 ecx(this) 用;写入点 mov [0x183c520], edx0x826BD6;同区块有 NPC基址值
0x0183C528 916 同上区块(兄弟字段) 有写入点 mov [0x183c528], 0
0x0183C518 747 同上区块(兄弟字段) 引用点伴 Login Interface / interselect create 字符串
0x0183C510 374 同上区块(兄弟字段)
0x018274C8 1018 对象指针(内含数组) mov eax,[0x18274c8]; cmp [edx+ecx*4+0x53c],0 → 结构内 +0x53C 有数组
0x01861388 775 数值累加器 add edx,[0x1861388] / add ecx,[0x1861388] 共 296 次
0x03BF28C8 983 人物区块,与 人物基址值 0x3BF28CC 差 4 字节 两者是一对(见第八节)
0x017F1818 934 对象指针 282 处集中在函数 0xD53A20(伴 %I64d 格式串)
0x03B9DCDC 458 背包区块字段 背包基址值 0x3B9DCE0 差 4 字节
0x03970A20 270 血量区块字段(213 处 cmp 当前血量值 0x3970A70 同区块
0x018219D0 396 对象指针 引用者伴 ACA3000.mdl / NPC1::OM_RESTORE / BALLOON 字符串
0x03BBB490 268 索引/ID(有 cmp ..., -1
0x03B947E8 314 对象指针
0x01702B10 284 对象指针
0x03BA7C28 278 字节标志位 275 处 movzx edx, byte ptr [0x3ba7c28] → 布尔开关
0x03BA7E48 154 数值字段(119 处 imul ...,0x88 乘 0x88(=136) → 结构体步长

7.2 有意思的细节


八、已知基址的邻居字段族(±0x80)

同一个 4 字节块里相邻的全局,往往是同一个对象/管理器的兄弟字段。下面按区块列出「同区块活跃地址」(括号内为引用数,/i 表示索引寻址)。

基址 名称 同区块活跃地址 邻居明细
0x011E0084 地图基址值 7 11E0044(11) 11E0064(8/i1) 11E0080(52) 11E0090(1/i1) 11E0094(1/i1) 11E0098(1/i1) 11E00A8(1/i1)
0x017EF378 发包Call_ECX / NPC选项 12 17EF368(2) 17EF36C(8) 17EF370(1) 17EF380(6) 17EF384(5) 17EF390(273) 17EF39C(1) 17EF3A0(1) 17EF3A4(36) 17EF3D8(3) 17EF3DC(3) 17EF3F4(3)
0x0182A2DC 仓库基址值 0 (空 —— 见 8.2)
0x03BC33BC 商店基址值 0 (空 —— 见 8.2)
0x0182AEB0 仓库邻居B 22 182AE90(3) 182AE94(4) 182AE98(13) 182AE9C(3) 182AE9D(6) 182AE9E(8) 182AEA0(10) 182AEA4(10) 182AEA8(16) 182AEAC(4) 182AEB8(7) 182AEBC(4) 182AEC4(243) 182AEC8(8)
0x0182B5E8 仓库邻居A 10 182B5B8(1) 182B5BC(2) 182B5C0(6) 182B5C4(6) 182B5E0(1) 182B5EC(7) 182B5F4(6) 182B5F8(4) 182B5FC(6) 182B600(4)
0x0183C51C 选中对象基址 26 183C4D0(2) 183C4D4(3) 183C4D8(4) 183C4DC(11) 183C4E0(5) 183C4F0(2) 183C4F4(2) 183C4F8(6) 183C500(37) 183C504(11) 183C508(9) 183C50C(9) 183C510(374) 183C514(29) …另 12 个至 183C598
0x0183C52C NPC基址值 / 助手链路头 27 同上区块(0x183C4D0~0x183C598,共 28 个活跃地址)
0x0184437C 副本道具基址 30 1844360(1406=MAPID) 1844364(24) 1844368(8) 184436C(1) 1844370(4) 1844374(2) 1844378(39) 1844380(8) 1844384(8) 1844388(8) 184438C(6/i6) 184439C(65) 18443A0(3) …至 18443F0
0x03970A70 当前血量值 51 39709F0~3970AE4 共 52 个活跃地址,含 3970A20(270) 3970A24(187) 3970A25(117) 3970AD4(100) 3970AD8(92) 3970A9C(56)
0x03B9DCE0 背包基址值 / 背包列表 34 3B9DC88(16) 3B9DC8C(11/i11) 3B9DC94(22) 3B9DC95(6) 3B9DC96(19) 3B9DC97(7) 3B9DC98(11) 3B9DC9C(23) … 3B9DCDC(458) 3B9DCE4(38) 3B9DCE8(55) 3B9DCF0(40) 3B9DCF4(66) 3B9DCF8(144) 3B9DCFC(49) 3B9DD00(67)
0x03B9DCEC 凝神珠背包基址值 34 同上(与背包同区块,差 0xC)
0x03BA387C 状态栏基址值 / BUFF遍历 17 3BA3848(1) 3BA384C(45) 3BA3850(42) 3BA3854(13) 3BA3855(7) 3BA3856(4) 3BA3857(7) 3BA3858(4) 3BA3860(4) 3BA3864(3) 3BA3868(1/i1) 3BA3869(1/i1) 3BA3870(71) 3BA3874(3) 3BA3878(3)
0x03BA4A08 技能栏基址 10 3BA4A10(17) 3BA4A14(14) 3BA4A18(8) 3BA4A1C(1) 3BA4A34(8) 3BA4A38(1) 3BA4A50(6) 3BA4A54(1) 3BA4A6C(2) 3BA4A70(1)
0x03BA4C3C 状态列表基址 18 3BA4BCC(1) 3BA4BD0(2) 3BA4BEC(2) 3BA4C04(1) 3BA4C08(2) 3BA4C20(1) 3BA4C24(2) 3BA4C40(214) 3BA4C44(122) 3BA4C48(174) 3BA4C4C(14/i14) 3BA4C58(37) 3BA4C5C(171) 3BA4C60(113)
0x03BC21F8 商店邻居A 21 3BC21D8(2) 3BC21DC(14) 3BC21E0(11) 3BC21E4(2) 3BC21E8(1) 3BC21EC(1) 3BC21F0(1) 3BC21F4(1) 3BC21F6(1) 3BC21FC(3) 3BC2200(3) 3BC2204(3) 3BC2208(3) …
0x03BE3E68 怪物基址值 31 3BE3DE8~3BE3E64 共 31 个(等间隔 4 字节,是数组的头部登记区)
0x03BF28CC 人物/坐标基址值 18 3BF28C8(983) 3BF28D8(14) 3BF28DC(5) 3BF28EC(2) 3BF28FC(1) 3BF2900(8) 3BF2908(33) 3BF290C(19) 3BF2910(26) 3BF2914(28) 3BF2918(19) 3BF291C(23) 3BF2920(20) 3BF2924(17) …
0x03BF2900 周围数量基址 18 同上区块(0x3BF28C8~0x3BF2938,人物与周围数据共用一块)
0x05BFEE78 周围列表基址 0 (自身是纯索引数组基址,15 处 [ecx*4+0x5bfee78];附近无其它活跃地址)

8.1 三条最有价值的区块

0x0183C500~0x0183C540:全局管理器块(含 NPC基址值 与 助手链路头)

183C51C  选中对象基址        1941
183C520  ★未知(单例管理器)  5460
183C528  ★未知                916
183C52C  NPC基址值/助手链路头 10793   ← 全 exe 引用最多
183C518  ★未知                747
183C510  ★未知                374

这是整个客户端最热的一块内存。助手窗口挂在 [0x183C52C]+0x414,说明 0x183C52C 指向的不是「NPC 数组」,而是一个全局主控对象;同排的 0x183C520/518/528/510 极可能是同族的其它管理器(各自被数百~数千个函数当 this 用)。

0x03970A20~0x03970AD8:血量/数值块

当前血量值 0x3970A70 其实是这个块里的一个字段。真正的热字段是 3970A20(270)3970A24(187)3970A25(117)3970AD4(100)3970AD8(92)
其中 3970A24/A25 用的是 movzx/movsx byte ptr字节级标志/百分比3970A1C 有 25 处 imul ...,0x7e步长 0x7E 的表索引

0x03BA4C40~0x03BA4C60:状态/攻击列表块

状态列表基址 0x3BA4C3C(57)攻击列表候选3 0x3BA4C40(214) 相邻 4 字节;再往后 3BA4C44(122) 3BA4C48(174) 3BA4C4C(14/i14) 3BA4C58(37) 3BA4C5C(171) 3BA4C60(113) 都活跃。
这一整排就是「列表管理器」的字段组 —— 攻击列表大概率就在其中,候选3 0x3BA4C40 仍是首选。

8.2 ★ 两个「真死值」的确认

地址 名称 普通引用 索引引用 ±0x80 内活跃地址 判定
0x0182A2DC 仓库基址值 0 0 0 个 死值(同区块一片空白,附近无任何活跃全局)
0x03BC33BC 商店基址值 0 0 0 个 死值(同上)

这是比「0 引用」更强的判据:不仅自己没人用,周围 ±0x80 一个被引用的地址都没有 → 说明这块 .data 区域整体废弃。
而它们的候选邻居:0x0182B5E8(277) / 0x0182AEB0(76) / 0x03BC21F8(88),每个都带着一整个活跃区块

8.3 顺带确认的一对

人物基址值 0x03BF28CC(3000) 与 0x03BF28C8(983) 只差 4 字节 —— 之前一直只知前者。同区块还有 3BF2908~3BF2938 一排活跃字段(周围数量/周围数据)。
也就是说 0x3BF28C8 很可能是人物对象指针的「上一个/前一个」登记槽(例如「当前/上一个目标」这对惯用结构),值得活体读一次确认。


九、函数指针槽与索引表基址

9.1 函数指针槽(被 call/jmp [disp32] 调用)Top 15

地址 call/jmp 次数 节区 判定
0x0106F904 934 .rdata 延迟导入跳转槽
0x0106F1C0 827 .rdata 同上
0x011F423C 570 .data CRT 函数指针槽
0x0106F318 293 .rdata 延迟导入
0x0106F6E8 188 .rdata 同上
0x0106F220 166 .rdata 同上
0x011F4244 146 .data CRT
0x0106F6E0 144 .rdata 延迟导入
0x0076C080 .text 你的发包入口call [0x76c080],静态从 NPC选项CALL 特征推出、与工程常量同址)

结论:除了 0x76C080 这个发包入口,其余全是 CRT 基础设施,不是游戏功能。

9.2 索引寻址基址 Top 15([reg*scale + disp32]

基址 索引访问 已知名 用法样本
0x03BE3E68 1942 怪物基址值 mov ecx, [eax*4+0x3be3e68] —— 100% 索引形态,证明它就是「全局对象数组基址」
0x01070030 915 ★未知 addsd xmm0, qword ptr [ecx*8+0x1070030] → 双精度常量表
0x03BA6528 369 ★未知 cmp dword ptr [edx*4+0x3ba6528], 0 → 状态/列表判定表
0x05C17380 173 ★未知 mov ecx, [ecx*4+0x5c17380]
0x01841DB0 94 ★未知 cmp dword ptr [eax*4+0x1841db0], 0
0x03BA652C 54 ★未知 与上表相邻
0x0183CC58 38 ★未知 mov eax, [edx*4+0x183cc58]
0x039742D8 36 ★未知 movzx eax, word ptr [edx*4+0x39742d8]16 位表
0x03970D98 31 ★未知 mov [ecx*4+0x3970d98], edx → 写入型数组
0x05BFEE78 15 周围列表基址 mov [ecx*4+0x5bfee78], edx

★ 注意 0x0397xxxx 这一片出现大量索引基址(3970ae6/3970b30/3970c60/3970cf8/3970d98/3970f40/39742d8/39741b8/39741bc/3974678/39747a8/3977d04
—— 说明人物/角色数据的表结构集中在 0x0397xxxx,这是下一步挖字段的好去处。


十、可用性判定与行动建议

10.1 可以直接拿来当基址的(游戏区 · 高引用 · 有写入点)

地址 引用 建议名字 用途推测
0x01844360 1406 MAPID / 当前地图ID 地图判断(读书/进图/挂机路线)
0x0183C520 5460 全局主控/管理器 单例,被 735 个函数当 this
0x0183C518 747 登录/界面状态 Login Interface
0x018274C8 1018 背包相关对象 结构内 +0x53C 有数组
0x03BF28C8 983 人物区块(与人物基址值配对) 待活体确认
0x03B9DCDC 458 背包区块字段 背包基址值 -4
0x03970A20 270 血量/数值标志 213 处 cmp
0x03BA7C28 278 布尔开关(字节) movzx byte

10.2 绝对不要当基址的

0x011F4380                 __security_cookie(GS 栈保护)—— 引用数最高但是 CRT 的
0x011F4238 / 23C / 244 / 248   CRT 函数指针槽
0x0106Fxxx 全段           延迟导入跳转槽(.rdata 起始)
0x05C0xxxx / 0x5C16xxxx   第三方库(WebView2/CRT)全局状态

10.3 两条明确的改法

  1. 仓库/商店0x0182A2DC / 0x03BC33BC 已双重确认死值(自身 0 引用 + 周围 0 活跃地址)→ 换 0x0182B5E8 / 0x03BC21F8
  2. 攻击列表:用 0x03BA4C40(214 引用,且整排 3BA4C44~3BA4C60 都活跃)。

10.4 下一步(按性价比)

# 事项 为什么
1 活体验证 §5.3 的通用调用范式 若成立,等于一次拿到 200+ 个窗口的操作入口
2 0x0183C520 的对象结构 5460 引用、735 个函数用它 → 大概率是「游戏主控」,能派生出大量字段
3 0x0397xxxx 的表结构 十多个索引基址集中在这里,是人物/属性数据的表区
4 活体确认 0x03BF28C8 vs 0x03BF28CC 一对 4 字节邻居,关系明确后能加一个可用基址

十一、脚本与原始输出

脚本 作用 原始输出
scan_all_globals.py 第 2 代字节扫描(含 SIB),用于对比 _g_scan.txt _g_data.txt _g_vt.txt
scan_all_globals2.py 第 3 代 capstone 权威扫描 _g2_scan.txt _g2_data.txt _g2_hits.txt _g2_vt.txt
analyze_stage2.py RTTI 虚表映射 + 邻居 + 引用函数归属 _g3_rtti.txt _g3_vtgame.tsv
analyze_inter.py Inter* 类虚表结构 / 槽位指纹 / 构造点 _g4_inter.txt _g4_inter.tsv
verify_vptr.py 定点核对 vptr 立即数(修正旧结论) _g5_verify.txt
verify_slot1.py 各类槽1 形态对比 _g6_slot1.txt
ctx_disasm.py 未知地址的上下文反汇编 _g7_ctx.txt
read_strs.py 读关键点的字符串/格式串 _g8_str.txt
merge_forms.py 合并普通/索引两种形态重算 _g9_merged.txt
probe_rtti.py RTTI 探针 _rtti_probe.txt

配套:《基址全量复验报告》(70 项逐一验证)·《E2TXT常量基址对照表》·《基址使用对比清单》·《基址活体验证清单》
分析对象:D:\rxjh2025\client\YGOnline.exe · 本次全部引用数均为 capstone 逐指令口径