Domanda Reversing [Domanda stupidissima] OllyDb in runtime

Stato
Discussione chiusa ad ulteriori risposte.

MadJack

Bannato
11 Aprile 2014
106
17
22
74
Salve ragazzi, volevo chiedere, perché se apro un eseguibile con OllyDbg e lo faccio partire (con il tasto PLAY) l'indirizzo EIP non segue le istruzioni in tempo reale? Da quello che ho capito, è possibile visualizzare lo stato dei registri soltanto durante il breakpoint (di conseguenza non posso seguire le istruzioni step-to-step in runtime)...confermate?
 
Se avvii il programma viene eseguito...normalmente in un programma sono eseguite anche migliaia di istruzioni assembly al secondo: ovviamente non può mostrartele tutte una per una. Se vuoi procedere passo passo usa F7 (step into) o F8 (step over). Senza avviare il programma (il target deve essere "in pausa").
 
Ok, l'avevo intuito. Comunque non ho capito il senso dell'ultima frase:
Senza avviare il programma (il target deve essere "in pausa").

Andando al dunque, avrei bisogno di fare, concretamente, una cosa specifica: avvio il programma (sempre affiancato da OllyDbg), clicco sul classico pulsantino in basso (supponendo che sia in corso la prova gratuita) "registra il software" e a questo punto mi appare il famoso messaggio che mi chiede il seriale. Esattamente a questo punto, vorrei sapere a che istruzione è arrivato ollydbg. Che faccio? Metto in pausa il programma? In altre parole, la mia domanda è: OllyDbg mi permette, ad un punto esatto durante l'esecuzione del programma, (senza settare alcun breakpoint!!!) vedere l'istruzione dove è arrivato? Grazie mille
 
I metodi possono essere diversi:
Ad esempio: se il programma usa la chiamata di sistema CreateWindowEx per mostrare la finestra che chiede il seriale puoi:
1. impostare un breakpoint su tutte le chiamate a CreateWindowEx;
2. Avviare il programma;
3. Ignorare il primo breakpoint che dovrebbe essere la creazione della finestra principale;
4. Nella finestra del programma cliccare su "Registra il software";
5. Il debugger si fermerà nuovamente (per via della nuova chiamata a CreateWindowEx) e quindi hai trovato il punto dove crea la finestra (se navighi un po' nelle vicinanze puoi trovare qualcosa di interessante).
Oppure: se il programma ha i testi in chiaro, puoi:
1. chiedere a Olly di cercare in tutti i riferimenti a stringhe finché non trovi cose come "Registra il software" oppure "Seriale errato" ecc.;
2. Impostare hardware/software breakpoint su tutte le istruzioni che accedono a questi riferimenti;
3. Avviare il programma e vedere se brekka in punti interessanti.

Ci possono essere tanti tanti tanti altri modi. Comunque spesso si tratta sempre di piazzare dei breakpoint sull'accesso a certe aree di memoria o in certe funzioni di libreria o del sistema operativo e sperare di cascare in qualcosa di interessante.

Senza settare dei breakpoint no... senza breakpoint l'esecuzione continua senza mai fermarsi. A meno che non sei proprio "fortunato" e premi sul pulsante "pausa" proprio nel momento in cui il programma sta eseguendo un codice interessante - ma è utile in ben pochi casi: solitamente facendo così si casca in funzioni di gestione dei messaggi o di repainting della finestra (roba ben poco utile).
 
Avrei comunque altri dubbi, pertanto ti chiedo, per caso ti trovi in qualche chat irc dove posso parlarti con una maggiore fluidità?
 
Avrei comunque altri dubbi, pertanto ti chiedo, per caso ti trovi in qualche chat irc dove posso parlarti con una maggiore fluidità?
nope - non ho mai avuto la necessità di frequentare chat irc. Solitamente seguo community online e mailing list - non chat.
L'unica chat che uso tutti i giorni è telegram - Username: SpeedJack
Ad ogni modo, non sono un esperto di reversing. Finché sono cose semplici ovviamente posso rispondere ma se si arriva a cose più complicate sicuramente no.
 
  • Mi piace
Reazioni: Serendipity
Sinceramente la tua domanda non si capisce cosa significhi. EIP per questioni di architettura hardware contiene sempre l'indirizzo corrente , ma ovviamente puoi sapere qual è il valore dei registri soltanto fermando l'esecuzione, in quanto bisogna contestualizzare lo stato dei registri. Tieni anche conto che spesso i programmi avviano più threads, ognuno col proprio contesto.
Se si vuole conoscere il percorso esatto del programma e le modifiche fatte ai registri step by step è possibile usare la funzione "trace into" disponibile in olly, che può salvare a video o su file tutte le istruzioni eseguite dal programma. Ma questo ovviamente rallenta l'esecuzione in modo insostenibile se si necessita di tracciare una notevole quantità di codice, perchè il funzionamento è semplicemente quello di inserire automaticamente un breakpoint ad ogni istruzione. Inoltre questo metodo è molto facile da identificare da eventuali protezioni, quindi spesso inutilizzabile.
 
Stato
Discussione chiusa ad ulteriori risposte.