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 interruzzione
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 FF15C8564900            Call dword ptr [004956C8]
:0044C402 399F3C010000            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".

Cosi 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).