Cracking di Koala Term 4.4 Build 2115 |
||
Data |
by Epokh |
� |
19/01/2005 |
Published by Quequero |
|
Ci vestimmo con lembi di vento, colorati di nembi di cielo. Percorremmo le strade del monte, incontrando le genti del mondo. Solo alcuni ci riconobbero, non furono molti. |
Davvero un bel tute, bravo Epo e grazie |
Meno ancora trovarono il tempo di sedersi a parlare con noi. Eppure, quante cose avevamo da dire, quanto tempo per potervi ascoltare. [ Salm Delmai] |
.... |
|
.... |
Difficolt� |
( )NewBies (X)Intermedio ( )Avanzato ( )Master |
� |
Introduzione |
Tools usati |
URL o FTP del programma |
Notizie sul programma |
Essay |
--Processo---|---- File --------------------|----Stato-------|-----Operazione--- Mkt C:\Documenti\MKT\kltkey.txt NOTFOUND GetAttributes Mkt C:\Documenti\MKT\klt.key NOTFOUND GetAttributes |
Attenzione: queste operazioni vengono fatte all'avvio del programma, è scontato ma è meglio precisarlo quindi non sono triggerate da qualche evento.
Beh ragazzi, i nomi dei due file parlano da soli: quindi sembrerebbe che i file di registrazione necessari sono 2,ma sulla info. di registrazione la Foxit ci diceva che il key file era uno. Probabilmente uno dei due file è necessario per compatibilità con i key file delle versioni precedenti di KoalaTerm.
0012F2D0 009055D0 |FileName = "C:\Documenti\MKT\default.MKT" 0012F2D4 80000000 |Access = GENERIC_READ 0012F2D8 00000000 |ShareMode = 0 0012F2DC 0012F3FC |pSecurity = 0012F3FC 0012F2E0 00000003 |Mode = OPEN_EXISTING 0012F2E4 00000080 |Attributes = NORMAL 0012F2E8 00000000 |hTemplateFile = NULL |
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // punta al nome della sezione |
Lo stack frame della prima chiamata ( relativo ai parametri) è:
1a) 0012F90C Section = "KoalaTerm" |
Lo stack frame delle successive 6 chiamate ( relativo ai parametri ) è:
1b) 0012F90C Section = "KoalaTerm" |
2b) XXXXXX Section = "KoalaTerm" |
3b) XXXXXX Section = "KoalaTerm" |
4b) XXXXXXSection = "KoalaTerm" |
5b) XXXXXXSection = "KoalaTerm" |
6b) XXXXXX Section = "KoalaTerm" |
[KoalaTerm] |
[KoalaTerm] |
Chiamanta della GetPrivateProfileString (1a) 0040ABE4 CALL mkt.0045F389 <- 1 parametro: valore della chiave SN 0040ABFB CALL mkt.00407A50 <- 2 parametri: 0040AC05 TEST EAX,EAX |
Il valore di SN viene letto prima dal file kltkey.txt, se soddisfa il controllo (TEST AX,AX) legge il valore di Users dal file klt.key, altrimenti legge il valore di SN di nuovo però dal file klt.key. Questo probabilmente è per mantenere le compatibilità con le licenze precedenti.
Chiamanta della GetPrivateProfileString (1b) 0040AC61 CALL mkt.0045F389 <- 1 parametro: valore della chiave SN 0040AC6C CALL mkt.00403DB0 <- nessun parametro |
Chiamanta della GetPrivateProfileString (2b) 0040ACA8 CALL mkt.0045F389 <- 1 parametro: valore della chiave Users 0040ACB3 CALL mkt.00403DB0 <- nessun parametro |
Chiamanta della GetPrivateProfileString (3b) 0040AC61 CALL mkt.0045F389 <- 1 parametro: valore della chiave Licensee 0040AC6C CALL mkt.00403DB0 <- nessun parametro |
Chiamanta della GetPrivateProfileString (4b) 0040AC61 CALL mkt.0045F389 <- 1 parametro: valore della chiave ExpireDate 0040AC6C CALL mkt.00403DB0 <- nessun parametro |
Chiamanta della GetPrivateProfileString (5b) 0040AC61 CALL mkt.0045F389 <- 1 parametro: valore della chiave Sign 0040AC6C CALL mkt.00403DB0 <- nessun parametro |
Chiamanta della GetPrivateProfileString (6b) 0040AC61 CALL mkt.0045F389 <- 1 parametro: valore della chiave LicenseDate 0040AC6C CALL mkt.00403DB0 <- nessun parametro |
In linea di massima si può dedurre che: la chiamata a mkt.0045F389 formatta la stringa in input in un formato specifico per effetuare in seguito vari controlli,infatti le operazioni usate sono principalmente concatenamenti, mentre la chiamata a mkt.00403DB0 alloca le variabili: cioè assegna i valori letti alle variabili locali del programma.
Una volta che il programma ha acquisito tutte le stringhe dai file di inizializzazione si effettua il controllo che inizia dall'indirizzo 0040ADF3 con JMP SHORT mkt.0040AE04 e termina a 0040B10B JE mkt.0040B2CC.
La parte finale del controllo da bypassare è:
0040B0FE MOV DWORD PTR SS:[EBP-320],EAX |
Invertiamo il salto JE mkt.0040B2CC -> JNE mkt.0040B2CC ed andiamo avanti: il programma a questo punto effettua dei controlli sulle date.
0040B10B JNZ mkt.0040B2CC <- salto invertito 0040B145 LEA EDX,DWORD PTR SS:[EBP-378] |
La chiamata a mkt.00407A50 effettua l'ultimo controllo sulle stringhe quindi è necessario invertire il salto JE SHORT mkt.0040B145 -> JNE SHORT mkt.0040B145 in modo che il programma acquisisca l'ora di sistema.Il controllo sulle date viene effettuato dall'indirizzo 0040B14C all'indirizzo 0040B28E,in cui il programma verifica se la data ExpireDate presa dal file di inizializzazione sia inferiore alla data di sistema corrente e calcola i giorni che rimangono per la valutazione. La nostra filosofia sarà quella di arrivare fino in fondo al controllo senza uscire da questo set di indirizzi con una jump.
L'ultimo salto da invertire è:
0040B1A7 PUSH ECX <- parametro a |
Invertiamo l'ultimo salto JE SHORT mkt.0040B1D2 -> JNE SHORT mkt.0040B1D2. Il formato della data è quello anglosassone perchè una delle funzioni di controllo prende come parametro la stringa "%04d/%02d/%02d" che rappresenta il formato della data aaa/mm/gg. Ecco perchè nel file di inizializzazione le date sono espresse in questo formato.
Quindi in sostanza nel 2 file di inizializzazione possiamo porre qualasi valore con i vincoli seguenti:
File kltkey.txt [KoalaTerm] |
File klt.key [KoalaTerm] |
Poi con OllyDb copiate tutte le modfiche apportate all'eseguibile e lanciate di nuovo mkt, la licenza è quella temporanea con 12802 giorni che se non vi bastano, è sufficiente eliminare tutti e due i file in modo da avere una licenza infinita.
Beh se vi dovessa capitare una protezione particolare come questa sapete come muovervi!
Note finali |
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 che ogni sviluppatore ha dovuto portare avanti per fornire ai rispettivi consumatori i migliori prodotti possibili.
Reversiamo al solo scopo informativo e per migliorare la nostra conoscenza del linguaggio Assembly.�