Salve a tutti, nel tempo libero sto lavorando ad un bot per un gioco mmo. Volevo automizzare alcuni movimenti del giocatore richiamando la funzione walk che ho trovato reversando il client. Non riesco a capire se essa sia splittata in diverse call o se son io a non capirci una mazza
Aprendo il gioco con un debugger, cercando nelle funzioni compaiono due "walk" :
[Funzione 1]
[Funzione 2]
Il codice della call primordiale che viene richiamata quando il giocatore starta il movimento è questo (incluse le due funzioni walk):
La chiamata a questa funzione nel modulo avviene solamente una volta :
Sembra che edi+6 e edi+4 siano proprio le coordinate x,y del giocatore. Ma provando a cercare con chat engine le coordinate del player, compaiono molti registri in cui son presenti più volte le coordinate x,y del player. Molto probabilmente ci saranno altre funzioni che terranno d'occhio la funzione walk con i suoi parametri. Prendendo un address che contiene le coordinate del player e visualizzando con chat engine quali funzioni scrivono su quell'address, ogni volta escono funzioni diverse (probabilmente di controllo o gestione degli errori). Vorrei sapere se c'è un modo per arrivare ad individuare un solo indirizzo e che sia proprio quello della funzione movimento e non di controllo posizione o quant'altro
Aprendo il gioco con un debugger, cercando nelle funzioni compaiono due "walk" :
[Funzione 1]
Codice:
006CCDEA | 68 8CCE6C00 | push gameclient.6CCE8C | 6CCE8C:"walk "
006CCDEF | 8D55 F4 | lea edx,dword ptr ss:[ebp-C] |
006CCDF2 | 0FBFC3 | movsx eax,bx |
006CCDF5 | E8 BEF1D3FF | call gameclient.40BFB8 |
[Funzione 2]
Codice:
006CCE44 | 8B4D F8 | mov ecx,dword ptr ss:[ebp-8] |
006CCE47 | A1 24D17200 | mov eax,dword ptr ds:[72D124] |
006CCE4C | 8B00 | mov eax,dword ptr ds:[eax] |
006CCE4E | BA A8CE6C00 | mov edx,gameclient.6CCEA8 | 6CCEA8:"walk"
006CCE53 | E8 F4B8E1FF | call gameclient.4E874C |
Il codice della call primordiale che viene richiamata quando il giocatore starta il movimento è questo (incluse le due funzioni walk):
Codice:
006CCD9C | 55 | push ebp |
006CCD9D | 8BEC | mov ebp,esp |
006CCD9F | 6A 00 | push 0 |
006CCDA1 | 6A 00 | push 0 |
006CCDA3 | 6A 00 | push 0 |
006CCDA5 | 6A 00 | push 0 |
006CCDA7 | 6A 00 | push 0 |
006CCDA9 | 6A 00 | push 0 |
006CCDAB | 53 | push ebx |
006CCDAC | 56 | push esi |
006CCDAD | 57 | push edi |
006CCDAE | 8BF1 | mov esi,ecx |
006CCDB0 | 8BDA | mov ebx,edx |
006CCDB2 | 33C0 | xor eax,eax |
006CCDB4 | 55 | push ebp |
006CCDB5 | 68 73CE6C00 | push gameclient.6CCE73 |
006CCDBA | 64:FF30 | push dword ptr fs:[eax] |
006CCDBD | 64:8920 | mov dword ptr fs:[eax],esp |
006CCDC0 | A1 10B27200 | mov eax,dword ptr ds:[72B210] |
006CCDC5 | 8B00 | mov eax,dword ptr ds:[eax] |
006CCDC7 | 8B40 20 | mov eax,dword ptr ds:[eax+20] |
006CCDCA | 0FB6B8 A2000000 | movzx edi,byte ptr ds:[eax+A2] |
006CCDD1 | 0FBFC3 | movsx eax,bx |
006CCDD4 | 0FBFD6 | movsx edx,si |
006CCDD7 | 03C2 | add eax,edx |
006CCDD9 | B9 03000000 | mov ecx,3 |
006CCDDE | 99 | cdq |
006CCDDF | F7F9 | idiv ecx |
006CCDE1 | 4A | dec edx |
006CCDE2 | 0F94C0 | sete al |
006CCDE5 | 8845 FF | mov byte ptr ss:[ebp-1],al |
006CCDE8 | 6A 64 | push 64 |
006CCDEA | 68 8CCE6C00 | push gameclient.6CCE8C | 6CCE8C:"walk "
006CCDEF | 8D55 F4 | lea edx,dword ptr ss:[ebp-C] |
006CCDF2 | 0FBFC3 | movsx eax,bx |
006CCDF5 | E8 BEF1D3FF | call gameclient.40BFB8 |
006CCDFA | FF75 F4 | push dword ptr ss:[ebp-C] |
006CCDFD | 68 9CCE6C00 | push gameclient.6CCE9C |
006CCE02 | 8D55 F0 | lea edx,dword ptr ss:[ebp-10] |
006CCE05 | 0FBFC6 | movsx eax,si |
006CCE08 | E8 ABF1D3FF | call gameclient.40BFB8 |
006CCE0D | FF75 F0 | push dword ptr ss:[ebp-10] |
006CCE10 | 68 9CCE6C00 | push gameclient.6CCE9C |
006CCE15 | 8D55 EC | lea edx,dword ptr ss:[ebp-14] | [ebp-14]:EntryPoint
006CCE18 | 33C0 | xor eax,eax |
006CCE1A | 8A45 FF | mov al,byte ptr ss:[ebp-1] |
006CCE1D | E8 96F1D3FF | call gameclient.40BFB8 |
006CCE22 | FF75 EC | push dword ptr ss:[ebp-14] | [ebp-14]:EntryPoint
006CCE25 | 68 9CCE6C00 | push gameclient.6CCE9C |
006CCE2A | 8D55 E8 | lea edx,dword ptr ss:[ebp-18] |
006CCE2D | 8BC7 | mov eax,edi |
006CCE2F | E8 84F1D3FF | call gameclient.40BFB8 |
006CCE34 | FF75 E8 | push dword ptr ss:[ebp-18] |
006CCE37 | 8D45 F8 | lea eax,dword ptr ss:[ebp-8] |
006CCE3A | BA 08000000 | mov edx,8 |
006CCE3F | E8 5086D3FF | call gameclient.405494 |
006CCE44 | 8B4D F8 | mov ecx,dword ptr ss:[ebp-8] |
006CCE47 | A1 24D17200 | mov eax,dword ptr ds:[72D124] |
006CCE4C | 8B00 | mov eax,dword ptr ds:[eax] |
006CCE4E | BA A8CE6C00 | mov edx,nostaleclientx.6CCEA8 | 6CCEA8:"walk"
006CCE53 | E8 F4B8E1FF | call gameclient.4E874C |
006CCE58 | 33C0 | xor eax,eax |
006CCE5A | 5A | pop edx |
006CCE5B | 59 | pop ecx |
006CCE5C | 59 | pop ecx |
006CCE5D | 64:8910 | mov dword ptr fs:[eax],edx |
006CCE60 | 68 7ACE6C00 | push gameclient.6CCE7A |
006CCE65 | 8D45 E8 | lea eax,dword ptr ss:[ebp-18] |
006CCE68 | BA 05000000 | mov edx,5 |
006CCE6D | E8 B682D3FF | call gameclient.405128 |
006CCE72 | C3 | ret |
La chiamata a questa funzione nel modulo avviene solamente una volta :
Codice:
0053F70E | 8947 04 | mov dword ptr ds:[edi+4],eax |
0053F711 | A1 64DB7200 | mov eax,dword ptr ds:[72DB64] |
0053F716 | 8B00 | mov eax,dword ptr ds:[eax] |
0053F718 | 66:8B4F 06 | mov cx,word ptr ds:[edi+6] |
0053F71C | 66:8B57 04 | mov dx,word ptr ds:[edi+4] |
0053F720 | E8 77D61800 | call gameclient.6CCD9C |
Sembra che edi+6 e edi+4 siano proprio le coordinate x,y del giocatore. Ma provando a cercare con chat engine le coordinate del player, compaiono molti registri in cui son presenti più volte le coordinate x,y del player. Molto probabilmente ci saranno altre funzioni che terranno d'occhio la funzione walk con i suoi parametri. Prendendo un address che contiene le coordinate del player e visualizzando con chat engine quali funzioni scrivono su quell'address, ogni volta escono funzioni diverse (probabilmente di controllo o gestione degli errori). Vorrei sapere se c'è un modo per arrivare ad individuare un solo indirizzo e che sia proprio quello della funzione movimento e non di controllo posizione o quant'altro