ASM Creare un LockMob

Stato
Discussione chiusa ad ulteriori risposte.

xXStephXx

Utente Electrum
28 Aprile 2008
389
16
1
125
Ultima modifica:
Un piccolo regalino a tutti i metiniani...


4.0 Gli Assi

La mappa di metin2 va vista come un piano cartesiamo XD Anch'essa è composta dai 3 assi: X,Y e Z per l'altezza.

Vedesi la figura sotto:
img10.bmp


Ok Adesso che abbiamo capito meglio il prospetto, passiamo al dunque... Con le assi si possono fare moltissime cose su metin2, tra cui (non ci crederete mai) la funzione migliore scoperta....

4.1 Il Teleporter Hack

Le coordinate sono contenute in 3 address, il cui value corrisponde al valore della X, Y e Z. Scrivendo su questi address, come abbiamo visto nei tutorial precedenti, è possibile modificare le coordinate attuali con un consecutivo spostamento del PG sulla mappa.... Vediamo meglio come trovare questi address.

=====================

Pointer = 0x5F29BC

===
Asse X
Offset1 = 16
Offset2 = 1412
----
Asse Y
Offset1 = 16
Offset2 = 1416
----
Asse Z
Offset1 = 16
Offset2 = 1420
----
====

Bene, adesso sappiamo come trovare l'address risalendo tramite la ReadProcessMemory al all'address puntato, sommiamo offset1, leggiamo offset1, prendiamo il value e sommiamo l'offset 2.
Adesso abbiamo l'address per ognuno dei tre assi.

ATTENZIONE!!! Il value sarà molto superiore a quello delle coordinate che trovate sulla mappa, quando noi scriviamo la memoria dobbiamo renderlo proporzionato...

ovvero:

CoordinataMappaGioco: X = CoordinataMappaGiocoMassima : value massimo

X = CoordinataMappaGioco * value massimo / coordinataMappaGiocoMassima....

XD
Non è così complicato come può sembrare.....


4.1 LockMob

Il lock mob è sicuramente la funzione pià interessante realizzabile con le coordinate, e non è così difficile come dicono le voci di corridoio XD Anzi a dirla tutta è molto pià semplice di un normale teleporter con mappa.

Però sicuramente è il più complicato da spiegare :lol: soprattutto per un nabbo di ASM come me :sisi:

Ma andiamo per gradi....


Il valore delle X, Y, Z che abbiamo visto prima, sono contenuti all'interno del registro esi con un offset
Essi sono:

esi+000003a8 // X
esi+000003ac // Y
esi+000003b0 // Z

Vedesi figura:
img11.bmp



Ok Spero vi sia chiaro.... (lo spero perchè non so come altro spiegarlo)
Nel gamecode esistono funzioni che ci permettono di muoverci aggiornando le coordinate a ogni passo, copiando così il valore nel registro esi+offset...

In poche parole abbiamo:

mov [esi+000003a8],eax // X
mov [esi+000003ac],ecx // Y
mov [esi+000003b0],edx // Z

Nella prima funzione, il registro eax contiene il valore della coordinata X dopo aver effettuato il passo, il valore viene copiato in esi+3a8 che conteneva il valore della X prima di aver effettuato il passo, questa funzione permette al PG di muoversi lungo l'asse X che altrimenti sarebbe impossibile. Stessa cosa per gli altri due assi. Le tre istruzioni sono consecutive sul gamecode.
Adesso, per fare un lock mob, non dobbiamo fare altro che fare in modo che eax, ecx e edx contengano solo le nostre coordinate attuali, bloccate al tempo dell'attivazione del Lock. In modo che camminando non si aggiornino ma rimangano sempre tali.


Molti di voi avranno notato che su metin, la chiamata che aggiorna la posizione del PG è la stessa che aggiorna la posizione dei MOB e degli NPC e di tutti gli altri giocatori!!!! :lol:



Per cui, una volta che eax, ecx ed edx contengono solo e soltanto le nostre coordinate, il che indica implicitamente che qualsiasi mob, npc o pg si muova, attivando la call che aggiorna le coordinate, ZACKK!!! Rimane intrappolato nelle nostre coordinate, perchè il registro eax contiene solo e soltanto le nostre coordinate!!!



Ho scritto in grassetto perchè è il meccanismo "chiave" del funzionamento del LockMob... Usiamo li stessi registri di mob ed NPC (non voglio criticare la GF, ma funziona così)

Eheheheeh.....


Vediamo come procedere....
Adesso per comodità lo farò vedere solo per la X col registro eax.

Allora dobbiamo fare in modo che eax contenga solo le nostre coordinate fisse nel punto in cui siamo attualmente...

Prima di procedere qui, consiglio vivamente di leggersi la guida di un esperto serio: http://www.cheatforge.net/community/asm/2116-creare-un-cheat-editando-il-gamecode-asm.html

Dopodichè procediamo....

Allora andiamo sul gamecode come mostrato nella guida che vi ho linkato, andate all'address 004F1616 con click destro->GoTo

Vedesi figura
img12.bmp


Se vi esce una cosa simile siete sul punto giusto...



(L'immagine è sbagliata, stasera rifaccio lo screen)

Ecco come lockare eax in C++

Codice:
#include <windows.h>



HANDLE GetProc();
DWORD GetX();
DWORD GetY();
DWORD GetZ();




int main()
{


DWORD X = GetX();
DWORD Y = GetY();
DWORD Z = GetZ();

HANDLE hProcess = GetProc();
WriteProcessMemory(hProcess, (LPVOID)0x5f77e1, &X, sizeof(X), NULL);
WriteProcessMemory(hProcess, (LPVOID)0x5F781D, &Y, sizeof(Y), NULL);
WriteProcessMemory(hProcess, (LPVOID)0x5F7846, &Z,sizeof(Z), NULL);

//LOCK ON ENABLE

BYTE Xlock[] = { 0x50, 0xa1, 0xe1, 0x77, 0x5f, 0x00, 0x89, 0x86, 0xa8, 0x03, 0x00, 0x00, 0x58, 0xe9, 0x3b, 0x9e, 0xef, 0xff };

WriteProcessMemory(hProcess, (LPVOID)0x5F77cf, &Xlock, sizeof(Xlock), NULL);



BYTE Xatk[] = { 0xe9, 0xb4, 0x61, 0x10, 0x00, 0x90 };

WriteProcessMemory(hProcess, (LPVOID)0x4F1616, &Xatk, sizeof(Xatk), NULL);


}


HANDLE GetProc()
{
HWND hWnd = FindWindow(0, "METIN2");
DWORD proc_id;
GetWindowThreadProcessId(hWnd, &proc_id);

HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);
return hProcess;
}


DWORD GetX()
{


DWORD buff, buff1, buff2;

DWORD addy, addy1;


ReadProcessMemory(GetProc(), (LPVOID)0x005F29BC, &buff, sizeof(buff), NULL);
addy = buff + 16;
ReadProcessMemory(GetProc(), (LPVOID)addy, &buff1, sizeof(buff1), NULL);
addy1 = buff1 + 1412;
ReadProcessMemory(GetProc(), (LPVOID)addy1, &buff2, sizeof(buff2), NULL);

DWORD X = buff2;
return X;






}



DWORD GetY()
{


DWORD buff, buff1, buff2;

DWORD addy, addy1;


ReadProcessMemory(GetProc(), (LPVOID)0x005F29BC, &buff, sizeof(buff), NULL);
addy = buff + 16;
ReadProcessMemory(GetProc(), (LPVOID)addy, &buff1, sizeof(buff1), NULL);
addy1 = buff1 + 1416;
ReadProcessMemory(GetProc(), (LPVOID)addy1, &buff2, sizeof(buff2), NULL);

return buff2;


}

DWORD GetZ()
{


DWORD buff, buff1, buff2;

DWORD addy, addy1;


ReadProcessMemory(GetProc(), (LPVOID)0x005F29BC, &buff, sizeof(buff), NULL);
addy = buff + 16;
ReadProcessMemory(GetProc(), (LPVOID)addy, &buff1, sizeof(buff1), NULL);
addy1 = buff1 + 1420;
ReadProcessMemory(GetProc(), (LPVOID)addy1, &buff2, sizeof(buff2), NULL);

return buff2;


}

Video Guida

[YOUTUBE]<object width="660" height="525"><param name="movie" value="http://www.youtube.com/v/mGPatBzxoWQ&hl=it&fs=1&color1=0x5d1719&color2=0xcd311b&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/mGPatBzxoWQ&hl=it&fs=1&color1=0x5d1719&color2=0xcd311b&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="525"></embed></object>[/YOUTUBE]
fonte: Cap 4 "mio tutorial"
 
.

complimenti :\....cmq pensandoci gex aveva ragione....quasi tutte le funzioni degli hack le ha scoperte lui :asd:.....cmq bravissimo,steph sempre disponibile ;)
 
Ultima modifica:
IO nn ci sarei mai arrivato lol ke bravo;))))))))))))))))))))
lol
lol
lol
posta una sorgente completa in vb cosi vediamo no?? ahahhahaha
ciau steph;))))))))))))))))))))))))))))
la "z" e' tua nn dimentikiamo!!!!!!! komplimenti!
 
Ultima modifica:
Controlla l'IP che non è un multi account.
 
lol

quasi? diciamo tutte XD

IO nn ci sarei mai arrivato lol ke bravo;))))))))))))))))))))
lol
lol
lol
posta una sorgente completa in vb cosi vediamo no?? ahahhahaha
ciau steph;))))))))))))))))))))))))))))
la "z" e' tua nn dimentikiamo!!!!!!! komplimenti!

Ma chi è quel POINTER??? Bah .-. Legolas, se vuoi controlla l'IP, ma io di quel nabbo non ne so nulla

per dire che era multiaccount cene sarà un motivo...i mod ci mettono 2 sec. a vedere indirizzo ip associato xD
 
Ultima modifica:
per dire che era multiaccount cene sarà un motivo...i mod ci mettono 2 sec. a vedere indirizzo ip associato xD

Bene, evidentemente non avrà controllato l'IP legolas prima di dire questa boiata XD Ti assicuro che non è un mio fake quel POINTER

-----

Posto la sorgente in C++, però per sicurezza solo la parte che riguarda la X col registro eax.... Completatela voi...

Codice:
#include <windows.h>



HANDLE GetProc();
DWORD GetX();
DWORD GetY();
DWORD GetZ();




int main()
{


DWORD X = GetX();
DWORD Y = GetY();
DWORD Z = GetZ();

HANDLE hProcess = GetProc();
WriteProcessMemory(hProcess, (LPVOID)0x5f77e1, &X, sizeof(X), NULL);
WriteProcessMemory(hProcess, (LPVOID)0x5F781D, &Y, sizeof(Y), NULL);
WriteProcessMemory(hProcess, (LPVOID)0x5F7846, &Z,sizeof(Z), NULL);

//LOCK ON ENABLE

BYTE Xlock[] = { 0x50, 0xa1, 0xe1, 0x77, 0x5f, 0x00, 0x89, 0x86, 0xa8, 0x03, 0x00, 0x00, 0x58, 0xe9, 0x3b, 0x9e, 0xef, 0xff };

WriteProcessMemory(hProcess, (LPVOID)0x5F77cf, &Xlock, sizeof(Xlock), NULL);



BYTE Xatk[] = { 0xe9, 0xb4, 0x61, 0x10, 0x00, 0x90 };

WriteProcessMemory(hProcess, (LPVOID)0x4F1616, &Xatk, sizeof(Xatk), NULL);


}


HANDLE GetProc()
{
HWND hWnd = FindWindow(0, "METIN2");
DWORD proc_id;
GetWindowThreadProcessId(hWnd, &proc_id);

HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);
return hProcess;
}


DWORD GetX()
{


DWORD buff, buff1, buff2;

DWORD addy, addy1;


ReadProcessMemory(GetProc(), (LPVOID)0x005F29BC, &buff, sizeof(buff), NULL);
addy = buff + 16;
ReadProcessMemory(GetProc(), (LPVOID)addy, &buff1, sizeof(buff1), NULL);
addy1 = buff1 + 1412;
ReadProcessMemory(GetProc(), (LPVOID)addy1, &buff2, sizeof(buff2), NULL);

DWORD X = buff2;
return X;






}



DWORD GetY()
{


DWORD buff, buff1, buff2;

DWORD addy, addy1;


ReadProcessMemory(GetProc(), (LPVOID)0x005F29BC, &buff, sizeof(buff), NULL);
addy = buff + 16;
ReadProcessMemory(GetProc(), (LPVOID)addy, &buff1, sizeof(buff1), NULL);
addy1 = buff1 + 1416;
ReadProcessMemory(GetProc(), (LPVOID)addy1, &buff2, sizeof(buff2), NULL);

return buff2;


}

DWORD GetZ()
{


DWORD buff, buff1, buff2;

DWORD addy, addy1;


ReadProcessMemory(GetProc(), (LPVOID)0x005F29BC, &buff, sizeof(buff), NULL);
addy = buff + 16;
ReadProcessMemory(GetProc(), (LPVOID)addy, &buff1, sizeof(buff1), NULL);
addy1 = buff1 + 1420;
ReadProcessMemory(GetProc(), (LPVOID)addy1, &buff2, sizeof(buff2), NULL);

return buff2;


}
 
yeah un altro segreto reso pubblico!
Bravo bravo steph non c'è che dire ti sei dato da fare :D

però sinceramente io mi sono rotto di vedere una programming zone che gira solo attorno a metin <.<
 
XD i segreti resi pubblici è la mia professione ormai XD Renderò a breve anche wall hack e Pick (anzi forse pick up no XD)... Però è il mio mestiere ormai, anche perchè sono uno a cui le cose top secret lo infastidiscono.
 
Peccato che non possa usare metin altrimenti avrei potuto dare una mano col pickup... comunque x il resto molto carino, non avrei mai pensato ad una chiamata in comune...
 
Ultima modifica:
certo perchè tu non le trovi , certo che non ti infastidisce....che **** di ragionamenti che fai...

Il lock mob è una facile da fare (sono solo due mov), mi infastidisce solo il fatto che la gente lotti per tenerlo nascosto. Posso capire Gex che è il creatore e giustamente li ha dato fastidio quando è stato passato ai tedeschi, ma a te e eximus cosa ve ne importa?
Per quanto riguarda il pick up, l'ho studiato attentamente è sono due funzioni, una che checka se sono presenti item sulla minimappa, l'altra che è inclusa, è una call che si attiva se sono presenti item per pickarli... Il bello di quella è che nel mh ha molti codici indiretti, come mov ecx, address ----- mov ecx, [ecx] oppure mov eax,address ---- call eax XD Non capisco perchè è stata fatta in modo espansivo.... A me quello che interessava veramente del pick up è il range.
 
io preservo ciò che altri hanno trovato con fatica....ed è quello che dovrebbe fare la comunità , invece di postare sempre i soliti hack che cambiano solo di grafica , dovrebbe aiutare a cercare qualcosa di nuovo...ora non venirmi a dire , ah ma se voi non ci aiutate noi come facciamo , perchè ti risponderò , noi o gex non siamo nati imparati , abbiamo fatto un percorso per raggiungere determinate cose ed è quello che dovresti fare pure tu.paragona quello che fai alla vita di tutti i giorni...e ti accorgerai degli errori che stai facendo...
per sentirsi fighi o per farsi conoscere non c è bisogno di postare CIO CHE HANNO TROVATO ALTRI PER RENDERSI DEI PALADINI DELLA GIUSTIZIA , esistono modi e modi per farsi conoscere , uno dei modi ? TROVARE QUALCOSA DI INNOVATIVO...
 
Ultima modifica:
come OneShot? .-. Poi a studiare basta e avanza la guida di bonu$ e c# XD
 
e si sono visti i tuoi risultati....nuove funzioni ? mmh nessuna , non ti sembra strano ?

forse quando crescerai mentalmente ti renderai conto....
 
e si sono visti i tuoi risultati....nuove funzioni ? mmh nessuna , non ti sembra strano ?

forse quando crescerai mentalmente ti renderai conto....

Già allora buona fortuna XD Che anche tu, forse te l'avrei dovuto dire per PM, ma dai post che fai si evince sempre un'atmosfera di grande rosik... E non l'ho notato solo io... ti assicuro, tutti quelli che hanno avuto a che fare con hack per metin2 la pensano come me.... Anche perchè ti comporti così con tutti quelli che creano hack eccetto Gex e blackmail .-.
 
mmh forse perchè il mio rispetto se lo sono meritati ? , chiamalo rosik , chiamalo come vuoi , io esprimo solo opinioni al riguardo senza rilasciare commenti personali...ho una visione oggettiva delle cose non soggettiva...
 
Già e ti sei comportato nello stesso modo critico (cioè da rosikone) anche con SnFede, erfra51 (quando ha fatto il primo hack per mt2), Dany... la lista è lunga XD Questi sono i principali...
 
Ultima modifica:
certo che farsi i multi account per auto compiacersi fa veramente pena.
certo perchè tu non le trovi , certo che non ti infastidisce....che **** di ragionamenti che fai...
e si sono visti i tuoi risultati....nuove funzioni ? mmh nessuna , non ti sembra strano ?

forse quando crescerai mentalmente ti renderai conto....
mmh forse perchè il mio rispetto se lo sono meritati ? , chiamalo rosik , chiamalo come vuoi , io esprimo solo opinioni al riguardo senza rilasciare commenti personali...ho una visione oggettiva delle cose non soggettiva...
ci sarà un motivo non credi ? te lo lascio pensare....
con questo finisco.

Stai a cuccia! Ti abbassi sempre eh?

PS. Quale tra questi è il commento serio? Una caramellina a chi lo trova!
cmq bravo steph! bella guida
 
Quoto, da adesso in questa discussione si risolvono magari i problemi sul lock mob.... Cioè se trovate problemi non aspettate a scriverle XD Magari riusciamo anche a migliorarlo.
 
Ultima modifica:
Per me ha fatto bene a "rivelare il segreto" del lock mob. Poi c'è già stata una discussione tra lego e steph magari cerchiamo di tenere pulita questa. Cmq credo che chi sa un po' (veramente poco asd) d'assembly avesse già capito come fare. Non era così difficile..
Lego cmq magari steph ci prova a implementare nel suo hack nuove funzioni. Aveva trovato qualcosa di interessante su range del pick up ma non siamo riusciti a tirar fuori nulla.
 
Stato
Discussione chiusa ad ulteriori risposte.