Memory
Dumper |
||
Data |
by FlendeR |
|
09/03/2001 |
Published by Quequero |
|
|
Il crack è davvero banale, il tool preso in esame è invece utile :P aspetto un tutorial più avanzato, grazie flender :) |
|
.... |
|
.... |
Difficoltà |
(x)NewBies ( )Intermedio ( )Avanzato ( )Master |
Introduzione |
Tools usati |
URL o FTP del programma |
Hum .... e chi se lo ricorda! bo, provate su http://crackpltools.prv.pl/
Notizie sul programma |
Essay |
Allora, vediamo di capirci qualcosa : guardiamo il log fatto durante l'installazione (usare un install manager è, dal mio punto di vista, fondamentale per risparmiare tempo e moccoli, io uso AShampoo ma va bene qualsiasi cosa che permetta di vedere i cambiamenti fatti al sistema durante l'installazione) e ci si accorge della presenza di una eloquente chiave di nome 'install key' :
HKEY_LOCAL_MACHINE\Software\PDTSoftware\MemoryDumper\InstallKey
... bè mi sembra ovvio a cosa serva : è evidente che quando si inserisce il codice (giusto o no) per la registrazione, in qualche modo viene cambiata la install key, poi, al riavvio successivo, viene controllata di nuovo (tramite una routine diversa da quella modificata ora ovviamente) e quindi si accorge del trucco.
00401428 call
ds:RegOpenKeyExA
;SIce poppa qui
0040142E test eax, eax
00401430 jz short loc_40148E
;Salta se non ci sono errori nella RegOpenKeyExA
0040148E lea
edx, [ebp+var_1E0]
00401494 push edx
00401495 lea eax, [ebp+var_14C]
0040149B push eax
0040149C lea ecx, [ebp+var_16C]
004014A2 push ecx
004014A3 push 0
004014A5 push offset aInstallkey ; "InstallKey"
;!!!!!
004014AA mov edx, [ebp+var_160]
004014B0 push edx
004014B1 call ds:RegQueryValueExA
004014B7 test eax, eax
004014B9 jz short loc_401517
;di nuovo, salta se non ci sono errori
00401517 mov ecx, [ebp+var_160]
0040151D push ecx
0040151E call ds:RegCloseKey
;questo pezzo di codice serve per chiudere
00401524 lea edx, [ebp+var_14C]
;la chiave del registro
0040152A push edx
0040152B push offset unk_4068F0
00401530 call sub_402C8E
00401535 add esp, 8
00401538 test eax, eax
0040153A
jnz short loc_40158B
0040158B push offset unk_4068F0
00401590 call sub_402A26
Qui si passa da un pezzo di codice che calcola la data attuale (tramite le getsystemtime e systemtimetofiletime) non lo riporto perchè è lungo e perchè non serve capirci, basta accorgersi dove è che viene fatta la compare, in questo caso viene fatta tramite una cmp seguita da due jmp, la prima è una jg e salta se il periodo di prova è scaduto (va a una parte del codice dove si modifica la install key) e la seconda invece salta al codice che avvia il programma, ecco il codice :
00401671 mov [ebp+var_268], ecx
00401677 mov [ebp+var_264], edx
0040167D cmp [ebp+var_264], 1792h
00401687 jg short loc_4016A4
; evil jump
00401689 jl short loc_401697
; salta se c'è ancora tempo
0040168B cmp [ebp+var_268], 0F8648000h
00401695 ja short loc_4016A4
00401887 push
offset unk_4068F0
0040188C call sub_402A26
00401891 add esp, 4
00401894 test eax, eax
00401896 jnz short loc_4018C3
00401898 push 0
0040189A lea ecx, [ebp+var_240]
004018A0 call sub_4026F0
004018A5 mov byte ptr [ebp+var_4], 1
004018A9 lea ecx, [ebp+var_240]
004018AF call j_?DoModal@CDialog@@UAEHXZ ; CDialog::DoModal(void)
;call alla message box
004018B4 mov byte ptr [ebp+var_4], 0
;di benvenuto
004018B8 lea ecx, [ebp+var_240]
004018BE call sub_4022F0
OK, è chiaro che la strategia + semplice
è quella di far credere che il programma sia sempre in fase di prova. Ciò si
può ottenere cambiando l'argomento della jg e
sostituendoci lo stesso indirizzo della jl
successiva, così si salterà sempre alla parte di codice
'buona' indipendentemente dai controlli precedenti.
E questo basta per rendere il programma
'eterno', ora però guardiamo di levare anche il nag screen di apertura che
rompe le palle e basta. Per skippare il nag devo evitare la call alla message
box che si trova all'indirizzo
004018AF.Si può fare in diversi modi,
per esempio, da
SIce mettiamo un bpx a
004018A9
e uno a
004018B4
e annotiamoci i valori dei registri.Ci
si accorge che quelli che cambiano sono eax , ecx e edx , in particolare non cambia esp che è
il puntatore allo stack, questo è importante e significa che possiamo
togliere brutalmente la call senza influenzare il resto del programma (in
realtà questo è vero solo se all'interno della non viene cambiato qualche
settore importante della memoria, ma visto che questa è una message box ci si
aspetta che non modifichi la memoria).Sempre da SIce vediamo che in eax viene messo il valore 2
quando nel nag screen premiamo 'try'. Quindi dal nostro hex editor cambiamo la
call in mov eax,2 (usatene uno che consenta l'inserimento del codice mnemonico
oppure inserite direttamente B802000000
).
Da notare che quando si sostituisce un frammento di codice con un altro
bisogna stare attenti che i due spezzoni abbiano la stessa lunghezza (intendo
lunghezza in hex) in qesto caso non ci sono problemi perchè entrambe
istruzioni sono dello stesso tipo (ad operando immediato) e quindi non c'è
bisogno di inserire nop :-)
Bene ... "that's all folks" .
Note finali |
Come detto all'inizio forse questo è un modo di procedere troppo
'invasivo' nei confronti del programma ma è anche il più semplice quindi
visto che sono un newbie ho usato questo qui se, vi garba, bene se no .. fuck
;-)
Se troverò tempo e voglia mi piacerebbe fare un keymaker per questo
programma, infatti ho individuato i segmenti in cui viene fatta la verifica ma
non ho avuto voglia di invertirne la funzione .
Ok, finito ....... cazzo, credevo fosse più veloce scrivere un tute .
Disclaimer |
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.