/head>

3)Crack de Winimage

WinImage 4.000

outil : w32dasm


on entre son nom et un faux sérial. Winimage répond par : info d'enregistrement incorecte ou un truc comme ça.

on recherche donc cette chaine de caractère.

Manque de pot, c'est écrit en englais. on doit donc rechercher "Registering information is invalid".

lorsqu'on la trouvé, on remonte dans le code jusqu'à trouvé par quel saut on y arrive. On en trouve un, on y va.

on voit qu'il n'y à pas de call or pour trouvé un sérial, il faut un call donc on continu.on arrive à l'adresse 004290C5. si on remonte on voit un call puis on voit que la référence de cette parti est : register donc on place un BP au début de cette partie.


Maintenant, on lance le programme. On va dans la section enregistrement, on entre son nom et un sérial bidon et on tape OK


La on rencontre le BP qu'on à posé donc on est sur la bonne voit. on trace avec autostep into (les 4 première case de w32dasm sont coché, pour qu'on voit les API).


:0042909A push 0000007F

:0042909C push edi

BP*:0042909D push 00000817

:004290A2 push [ebp+08]

UINT GetDlgItemTextA(HWND,int,LPTSTR,int)

:004290A5 call USER32.GetDlgItemTextA <- 1er API


:004290A7 push 0043C800

:004290AC push edi

:004290AD push ebx

:004290AE call WINIMAGE.0042CD83

:004290B3 mov ecx, dword ptr [0043C800]


Le 1er message d'API n'est pas un call vers une adresse donc on regarde le résultat. c'est le faux sérial.


API UINT Arg00 = GetDlgItemTextA(Arg01,Arg02,Arg03,Arg04)

API Address=004290A5, API Return Address=004290A7

Arg01 = (HWND) 000007fc (Window"Enregistrement de WinImage")

Arg02 = (int) 00000817

Arg03 = (LPTSTR) 0043c420 -> ""


Arg04 = (int) 0000007f


RESULT for API GetDlgItemTextA

Arg00 = (UINT) 00000009

Arg01 = (HWND) 000007fc (Window"Enregistrement de WinImage")

Arg02 = (int) 00000817

Arg03 = (LPTSTR) 0043c420 -> "123456789" <- faux sérial

Arg04 = (int) 0000007f


on continu. Le suivant va vers une adresse et semble interressant, on le trace.

:004290A5 call esi

:004290A7 push 0043C800

:004290AC push edi

:004290AD push ebx

NODOC Local_Function(NODOC,NODOC,NODOC,NODOC,NODOC,NODOC,NODOC,NODOC)


:004290AE call WINIMAGE.0042CD83 <- 2e API

:004290B3 mov ecx, dword ptr [0043C800]

:004290B9 xor edx, edx

:004290BB add esp, 0000000C

:004290BE cmp eax, edx

:004290C0 mov dword ptr [0043C5E8], eax


Maintenant on est au coeur de la procédure de vérification du sérial. On regarde le résultat de chaque API. Après quelques inconpréhensible, on vois un nouveau message clair :

API NODOC Arg00 = Local_Function(Arg01,Arg02,Arg03,Arg04,Arg05,Arg06,Arg07,Arg08)


API Address=0042CDCF, API Return Address=0042CDD4

Arg01 = 0068ef34 ->(LPDWORD)bff969ad or (LPSTR)"­iù¿¸±^¸iù¿"

Arg02 = 0058cb1b ->(LPDWORD)bff969ad or (LPSTR)""

Arg03 = 0068f034 ->(LPDWORD)34333231 or (LPSTR)"123456789"

Arg04 = 0043c420 ->(LPDWORD)34333231 or (LPSTR)"123456789"

Arg05 = 82b32818 ->(LPDWORD)f6165768 or (LPSTR)"hWö¿é±F="

Arg06 = bff969ad ->(LPDWORD)0974c085 or (LPSTR)"…Àt 3öèÚýÿë/‹D$…Àu¾"

Arg07 = 815eb1b8 ->(LPDWORD)00000002 or (LPSTR)""


Arg08 = bff969b8 ->(LPDWORD)448b2feb or (LPSTR)"ë/‹D$…Àu¾"


RESULT for API Local_Function

Arg00 = 0068ef34 ->(LPDWORD)38434235 or (LPSTR)"5BC818" <- on ne l'avait jamais vu avant...

Arg01 = 0068ef34 ->(LPDWORD)38434235 or (LPSTR)"5BC818"

Arg02 = 0058cb1b ->(LPDWORD)38434235 or (LPSTR)""

Arg03 = 0068f034 ->(LPDWORD)34333231 or (LPSTR)"123456789"

Arg04 = 0043c420 ->(LPDWORD)34333231 or (LPSTR)"123456789"

Arg05 = 82b32818 ->(LPDWORD)f6165768 or (LPSTR)"hWö¿é±F="


Arg06 = bff969ad ->(LPDWORD)0974c085 or (LPSTR)"…Àt 3öèÚýÿë/‹D$…Àu¾"

Arg07 = 815eb1b8 ->(LPDWORD)00000002 or (LPSTR)""

Arg08 = bff969b8 ->(LPDWORD)448b2feb or (LPSTR)"ë/‹D$…Àu¾"


C'est possible qu'on soit tombé sur le sérial... On continu.

On arrve sur un API qui donne :

API NODOC Arg00 = Local_Function(Arg01,Arg02,Arg03,Arg04,Arg05,Arg06,Arg07,Arg08)

API Address=0042CDFB, API Return Address=0042CE00

Arg01 = 0068ef34 ->(LPDWORD)38434235 or (LPSTR)"5BC818"


Arg02 = 145de463 ->(LPDWORD)38434235 or (LPSTR)""

Arg03 = 0068f034 ->(LPDWORD)34333231 or (LPSTR)"123456789"

Arg04 = 0043c420 ->(LPDWORD)34333231 or (LPSTR)"123456789"

Arg05 = 82b32818 ->(LPDWORD)f6165768 or (LPSTR)"hWö¿é±F="

Arg06 = 38434235 ->(LPDWORD)f6165768 or (LPSTR)""

Arg07 = 81003831 ->(LPDWORD)f6165768 or (LPSTR)""

Arg08 = bff969b8 ->(LPDWORD)448b2feb or (LPSTR)"ë/‹D$…Àu¾"


RESULT for API Local_Function

Arg00 = 0068ef34 ->(LPDWORD)44353431 or (LPSTR)"145DE463" <-- le numéro du dessus c'est donc transformé....


Arg01 = 0068ef34 ->(LPDWORD)44353431 or (LPSTR)"145DE463"

Arg02 = 145de463 ->(LPDWORD)44353431 or (LPSTR)""

Arg03 = 0068f034 ->(LPDWORD)34333231 or (LPSTR)"123456789"

Arg04 = 0043c420 ->(LPDWORD)34333231 or (LPSTR)"123456789"

Arg05 = 82b32818 ->(LPDWORD)f6165768 or (LPSTR)"hWö¿é±F="

Arg06 = 38434235 ->(LPDWORD)f6165768 or (LPSTR)""

Arg07 = 81003831 ->(LPDWORD)f6165768 or (LPSTR)""

Arg08 = bff969b8 ->(LPDWORD)448b2feb or (LPSTR)"ë/‹D$…Àu¾"



On continu et le numéro se transforme encore :


API NODOC Arg00 = Local_Function(Arg01,Arg02,Arg03,Arg04,Arg05,Arg06,Arg07,Arg08)

API Address=0042CE23, API Return Address=0042CE28

Arg01 = 0068ef34 ->(LPDWORD)44353431 or (LPSTR)"145DE463"

Arg02 = 175ee46f ->(LPDWORD)44353431 or (LPSTR)""

Arg03 = 0068f034 ->(LPDWORD)34333231 or (LPSTR)"123456789"

Arg04 = 0043c420 ->(LPDWORD)34333231 or (LPSTR)"123456789"

Arg05 = 82b32818 ->(LPDWORD)f6165768 or (LPSTR)"hWö¿é±F="

Arg06 = 44353431 ->(LPDWORD)f6165768 or (LPSTR)""


Arg07 = 33363445 ->(LPDWORD)f6165768 or (LPSTR)""

Arg08 = bff96900 ->(LPDWORD)a12074f5 or (LPSTR)"õt ¡xÂû¿ÿ0ÿ7èØ0þÿPèn0þÿ…ÀuƒÇE;îrà;îs

è§Úýÿ‹Åë?­"


RESULT for API Local_Function

Arg00 = 0068ef34 ->(LPDWORD)45353731 or (LPSTR)"175EE46F" <- nouvelle transfo

Arg01 = 0068ef34 ->(LPDWORD)45353731 or (LPSTR)"175EE46F"

Arg02 = 175ee46f ->(LPDWORD)45353731 or (LPSTR)""

Arg03 = 0068f034 ->(LPDWORD)34333231 or (LPSTR)"123456789"

Arg04 = 0043c420 ->(LPDWORD)34333231 or (LPSTR)"123456789"


Arg05 = 82b32818 ->(LPDWORD)f6165768 or (LPSTR)"hWö¿é±F="

Arg06 = 44353431 ->(LPDWORD)f6165768 or (LPSTR)""

Arg07 = 33363445 ->(LPDWORD)f6165768 or (LPSTR)""

Arg08 = bff96900 ->(LPDWORD)a12074f5 or (LPSTR)"õt ¡xÂû¿ÿ0ÿ7èØ0þÿPèn0þÿ…ÀuƒÇE;îrà;îs

è§Úýÿ‹Åë?­"


Si on continu, on voit qu'il se transforme encore. C'est transformation montre qu'on à bien à faire au sérial. Donc on choisie, logiquement le premier (ici 5BC818) et on le rentre avec son nom et là, la magie opère ;-) et on se retrouve utilisateur enregistré!!!! C'est beau la vie non !?


En fait toutes les transformations qu'on à trouvé du 1er numéro de série sont eux aussi des numéro de série valide. Il y a donc pour un même nom plusieurs numéro.

Si on avait continué on en aurait encore d'autre!!!

OphSet

darkp@francemel.com

http://members.xoom.com/ophset


Bye Ohpset