/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