_____________ ACDSEE 2.22 _____________

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