---------> Furb3T <---------

presenta:

Da Time Limit a Registrato.

    Salve a tutti i miei carissimi lettori, oggi vi voglio deliziare con un prg che ha dell'incredibile: voi pensavate di avere un prg shareware per le mani con tanto di nag screen e time limit, ed invece i programmatori avevano previsto la possibilitα di registrarsi senza per≥ far vedere questa opzione all'utente, e solo dopo un'analisi del codice assembler ho scoperto questa variante.... SIETE CURIOSI !!!! Benissimo procediamo.

    Il prg target Φ Adobe ImageReady 1.0 e lo strumento che andremo ad utilizzare sarα il classico Softice. Come si presenta il prg quando viene lanciato? Con una classica nag screen che indica tra l'altro il tempo residuo di vita del prg. A questo punto potremmo giα agire eliminando il time limit e la nag, come? semplicemente usando il cmd  BPX DIALOGBOXPARAMA, in questo modo possiamo vedere dove il prg effettua il controllo del tempo e qual Φ la call che fa apparire sullo schermo la nag. Tuttavia questo tutorial si prefigge altri interessi, come vi avevo accennato all'inizio, quindi lascio questa operazione a chi vuole divertirsi ( consiglio a chi volesse seguire questa strada, che deve stare attento ed inserire un'istruzione che vada a modificare EDX altrimenti il prg crasherα).

    Bene bene ora entriamo nel merito del tutorial. Prima di tutto portate la data del vostro sistema 2 mesi avanti, in questo modo quando lancerete il prg, questo si dovrebbe presentare con una nag che vi dice che avete terminato il periodo di prova. Fatto ci≥, fissate in Softice un BPX  DIALOGBOXPARAMA  e lanciate l'applicazione; sicuramente entrerete in Sice, quindi premete F12 e sarete di nuovo nel prg che avrα caricato la nag. Premete l'unico tasto che potete premere, cioΦ QUIT, e sarete di nuovo dentro Sice. Ora fate caso ad una cosa; voi siete nell'istruzione successiva alla call che crea la nag, e questa istruzione vi dice :  CMP  EAX, 06 , ma se andate a vedere EAX potete vedere che ha come valore  EAX = 00000007 ; ci≥ vuol dire che premendo il tasto QUIT viene ritornato al controllo il valore 7, e dato che QUIT Φ l'unico tasto che Φ possibile premere perchΦ esiste quell'istruzione CMP EAX,06 ?? Per scoprirlo che ho fatto, ho modificato il valore di EAX, con il comando  R   EAX =  00000006 , a questo punto il  JE che si trova subito dopo il CMP  Φ true e quindi avviene il salto che ci porta .............. ma che succede, ritorniamo nel prg e compare un nag dove vengono richieste le informazioni dell'utente per registrarsi, wow abbiamo trovato un'insieme di istruzioni che erano state nascoste.

    Riempite tutti i campi e premete NEXT, comparirα una nuova schermata dove vi verrα richiesta la modalitα di pagamento tramite Carta di Credito; niente paura inserite un qualunque codice a 10 cifre nel campo del numero della carta di credito, inserite una qualunque scadenza e premete NexT; adesso vi chiederα come volete contattare la sociΦtα, optate telefonicamente, quindi nella schermata successiva vi verrα richiesto di inserire il codice di sblocco del prg, codice che dovrebbe esservi stato dato dalla Adobe. Ok inseriamo un codice qualunque e mettiamo in Sice un BPX HMEMCPY,   premete F5, ritornerete quindi nel prg, premete OK e vediamo che succede. Eccoci rientrati in Sice, F12 per circa 10 volte e vi ritroverete dentro una dll di image ready ed esattamente rsagnt32.dll, steppate con F10 fino ad arrivare a queste istruzioni:

1000B2DA   DEC ECX   -----> ECX  contiene il numero di cifre del codice che abbiamo inserito
1000B2DB   CMP ECX,00A
   ----> se le cifre del codice sono diverse da 10 allora non avviene il
1000B2DE    JE 1000B31B           
    salto

per non modificare troppo il prg, inseriamo un codice a 10 cifre e ripetiamo l'operazione; questa volta il JE sarα soddisfatto e avverrα il salto, quindi arriviamo all'istruzione 1000B31B:

1000B31B  MOV  EDX , [100317D4]
1000B321   PUSH  1002B580  
------> se fate D 1002B580 vedrete un codice alfanumerico
1000B326   ADD  EDX , 00000106
1000B32C  PUSH  EDX
1000B32D  PUSH  1002B560   
1000B332   CALL  1000B950
1000B337   ADD  ESP , 00C
1000B33A  PUSH  1002B570  
-----> in 1002B570 c' Φ il codice che abbiamo inserito
1000B33F   PUSH  1002B580
1000B344   CALL  1001FAB0 
-----> questa call verifica che il codice inserito sia giusto e se lo Φ
1000B349   ADD  ESP , 008
                 ritorna come valore di EAX = 0
1000B34C  TEST  EAX , EAX
1000B3AB    JNE  1000B3AB

Dato che avendo inserito un numero a caso di 10 cifre sicuramente non sarα quello giusto, avete due alternative:  1) Entrate nella call che si trova su 1000B344 e cercate di capire come viene generato il vero codice, oppure ( molto pi∙ semplicemente)  2) quando vi trovate sull'istruzione 1000B349, modificate il valore di Eax con il comando R  EAX =  0, in entrambi i casi il prg vi dirα che da quel momento in poi Φ registrato, e voi non avrete pi∙ scocciature con le nag iniziali e con il time limit.

Ringraziamenti : A tutto il   mio gruppo preferito RingZer0.