On utilisera seulement w32dasm et un editeur hexa (hiew (dos) ou ultraedit(win)).
On commence par rechercher les string data references, on voit quelquechose
d' interessant :
[unregistered] et il n'y a q' une seule occurrence de cette string.
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401318(U)
|
:0040132E E80D420000
call 00405540 <- appel pour savoir si reg ou pas
* Reference To: KERNEL32.lstrcatA, Ord:0292h
|
:00401333 8B2D78F94A00
mov ebp, dword ptr [004AF978]
:00401339 83F801
cmp eax, 00000001
:0040133C 740F
je 0040134D <- eax=1 gentil utilisateur qui s' est
enregistré
:0040133E 8D942418010000
lea edx, dword ptr [esp+00000118]
* Possible StringData Ref from Data Obj ->" [unregistered]"
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
:00401345 6848F04900
push 0049F048 <- Sinon pas gentil utilisateur
:0040134A 52
push edx
:0040134B FFD5
call ebp
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040133C(C)
|
:0040134D A1A4A84A00
mov eax, dword ptr [004AA8A4]
....
On remarque que à la suite de l' appel de la sous-routine si
eax=1 alors registered car on saute la partie
de code [unregistered], mais si eax=0 alors unreg.
Si on cherche tous les call 00405540 qu' il y a dans le prog on y passera
le reste de la nuit (pour ceux
qu'on rien a foutre allez-y :(
On va donc aller voir dans la routine en 00405540 ce qui se passe.
* Referenced by a CALL at Addresses:
|:00401057 , :004010E4 , :0040132E
, :0040164F , :00401724
|:00401C3E , :00401FD3 , :00402F4E
, :0040562D
<- je vous avais dis qu'il y avait
plein d'appels à cette routine :(
en tout cas trop pour moi.
:00405540 81EC24020000
sub esp, 00000224
:00405546 8A1544A94A00
mov dl, byte ptr [004AA944]
:0040554C 57
push edi
:0040554D B907000000
mov ecx, 00000007
:00405552 33C0
xor eax, eax
:00405554 8D7C2411
lea edi, dword ptr [esp+11]
:00405558 88542410
mov byte ptr [esp+10], dl
:0040555C F3
repz
:0040555D AB
stosd
:0040555E 66AB
stosw
* Possible Reference to String Resource ID=00125: "Type"
|
:00405560 B97D000000
mov ecx, 0000007D
:00405565 33C0
xor eax, eax
:00405567 8D7C2431
lea edi, dword ptr [esp+31]
:0040556B 88542430
mov byte ptr [esp+30], dl
:0040556F F3
repz
:00405570 AB
stosd
* Possible StringData Ref from Data Obj ->"Software\ACD Systems\ACDSee32"
<- cle de la base de registre
|
:00405571 8B0D38F34900
mov ecx, dword ptr [0049F338]
:00405577 8D442408
lea eax, dword ptr [esp+08]
:0040557B 50
push eax
:0040557C 6819000200
push 00020019
:00405581 6A00
push 00000000
:00405583 51
push ecx
:00405584 6802000080
push 80000002
* Reference To: ADVAPI32.RegOpenKeyExA, Ord:012Eh <- ouverture
de cette clé
|
:00405589 FF15A0F64A00
Call dword ptr [004AF6A0]
:0040558F 85C0
test eax, eax
:00405591 755D
jne 004055F0
:00405593 8D542404
lea edx, dword ptr [esp+04]
:00405597 56
push esi
* Reference To: ADVAPI32.RegQueryValueExA, Ord:0136h <- vérification...
|
:00405598 8B359CF64A00
mov esi, dword ptr [004AF69C]
:0040559E 8D442414
lea eax, dword ptr [esp+14]
:004055A2 52
push edx
:004055A3 8B542410
mov edx, dword ptr [esp+10]
:004055A7 8D4C2414
lea ecx, dword ptr [esp+14]
:004055AB 50
push eax
:004055AC 51
push ecx
:004055AD 6A00
push 00000000
* Possible StringData Ref from Data Obj ->"RegName" <-
... du nom
|
:004055AF 6870F04900
push 0049F070
:004055B4 52
push edx
* Possible Reference to String Resource ID=00031: "Size*"
|
:004055B5 C74424201F000000
mov [esp+20], 0000001F
:004055BD FFD6
call esi
:004055BF 8D442408
lea eax, dword ptr [esp+08]
:004055C3 8D4C2434
lea ecx, dword ptr [esp+34]
:004055C7 50
push eax
:004055C8 8B442410
mov eax, dword ptr [esp+10]
:004055CC 8D542414
lea edx, dword ptr [esp+14]
:004055D0 51
push ecx
:004055D1 52
push edx
:004055D2 6A00
push 00000000
* Possible StringData Ref from Data Obj ->"RegCode" <- ...et
du serial
|
:004055D4 68ECF34900
push 0049F3EC
:004055D9 50
push eax
* Possible Reference to String Resource ID=00501: "Source and destination
directories
must be different"
|
:004055DA C7442420F5010000
mov [esp+20], 000001F5
:004055E2 FFD6
call esi
:004055E4 8B4C240C
mov ecx, dword ptr [esp+0C]
:004055E8 51
push ecx
* Reference To: ADVAPI32.RegCloseKey, Ord:0117h
|
:004055E9 FF1598F64A00
Call dword ptr [004AF698]
:004055EF 5E
pop esi
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00405591(C)
|
:004055F0 8D542430
lea edx, dword ptr [esp+30]
:004055F4 8D442410
lea eax, dword ptr [esp+10]
:004055F8 52
push edx
:004055F9 50
push eax
:004055FA E8C1FEFFFF
call 004054C0
:004055FF 83C408
add esp, 00000008
:00405602 5F
pop edi
:00405603 81C424020000
add esp, 00000224
:00405609 C3
ret
:0040560A 90
nop
:0040560B 90
nop
:0040560C 90
nop
:0040560D 90
nop
:0040560E 90
nop
:0040560F 90
nop
On doit forcer eax=1 pour être reg à chaque sortie de routine.
J'ai pu remarquer, si je ne me suis pas trompé, que cette routine
sert seulement à vérifier les clés de la
base de registre donc on peut se permettre de forcer eax=1 en début
de routine et de retourner
tout de suite après : ce qui nous permet d' avoir pas mal d'
octets disponibles si on veut écrire du code
pour ...
On obtient donc:
* Referenced by a CALL at Addresses:
|:00401057 , :004010E4 , :0040132E
, :0040164F , :00401724
|:00401C3E , :00401FD3 , :00402F4E
, :0040562D
:00405540 B801000000
mov eax, 00000001
:00405545 C3 ret << a partir d'ici le reste
de la routine jusqu'au ret "d'origine"
nous appartient......
:00405546 8A1544A94A00
mov dl, byte ptr [004AA944]
:0040554C 57
push edi
:0040554D B907000000
mov ecx, 00000007
:00405552 33C0
xor eax, eax
:00405554 8D7C2411
lea edi, dword ptr [esp+11]
:00405558 88542410
mov byte ptr [esp+10], dl
:0040555C F3
repz
:0040555D AB
stosd
:0040555E 66AB
stosw
Et voila registered ! On n' a plus ce nag débile toutes les x images :)
Ps : Les programmeurs d'ACD System ont repris le même schéma
pour toutes les versions 2.xx
donc le principe est le meme pour les cracker :)
by Elraizer 1998
Elraizer@cryogen.com