ASM Utilizzare il Base Pointer a basso livello

Stato
Discussione chiusa ad ulteriori risposte.

xXStephXx

Utente Electrum
28 Aprile 2008
389
16
1
125
Ultima modifica:
Qua vi spiegherò come fare un hack per la velocità di attacco su metin2, utilizzando il pointer generale di metin a basso livello dal gamecode XD

allora la funzione normale è:

Codice:
004EB8F0 - mov eax,[esp+04] ;contiene il value della speed
004EB8F4 - mov [ecx+000003dc],eax  ;eax = nostra speed
004EB8FA - ret 0004

Adesso usando il pointer a basso livello, potremmo risparmiare due ReadProcessMemory XD

creiamo code cave su un address libero e mettiamo

Codice:
00600005 - push eax
00600006 - mov eax,[005f29bc] ;mette il value del main pointer in eax
0060000B - add eax,10 ;lo somma a 10
0060000E - mov eax,[eax] ;copia in eax il value puntato dal value del pointer + 10
00600010 - add eax,000005ba ; lo somma a 5ba (adesso eax = address speed attack)
00600015 - mov [eax],00003ff6 ;mette nell'address della speed un value maggiore a 16256 (default)
0060001B - mov eax,[esp+08]
0060001F - mov [ecx+000003dc],eax
00600025 - pop eax
00600026 - jmp 004eb8fa ;fine code-cave


SPIEGAZIONE:
Codice:
00600006 - mov eax,[005f29bc]
0060000B - add eax,10 
0060000E - mov eax,[eax]
00600010 - add eax,000005ba
Tutto questo serve a trovare dal pointer l'address dinamico


Codice:
0060001B - mov eax,[esp+08]
0060001F - mov [ecx+000003dc],eax

questa parte serve per ricopiare nel code cave la funzione originale, come spero che vi siate accorti, l'unica differenza è che anzichè esp+04, viene copiato esp+08...
Perchè?

Per il fatto che lo stack pointer punta all'ultima cella dello stack che tende ad espandersi verso il basso... Per cui se prima era esp+4, dopo aver pushato eax che occupa 4 bytes, lo stack pointer è sceso di 4 bytes; per cui per puntare alla speed è necessario sommarlo di 8..

Ecco un disegnino


Prima del code cave

| |value speed| ESP +04
| |.....................| <----- ESP
|
V



Dopo il push eax nel code cave


|value speed| <--------- ESP + 08
|.....................| <-------- ESP + 04
| eax............. | <--------- ESP


Push eax equivale a:

Codice:
sub esp, 04
mov [esp], eax

è un altro modo per scrivere sul gamecode facendo direttamente la scrittura sull'address puntato dal pointer, evitando di usare le ReadProcessMemory la modulo che usiamo con visual studio...

Spero di essere stato chiaro (ma ne dubito)
 
Stato
Discussione chiusa ad ulteriori risposte.