对象:
D:\rxjh2025\client\YGOnline.exe(14,752,768 字节,ImageBase0x400000,无重定位)
方法: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 代略低(去掉误报) |
这一代还多了两个能力:
op.access 判断该地址是「只读」还是「运行时被赋值」。有写入点的地址才可能是指针型基址。普通 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
.data99.6% 在文件里没有初值 → 静态只能知道「代码碰过这个地址」,值必须活体读。
exe 带完整 MSVC RTTI。结构关系:
vtable[-1] → _RTTICompleteObjectLocator(COL)
+0x0C → _TypeDescriptor
+8 → ".?AVInterAutoPlay@@" ← 类名直接可读
| 项 | 数量 |
|---|---|
| TypeDescriptor(类型名) | 785 |
| COL(完整对象定位器) | 861 |
| 真虚表(-4 处有 COL 支撑) | 764 |
| 其中游戏/业务类 · 标准库类 | 762 · 2 |
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 定位法可靠、虚表首地址没有偏移、你日志里的值是对的。
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(制表符分隔,可直接导入表格软件)
统计全部 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。
把几个类的槽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!
三点一致:
[ebp+8])= 动作码,槽1 就是「按动作码分派」的方法;0x3EE 这个魔法动作码在 InterInventory、InterStatus 里都出现;InterAutoPlay)里是 0x3EE + 0x3F4 两个,其中 0x3F4 分支把 (控件ID, lParam) 转给 0xA3F700 ——这就是你点控件的通路。你现在的调用是:
控件对象 → [+4] 取父窗口 → [窗口] 取虚表 → call [虚表+4](槽1)
push 0x3F4(msg)
push [控件+0x364](命令ID)
push 0(lParam)
既然父窗口的槽1 在各类里都是同一个「动作码分派」协议,那么这套流程理论上对背包、状态、NPC、组队等任意 Inter* 窗口都成立 ——
区别只在于「控件对象的偏移」和「该窗口认的命令ID」。
⚠ 这是本报告唯一没有活体验证的结论,因为它是从「多个类槽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@@" ← 类名对上了
构造函数也印证:0x00679D04 与 0x0067B21D 处都是 c7 00 68 9A 07 01(mov [eax], 0x01079A68)。
而立即数 0x01079A6C 在整个 .text 里出现 0 次 —— 没有任何一处把 0x01079A6C 当虚表头写入。
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 |
— 每个类的「分派槽」都规规矩矩待在槽1,0x68B2B0 归位。
把已知的摘掉后,按引用数排序,逐个看「谁在用它、怎么用、旁边的字符串是什么」。
| 地址 | 引用 | 判定 | 铁证 |
|---|---|---|---|
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 区) |
0x0106F904 等 0x106Fxxx |
934 / 827 / 293… | 延迟导入跳转槽(.rdata 起始) |
全是被 call 且成片排列 |
记住一句话:
.data开头0x11F42xx~0x11F44xx这一段是 CRT 的地盘,0x11E0000往后才慢慢进入游戏数据。
| 地址 | 引用 | 判定 | 证据 |
|---|---|---|---|
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 字符串 |
| 地址 | 引用 | 判定 | 证据 / 用法 |
|---|---|---|---|
0x01844360 |
1406 | ★★ MAPID 当前地图ID |
引用点用两个格式串打印它:TYPE\t\t: %d 和 MAPID\t\t: %d;并与 0x9c41(40001) / 0xa029(41001) 比较 → 地图ID判断 |
0x0183C520 |
5460 | 全局单例管理器指针 | 被 735 个函数当 ecx(this) 用;写入点 mov [0x183c520], edx 在 0x826BD6;同区块有 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) → 结构体步长 |
0x03970A70(你工程里的 #当前血量值):本口径下只有 14 处直接引用 —— 结构上「当前血」主要是从人物对象 +0x5F4 读的(见 E2TXT常量基址对照表),这个全局只是个镜像/缓存。0x0182B5E8(仓库邻居A):277 处引用里有 244 处是写 —— 写入型的全局通常是「当前选中的对象指针」,符合「仓库当前项」的语义。0x0182AEC4:243 处引用里 205 处是 cmp,且和 0x1844360(MAPID) 一样在与 0x9c41 比较 → 同类「ID 判定」变量。同一个 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];附近无其它活跃地址) |
① 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 仍是首选。
| 地址 | 名称 | 普通引用 | 索引引用 | ±0x80 内活跃地址 | 判定 |
|---|---|---|---|---|---|
0x0182A2DC |
仓库基址值 | 0 | 0 | 0 个 | ★ 死值(同区块一片空白,附近无任何活跃全局) |
0x03BC33BC |
商店基址值 | 0 | 0 | 0 个 | ★ 死值(同上) |
这是比「0 引用」更强的判据:不仅自己没人用,周围 ±0x80 一个被引用的地址都没有 → 说明这块 .data 区域整体废弃。
而它们的候选邻居:0x0182B5E8(277) / 0x0182AEB0(76) / 0x03BC21F8(88),每个都带着一整个活跃区块。
人物基址值 0x03BF28CC(3000) 与 0x03BF28C8(983) 只差 4 字节 —— 之前一直只知前者。同区块还有 3BF2908~3BF2938 一排活跃字段(周围数量/周围数据)。
也就是说 0x3BF28C8 很可能是人物对象指针的「上一个/前一个」登记槽(例如「当前/上一个目标」这对惯用结构),值得活体读一次确认。
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 基础设施,不是游戏功能。
[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段,这是下一步挖字段的好去处。
| 地址 | 引用 | 建议名字 | 用途推测 |
|---|---|---|---|
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 |
0x011F4380 __security_cookie(GS 栈保护)—— 引用数最高但是 CRT 的
0x011F4238 / 23C / 244 / 248 CRT 函数指针槽
0x0106Fxxx 全段 延迟导入跳转槽(.rdata 起始)
0x05C0xxxx / 0x5C16xxxx 第三方库(WebView2/CRT)全局状态
0x0182A2DC / 0x03BC33BC 已双重确认死值(自身 0 引用 + 周围 0 活跃地址)→ 换 0x0182B5E8 / 0x03BC21F8。0x03BA4C40(214 引用,且整排 3BA4C44~3BA4C60 都活跃)。| # | 事项 | 为什么 |
|---|---|---|
| 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 逐指令口径