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 è:
Adesso usando il pointer a basso livello, potremmo risparmiare due ReadProcessMemory XD
creiamo code cave su un address libero e mettiamo
SPIEGAZIONE:
Tutto questo serve a trovare dal pointer l'address dinamico
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:
è 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)
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
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)