1 游戏主窗口句柄
#define Base_GameWndHandle 0x1196F88 //游戏主窗口句柄
8B086A1652508B4134——游戏主窗口句柄 = ndLocateAddr - 4
0044F770 68 1812AA00 push Client.00AA1218 ; ASCII "m_pKeyboard->SetDataFormat( &c_dfDIKeyboard )"
0044F775 E8 76E40C00 call Client.0051DBF0
0044F77A E9 5C010000 jmp Client.0044F8DB
0044F77F A1 946F1901 mov eax,dword ptr ds:[0x1196F94]
0044F784 8B15 886F1901 mov edx,dword ptr ds:[0x1196F88] ; 游戏主窗口句柄基址
0044F78A 8B08 mov ecx,dword ptr ds:[eax]
0044F78C 6A 16 push 0x16
0044F78E 52 push edx
0044F78F 50 push eax
0044F790 8B41 34 mov eax,dword ptr ds:[ecx+0x34]
0044F793 FFD0 call eax
0044F795 8BF0 mov esi,eax
0044F797 33C0 xor eax,eax
0044F799 3BF0 cmp esi,eax
2 所有对象列表基址
#define Base_AllObjList 0x02E65A28 //所有对象列表基址
83C404A308C0C0008B018B50045757——所有对象列表基址 = ndLocateAddr - 4
0040D802 6A 3C push 0x3C
0040D804 E8 E7B74800 call Client.00898FF0
0040D809 8B40 0C mov eax,dword ptr ds:[eax+0xC]
0040D80C 8B0C85 285AE602 mov ecx,dword ptr ds:[eax*4+0x2E65A28] ; 所有对象列表基址
0040D813 83C4 04 add esp,0x4
0040D816 A3 08C0C000 mov dword ptr ds:[0xC0C008],eax
0040D81B 8B01 mov eax,dword ptr ds:[ecx]
0040D81D 8B50 04 mov edx,dword ptr ds:[eax+0x4]
0040D820 57 push edi
0040D821 57 push edi
0040D822 68 03040000 push 0x403
0040D827 FFD2 call edx
0040D829 89BB 00010000 mov dword ptr ds:[ebx+0x100],edi
0040D82F 897B 60 mov dword ptr ds:[ebx+0x60],edi
0040D832 B8 01000000 mov eax,0x1
3 人物属性基址
#define Base_RoleProperty 0x02C186D8 //人物属性基址
558BEC83EC085356B8——人物属性基址 = ndLocateAddr + 9
0066AB70 55 push ebp
0066AB71 8BEC mov ebp,esp
0066AB73 83EC 08 sub esp,0x8
0066AB76 53 push ebx
0066AB77 56 push esi
0066AB78 B8 D886C102 mov eax,Client.02C186D8 ; 人物属性基址
0066AB7D 57 push edi
0066AB7E C705 9C05BC00 FFFFFFFF mov dword ptr ds:[0xBC059C],-0x1
0066AB88 33DB xor ebx,ebx
0066AB8A 8D50 01 lea edx,dword ptr ds:[eax+0x1]
0066AB8D 8D49 00 lea ecx,dword ptr ds:[ecx]
0066AB90 8A08 mov cl,byte ptr ds:[eax]
0066AB92 40 inc eax
0066AB93 84C9 test cl,cl
4 装备列表基址
#define Base_EquipList 0x02E3D3E0 //装备列表基址
BF3C0400008D9B00000000833C070074**8B0C07——装备列表基址 = ndLocateAddr - 4
00417F3D |. 8B8E 540B0000 mov ecx,dword ptr ds:[esi+0xB54]
00417F43 |. 8988 98010000 mov dword ptr ds:[eax+0x198],ecx
00417F49 |. 8B96 580B0000 mov edx,dword ptr ds:[esi+0xB58]
00417F4F |. 8990 9C010000 mov dword ptr ds:[eax+0x19C],edx
00417F55 |. 0FB707 movzx eax,word ptr ds:[edi]
00417F58 |. 3B05 185AE602 cmp eax,dword ptr ds:[0x2E65A18]
00417F5E |. 75 39 jnz XClient.00417F99
00417F60 |. A1 E0D3E302 mov eax,dword ptr ds:[0x2E3D3E0] ; 装备列表基址
00417F65 |. BF 3C040000 mov edi,0x43C
00417F6A |. 8D9B 00000000 lea ebx,dword ptr ds:[ebx]
00417F70 |> 833C07 00 /cmp dword ptr ds:[edi+eax],0x0
00417F74 |. 74 18 |je XClient.00417F8E
00417F76 |. 8B0C07 |mov ecx,dword ptr ds:[edi+eax]
00417F79 |. 83B9 A80D0000 02 |cmp dword ptr ds:[ecx+0xDA8],0x2
00417F80 |. 75 0C |jnz XClient.00417F8E
00417F82 |. 56 |push esi
00417F83 |. 51 |push ecx
5 商店列表基址
#define Base_ShopList 0x119B7B0 //商店列表基址
6A0050E8********8B4F0883C40C51B9——商店列表基址 = ndLocateAddr + 16
004F769D |> \3D FFFFFF0F cmp eax,0xFFFFFFF
004F76A2 |. 75 60 jnz XClient.004F7704
004F76A4 |> 68 80000000 push 0x80
004F76A9 |. 8D85 70FFFFFF lea eax,[local.36]
004F76AF |. 6A 00 push 0x0
004F76B1 |. 50 push eax
004F76B2 |. E8 B9984F00 call Client.009F0F70
004F76B7 |. 8B4F 08 mov ecx,dword ptr ds:[edi+0x8]
004F76BA |. 83C4 0C add esp,0xC
004F76BD |. 51 push ecx
004F76BE |. B9 B0B71901 mov ecx,Client.0119B7B0
004F76C3 |. E8 080C0000 call Client.004F82D0
004F76C8 |. 50 push eax
004F76C9 |. 68 F0BDAA00 push Client.00AABDF0 ; ASCII "keyhandler full! lstHandler count = %d, ClassID = %d"
004F76CE |. 8D95 70FFFFFF lea edx,[local.36]
004F76D4 |. 68 80000000 push 0x80
004F76D9 |. 52 push edx
004F76DA |. E8 D16D0600 call Client.0055E4B0
004F76DF |. 8D85 70FFFFFF lea eax,[local.36]
004F76E5 |. 50 push eax
6 仓库列表基址
#define Base_DepotList 0x02E4692C //仓库列表基址
C78134160000080000008B152C69E402899A6C020000——仓库列表基址 = ndLocateAddr - 4
007EFA23 |. 68 802EBC00 push Client.00BC2E80
007EFA28 |. 885D FC mov byte ptr ss:[ebp-0x4],bl
007EFA2B |. E8 10F20300 call Client.0082EC40
007EFA30 |. 8B0D 2C69E402 mov ecx,dword ptr ds:[0x2E4692C] ; 仓库列表基址
007EFA36 |. C781 34160000 08000000 mov dword ptr ds:[ecx+0x1634],0x8
007EFA40 |. 8B15 2C69E402 mov edx,dword ptr ds:[0x2E4692C]
007EFA46 |. 899A 6C020000 mov dword ptr ds:[edx+0x26C],ebx
007EFA4C |. 8B86 30020000 mov eax,dword ptr ds:[esi+0x230]
007EFA52 |. 8B0D 2C69E402 mov ecx,dword ptr ds:[0x2E4692C]
007EFA58 |. 8981 68020000 mov dword ptr ds:[ecx+0x268],eax
007EFA5E |. 8B15 5C30BC00 mov edx,dword ptr ds:[0xBC305C]
007EFA64 |. A1 842EBC00 mov eax,dword ptr ds:[0xBC2E84]
007EFA69 |. 8B0D 2C69E402 mov ecx,dword ptr ds:[0x2E4692C]
007EFA6F |. 83C2 21 add edx,0x21
007EFA72 |. 52 push edx
007EFA73 |. 48 dec eax
007EFA74 |. 50 push eax
7 背包列表基址
#define Base_BackPackList 0x02E3D3E4 //背包列表基址
8B848A3C0400008BB0E40C00008BB8E80C00008BC60BC7——背包基址 = ndLocateAddr - 4
00838E22 /75 32 jnz short Client.00838E56
00838E24 |A1 F0D3E302 mov eax,dword ptr ds:[0x2E3D3F0]
00838E29 |8B8488 3C040000 mov eax,dword ptr ds:[eax+ecx*4+0x43C]
00838E30 |8B48 58 mov ecx,dword ptr ds:[eax+0x58]
00838E33 |8B50 54 mov edx,dword ptr ds:[eax+0x54]
00838E36 |A1 5C452501 mov eax,dword ptr ds:[0x125455C]
00838E3B |51 push ecx
00838E3C |8B88 30020000 mov ecx,dword ptr ds:[eax+0x230]
00838E42 |52 push edx
00838E43 |E8 F8D8FDFF call Client.00816740
00838E48 |85C0 test eax,eax
00838E4A |0F85 925C0000 jnz Client.0083EAE2
00838E50 |8B8D 200FFFFF mov ecx,dword ptr ss:[ebp+0xFFFF0F20]
00838E56 \83FB 01 cmp ebx,0x1
00838E59 0F85 FA000000 jnz Client.00838F59
00838E5F 8B15 E4D3E302 mov edx,dword ptr ds:[0x2E3D3E4] ; 背包基址
00838E65 8B848A 3C040000 mov eax,dword ptr ds:[edx+ecx*4+0x43C] ; 背包列表
00838E6C 8BB0 E40C0000 mov esi,dword ptr ds:[eax+0xCE4]
00838E72 8BB8 E80C0000 mov edi,dword ptr ds:[eax+0xCE8]
00838E78 8BC6 mov eax,esi
00838E7A 0BC7 or eax,edi
00838E7C 0F84 97010000 je Client.00839019
00838E82 837D 08 00 cmp dword ptr ss:[ebp+0x8],0x0
00838E86 0F85 36030000 jnz Client.008391C2
8 背包物品使用CALL
#define Call_UseObjForIndex 0x00838EA0 //背包物品使用CALL
8B87601C00005651508BCFE8——物品使用CALL = ndLocateAddr+12 + ndLocateAddr+16 (即 偏移+EIP)
00854E7F 8B84B7 3C040000 mov eax,dword ptr ds:[edi+esi*4+0x43C]
00854E86 85C0 test eax,eax
00854E88 74 3F je short Client.00854EC9
00854E8A BA C6E1143C mov edx,0x3C14E1C6
00854E8F 3950 54 cmp dword ptr ds:[eax+0x54],edx
00854E92 75 35 jnz short Client.00854EC9
00854E94 8378 58 00 cmp dword ptr ds:[eax+0x58],0x0
00854E98 75 2F jnz short Client.00854EC9
00854E9A 56 push esi
00854E9B 51 push ecx
00854E9C 8995 38AFFFFF mov dword ptr ss:[ebp+0xFFFFAF38],edx
00854EA2 8B15 6C452501 mov edx,dword ptr ds:[0x125456C]
00854EA8 8D8D 38AFFFFF lea ecx,dword ptr ss:[ebp+0xFFFFAF38]
00854EAE C785 3CAFFFFF 0>mov dword ptr ss:[ebp+0xFFFFAF3C],0x0
00854EB8 51 push ecx
00854EB9 8B8A 94020000 mov ecx,dword ptr ds:[edx+0x294]
00854EBF E8 ECE9F4FF call Client.007A38B0
00854EC4 E9 B5000000 jmp Client.00854F7E
00854EC9 8B87 601C0000 mov eax,dword ptr ds:[edi+0x1C60]
00854ECF 56 push esi ; 下标
00854ED0 51 push ecx ; 1
00854ED1 50 push eax ; 0
00854ED2 8BCF mov ecx,edi ; [背包列表基址]
00854ED4 E8 C73FFEFF call Client.00838EA0 ; 背包物品使用CALL
00854ED9 83BF 34160000 3>cmp dword ptr ds:[edi+0x1634],0x35
00854EE0 75 20 jnz short Client.00854F02
00854EE2 8B84B7 3C040000 mov eax,dword ptr ds:[edi+esi*4+0x43C]
00854EE9 85C0 test eax,eax
00854EEB 74 15 je short Client.00854F02
00854EED 8B48 54 mov ecx,dword ptr ds:[eax+0x54]
00854EF0 8B15 6C452501 mov edx,dword ptr ds:[0x125456C]
00854EF6 51 push ecx
00854EF7 8B8A 8C020000 mov ecx,dword ptr ds:[edx+0x28C]
00854EFD E8 1EF3EBFF call Client.00714220
printf("找到特征码,所在虚拟地址为: %X\n", ndAddr);
//读出偏移
ndAddr += 12;
DWORD ndBaseBuffer = 0;
ReadProcessMemory(hProcess, (LPCVOID)ndAddr, (LPVOID)&ndBaseBuffer, 4, NULL);
//读出EIP
ndAddr += 4;
printf("执行完CALL语句的EIP为:%X\n", ndAddr);
//获取真正的基址
ndAddr += ndBaseBuffer;
printf("基址为:%X\n", ndAddr);
9 发送数据CALL
#define Call_SendData 0x004F8740 //发送数据CALL
6689B5FED7FFFF66899500D8FFFF66898502D8FFFFE8——发送数据CALL = ndLocateAddr+22 + ndLocateAddr+26 (即 偏移+EIP)
00409828 |> \66:8B55 0C mov dx,word ptr ss:[ebp+0xC]
0040982C |. 56 push esi
0040982D |. 8B75 08 mov esi,[arg.1]
00409830 |. 6A 12 push 0x12
00409832 |. 8D8D F4D7FFFF lea ecx,[local.2563]
00409838 |. 33C0 xor eax,eax
0040983A |. 51 push ecx
0040983B |. 8B0D 00701901 mov ecx,dword ptr ds:[0x1197000]
00409841 |. 66:89B5 FED7FFFF mov word ptr ss:[ebp-0x2802],si
00409848 |. 66:8995 00D8FFFF mov word ptr ss:[ebp-0x2800],dx
0040984F |. 66:8985 02D8FFFF mov word ptr ss:[ebp-0x27FE],ax
00409856 |. E8 E5EE0E00 call Client.004F8740
0040985B |. 56 push esi
0040985C |. 68 2CD0A900 push Client.00A9D02C ; ASCII "SZONE REQ : %d"
00409861 |. E8 6A451100 call Client.0051DDD0
00409866 |. 8B4D FC mov ecx,[local.1]
00409869 |. 83C4 08 add esp,0x8
0040986C |. 33CD xor ecx,ebp
0040986E |. 5E pop esi
#define Call_SendData_Ecx 0x1197000 //发送数据CALL的Ecx
6689B5FED7FFFF66899500D8FFFF66898502D8FFFFE8——发送数据CALL的Ecx = ndLocateAddr-4
同上
10 周围对象列表基址
#define Base_NearObjList 0x04280BA0 //周围对象列表基址
8B118B420453536A02FFD003F7——周围对象列表基址 = ndLocateAddr - 4
008A1FC0 8B11 mov edx,dword ptr ds:[ecx]
008A1FC2 8B42 04 mov eax,dword ptr ds:[edx+0x4]
008A1FC5 53 push ebx
008A1FC6 53 push ebx
008A1FC7 6A 02 push 0x2
008A1FC9 FFD0 call eax
008A1FCB 33F6 xor esi,esi
008A1FCD 391D B044E702 cmp dword ptr ds:[0x2E744B0],ebx
008A1FD3 7E 27 jle XClient.008A1FFC
008A1FD5 EB 09 jmp XClient.008A1FE0
008A1FD7 8DA424 00000000 lea esp,dword ptr ss:[esp]
008A1FDE 8BFF mov edi,edi
008A1FE0 8B0CB5 A00B2804 mov ecx,dword ptr ds:[esi*4+0x4280BA0] ; 周围对象列表基址
008A1FE7 8B11 mov edx,dword ptr ds:[ecx]
008A1FE9 8B42 04 mov eax,dword ptr ds:[edx+0x4]
008A1FEC 53 push ebx
008A1FED 53 push ebx
008A1FEE 6A 02 push 0x2
008A1FF0 FFD0 call eax
008A1FF2 03F7 add esi,edi
008A1FF4 3B35 B044E702 cmp esi,dword ptr ds:[0x2E744B0]
008A1FFA ^ 7C E4 jl XClient.008A1FE0
008A1FFC A1 C0701501 mov eax,dword ptr ds:[0x11570C0]
008A2001 3BC3 cmp eax,ebx
008A2003 74 12 je XClient.008A2017
008A2005 8B0D 8C842401 mov ecx,dword ptr ds:[0x124848C]
008A200B 53 push ebx
008A200C 50 push eax
008A200D 68 40C71101 push Client.0111C740
11 玩家对象基址
#define Base_PlayerObj 0x02E65A24 //玩家对象基址
85C074**83B8880100000074**8D8D30FCFFFF——玩家对象基址 = ndLocateAddr - 4
00402FD2 83C4 04 add esp,0x4
00402FD5 3946 28 cmp dword ptr ds:[esi+0x28],eax
00402FD8 74 5A je XClient.00403034
00402FDA 8BB5 00F8FFFF mov esi,dword ptr ss:[ebp-0x800]
00402FE0 C786 F8290000 01000000 mov dword ptr ds:[esi+0x29F8],0x1
00402FEA A1 245AE602 mov eax,dword ptr ds:[0x2E65A24] ; 玩家对象基址
00402FEF 85C0 test eax,eax
00402FF1 74 47 je XClient.0040303A
00402FF3 83B8 88010000 00 cmp dword ptr ds:[eax+0x188],0x0
00402FFA 74 3E je XClient.0040303A
00402FFC 8D8D 30FCFFFF lea ecx,dword ptr ss:[ebp-0x3D0]
00403002 51 push ecx
00403003 68 1CCAA900 push Client.00A9CA1C ; ASCII "falseAni=%s"
00403008 8D95 B0FBFFFF lea edx,dword ptr ss:[ebp-0x450]
0040300E 68 80000000 push 0x80
00403013 52 push edx
00403014 E8 97B41500 call Client.0055E4B0
00403019 83C4 10 add esp,0x10
0040301C 6A 00 push 0x0
12 未知基址1
#define Base_Unknown 0x0125456C //未知对象基址
6A09E8********5F5E5B8BE55DC2——未知对象基址 = ndLocateAddr - 4
0040938B 83FA 03 cmp edx,0x3
0040938E 75 12 jnz XClient.004093A2
00409390 68 680B0000 push 0xB68
00409395 8B0D 6C452501 mov ecx,dword ptr ds:[0x125456C] ; 未知对象基址
0040939B 6A 09 push 0x9
0040939D E8 FE902600 call Client.006724A0
004093A2 5F pop edi
004093A3 5E pop esi
004093A4 5B pop ebx
004093A5 8BE5 mov esp,ebp
004093A7 5D pop ebp
004093A8 C2 0400 retn 0x4
13 未知对象基址2
#define Base_Unknown2 0x02C1EA6C //未知对象基址2
8B15********3BC274**8B083BCB——未知对象基址 = ndLocateAddr - 4
0048EE39 |> \83C7 15 add edi,0x15
0048EE3C |> 89BE F0020000 mov dword ptr ds:[esi+0x2F0],edi
0048EE42 |. E9 F0000000 jmp Client.0048EF37
0048EE47 |> A1 6CEAC102 mov eax,dword ptr ds:[0x2C1EA6C] ; 未知对象基址2
0048EE4C |. 8B15 70EAC102 mov edx,dword ptr ds:[0x2C1EA70]
0048EE52 |. 3BC2 cmp eax,edx
0048EE54 |. 74 18 je XClient.0048EE6E
0048EE56 |> 8B08 /mov ecx,dword ptr ds:[eax]
0048EE58 |. 3BCB |cmp ecx,ebx
0048EE5A |. 74 09 |je XClient.0048EE65
0048EE5C |. 3B8CBE F0020000 |cmp ecx,dword ptr ds:[esi+edi*4+0x2F0]
0048EE63 |. 74 1F |je XClient.0048EE84
0048EE65 |> 05 D4000000 |add eax,0xD4
0048EE6A |. 3BC2 |cmp eax,edx
14 动作列表基址
#define Base_ActionList 0x02E3DD58 //动作列表基址
833C0600743C8B04068B50548B7858——动作列表基址 = ndLocateAddr - 4
00702541 56 push esi
00702542 57 push edi
00702543 BE 3C040000 mov esi,0x43C
00702548 EB 06 jmp XClient.00702550
0070254A 8D9B 00000000 lea ebx,dword ptr ds:[ebx]
00702550 A1 58DDE302 mov eax,dword ptr ds:[0x2E3DD58] ; 动作列表基址
00702555 833C06 00 cmp dword ptr ds:[esi+eax],0x0
00702559 74 3C je XClient.00702597
0070255B 8B0406 mov eax,dword ptr ds:[esi+eax]
0070255E 8B50 54 mov edx,dword ptr ds:[eax+0x54]
00702561 8B78 58 mov edi,dword ptr ds:[eax+0x58]
00702564 81FA 06127A00 cmp edx,Client.007A1206
0070256A 75 04 jnz XClient.00702570
0070256C 85FF test edi,edi
15 动作使用CALL
#define Call_ActionUse 0x00714220 //动作使用CALL
83BF341600003675**8B84B73C04000085C0——物品使用CALL = ndLocateAddr - 4 + ndLocateAddr (偏移+EIP)
00854EED 8B48 54 mov ecx,dword ptr ds:[eax+0x54]
00854EF0 8B15 6C452501 mov edx,dword ptr ds:[0x125456C]
00854EF6 51 push ecx
00854EF7 8B8A 8C020000 mov ecx,dword ptr ds:[edx+0x28C]
00854EFD E8 1EF3EBFF call Client.00714220 ; 动作使用CALL
00854F02 83BF 34160000 36 cmp dword ptr ds:[edi+0x1634],0x36
00854F09 75 20 jnz XClient.00854F2B
00854F0B 8B84B7 3C040000 mov eax,dword ptr ds:[edi+esi*4+0x43C]
00854F12 85C0 test eax,eax
00854F14 74 15 je XClient.00854F2B
00854F16 8B40 54 mov eax,dword ptr ds:[eax+0x54]
00854F19 8B0D 6C452501 mov ecx,dword ptr ds:[0x125456C]
00854F1F 8B89 8C020000 mov ecx,dword ptr ds:[ecx+0x28C]
00854F25 50 push eax
00854F26 E8 05F9EBFF call Client.00714830
00854F2B 83BF 34160000 46 cmp dword ptr ds:[edi+0x1634],0x46
printf("找到特征码,所在虚拟地址为: %X\n", ndAddr);
//读出偏移
ndAddr += 12;
DWORD ndBaseBuffer = 0;
ReadProcessMemory(hProcess, (LPCVOID)ndAddr, (LPVOID)&ndBaseBuffer, 4, NULL);
//读出EIP
ndAddr += 4;
printf("执行完CALL语句的EIP为:%X\n", ndAddr);
//获取真正的基址
ndAddr += ndBaseBuffer;
printf("基址为:%X\n", ndAddr);
16 技能列表基址
#define Base_SkillList 0x02E3EF64 //技能列表基址
33C0A3********8B96C00B000083C2288950388B86C00B00008B0D——技能列表基址 = ndLocateAddr + 3
004A5B46 56 push esi
004A5B47 6A 19 push 0x19
004A5B49 6A 02 push 0x2
004A5B4B 8BC8 mov ecx,eax
004A5B4D E8 4EF13800 call Client.00834CA0
004A5B52 EB 02 jmp XClient.004A5B56
004A5B54 33C0 xor eax,eax
004A5B56 A3 64EFE302 mov dword ptr ds:[0x2E3EF64],eax ; 技能列表基址
004A5B5B 8B96 C00B0000 mov edx,dword ptr ds:[esi+0xBC0]
004A5B61 83C2 28 add edx,0x28
004A5B64 8950 38 mov dword ptr ds:[eax+0x38],edx
004A5B67 8B86 C00B0000 mov eax,dword ptr ds:[esi+0xBC0]
004A5B6D 8B0D 64EFE302 mov ecx,dword ptr ds:[0x2E3EF64]
004A5B73 83C0 2C add eax,0x2C
004A5B76 8941 3C mov dword ptr ds:[ecx+0x3C],eax
004A5B79 8B15 64EFE302 mov edx,dword ptr ds:[0x2E3EF64]
004A5B7F 6A 19 push 0x19
004A5B81 89BA 34160000 mov dword ptr ds:[edx+0x1634],edi
004A5B87 8B0D 64EFE302 mov ecx,dword ptr ds:[0x2E3EF64]
17 修炼技能CALL
#define Call_LearnSkill 0x00555B80 //修炼技能CALL
8B94B78C0300008B0D********8B425451508D8DF4D7FFFF518B0D——修炼技能CALL = ndLocateAddr+32 + ndLocateAddr+36 (即 偏移+EIP)
00751B5C 8B94B7 8C030000 mov edx,dword ptr ds:[edi+esi*4+0x38C]
00751B63 8B0D 8487C102 mov ecx,dword ptr ds:[0x2C18784]
00751B69 8B42 54 mov eax,dword ptr ds:[edx+0x54]
00751B6C 51 push ecx
00751B6D 50 push eax
00751B6E 8D8D F4D7FFFF lea ecx,dword ptr ss:[ebp-0x280C]
00751B74 51 push ecx
00751B75 8B0D 245AE602 mov ecx,dword ptr ds:[0x2E65A24]
00751B7B E8 0040E0FF call Client.00555B80 ; 修炼技能CALL
00751B80 E9 53020000 jmp Client.00751DD8
00751B85 83FE 48 cmp esi,0x48
00751B88 0F8C E3000000 jl Client.00751C71
00751B8E 83FE 68 cmp esi,0x68
printf("找到特征码,所在虚拟地址为: %X\n", ndAddr);
//读出偏移
ndAddr += 32;
DWORD ndBaseBuffer = 0;
ReadProcessMemory(hProcess, (LPCVOID)ndAddr, (LPVOID)&ndBaseBuffer, 4, NULL);
//读出EIP
ndAddr += 4;
printf("执行完CALL语句的EIP为:%X\n", ndAddr);
//获取真正的基址
ndAddr += ndBaseBuffer;
printf("基址为:%X\n", ndAddr);
18 修炼技能CALL的ECX
#define Call_LearnSkill_Ecx 0x2C18784 //修炼技能CALL的ECX
5068********8D4DBC6A4051E8********8B8E2C0F0000——修炼技能CALL的ECX = ndLocateAddr - 4
004A4E76 8B8E 280F0000 mov ecx,dword ptr ds:[esi+0xF28]
004A4E7C 83C4 1C add esp,0x1C
004A4E7F 6A 00 push 0x0
004A4E81 8D55 BC lea edx,dword ptr ss:[ebp-0x44]
004A4E84 52 push edx
004A4E85 E8 86AD3B00 call Client.0085FC10
004A4E8A A1 8487C102 mov eax,dword ptr ds:[0x2C18784] ; 修炼技能CALL的ECX
004A4E8F 50 push eax
004A4E90 68 F019AA00 push Client.00AA19F0 ; ASCII "%d"
004A4E95 8D4D BC lea ecx,dword ptr ss:[ebp-0x44]
004A4E98 6A 40 push 0x40
004A4E9A 51 push ecx
004A4E9B E8 10960B00 call Client.0055E4B0
004A4EA0 8B8E 2C0F0000 mov ecx,dword ptr ds:[esi+0xF2C]
19 鼠标拖起的对象基址
#define Base_MouseSelObj 0x0125455C //鼠标拖起的对象基址 鼠标拖起的对象:[0x0125455C]+230
85D274**833C070074**8B0C078B59588B49548B400C——鼠标拖起的对象基址 = ndLocateAddr - 4
004A6D9F 49 dec ecx
004A6DA0 83C9 FC or ecx,0xFFFFFFFC
004A6DA3 41 inc ecx
004A6DA4 0F84 71010000 je Client.004A6F1B
004A6DAA 8B15 5C452501 mov edx,dword ptr ds:[0x125455C] ; 鼠标拖起的对象基址
004A6DB0 85D2 test edx,edx
004A6DB2 74 21 je XClient.004A6DD5
004A6DB4 833C07 00 cmp dword ptr ds:[edi+eax],0x0
004A6DB8 74 1B je XClient.004A6DD5
004A6DBA 8B0C07 mov ecx,dword ptr ds:[edi+eax]
004A6DBD 8B59 58 mov ebx,dword ptr ds:[ecx+0x58]
004A6DC0 8B49 54 mov ecx,dword ptr ds:[ecx+0x54]
004A6DC3 8B40 0C mov eax,dword ptr ds:[eax+0xC]
004A6DC6 53 push ebx
004A6DC7 51 push ecx
004A6DC8 50 push eax
004A6DC9 8BCA mov ecx,edx
004A6DCB E8 90FEF7FF call Client.00426C60
20 快捷栏基址
#define Base_ShortcutBar 0x02E3EF08 //快捷栏基址
33C08D8E3C040000EB**8D490083390074——快捷栏基址 = ndLocateAddr - 4
00413EDD 6A 01 push 0x1
00413EDF 8D55 F8 lea edx,dword ptr ss:[ebp-0x8]
00413EE2 C745 F8 88130000 mov dword ptr ss:[ebp-0x8],0x1388
00413EE9 C745 FC 00000000 mov dword ptr ss:[ebp-0x4],0x0
00413EF0 8B8C8E 3C040000 mov ecx,dword ptr ds:[esi+ecx*4+0x43C]
00413EF7 52 push edx
00413EF8 E8 C35E4000 call Client.00819DC0
00413EFD 8B35 08EFE302 mov esi,dword ptr ds:[0x2E3EF08] ; 快捷栏基址
00413F03 33C0 xor eax,eax
00413F05 8D8E 3C040000 lea ecx,dword ptr ds:[esi+0x43C]
00413F0B EB 03 jmp XClient.00413F10
00413F0D 8D49 00 lea ecx,dword ptr ds:[ecx]
00413F10 8339 00 cmp dword ptr ds:[ecx],0x0
00413F13 74 0D je XClient.00413F22
00413F15 8B11 mov edx,dword ptr ds:[ecx]
00413F17 397A 54 cmp dword ptr ds:[edx+0x54],edi
21 移动对象到列表CALL
#define Call_MoveObjToList 0x84A180 //移动对象到列表CALL
8B86900200008B0D********8B9134160000508B81601C00005250E8——移动对象到列表CALL = ndLocateAddr+28 + ndLocateAddr+32 (偏移+EIP)
006F59A5 8B86 90020000 mov eax,dword ptr ds:[esi+0x290]
006F59AB 8B0D E4D3E302 mov ecx,dword ptr ds:[0x2E3D3E4]
006F59B1 8B91 34160000 mov edx,dword ptr ds:[ecx+0x1634]
006F59B7 50 push eax
006F59B8 8B81 601C0000 mov eax,dword ptr ds:[ecx+0x1C60]
006F59BE 52 push edx
006F59BF 50 push eax
006F59C0 E8 BB471500 call Client.0084A180 ; 移动对象到列表CALL
006F59C5 5F pop edi
006F59C6 C786 90020000 FFFFFFFF mov dword ptr ds:[esi+0x290],-0x1
006F59D0 5E pop esi
006F59D1 B8 01000000 mov eax,0x1
006F59D6 5B pop ebx
006F59D7 5D pop ebp
printf("找到特征码,所在虚拟地址为: %X\n", ndAddr);
//读出偏移
ndAddr += 28;
DWORD ndBaseBuffer = 0;
ReadProcessMemory(hProcess, (LPCVOID)ndAddr, (LPVOID)&ndBaseBuffer, 4, NULL);
//读出EIP
ndAddr += 4;
printf("执行完CALL语句的EIP为:%X\n", ndAddr);
//获取真正的基址
ndAddr += ndBaseBuffer;
printf("基址为:%X\n", ndAddr);
22 快捷栏使用CALL
83BC8A3C040000000F84********A16C452501518B888C020000E8——快捷栏使用CALL = ndLocateAddr+27 + ndLocateAddr+31 (偏移+EIP)
008391F4 8B95 180FFFFF mov edx,dword ptr ss:[ebp+0xFFFF0F18]
008391FA 83BC8A 3C040000 00 cmp dword ptr ds:[edx+ecx*4+0x43C],0x0
00839202 0F84 DA590000 je Client.0083EBE2
00839208 A1 6C452501 mov eax,dword ptr ds:[0x125456C]
0083920D 51 push ecx
0083920E 8B88 8C020000 mov ecx,dword ptr ds:[eax+0x28C]
00839214 E8 07A2EEFF call Client.00723420 ; 快捷栏使用CALL
00839219 E9 C4590000 jmp Client.0083EBE2
0083921E 83FB 01 cmp ebx,0x1
00839221 0F85 AF000000 jnz Client.008392D6
00839227 8B0D 6C452501 mov ecx,dword ptr ds:[0x125456C]
0083922D 8B89 2C030000 mov ecx,dword ptr ds:[ecx+0x32C]
printf("找到特征码,所在虚拟地址为: %X\n", ndAddr);
//读出偏移
ndAddr += 27;
DWORD ndBaseBuffer = 0;
ReadProcessMemory(hProcess, (LPCVOID)ndAddr, (LPVOID)&ndBaseBuffer, 4, NULL);
//读出EIP
ndAddr += 4;
printf("执行完CALL语句的EIP为:%X\n", ndAddr);
//获取真正的基址
ndAddr += ndBaseBuffer;
printf("基址为:%X\n", ndAddr);
23 寻路CALL
#define Call_RunToXY 0x0051FFE0 //寻路CALL
8B8E641C000083EC0C8BC489108B96681C00008948048BCE895008E8——寻路CALL = ndLocateAddr+28 + ndLocateAddr+32 (偏移+EIP)
0052228B 33C2 xor eax,edx
0052228D 2BC2 sub eax,edx
0052228F 3D DC050000 cmp eax,0x5DC
00522294 7E 3B jle XClient.005222D1
00522296 6A 03 push 0x3
00522298 8B96 601C0000 mov edx,dword ptr ds:[esi+0x1C60] ; esi=[02E65A24]
0052229E 8B8E 641C0000 mov ecx,dword ptr ds:[esi+0x1C64]
005222A4 83EC 0C sub esp,0xC
005222A7 8BC4 mov eax,esp
005222A9 8910 mov dword ptr ds:[eax],edx
005222AB 8B96 681C0000 mov edx,dword ptr ds:[esi+0x1C68]
005222B1 8948 04 mov dword ptr ds:[eax+0x4],ecx
005222B4 8BCE mov ecx,esi
005222B6 8950 08 mov dword ptr ds:[eax+0x8],edx
005222B9 E8 22DDFFFF call Client.0051FFE0 ; 寻路CALL
005222BE FFD7 call edi
printf("找到特征码,所在虚拟地址为: %X\n", ndAddr);
//读出偏移
ndAddr += 28;
DWORD ndBaseBuffer = 0;
ReadProcessMemory(hProcess, (LPCVOID)ndAddr, (LPVOID)&ndBaseBuffer, 4, NULL);
//读出EIP
ndAddr += 4;
printf("执行完CALL语句的EIP为:%X\n", ndAddr);
//获取真正的基址
ndAddr += ndBaseBuffer;
printf("基址为:%X\n", ndAddr);
24 与NPC对话CALL
#define Call_ChatWithNPC 0x50D3F0 //与NPC对话CALL
33C05DC20C008B5510528B550C5250E8——与NPC对话CALL = ndLocateAddr+16 + ndLocateAddr+20 (偏移+EIP)
00512BD6 |. 33C0 xor eax,eax
00512BD8 |. 5D pop ebp
00512BD9 |. C2 0C00 retn 0xC
00512BDC |> 8B55 10 mov edx,[arg.3]
00512BDF |. 52 push edx
00512BE0 |. 8B55 0C mov edx,[arg.2]
00512BE3 |. 52 push edx
00512BE4 |. 50 push eax
00512BE5 |. E8 06A8FFFF call Client.0050D3F0
00512BEA |. 5D pop ebp
00512BEB \. C2 0C00 retn 0xC
25 点击对话菜单选项CALL
#define Call_ClickChatMenuOption 0x007D5B30 //点击对话菜单选项CALL
8B9C9EA801000081FB3C0100000F8D********538BCEE8——点击对话菜单选项CALL = ndLocateAddr+23 + ndLocateAddr+27 (偏移+EIP)
007DC438 .^\0F84 16FFFFFF je Client.007DC354
007DC43E . 8B9C9E A8010000 mov ebx,dword ptr ds:[esi+ebx*4+0x1A8]
007DC445 . 81FB 3C010000 cmp ebx,0x13C
007DC44B .^ 0F8D 03FFFFFF jge Client.007DC354
007DC451 . 53 push ebx ; 打开仓库=5
007DC452 . 8BCE mov ecx,esi ; 0FA98BA8
007DC454 . E8 D796FFFF call Client.007D5B30 ; 打开仓库3 点击对话菜单选项CALL
007DC459 .^ E9 F6FEFFFF jmp Client.007DC354
007DC45E > 2D 30040000 sub eax,0x430
007DC463 . 0F84 13030000 je Client.007DC77C
007DC469 . 83E8 1A sub eax,0x1A
007DC46C .^ 0F85 E2FEFFFF jnz Client.007DC354
007DC472 . 8D55 E0 lea edx,dword ptr ss:[ebp-0x20] ; Case 44A of switch 007DBDC8
007DC475 . 52 push edx
007DC476 . 68 1865AA00 push Client.00AA6518 ; ASCII "..\datas\interface\DATA\window_npc\window_exchangebox.bmp"
26 玩家可视范围基址
#define Base_ViewRange 0x00AA1DBC //玩家可视范围基址
6A016A006A006A006A0068********525056E8********D905——玩家可视范围基址 = ndLocateAddr+25
0046FF16 |. 6A 01 push 0x1
0046FF18 |. 6A 00 push 0x0
0046FF1A |. 6A 00 push 0x0
0046FF1C |. 6A 00 push 0x0
0046FF1E |. 6A 00 push 0x0
0046FF20 |. 68 1C2FAA00 push Client.00AA2F1C ; ASCII "..\datas\interface\DATA\window_npc\system_m02.bmp"
0046FF25 |. 52 push edx
0046FF26 |. 50 push eax
0046FF27 |. 56 push esi
0046FF28 |. E8 3392FEFF call Client.00459160
0046FF2D |. D905 BC1DAA00 fld dword ptr ds:[0xAA1DBC] ; 玩家可视范围
0046FF33 |. 6A 01 push 0x1
0046FF35 |. D95D DC fstp dword ptr ss:[ebp-0x24]
0046FF38 |. D905 24D3A900 fld dword ptr ds:[0xA9D324]
0046FF3E |. 8B55 DC mov edx,dword ptr ss:[ebp-0x24]