Crakkare MQMC 4.0 |
||
13/09/99 |
by "Int19" |
|
Published by Quequero |
||
Altro bel tutorial di Int19, complimenti!!! |
||
UIC's form |
Per chi volesse contattarmi . E-mail: [email protected] Nick: Int19 aka Il.Socio, UIN: 4044843 |
UIC's form |
Difficoltà |
( )NewBies ( )Intermedio ( )Avanzato ( )Master |
Analizzeremo e rimuoveremo la protezione di MQMC 4.0
Crakkare
MQMC 4.0
Written by Int19
Introduzione |
Premetto che ho utilizzato un approccio un po' diverso dal solito, inizialmente
ero partito con l'intento di individuare il punto nel quale il nag veniva richiamato
e nooppare il classico jnz, ma mi sono reso conto che le locazioni da cambiare
erano un po' troppe e cosi' ho preferito mirare un po' piu' alla "radice".
Tools usati |
SoftICE 4.0, W32Dasm 8.93, RegMon 4.13
URL o FTP del programma |
E possibile scaricarlo da questo indirizzo http://space.tin.it/internet/apizzegh
Notizie sul programma |
Il programma e' protetto da un Time-Limit di 30 gg e un Nag-Screen che compare all'arresto della connessione e all'uscita dal programma, inoltre non e presente nessun dialog per la registrazione.
Essay |
Lanciamo MQMC, selezioniamo Avvio manuale/Arresto manuale, ed ecco il nag-screen che compare a ricordarci che abbiamo ancora 30 gg di prova.
Mettiamo la data avanti di 1 giorno, ripetiamo Avvio manuale/Arresto manuale ed il nag questa volta segnala ... pensate un po' 29 gg.
Reimpostando la data iniziale ci si aspetterebbe che il nag segnali 30gg. ma invece al suo posto compare un messaggio che avvisa che il nostro periodo di prova e' scaduto.
Se la rimettiamo un'ennesima volta avanti di 1 gg. il tutto funziona di nuovo perfettamente.
Riflettiamo un po'...
Ci troviamo di fronte ad una protezione di questo tipo...
1°Check if Data_Odierna - Data_Primo_Avvio > 30 Giorni then Periodo_Scaduto
2°Check if Data_Odierna < Data_Ultimo_Avvio then Periodo_Scaduto
INDIVIDUIAMO LA PROTEZIONE...
Come fara' MQMC a 'ricordare' la data del primo e dell'ultimo avvio ? Salvandole nel registro ?
Mah.. vediamo un po....
Lanciamo il nostro fidato RegMon (vedi sezione tools) e diamo un'occhiata alle operazioni che vengono effettuate prima di ricevere il fastidioso messaggio "periodo scaduto", otteniamo le seguenti chiavi...
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VKRNL\0001
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VKRNL\0002
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VKRNL\0003
Utilizzando regedit, andiamo un po' a vedere nel registro come si comportano queste chiavi.
Reimpostiamo la data avanti di 1 gg. in modo che il prog. funzioni. se le nostre premesse fossero esatte ci si aspetterebbe che avviando nuovamente MQMC una di queste venga aggiornata con un nuovo valore,
essendo la chiave che memorizza Data_Ultimo_Avvio.
Lanciamo MQMC, usciamo, aggiorniamo (F5) la visualizzazione del regedit ed eccola li' la chiave 0003 e' stata modificata.
Per esser certi che e' effettivamente la chiave che memorizza la data dell'ultimo avvio si puo' effettuare la seguente prova...
Salvare il valore della chiave nella clipboard, mettere la data avanti di 1 gg, lanciare MQMC, reimpostare la data indietro e reinserire il valore della clipboard nella chiave, lanciando MQMC ora non si ottiene piu' il tanto odiato messaggio.
Una delle altre due chiavi che vengono esaminate da MQMC all'avvio e' molto probabilmente quella che contiene la data del primo avvio, ed e' questa effettivamente la chiave che ci interessa, poiche' se riuscissimo ad aggiornarla ad ogni avvio di MQMC (invece che solo al 1°) potremmo utilizzare il programma senza piu' alcun limite di tempo.
Quando MQMC viene avviato la prima volta dovra' creare la chiave che contiene la data di installazione, ora vediamo un po' cosa succede se eliminiamo la chiave 0002 (dopo aver preventivamente effettuato una copia di backup).
Avviamo MQMC e PAM! MQMC crea la chiave 0002, terminiamo il programma e ci viene segnalato che mancano ancora 30 giorni !!! Bene, ora abbiamo trovato la protezione, non ci resta che 'forzare'
MQMC a creare la chiave 0002 ad ogni avvio.
KILLIAMO LA PROTEZIONE...
E' ora di smanettare con SoftICE...
Piazziamo un bel breakpoint condizionale del tipo BPX RegQueryValueExA if @@(esp+8)=='0002'
cancelliamo la chiave 0002, avviamo MQMC ed ecco SoftICE che poppa pigiando F12 ci ritroviamo
in questa sezione di codice....
* Reference To: advapi32.RegQueryValueExA, Ord:0000h
|
:00463996 Call 00406710
:0046399B test eax, eax ß--- eax e' 0 se la chiave esiste.
:0046399D sete bl ß--- bl e' 1 se eax e' 0
:004639A0 mov eax, dword ptr [esp]
:004639A3 call 004636DC
:004639A8 mov byte ptr [ebp+00], al
:004639AB mov eax, ebx
Come potete vedere se la funzione ritorna valore 0 (la chiave e' stata trovata)
allora nel registro bl viene caricato 1 altrimenti viene impostato a 0.
Per far credere al programma che la chiave non esista e' sufficiente azzerare il contenuto
del registro bl, sostituendo la linea "sete bl" con "xor bl,bl" "nop".
Infatti se compiamo questa modifica, la chiave 0002 verra' sovrascritta ad ogni avvio,
ed il programma segnera' sempre 30 giorni disponibili.
ED ORA TOCCA AL NAG-SCREEN...
Piazziamo un bel breakpoint BPX ShowWindow poi ripetiamo la solita procedura
Avvio manuale/Arresto manuale, ed eccoci qui in SoftICE, premendo F12 ci ritroviamo nella
parte di codice dalla quale e' stata richiamata la funzione, ora possiamo disabilitare
il nostro bp, bc * e steppiamo (F10) fino a che non compare il fastidioso nag,
eccoci giunti alla nostra call, piu' precisamente alla locazione 4E34BB,
....
:004E34B4 mov eax, dword ptr [005010C4]
:004E34B9 mov eax, dword ptr [eax]
:004E34BB call 004318A8 ß--- Call al Nag-Screen
:004E34C0 xor eax, eax
:004E34C2 pop edx
....
per eliminare il nag e' sufficiente nooppare la call, (anche se io preferisco sostitiurla
con un jmp 4E34C0, cosi' da cambiare solo 2 bytes E8 E8 ---> EB 03 ed evitare un eventuale
detect di troppi nop).
Ed ora tocca al Nag che compare all'uscita dal programma...
per individuare da dove viene chiamato e' sufficiente
entrare nella routine che genera il nag-screen (linea 4318a8) e piazzare un breakpoint li.
Poi terminiamo il programma ed eccoci nuovamente in Softice, pigiamo F12 un paio di volte
fino a che non ci troviamo sotto ad una call, ed arriviamo a questo punto...
:004DFE92 mov eax, dword ptr [005010C4]
:004DFE97 mov eax, dword ptr [eax]
:004DFE99 call 004318A8 ß--- Call al Nag-Screen
:004DFE9E xor eax, eax ß--- Arriviamo qui!
come potete vedere ecco li' la nostra call alla routine che genera il Nag.
Nooppando o jumpando anche questa il lavoro e' finito ed il programma e' del tutto sprotetto.
Come vedete e' stato sufficiente cambiare una manciata di bytes
3 bytes per la protezione Time-Limit e 2+2 per i nag.
Note finali |
Un saluto ai compagni dellUIC ed ecco qui qualche ringraziamento Phobos, Catlike, Mojo, Mark, Machine Head, Kermit, Dyntro, Horse, Grave, Joe, Pab Gamer, Emesis, Sherlox, Andy, Quake, Stood, Ozone, Plucky. PDM, OGN, RZR, DOD, PWA, PC, UCF nonche tutti quelli che hanno pubblicato tutorial riguardanti cracking/hacking, se non fosse per loro non sarei mai stato in grado di svolgere questo lavoro, un ringraziamento in particolare a tutti coloro che hanno reso possibile lUIC byez Int19 aka Il.Socio.
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.
Capitoooooooo????? Bhè credo di si ;))))