Facciamo un pò di ReveRsinG !!!
Salve miei fedeli lettori, la lezione di oggi riguarda il ReversinG; non sapete ancora cosa vuol dire? C'è una sola cosa da fare: CONTINUATE A LEGGERE.
Il programma che utilizzerò oggi è Applet Botton Factory 4.0, un grazioso prg che serve per costruire applet java per creare bottoni. Il tool di turno per analizzare il prg indovinate qual è? Softice come al solito. Partiamo, lanciate il programma e comparirà subito una NAG nella quale ci sono 2 bottoni: OK e REGISTER. Premete REGISTER e vi apparirà un form per la registrazione del prg. Notiamo subito che bisogna inserire 2 campi, fatelo e poi prima di premere il tasto Register entrate in Softice con Ctrl-D, fissate un BPX HMEMCPY e poi ritornate con F5. Ora premete il tasto Register e....Voilà eccovi dentro Softice, premete F12 circa 7/8 volte almeno fino a quando non sarete all'interno del prg e poi andate avanti con F10 fino ad arrivare a questo punto:
:0046F0F8 mov eax, dword ptr [ebp-04] ----> scrivete d eax comparirà il nome inserito
:0046F0FB call 00403F68 ----> controlla che il campo non sia vuoto
:0046F100 mov edx, 0046F1F0 -----> fate d 0046F1F0 compare un stringa, ma cosa è?
:0046F105 call 00408DA4 -----> per capire l'istruzione precedente, analizziamo questa call
:0046F10A test eax, eax
:0046F10C jne 0046F1C2
Ok, quando siamo sulla Call che ci interessa, facciamo un bel TRaceIN con F8, avremo:
..................... ---------> a noi interessa da questo punto in poi
:00408DB9 repz
:00408DBA cmpsb
:00408DBB je 00408DE1
:00408DBD mov al, byte ptr [esi-01] ----> in al verranno messe una ad una le lettere del nostro nome
:00408DC0 cmp al, 61 -----> viene comparato al con 61 che corrisponde alla lettera a
:00408DC3 jb 00408DCD
:00408DC5 cmp al, 7A -----> 7A corrisponde alla lettera z
:00408DC8 ja 00408DCD
:00408DCA sub al, 20
:00408DCD mov dl, byte ptr [edi-01] ----> muovo in dl le lettere di edi-01, ma edi-01 è la stringa che
:00408DD0 cmp dl, 61 veniva caricata in EDX prima della call,
:00408DD3 jb 00408DDD
:00408DD5 cmp dl, 7A
:00408DD8 ja 00408DDD
:00408DDA sub dl, 20
:00408DDD sub eax, edx -----> in EAX abbiamo il cod Hex delle lettere che compongono il nome
:00408DDF je 00408DB9 inserito da noi, in EDX il cod Hex delle lettere che compongono la stringa che abbiamo trovato, e dato che il JE dell'istruzione successiva fa ripetere il loop vuol dire che quella stringa è il vero codice.
Bene, ora che abbiamo il primo codice dobbiamo trovare il secondo, ed è facilissimo!!!! disabilitate il BPX con BD *, e premiamo F5, inseriamo nel primo campo il codice vero, ritornate su Softice, riabilitate il BPX con BE *, ritornate nel prg con F5 e premete Register, eccovi di nuovo in Softice. Vai con F12 e poi con F10 fino ad arrivare qui:
:0046F120 mov eax, dword ptr [ebp-04] ----> d EAX ed ecco il secondo codice che avete scritto
:0046F123 call 00403F68 -----> verifica che il campo non sia vuoto
:0046F128 mov edx, 0046F1F8 -----> viene messo in EDX una strana stringa
:0046F12D call 00408DA4 ------> ma questa è la call di prima che fa il controllo, quindi ciò vuol
:0046F132 test eax, eax dire che la stringa in edx è il secondo vero codice
:0046F134 jne 0046F1C2
Disabilitate il BPX con BD * premete F5, inserite il secondo codice vero, premete Register e .....WOW il vs prg ora è perfettamente registrato senza aver modificato nessuna istruzione. Ebbene il ReversinG è proprio questo, individuare quello che vuole il prg e darglielo senza modificare nulla, in questo modo siete sicuri che tutto funzionerà bene visto che quelli sono i codici che erano stati previsti dai programmatori.
Bene la lezione e terminata, e ci vediamo alla prossima puntata.
Ringraziamenti: A tutti gli amici di RingZer0 e ad Ins perchè continua a pubblicare i miei tutorials.