|
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.