Ultraedit 5.21
From UIC
UltraEdit 5.21
Contents |
| Infos | |
|---|---|
| Author: | Yan Orel |
| Email: | |
| Website: | |
| Date: | 01/01/2000 (dd/mm/yyyy) |
| Level: |
|
| Language: | Italian |
| Comments: | Commenti, se volete |
Introduzione
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.
Tools
Essay
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):
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).
Disclaimer
I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.
Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevoli e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.