Crakkare MQMC 4.0
(Attacco al registro)

 

13/09/99

by "Int19"

 
 

UIC's Home Page

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 dell’UIC 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 l’UIC 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 ;)))) 


UIC's page of reverse engineering, scegli dove andare:

Home   Anonimato   Assembly    ContactMe  CrackMe   Links   
NewBies   News   Forum   Lezioni  
Tools   Tutorial 

UIC