Benvenuto! Per postare e godere delle funzionalità del forum registrati, occorrono pochi secondi ed è gratis!

[Guida] ASM01 - Da C ad ASM - cominciamo
(Questo messaggio è stato modificato l'ultima volta il: 23/09/2012, 12:54 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Reputazione:
106

Mix: 3,737
 
Ciao a tutti,
oggi rispondendo ad un post di Pocciox ho avuto l'occasione di dire la mia teoria sul modo migliore di studiare l'asm.

Attenzione, non parlo dell'asm che serve per scrivere un intero programma o complicate routine, io intendo quel poco asm che serve ad esempio per taroccare un gioco con Cheat Engine, oppure quel poco asm che serve per scrivere un detour o un codecave etc.
Per queste cose non credo occorra studiare sui libri l'argomento.

Premesso che studiare l'asm sui libri e in guide varie (vi consiglio i tutorials di iczelion (

[Per vedere i link devi REGISTRARTI.]

) farà sicuramente bene e in alcuni casi sarà l'unico modo di studialo,
la mia idea è che per molte cose il modo migliore di capirci qualcosa sarà questo:

1. scrivere semplici programmi in C contenenti gli unici aspetti che si vogliono studiare
2. aprire l'eseguibile (.exe) con OllyDbg
3. capire la logica con cui il C è diventato ASM

Siccome il C è abbastanza semplice da scrivere (al contrario dell'ASM) non si avranno problemi alla stesura del programma, e a quel punto capire in Olly cosa fa l'ASM non sarà cosi difficile visto che il programma l'abbiamo scritto noi Happywide

Inoltre il vantaggio di questo approccio è che essendo Olly un debugger, non solo vedremo l'asm ma potremo anche interagire, cambiando valori, codice etc e capire cosa succede di conseguenza, secondo me utilissimo per imparare.

Vediamo ora come partire con questa cosa, poi in futuro magari se interessa l'argomeno arricchiremo con nuovi contenuti Tounge

Descrivo quello che poi potrete vedere nel video sottostante:

1. scarichiamo OllyDbg se non lo abbiamo già
2. Scriviamo il primo semplice programma in C e settiamo "release", "multibyte" al posto di unicode e quindi togliamo le ottimizzazioni per semplificarci poi l'analisi in olly
3. buildiamo, ovvero creiamo l'eseguibile
4. lo apriamo con OllyDbg, ci troveremo nell'entry point dell'eseguibile che però non corrisponde al main del C allora ci spostiamo alla prima riga in alto che guarda caso è il main
5. analizziamo le poche righe di codice alla ricerca di quello che abbiamo messo nel sorgente C
6. commentiamo le righe usando il punto e virgole, questo perchè in un codice cosi semplice poteva non servire ma è meglio prendere l'abitudine, in codici piu complicati e lunghi senza commenti ci si perde Wink
7. se ora vogliamo analizzarne il funzionamento possiamo piazzare un breakpoint (F2) su una riga e runnare (F9) il programma
8. l'esecuzione si ferma sul nostro breakpoint ora possiamo andare avanti una riga per volta con lo step (FCool
9. vedremo che la nostra variabile var1 è allocata sullo stack perchè main è una funzione e var1 è una variabile locale
10. vedremo che righe come int var1=0; e var1=2; fanno si che il valore sullo stack della var1 cambierà da un valore iniziale strano (sporcizia precedente) a 0 e poi a 2
11. vedremo che il famoso return 4 viene implementato settando EAX a 4 e poi facendo un RETN

Da notare che questo modo di tornare un valore dalle funzioni è quello standard, usato sempre quindi.
Ovvero il valore di ritorno di una funzione è sempre il valore contenuto in EAX

12. continuando l'esecuzione ci troveremo a codice che AVEVA CHIAMATO il nostro main, infatti possiamo vedere la call al main
e se guardiamo il valore del registro EAX vediamo che è 4.
Infatti a questo punto se volessivo fare qualcosa in base al valore di ritorno della funzione main dovremmo proprio guardare EAX

Con questo per oggi è tutto, buono studio

RICORDATE DI AUMENTARE AL MASSIMO LA QUALITà DEL VIDEO PER VEDERLO AL MEGLIO!




digger
23/09/2012, 12:53
#1
Cerca

1 Life, 1 Avatar <3
Messaggi: 9,074
Discussioni: 271
Registrato: 08-2011
Reputazione:
77

Mix: 0
Seguirò il video Huh
comunque non oggi, oggi preferisco minecraft Asd

23/09/2012, 13:14
#2
Cerca

Amministratore
Messaggi: 2,316
Discussioni: 231
Registrato: 03-2011
Reputazione:
78

Mix: 2,547
Beato chi mastica l'asm, bravo digger!


[Per vedere i link devi REGISTRARTI.]

Prima di aprire ogni contenuto scaricato su siti esterni ad HackMix, scansionatelo su VirusTotal.
27/09/2012, 22:40
#3
Cerca

1 Life, 1 Avatar <3
Messaggi: 9,074
Discussioni: 271
Registrato: 08-2011
Reputazione:
77

Mix: 0
Per adesso io non ho ancora capito le funzioni degli hack, quando per esempio ci sono tanti mini address tipo x64

28/09/2012, 13:56
#4
Cerca

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Reputazione:
34

Mix: 0
Bravo dig +1 continua cosi Happywide

28/09/2012, 14:00
#5
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Reputazione:
106

Mix: 3,737
continua cosi? ma se non se le caga nessuno le mie guide Asd


digger
28/09/2012, 18:18
#6
Cerca

1 Life, 1 Avatar <3
Messaggi: 9,074
Discussioni: 271
Registrato: 08-2011
Reputazione:
77

Mix: 0
Io e luxor si D:

28/09/2012, 18:39
#7
Cerca

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Reputazione:
34

Mix: 0
prima o poi il mondo si accorgerà di te Asd

28/09/2012, 18:43
#8
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 28/09/2012, 20:44 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Reputazione:
106

Mix: 3,737
ahah si quando sarò morto, come i pittori

(28/09/2012, 13:56)Pocciox Ha scritto:

[Per vedere i link devi REGISTRARTI.]

Per adesso io non ho ancora capito le funzioni degli hack, quando per esempio ci sono tanti mini address tipo x64

sai che non sono sicuro di aver capito?
parli di quando ci sono cose tipo:

Codice:
MemoryEdit((void*)ASM_QUICKPLANT,(LPVOID)"\x90\x90",2);



digger
28/09/2012, 19:37
#9
Cerca

1 Life, 1 Avatar <3
Messaggi: 9,074
Discussioni: 271
Registrato: 08-2011
Reputazione:
77

Mix: 0
Stavo smanettando con un warn permanente da 1000 punti xd
Cooomunque, si sto parlando proprio di quello, cosa significano?

28/09/2012, 22:37
#10
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 29/09/2012, 0:01 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Reputazione:
106

Mix: 3,737
sono bytes che insieme formano delle istruzioni ASM
devi sapere che nella memoria del computer quello che forma il codice di un gioco o di un programma sono bytes, non troverai mai cose come :
MOV EAX,0
CMP EAX,EBX
etc etc
troverai solo il loro corrispondente in bytes.

Per capire meglio vediamo con Olly un pezzo di codice del mio amato Prato Fiorito AKA Campo Minato:

[Immagine: 0291c-37c31e88-388e-441f-875f-fd2570a13d3d.png]

bene, come vedi ci sono le tipiche istruzioni ASM,
PUSH EBP
MOV EBP,ESP
etc etc

bene, però se guardi appena a sinistra vedrai quello che VERAMENTE sta nella memoria del computer:
55
8B EC
83 EC 44

dove 55 8B EC 83 EC 44
sono tutti bytes espressi in esadecimale che rappresentano le istruzioni ASM a destra

In poche parole, l'ASM è un qualcosa che serve a noi umani per capirci qualcosa, ma la macchina ragiona con i bytes, non sa niente dell'asm

Bene, ora che ho introdotto sta cosa arriviamo alla hack.

    C++ Programming
  1. MemoryEdit((void*)ASM_QUICKPLANT,(LPVOID)"\x90\x90",2);



MemoryEdit è una funzione che ti sei scritto tu, quello che fa è (in questo caso) piazzare 2 bytes 90 90 all'indirizzo puntato da ASM_QUICKPLANT

Se guardi l'immagine sopra in olly, usando questa funzione potrei dire di piazzare 3 bytes 90 all'indirizzo 0x1001420 (guarda la prima colonna a sinistra)

devi sapere che 0x90 è in ASM il "NOP" ovvero "No Operation" ovvero NON FARE NIENTE,
quindi nel nostro caso vorrebbe dire che faremmo sparire
PUSH EBP
MOV EBP,ESP

rimpiazzandoli con 3 "non fare niente"

bene, perchè sta cosa? semplice perchè in alcuni casi non fare niente al posto di eseguire il codice originale ci permette di ottenere l'effetto hack desiderato.
Ti faccio un esempio, se trovi dove è l'indirizzo di memoria in cui ci sta l'istruzione che decrementa la stamina mentre corri, se con NOP sostituisci l'istruzione ottieni che la stamina non si decrementa piu, effetto-> stamina infinita Happywide

Comunque se facessi delle prove con le guide che ho postato sul campo minato con MHS e CE vedresti cosa intendo, li queste tecniche le ho fatte vedere


digger
28/09/2012, 23:59
#11
Cerca




Utenti che stanno guardando questa discussione: 1 Ospite(i)