On utilisera Sice, W32dasm 8.93 et Hiew 6.00.
Ce compte-rendu est valable pour toutes les versions jusqu' à la version 4.0.0.2 (la dernière à l' heure où j' ecris ce compte-rendu.)
Que peut-on remarquer quand on lance le soft ?
Un nagscreen apparait et nous demande un nom et le serial qui va avec
:(
Dommage on n' a pas d' argent donc on clique sur démo (Ok est
grisé) et la un autre nagscreen apparait et nous dit plein
de conneries comme "limitation jusqu' au xx/xx/xx".
On regarde un peu le soft et on voit que c' est simplement une version complète bridée à 30 jours d' utilisations : toutes les fonctions sont présentes.
On va donc se pencher sur la boite de dialogue du depart qui nous demande nom et serial.
On pose un bpx showwindow et on tombe dans la routine suivante :
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0048AEF1(C)
|
:0048AEFB 8B4DF0
mov ecx, dword ptr [ebp-10]
:0048AEFE BEFFFFFFFF
mov esi, FFFFFFFF
:0048AF03 E8380E0000
call 0048BD40
:0048AF08 8D8DC4FEFFFF
lea ecx, dword ptr [ebp+FFFFFEC4]
:0048AF0E E8EDF30700
call 0050A300
:0048AF13 8D85C4FEFFFF
lea eax, dword ptr [ebp+FFFFFEC4]
:0048AF19 8B4DF0
mov ecx, dword ptr [ebp-10]
:0048AF1C C745FC17000000
mov [ebp-04], 00000017
:0048AF23 C785C4FEFFFF50C65100 mov dword ptr [ebp+FFFFFEC4],
0051C650
:0048AF2D C785E8FEFFFF00000000 mov dword ptr [ebp+FFFFFEE8],
00000000
:0048AF37 C745FC18000000
mov [ebp-04], 00000018
:0048AF3E 50
push eax
:0048AF3F E860F30700
call 0050A2A4
:0048AF44 8B4DF0
mov ecx, dword ptr [ebp-10]
:0048AF47 8B416C
mov eax, dword ptr [ecx+6C]
:0048AF4A 8B491C
mov ecx, dword ptr [ecx+1C]
:0048AF4D 50
push eax
:0048AF4E E84D000100
call 0049AFA0
:0048AF53 E8C8F6FBFF
call 0044A620 <<<< ici c'est
la routine qui contient le showwindow
:0048AF58 85C0
test eax, eax <- si eax=1 alors version complete
:0048AF5A 750D
jne 0048AF69 <- sinon on va a la boite de dialogue ...
:0048AF5C 8975FC
mov dword ptr [ebp-04], esi
:0048AF5F E89D060000
call 0048B601
:0048AF64 E952FFFFFF
jmp 0048AEBB
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0048AF5A(C)
|
:0048AF69 8B4DF0
mov ecx, dword ptr [ebp-10]
:0048AF6C E81F170000
call 0048C690
:0048AF71 8B4DF0
mov ecx, dword ptr [ebp-10]
:0048AF74 E837360000
call 0048E5B0
:0048AF79 E8A2D0FEFF
call 00478020
:0048AF7E 85C0
test eax, eax
:0048AF80 0F85D9020000
jne 0048B25F
:0048AF86 C745B800000000
mov [ebp-48], 00000000
:0048AF8D 6A01
push 00000001
:0048AF8F E88C67FEFF
call 00471720
:0048AF94 83C404
add esp, 00000004
:0048AF97 8B4DF0
mov ecx, dword ptr [ebp-10]
:0048AF9A 8981CC000000
mov dword ptr [ecx+000000CC], eax
:0048AFA0 8BC8
mov ecx, eax
:0048AFA2 85C9
test ecx, ecx
:0048AFA4 740E
je 0048AFB4
Voici la routine qui nous interesse :
------------------------------------------------------------------------------------------
* Referenced by a CALL at Address:
|:0048AF53
|
:0044A620 64A100000000
mov eax, dword ptr fs:[00000000]
:0044A626 55
push ebp
:0044A627 8BEC
mov ebp, esp
* Possible Reference to Dialog: DialogID_00FF
|
:0044A629 6AFF
push FFFFFFFF
:0044A62B 6811A74400
push 0044A711
:0044A630 50
push eax
:0044A631 64892500000000
mov dword ptr fs:[00000000], esp
:0044A638 83EC6C
sub esp, 0000006C
:0044A63B 56
push esi
:0044A63C E8C5E20B00
call 00508906
:0044A641 8B7004
mov esi, dword ptr [eax+04]
:0044A644 83EC04
sub esp, 00000004
:0044A647 8BCE
mov ecx, esi
:0044A649 8965F0
mov dword ptr [ebp-10], esp
:0044A64C 68EC655400
push 005465EC
:0044A651 8B45F0
mov eax, dword ptr [ebp-10]
:0044A654 6868885400
push 00548868
* Possible StringData Ref from Data Obj ->"Info"
|
:0044A659 68406B5400
push 00546B40
:0044A65E 50
push eax
:0044A65F E8D4ED0B00
call 00509438
:0044A664 C745FCFFFFFFFF
mov [ebp-04], FFFFFFFF
:0044A66B E850FAFFFF
call 0044A0C0
:0044A670 83C404
add esp, 00000004
:0044A673 85C0
test eax, eax
:0044A675 7514
jne 0044A68B <- si eax!=1 alors la routine de demo suit
son cours
(limitation de temps) et on pourra observer
que la valeur
retourner dans eax sera 0 en 0048AF58
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044A704(U)
|
:0044A677 B801000000
mov eax, 00000001 <- ici on est en version non bride
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044A6B7(U)
|
:0044A67C 8B4DF4
mov ecx, dword ptr [ebp-0C]
:0044A67F 5E
pop esi
:0044A680 64890D00000000
mov dword ptr fs:[00000000], ecx
:0044A687 8BE5
mov esp, ebp
:0044A689 5D
pop ebp
:0044A68A C3
ret
On va donc changer ceci pour que le prog soit dans sa version non demo
en forcant le test en 0044A675
on obtient :
:0044A66B E850FAFFFF
call 0044A0C0
:0044A670 83C404
add esp, 00000004
:0044A673 33C0
xor eax, eax <- on change le test en xor pour forcer eax
a 0
:0044A675 7514
jne 0044A68B <- Comme eax=0 alors il n'y a plus de saut.
on fini alors la routine et on retourne
1 dans eax
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044A704(U)
|
:0044A677 B801000000
mov eax, 00000001 <- ici on est en version non bride
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044A6B7(U)
|
:0044A67C 8B4DF4
mov ecx, dword ptr [ebp-0C]
:0044A67F 5E
pop esi
:0044A680 64890D00000000
mov dword ptr fs:[00000000], ecx
:0044A687 8BE5
mov esp, ebp
:0044A689 5D
pop ebp
:0044A68A C3
ret
Et voila plus de limitation dans le temps : le prog est en version complète.
J' espere que j'aurais été assez clair et precis dans
mes explications.
Si quelqu' un a des corrections à apporter qu'il n' hesite pas.
by Elraizer 1998
Elraizer@cryogen.com
Ps: (1999) la version 4.0.0.5 est sortie mais j' ai pas eu le temps
de la télécharger :(