CreaCod 4.0 | ||
Data |
by Tyzer |
|
09/07/2001 |
Published by Quequero | |
Ci tenevo a dire che odio la letteratura e la storia e le materie umanistiche perché secondo me sono del tutto inutili, stupide, false, noiose,...qualunque insulto vi venga in mente ! (da una vita mi volevo sfogare!!!) |
Beh il programma era semplice, ma cmq l'approccio era forse un po' differente dal classico quindi il tutorial è il ben venuto...Ma non ci fermiamo alle cose semplici |
Qui l' elogio alle materie tecniche e scientifiche che sono le migliori in assoluto... |
.... |
|
.... |
Difficoltà |
(X)NewBies ( )Intermedio ( )Avanzato ( )Master |
Andremo a modificare il programma per farci svelare il codice di registrazione e poi registrarsi mediante quest ultimo.
Introduzione |
Tools usati |
Hiew 6.01 o qualunque altro editor esadecimale
URL o FTP del programma |
Notizie sul programma |
Essay |
1) Analisi del programma
2) Disassemblamento e individuazione del punto di modifica
3) Modifica codice
FASE 1
Dopo aver installato il programma, lo avviamo e veniamo avvisati che è uno shareware di 30 gg di durata, diamo OK e diamo una sbirciata al menù guida, qui troviamo una voce REGISTRAZIONE, clicchiamoci sopra e si presenta una pagina della guida del programma che illustra le modalità di registrazione. Eccole(testualmente dalla guida):
"Una volta stampato l'ordine o inviato lo stesso via e-mail, il programma resta in attesa del codice di attivazione, che riceverete dalla CompuArt via E-Mail, Fax o posta.
Mentre il programma si trova in questa fase di pre-registrazione chiede, ogni volta che viene usato, di inserire il codice di attivazione che gli permetterà di terminare la registrazione ed attivare tutte le funzioni del programma.
Con la registrazione viene generato, nella directory del programma, un file denominato CCOD40.RG contenente i dati della registrazione."
FASE 2
Diamo un' occhiata al disassemblato per vedere se c'è qualcosa che ci interessa nelle String Data References, ad un certo punto trovo "Codice di registrazione:" allora andiamo a vedere la parte di codice che richiama la stringa:
Jump at Address:
|:0046D062(U) <-- Salto incondizionato (JMP)
:0046D07F lea edx, dword ptr [ebp-04]
:0046D082 mov eax, dword ptr [00471F40]
:0046D087 call 004383A4
:0046D08C lea eax, dword ptr [ebp-04]
:0046D08F mov edx, 0046D204
:0046D094 call 0040375C
:0046D099 lea eax, dword ptr [ebp-04]
:0046D09C push eax
:0046D09D lea edx, dword ptr [ebp-08]
:0046D0A0 mov eax, dword ptr [00471F40]
:0046D0A5 call 00438434
:0046D0AA mov edx, dword ptr [ebp-08]
:0046D0AD pop eax
:0046D0AE call 0040375C
:0046D0B3 mov edx, dword ptr [ebp-04]
:0046D0B6 mov eax, dword ptr [ebx+000001E0]
:0046D0BC call 00413EE8
:0046D0C1 lea edx, dword ptr [ebp-04]
:0046D0C4 mov eax, dword ptr [00471F40]
:0046D0C9 call 00438554
:0046D0CE mov edx, dword ptr [ebp-04]
:0046D0D1 mov eax, dword ptr [ebx+000001E4]
:0046D0D7 call 00413EE8
StringData Reference ->"Codice di registrazione: " <-- Qui la stringa viene richiamata
|
:0046D0DC mov edx, 0046D210
:0046D0E1 lea eax, dword ptr [ebp-04]
:0046D0E4 call 00403674
:0046D0E9 lea edx, dword ptr [ebp-08]
:0046D0EC mov eax, dword ptr [00471F40]
:0046D0F1 call 0043702C
:0046D0F6 mov edx, dword ptr [ebp-08]
:0046D0F9 lea eax, dword ptr [ebp-04]
:0046D0FC call 0040375C
:0046D101 mov edx, dword ptr [ebp-04]
:0046D104 mov eax, dword ptr [ebx+000001E8]
:0046D10A call 00413EE8
:0046D10F jmp 0046D152
Allora, notiamo che a questa parte di codice si arriva mediante un salto incondizionato quindi andiamo un po' a vedere all' indirizzo 0046D062 sperando di trovare magari dei JZ o JNZ. Ecco il codice che si presenta a quel dato indirizzo:
Jump at Address:
|:0046D000(U) <--Altro salto incondizionato (JMP)
|
:0046D012 mov eax, dword ptr [00471F40]
:0046D017 cmp byte ptr [eax+00000335], 00
:0046D01E je 0046D111 <--Questo salto fa saltare(scusate)la visualizzazione della registrazione (cioè non viene scritto "Registrato a:" ne "Codice di registrazione:"nel menù About)
StringData Reference ->"Prodotto registrato a:"
|
:0046D024 mov edx, 0046D1E4
:0046D029 mov eax, dword ptr [ebx+000001D8]
:0046D02F call 00413EE8
:0046D034 lea edx, dword ptr [ebp-04]
:0046D037 mov eax, dword ptr [00471F40]
:0046D03C call 004381FC
:0046D041 cmp dword ptr [ebp-04], 00000000
:0046D045 je 0046D064 <-- Salto condizionale che non necessita di modifiche a fini crackistici
:0046D047 lea edx, dword ptr [ebp-04]
:0046D04A mov eax, dword ptr [00471F40]
:0046D04F call 004381FC
:0046D054 mov edx, dword ptr [ebp-04]
:0046D057 mov eax, dword ptr [ebx+000001DC]
:0046D05D call 00413EE8
:0046D062 jmp 0046D07F <-- Il salto che ci porta alla stringa "Codice di registrazione"
Abbiamo trovato un altro salto incondizionato allora risaliamo ulteriormente nel codice per capire cosa succede e di conseguenza come intervenire :
Jump at Address:
|:0046CF6E(C)
|
:0046CFDD call 00413EE8
:0046CFE2 mov eax, dword ptr [00471F40]
:0046CFE7 cmp byte ptr [eax+00000335], 00
:0046CFEE je 0046D002
StringData Reference ->"Version 4.0 Pro"
|
:0046CFF0 mov edx, 0046D1AC
:0046CFF5 mov eax, dword ptr [ebx+000001B8]
:0046CFFB call 00413EE8
:0046D000 jmp 0046D012
Jump at Address:
|:0046CFEE(C)
|
StringData Reference ->"Version 4.0 Shareware"
|
:0046D002 mov edx, 0046D1C4
:0046D007 mov eax, dword ptr [ebx+000001B8]
:0046D00D call 00413EE8
Allora riassumendo abbiamo visto che il programma richiama le stringhe di testo "Prodotto registrato a:" e poi "Codice di registrazione:" quindi ho pensato che una volta registrato il programma visualizzi il codice di registrazione. Quindi perchè non farlo visualizzare prima della registrazione in modo da avere bello pronto il serial ? Dopo aver trovato il punto dove la stringa è richiamata sono risalito attraverso qualche salto al punto in cui viene richiamata la stringa "Prodotto registrato a:" e notiamo che sopra ad essa si trova un JE 0046D111 quindi per far visualizzare tali stringhe bisogna invertire questo salto in JNE 0046D111 ed il gioco è fatto. L'unica cosa che non vi so dire è perchè il programma arriva a questo punto di codice quando l' unico salto che porta lì è quello all' indirizzo 0046D000 dove poco prima viene richiamata la stringa Version 4.0 Pro cioè la stringa che indica che il programma è registrato e quindi non capisco come ci si arrivi prima di registrarlo comunque...(ho avuto poco tempo per fare sto tutorial se così si può chiamare, magari prossimamente...).
FASE 3
Ora viene la parte più semplice di questo stupidissimissimo crack cioè come si cambia il codice dell' eseguibile per fare il crack. Disassemblate il file CCOD40.exe con il W32DASM e una volta giunti sull' istruzione da modificare (il salto condizionale a:0046D01E) segnatevi il suo Offset (visualizzato nella parte inferiore del W32DASM dove c'è scritto @Offset).Aprite il file CCOD40.exe con un editor esadecimale (io uso Hiew, ma qualunque altro va bene). Raggiungete l' offset che vi siete scritto (con Hiew una volta aperto il file schiacciate due volte invio per andare in modalità decode poi F5 e scrivete l' offset e premete invio). Notate che l' istruzione è composta da 6 bytes, ora cambieremo il salto quindi entrate in modalità Edit (con Hiew F3) e scrivete al posto del 74 un 75 (JNE) poi noppate (opcode 90) i restanti 5 byte. Ora potete salvare il file (per Hiew F9) ed uscire (con Hiew F10). Avviate il programma e andate nel menù File riempite il modulo d' ordine con i dati che volete e fate finta di stamparlo. Poi uscite dal programma e rientrateci, chiudete la finestra che chiede il codice di registrazione e andate nel menù About segnatevi il serial e uscite di nuovo. Rientrando poi di nuovo nel programma inserite il codice e sarete registrati (Tutto sto' casino è necessario perchè il codice di registrazione viene cambiato dopo che avete stampato il modulo d'ordine e quindi vi ritrovereste con il numero sbagliato mentre uscendo rientrando segnando il codice e rientrando per inserirlo vi registrerete).
Questo programma si sarebbe forse potuto crackare in modo più semplice o più veloce o più intelligente, ma io l'ho fatto così perchè è la prima soluzione che mi è venuta in mente vedendo il disassemblato e infatti l' ho crackato in 5 min 42 s (cronometrati sul serio !).
Ciao a tutti
Note finali |
Ringrazio tutto il chan #crack-it per i suoi numerosi e sempre utili consigli e spiegazioni e tutta la UIC perchè il suo lavoro è veramente ottimo ed aiuta tutti a migliorarsi nella propria abilità di cracker. Le domande ai miei quesiti mi sono state date da Quequero, AndreGeddon, TheMR, -albe- (grazie per la guida all' asm!)...e poi chissà quante altre persone che non ricordo grazie mille a tutti !!!!
Disclaimer |
Vorrei ricordare che il software va comprato e non rubato, dovete registrare il vostro prodotto dopo il periodo di valutazione. Non mi ritengo responsabile per eventuali danni causati al vostro computer determinati dall'uso improprio di questo tutorial. Questo documento è stato scritto per invogliare il consumatore a registrare legalmente i propri programmi, e non a fargli fare uso dei tantissimi file crack presenti in rete, infatti tale documento aiuta a comprendere lo sforzo immane che ogni singolo programmatore ha dovuto portare avanti per fornire ai rispettivi consumatori i migliori prodotti possibili.
Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly.