Crack'in pillole nr.1 by Yan Orel
 
Target : UltraEdit 5.21
Protezione  : Limite di tempo (45 giorni) con codice di sblocco.
Requisiti   : SoftIce & un HexEditor
 
Lo schema di protezione della verifica del codice e' molto difficile.
Proviamo un approccio diverso :
modifichiamo il programma in modo tale da fargli credere di essere sempre entro
i 45 giorni di prova.
Quindi, per vedere come il programma reagisce dopo il periodo di prova,
settiamo la data 45 giorni avanti e lanciamo il programma.
Il programma e' spirato. Ci chiede un codice. Premiano Cancel.
Una Message Box appare. Buon indizio.
----------------------------------------------------------------------------------------
Breve digressione: Cosa e' una MessageBox ?
Le Message Boxes sono delle generiche 'finestre' generate da Windows e hanno la funzione di mostrare a video un messaggio, un avviso, un testo o altro.
E sono proprio queste quelle che la maggior parte dei programmi (non tutti) usa per avvisare l'utente di un errore o altro (per es.: codice errato!).
Windows usa una funzione ben precisa per generare queste finestre : MessageBox.
Per cui se noi riusciamo a interrompere il programma mentre sta per generare la finestra che ci avvisa che il programma e' espirato, possiamo controllare il corso dell'esecuzione del programma e controllare (basta intuire, non e' indispensabile capire agli inizi) quali scelte il programma ha effettuato prima di generare la finestra di codice errato.
Quindi una volta individuato il punto esatto del programma in cui viene fatta la scelta se il programma e' espirato  o no, possiamo cambiare (basta invertirlo) il risultato di questa scelta e potremo cosi' usare il programma quante volte vorremo. Quindi tornando a UltraEdit....
----------------------------------------------------------------------------------------
Tiriamo su Softice, e settiamo un bel : BPX MessageBoxA.
In questo modo stiamo dicendo al debugger (SoftIce) di generare una interruzione
quando incontra la funzione MessageBox.
Rilanciamo il programma.
Premiamo Cancel alla richiesta del codice di sblocco.
Softice interviene , quindi premiamo F12 per far eseguire la funzione.
La Message box appare. Premiano Ok. Siamo ritornati cosi all'interno di SoftIce.
Ora se guardiamo al codice, vediamo (24 instruzioni piu' su di dove ci troviamo adesso):
:0044C3A5 83F82D          cmp eax, 0000002D -- 2d e' 45 in esadecimale :il limite di giorni
:0044C3A8 59                 pop ecx
:0044C3A9 7F0C            jg 0044C3B7       
:0044C3AB 399F3C010000   cmp dword ptr [edi+0000013C], ebx
:0044C3B1 0F8576FFFFFF   jne 0044C32D      -- qui salta alla noiosa box iniziale
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044C3A9(C)
|
:0044C3B7 E80D97FBFF       call 00405AC9
-- qui richiama la routine della richiesta del codice
:0044C3BC 391D20B94B00    cmp dword ptr [004BB920], ebx
:0044C3C2 758A                   jne 0044C34E     
-- qui salta dritto nel programma
:0044C3C4 8D4D10               lea ecx, dword ptr [ebp+10]
:0044C3C7 E81E230200        call 0046E6EA
:0044C3CC 8D4D14               lea ecx, dword ptr [ebp+14]
:0044C3CF C645FC01           mov [ebp-04], 01
:0044C3D3 E812230200         call 0046E6EA
* Possible Reference to String Resource ID=00068: "UltraEdit 45 Day Evaluation time expired!!!!"
|
:0044C3D8 6A44                       push 00000044
:0044C3DA 8D4D10                   lea ecx, dword ptr [ebp+10]
:0044C3DD C645FC02                mov [ebp-04], 02
:0044C3E1 E8382A0200              call 0046EE1E
* Possible Reference to String Resource ID=00069: "To continue to use UltraEdit you must send the registration "
|
:0044C3E6 6A45                     push 00000045
:0044C3E8 8D4D14                  lea ecx, dword ptr [ebp+14]
:0044C3EB E82E2A0200          call 0046EE1E
:0044C3F0 6830200000           push 00002030
:0044C3F5 FF7510                   push [ebp+10]
:0044C3F8 FF7514                   push [ebp+14]
:0044C3FB 53                          push ebx
* Reference To: USER32.MessageBoxA, Ord:0195h
|
:0044C3FC                      Call dword ptr [004956C8]
:0044C402                      cmp dword ptr [edi+0000013C], ebx
-- dopo F12 partiamo da qui.
 
Analizzando il codice e' chiaro che basta cambiare all'EIP 44c3a9 : "jg 0044C3B7" in "jmp 0044C34E".
Cos� con un hex editor, eseguiremo la ricerca di : 83F82D597F0C
e sostituiremo quei valori con: 83F82D59EBA3.
Per completare il lavoro, possiamo cambiare con l' hex editor la parola UNREGISTERED con REGISTERED o altro (cerca e sostituisci, facendo attenzione a lasciare uno spazio tra le singole lettere).