郁金香 中级班 0-12 分析怪物数组
1.c++的类和对象
数据和函数的集合
2.类的基类和派生类(省)
3.读取utf8编码名字
利用别人的转码函数 ->找不到 无笔记
4.分析怪物名字偏移
寻找对应的怪物->寻找对应地址
0053B8 | 8B4481 5C | mov eax,dword ptr ds:[ecx+eax*4+0x5C] | 名字获取
eax=0
ecx+0x5c 跟ecx
0074F8 | 8BC8 | mov ecx,eax |
eax+0x5c
0074F8 | E8 51BEF2FF | call wow.67B6A0 //大部分对象地址 |
0074F8 | 85C0 | test eax,eax |
eax=23D30860
[这个CALL返回值+5C] //怪物名字地址
分析大部分地址call->
0067B8 | 83C0 18 | add eax,0x18 |
0067B8 | 5B | pop ebx |
0067B8 | 5D | pop ebp |
0067B8 | C2 1400 | ret 0x14 |
eax+0x18+5c->
0067B7 | 8BF8 | mov edi,eax |
0067B7 | 2B7E 04 | sub edi,dword ptr ds:[esi+0x4] |
0067B7 | 03CF | add ecx,edi |
0067B7 | 8B7D 10 | mov edi,dword ptr ss:[ebp+0x10] |
0067B7 | 8931 | mov dword ptr ds:[ecx],esi |
0067B7 | 8B08 | mov ecx,dword ptr ds:[eax] |
0067B7 | 8B70 04 | mov esi,dword ptr ds:[eax+0x4] |
0067B7 | 8971 04 | mov dword ptr ds:[ecx+0x4],esi |
0067B7 | C700 00000000 | mov dword ptr ds:[eax],0x0 |
0067B7 | C740 04 00000000 | mov dword ptr ds:[eax+0x4],0x0 |
0067B7 | 8B8B 90000000 | mov ecx,dword ptr ds:[ebx+0x90] |
0067B8 | 8908 | mov dword ptr ds:[eax],ecx |
0067B8 | 8B71 04 | mov esi,dword ptr ds:[ecx+0x4] |
0067B8 | 8970 04 | mov dword ptr ds:[eax+0x4],esi |
0067B8 | 8951 04 | mov dword ptr ds:[ecx+0x4],edx |
0067B8 | 8983 90000000 | mov dword ptr ds:[ebx+0x90],eax |
0067B8 | 8B45 0C | mov eax,dword ptr ss:[ebp+0xC] |
0067B8 | 897A 08 | mov dword ptr ds:[edx+0x8],edi |
0067B8 | 8B08 | mov ecx,dword ptr ds:[eax] |
0067B8 | 894A 10 | mov dword ptr ds:[edx+0x10],ecx |
0067B8 | 8B40 04 | mov eax,dword ptr ds:[eax+0x4] |
0067B8 | 8B4D 14 | mov ecx,dword ptr ss:[ebp+0x14] |
0067B8 | 8942 14 | mov dword ptr ds:[edx+0x14],eax |
0067B8 | 894A 18 | mov dword ptr ds:[edx+0x18],ecx |
一大堆偏移来获取eax
对象获取
0072A2 | 8BB6 64090000 | mov esi,dword ptr ds:[esi+0x964] |
0072A2 | 85F6 | test esi,esi |
0072A2 | 74 CE | je wow.72A24D |
0072A2 | 8B46 5C | mov eax,dword ptr ds:[esi+0x5C] |
0072A2 | 5F | pop edi |
偏移
esi+5c+964
分析esi是什么
3011EC70 00A34D90 .M£.
->虚函数表00A34D90 00737BA0 {s.
00A34D94 00734FD0 ÐOs.
00A34D98 007237F0 ð7r.
00A34D9C 007402B0 °.t.
00A34DA0 00632050 P c.
00A34DA4 007370D0 Ðps.
//故此esi是对象
3011EC74 00000000 ....
3011EC78 3011FC78 xü.0
3011EC7C 3011FEC8 Èþ.0 L"E"
5.虚函数指针 虚函数表
自行查看滴水c++逆向分析
6.用ce和xdbg分析对象数组
从以前对象的分析开始
[[30AEF8E0+964]+5c]
004D4DE3 | 52 | push edx |
0444FB14 00000008 ....
0444FB18 00000000 .... 一块空间
004D4DE4 | 50 | push eax |0x8
004D4DE5 | 8945 F8 | mov dword ptr ss:[ebp-0x8],eax |
004D4DE8 | E8 C3FDFFFF | call wow.4D4BB0 | 返回对象//存粹的
004D4DED | 85C0 | test eax,eax
004D4BB0 | 55 | push ebp |
004D4BB1 | 8BEC | mov ebp,esp |
004D4BB3 | 8B41 24 | mov eax,dword ptr ds:[ecx+0x24] | 获取ecx+24偏移是这个数组的大小吗
004D4BB6 | 83F8 FF | cmp eax,0xFFFFFFFF | 越界直接返回
004D4BB9 | 75 06 | jne wow.4D4BC1 |
004D4BBB | 33C0 | xor eax,eax |
004D4BBD | 5D | pop ebp |
004D4BBE | C2 0800 | ret 0x8 | 未知返回
004D4BC1 | 8B51 1C | mov edx,dword ptr ds:[ecx+0x1C] |
004D4BC4 | 56 | push esi |
004D4BC5 | 8B75 08 | mov esi,dword ptr ss:[ebp+0x8] |
004D4BC8 | 23C6 | and eax,esi |
004D4BCA | 8D0440 | lea eax,dword ptr ds:[eax+eax*2] | 3*eax
004D4BCD | 8D4482 04 | lea eax,dword ptr ds:[edx+eax*4+0x4] | edx+12*eax+0x4//找ecx