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
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


Messaggi in questa discussione
ASM01 - Da C ad ASM - cominciamo - da digger - 23/09/2012, 12:53
[Nessun oggetto] - da Pocciox - 23/09/2012, 13:14
[Nessun oggetto] - da Admin - 27/09/2012, 22:40
[Nessun oggetto] - da Pocciox - 28/09/2012, 13:56
[Nessun oggetto] - da Luxor - 28/09/2012, 14:00
[Nessun oggetto] - da digger - 28/09/2012, 18:18
[Nessun oggetto] - da Pocciox - 28/09/2012, 18:39
[Nessun oggetto] - da Luxor - 28/09/2012, 18:43
[Nessun oggetto] - da digger - 28/09/2012, 19:37
[Nessun oggetto] - da Pocciox - 28/09/2012, 22:37
[Nessun oggetto] - da digger - 28/09/2012, 23:59



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