Ultima modifica da un moderatore:
Come creare lock Mob
Strumenti:
-CheatEngine
-Dev-c++
-Metin2
-Computer ( XD )
Tutorial
Dev-c++
Iniziamo!
Per prima cosa apriamo dev-c++e clicchiamo su file > nuovo > file sorgente
-Includiamo Windows.h
-definiamo la costante pointer con valore 0x005F29BC
-Dichiariamo 1 variabil DWORD che servirà per scrivere su un address libero le nostre coordinate attuali
-Dichiari8amo una variabile HANDLE che sarà uguale a processo()
-Scriviamo la funzione Processo()
-Scriviamo la funzione GetAdd() che ci server per trovare il baseaddress della coordinata Y
Ora che abbiamo scritto tutto dovremmo avere un codice simile a questo:
Cheat-Engine
Apriamo CE selezionamo il processo metin2.bin e clicchiamo su memory view!
Andiamo all'address:
005f781d che sarà l'address dove scriveremo la nostra funzione asm
e scriviamo:
Immagine:
Ora aprite il blocco note e copiate tutti i bytes ( segnati in verde) aggiungendo davanti 0x (in c++ indica un numero esadecimale) e separandoli con una virgola..
in questo modo:
Dev-c++
Dichiariamo un array BYTE e all'interno scriviamoci i byte che avete copiato:
Cheat-Engine
Andiamo all'address
004f1cff ( coordinate Y )
e scriviamo:
Dev-c++
Copiate tutti i byte (segnati in verde e compreso il nop [0x90]) e dichiariamo un altro array BYTE dove scriveremo i byte che abbiamo copiato
Ora possiamo scrivere il lockMob sull'asse Y!
Scriviamo le nostre coordinate attualli sull'address 005f783c utilizzando writeprocessmemory:
Con un altro writeprocessmemory scriviamo la nostra funzione asm sull'address 005F781D
e infine scriviamo sull'address 004f1cff il jmp per fare in modo che venga eseguita la nostra funzione asm:
Ecco come dovrebbe essere ora il codice:
Ora rifate lo stesso procedimento con X e Z compilate e avrete scritto il LockMob!
Rigraziamenti: Sthep
Credits: Unfair-Gamers
Fonte: Unfair-Gamers
Strumenti:
-CheatEngine
-Dev-c++
-Metin2
-Computer ( XD )
Tutorial
Dev-c++
Iniziamo!
Per prima cosa apriamo dev-c++e clicchiamo su file > nuovo > file sorgente
-Includiamo Windows.h
-definiamo la costante pointer con valore 0x005F29BC
-Dichiariamo 1 variabil DWORD che servirà per scrivere su un address libero le nostre coordinate attuali
-Dichiari8amo una variabile HANDLE che sarà uguale a processo()
-Scriviamo la funzione Processo()
Codice:
HANDLE Processo()
{
HWND hwnd;
hwnd = FindWindow(0, "METIN2");
DWORD proc_id;
GetWindowThreadProcessId(hwnd, &proc_id);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);
return hProcess;
}
Codice:
unsigned long GetAdd(int x,int y)
{
int buffer[3];
int address[2];
ReadProcessMemory(Processo(),(LPVOID)pointer,&buffer[0],sizeof(buffer[0]),NULL);
address[0] = buffer[0] + x;
ReadProcessMemory(Processo(),(LPVOID)address[0],&buffer[1],sizeof(buffer[1]),NULL);
address[1] = buffer[1] + y;
ReadProcessMemory(Processo(),(LPVOID)address[1],&buffer[2],sizeof(buffer[2]),NULL);
return buffer[2];
}
Codice:
#include <windows.h>
#define pointer 0x005F29BC
unsigned long GetAdd(int x,int y);
HANDLE Processo();
int main()
{
DWORD Y = GetAdd(16,1416) // 16 e 1416 sono i 2 offset che servono per tovare Y
HANDLE hProcess = Processo();
}
HANDLE Processo()
{
HWND hwnd;
hwnd = FindWindow(0, "METIN2");
DWORD proc_id;
GetWindowThreadProcessId(hwnd, &proc_id);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);
return hProcess;
}
unsigned long GetAdd(int x,int y)
{
int buffer[3];
int address[2];
ReadProcessMemory(Processo(),(LPVOID)pointer,&buffer[0],sizeof(buffer[0]),NULL);
address[0] = buffer[0] + x;
ReadProcessMemory(Processo(),(LPVOID)address[0],&buffer[1],sizeof(buffer[1]),NULL);
address[1] = buffer[1] + y;
ReadProcessMemory(Processo(),(LPVOID)address[1],&buffer[2],sizeof(buffer[2]),NULL);
return buffer[2];
}
Apriamo CE selezionamo il processo metin2.bin e clicchiamo su memory view!
Andiamo all'address:
005f781d che sarà l'address dove scriveremo la nostra funzione asm
e scriviamo:
Codice:
005f781d - push ecx
005f781e - mov ecx,[005f783c]
005f7824 - mov [esi+000003ac],ecx
005f782A - pop ecx
005f782B - jmp 004f1d05
Ora aprite il blocco note e copiate tutti i bytes ( segnati in verde) aggiungendo davanti 0x (in c++ indica un numero esadecimale) e separandoli con una virgola..
in questo modo:
Codice:
0x51,0x8b,0x0d,0x3c,0x78,0x5f,0x00,ecc..ecc..
Dichiariamo un array BYTE e all'interno scriviamoci i byte che avete copiato:
Codice:
BYTE Lock[] = { 0x51,0x8b,0x0d,0x3c,0x78,0x5f,0x00,0x89,0x8e,0xac,0x03,0x00,
0x00,0x59,0xe9,0xd5,0xa4, 0xef, 0xff };
Cheat-Engine
Andiamo all'address
004f1cff ( coordinate Y )
e scriviamo:
Codice:
004f1cff - jmp 005f781d
Dev-c++
Copiate tutti i byte (segnati in verde e compreso il nop [0x90]) e dichiariamo un altro array BYTE dove scriveremo i byte che abbiamo copiato
Codice:
BYTE YJMP[] = {0xe9,0x19,0x5b,0x10,0x00,0x90};
Scriviamo le nostre coordinate attualli sull'address 005f783c utilizzando writeprocessmemory:
Codice:
WriteProcessMemory(hProcess, (LPVOID)0x5f783c, &Y, sizeof(Y), NULL);
Codice:
WriteProcessMemory(hProcess, (LPVOID)0x5F781D, &Lock, sizeof(Lock), NULL);
Codice:
WriteProcessMemory(hProcess, (LPVOID)0x4f1cff, &YJMP, sizeof(YJMP), NULL);
Codice:
#include <windows.h>
#include <iostream.h>
#define pointer 0x005F29BC
unsigned long GetAdd(int x,int y);
HANDLE Processo();
int main()
{
DWORD Y = GetAdd(16,1416);
HANDLE hProcess = Processo();
BYTE Lock[] = {0x51, 0x8b,0x0d,0x3c,0x78,0x5f,0x00,0x89,0x8e,0xac,0x03,0x00,0x00,0x59,0xe9,0xd5,0xa4,0xef,0xff};
BYTE YJMP[] = {0xe9,0x19,0x5b,0x10,0x00,0x90};
WriteProcessMemory(hProcess, (LPVOID)0x5f783c, &Y, sizeof(Y), NULL);
WriteProcessMemory(hProcess, (LPVOID)0x5F781D, &Lock, sizeof(Lock), NULL);
WriteProcessMemory(hProcess, (LPVOID)0x4f1cff, &YJMP, sizeof(YJMP), NULL);
}
HANDLE Processo()
{
HWND hwnd;
hwnd = FindWindow(0, "METIN2");
DWORD proc_id;
GetWindowThreadProcessId(hwnd, &proc_id);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);
return hProcess;
}
unsigned long GetAdd(int x,int y)
{
int buffer[3];
int address[2];
ReadProcessMemory(Processo(),(LPVOID)pointer,&buffer[0],sizeof(buffer[0]),NULL);
address[0] = buffer[0] + x;
ReadProcessMemory(Processo(),(LPVOID)address[0],&buffer[1],sizeof(buffer[1]),NULL);
address[1] = buffer[1] + y;
ReadProcessMemory(Processo(),(LPVOID)address[1],&buffer[2],sizeof(buffer[2]),NULL);
return buffer[2];
}
Rigraziamenti: Sthep
Credits: Unfair-Gamers
Fonte: Unfair-Gamers