Le programme :
WebExpert 3.01, fichier we301.exe (3.3 Mo), de Visicom MΘdia Inc. http://www.visic.com
Toutes les versions 3.00x ont le mΩme schΘma pour s'enregistrer, seul les adresses sont changΘes.
Dans cet exemple c'est la version 3.01.
Description :
WebExpert est un Θditeur qui travail uniquement sur le code HTML avec une fenΩtre de visualisation. Dixit Visicom MΘdia Inc.
"WebExpert v3 est l'Θditeur HTML par excellence pour les internautes dΘsirant publier des pages sur
le World Wide Web. WebExpert v3 procure une interface conviviale pour l'utilisateur. En effet, celui-ci
bΘnΘficie de barres d'outils graphiques lui permettant de construire aisΘment des pages en peu de temps.
De plus, l'utilisateur se retrouvera trΦs facilement dans cette panoplie d'outils grΓce aux onglets
permettant de les classer par catΘgorie." Que dire de plus... WebExpert est la version française de
AceExpert.
Un dΘsassembleur: W32dasm 8.93, avec les versions prΘcΘdentes ca plante :(
Un Θditeur hexadΘcimal: j'utilise HEdit Version 2.1.14
Soft-Ice 3.xx: pour refaire le crack sans dΘsassembler wexpert3.exe (c'est long et le fichier .alf fait 50 Mo)
Crack des versions 3.00x et 3.01 et s√rement les suivantes...
Le prog permet de l'utiliser 25 fois avec toutes les fonctions aprΦs il faut s'enregistrer.
Pour cracker WebExpert il y a plusieurs mΘthodes :
- supprimer le comptage du nombre d'utilisation et les nag, le moins ΘlΘgant
- dΘclarer le prog comme enregistrΘ au dΘmarrage, c'est mieux
- rechercher le code d'enregistrement en fonction du nom, bien car une fois qu'on a le code d'enregistrement
il marche pour les mises α jour
- s'enregistrer avec son nom et code d'enregistrement bidon, le prog s'enregistrant avec le bon code d'enregistrement
faisant effet de "Keygen", le patch le plus clean possible
Bon on va s'enregistrer! On entre son nom un code d'enregistrement... pas de chance c'est pas le bon ;) on note le message "Mauvais code d'enregistrement". Avec W32dasm on recherche ce texte dans Refs->String Data References , dans le code il y a plein de "Mauvais code d'enregistrement" pas terrible, on peut placer un Bp sur chaque rΘfΘrence, bof c'est fatiguant!
RΘflΘchissons... et si le prog Θcrivait le nom et le code d'enregistrement dans la base de registre? Pour trouver facilement une entrΘe dans la base de registre on recherche le mot "software", il y en a beaucoup mais une rΘfΘrence est intΘressante, regardons le code
les versions 3.00x ont la mΩme structure, 2 CALL avant "\Software\Visicom Media\WebExpert" et ensuite "Nom" et "NoSerie"
* Referenced by a CALL at Addresses: |:0051B59B , :0051B697 | :005D89EC 55 push ebp :005D89ED 8BEC mov ebp, esp :005D89EF 83C4F0 add esp, FFFFFFF0 :005D89F2 894DF4 mov dword ptr [ebp-0C], ecx :005D89F5 8955F8 mov dword ptr [ebp-08], edx :005D89F8 8945FC mov dword ptr [ebp-04], eax :005D89FB 8B45F8 mov eax, dword ptr [ebp-08] :005D89FE E871B7E2FF call 00404174 :005D8A03 8B45F4 mov eax, dword ptr [ebp-0C] :005D8A06 E869B7E2FF call 00404174 :005D8A0B 33C0 xor eax, eax :005D8A0D 55 push ebp :005D8A0E 68AF8A5D00 push 005D8AAF :005D8A13 64FF30 push dword ptr Fs:[eax] :005D8A16 648920 mov dword ptr fs:[eax], esp * Possible StringData Ref from Code Obj ->"\Software\Visicom Media\WebExpert " ->"v3" | :005D8A19 B9C48A5D00 mov ecx, 005D8AC4 :005D8A1E B201 mov dl, 01 :005D8A20 A11C324600 mov eax, dword ptr [0046321C] :005D8A25 E8F2B1E8FF call 00463C1C :005D8A2A 8945F0 mov dword ptr [ebp-10], eax :005D8A2D 33C0 xor eax, eax :005D8A2F 55 push ebp :005D8A30 687D8A5D00 push 005D8A7D :005D8A35 64FF30 push dword ptr fs:[eax] :005D8A38 648920 mov dword ptr fs:[eax], esp :005D8A3B 8B45F8 mov eax, dword ptr [ebp-08] :005D8A3E 50 push eax * Possible StringData Ref from Code Obj ->"Nom" | :005D8A3F B9F48A5D00 mov ecx, 005D8AF4 * Possible StringData Ref from Code Obj ->"Enregistrement" | :005D8A44 BA008B5D00 mov edx, 005D8B00 :005D8A49 8B45F0 mov eax, dword ptr [ebp-10] :005D8A4C E8E7B2E8FF call 00463D38 :005D8A51 8B45F4 mov eax, dword ptr [ebp-0C] :005D8A54 50 push eax * Possible StringData Ref from Code Obj ->"NoSerie" | :005D8A55 B9188B5D00 mov ecx, 005D8B18 * Possible StringData Ref from Code Obj ->"Enregistrement" | :005D8A5A BA008B5D00 mov edx, 005D8B00 :005D8A5F 8B45F0 mov eax, dword ptr [ebp-10] :005D8A62 E8D1B2E8FF call 00463D38 :005D8A67 33C0 xor eax, eax :005D8A69 5A pop edx :005D8A6A 59 pop ecx :005D8A6B 59 pop ecx :005D8A6C 648910 mov dword ptr fs:[eax], edx :005D8A6F 68848A5D00 push 005D8A84 * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:005D8A82(U) | :005D8A74 8B45F0 mov eax, dword ptr [ebp-10] :005D8A77 E850A6E2FF call 004030CC :005D8A7C C3 retC'est lα que le prog va Θcrire le nom d'enregistrement sous "Nom" et le code d'enregistrement sous "NoSerie" dans la base de registre uniquement si le "NoSerie" est bon, donc avant les call 005D89EC il doit y avoir un test. Recherche des call 005D89EC et des tests
* Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0051B4DB(C) | :0051B50C 8D45FC lea eax, dword ptr [ebp-04]-------avec Soft-Ice, voir plus bas :0051B50F 50 push eax :0051B510 8D55F8 lea edx, dword ptr [ebp-08] :0051B513 8B83C8020000 mov eax, dword ptr [ebx+000002C8] :0051B519 E86669F2FF call 00441E84 :0051B51E 8B55F8 mov edx, dword ptr [ebp-08] :0051B521 A1F4656400 mov eax, dword ptr [006465F4] :0051B526 8B00 mov eax, dword ptr [eax] :0051B528 33C9 xor ecx, ecx :0051B52A E871680C00 call 005E1DA0 :0051B52F 8D55F8 lea edx, dword ptr [ebp-08] :0051B532 8B83CC020000 mov eax, dword ptr [ebx+000002CC] :0051B538 E84769F2FF call 00441E84 :0051B53D 8B55F8 mov edx, dword ptr [ebp-08]-------lα on voit le "NoSerie" entrΘ :0051B540 8B45FC mov eax, dword ptr [ebp-04]-------lα on voit le bon "NoSerie" :0051B543 E8888BEEFF call 004040D0---------------------compare les "NoSerie" :0051B548 0F85A7000000 jne 0051B5F5----------------------test avant le call 005D89EC :0051B54E A1F4656400 mov eax, dword ptr [006465F4] :0051B553 8B00 mov eax, dword ptr [eax] :0051B555 C680B80B000000 mov byte ptr [eax+00000BB8], 00 :0051B55C A1F4656400 mov eax, dword ptr [006465F4] :0051B561 8B00 mov eax, dword ptr [eax] :0051B563 8B807C060000 mov eax, dword ptr [eax+0000067C] :0051B569 B201 mov dl, 01 :0051B56B E880BEF3FF call 004573F0 :0051B570 8D55F8 lea edx, dword ptr [ebp-08] :0051B573 8B83CC020000 mov eax, dword ptr [ebx+000002CC] :0051B579 E80669F2FF call 00441E84 :0051B57E 8B45F8 mov eax, dword ptr [ebp-08] :0051B581 50 push eax---------------------------lα on voit le "NoSerie" entrΘ (ed eax) :0051B582 8D55EC lea edx, dword ptr [ebp-14] :0051B585 8B83C8020000 mov eax, dword ptr [ebx+000002C8] :0051B58B E8F468F2FF call 00441E84 :0051B590 8B55EC mov edx, dword ptr [ebp-14] :0051B593 A1F4656400 mov eax, dword ptr [006465F4] :0051B598 8B00 mov eax, dword ptr [eax] :0051B59A 59 pop ecx :0051B59B E84CD40B00 call 005D89EC---------------------Θcrit dans la base de registre :0051B5A0 6A40 push 00000040 :0051B5A2 8D55F4 lea edx, dword ptr [ebp-0C] * Possible Reference to String Resource ID=05000: "WebExpert" | :0051B5A5 B888130000 mov eax, 00001388 :0051B5AA E8D5DDEEFF call 00409384 :0051B5AF 8B45F4 mov eax, dword ptr [ebp-0C] :0051B5B2 E8CD8BEEFF call 00404184 :0051B5B7 50 push eax :0051B5B8 8D55F0 lea edx, dword ptr [ebp-10] * Possible Reference to String Resource ID=00096: "Merci de votre enregistrement. Le logiciel est maintenant as" | :0051B5BB B860000000 mov eax, 00000060 :0051B5C0 E8BFDDEEFF call 00409384 :0051B5C5 8B45F0 mov eax, dword ptr [ebp-10] :0051B5C8 E8B78BEEFF call 00404184 :0051B5CD 8BD0 mov edx, eax :0051B5CF A138696400 mov eax, dword ptr [00646938] :0051B5D4 8B00 mov eax, dword ptr [eax] :0051B5D6 59 pop ecx :0051B5D7 E8F80BF2FF call 0043C1D4 :0051B5DC A1F4656400 mov eax, dword ptr [006465F4] :0051B5E1 8B00 mov eax, dword ptr [eax] :0051B5E3 8B802C080000 mov eax, dword ptr [eax+0000082C] :0051B5E9 33D2 xor edx, edx :0051B5EB E81466F3FF call 00451C04 :0051B5F0 E911010000 jmp 0051B706---------------------saute trΦs loin * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0051B548(C) | :0051B5F5 8D45FC lea eax, dword ptr [ebp-04] :0051B5F8 50 push eax :0051B5F9 8D55F8 lea edx, dword ptr [ebp-08] :0051B5FC 8B83E4020000 mov eax, dword ptr [ebx+000002E4] :0051B602 E87D68F2FF call 00441E84 :0051B607 8B55F8 mov edx, dword ptr [ebp-08] :0051B60A A1F4656400 mov eax, dword ptr [006465F4] :0051B60F 8B00 mov eax, dword ptr [eax] :0051B611 33C9 xor ecx, ecx :0051B613 E888670C00 call 005E1DA0 :0051B618 8D55F8 lea edx, dword ptr [ebp-08] :0051B61B 8B83CC020000 mov eax, dword ptr [ebx+000002CC] :0051B621 E85E68F2FF call 00441E84 :0051B626 8B55F8 mov edx, dword ptr [ebp-08]-------lα on voit le numΘro d'identification :0051B629 8B45FC mov eax, dword ptr [ebp-04]-------lα on voit un code calculΘ en fonction :0051B62C E89F8AEEFF call 004040D0 du numΘro d'identification :0051B631 0F85A5000000 jne 0051B6DC----------------------test avant le call 005D89EC :0051B637 A1F4656400 mov eax, dword ptr [006465F4] :0051B63C 8B00 mov eax, dword ptr [eax] :0051B63E C680B80B000000 mov byte ptr [eax+00000BB8], 00 :0051B645 A1F4656400 mov eax, dword ptr [006465F4] :0051B64A 8B00 mov eax, dword ptr [eax] :0051B64C 8B807C060000 mov eax, dword ptr [eax+0000067C] :0051B652 B201 mov dl, 01 :0051B654 E897BDF3FF call 004573F0 :0051B659 8D45FC lea eax, dword ptr [ebp-04] :0051B65C 50 push eax :0051B65D 8D55F8 lea edx, dword ptr [ebp-08] :0051B660 8B83C8020000 mov eax, dword ptr [ebx+000002C8] :0051B666 E81968F2FF call 00441E84 :0051B66B 8B55F8 mov edx, dword ptr [ebp-08] :0051B66E A1F4656400 mov eax, dword ptr [006465F4] :0051B673 8B00 mov eax, dword ptr [eax] :0051B675 33C9 xor ecx, ecx :0051B677 E824670C00 call 005E1DA0 :0051B67C 8D55F8 lea edx, dword ptr [ebp-08] :0051B67F 8B83C8020000 mov eax, dword ptr [ebx+000002C8] :0051B685 E8FA67F2FF call 00441E84 :0051B68A 8B55F8 mov edx, dword ptr [ebp-08] :0051B68D A1F4656400 mov eax, dword ptr [006465F4] :0051B692 8B00 mov eax, dword ptr [eax] :0051B694 8B4DFC mov ecx, dword ptr [ebp-04] :0051B697 E850D30B00 call 005D89EC----------------------Θcrit dans la base de registre :0051B69C 6A40 push 00000040 :0051B69E 8D55F4 lea edx, dword ptr [ebp-0C] * Possible Reference to String Resource ID=00096: "Merci de votre enregistrement. Le logiciel est maintenant as" | :0051B6A1 B860000000 mov eax, 00000060 :0051B6A6 E8D9DCEEFF call 00409384 :0051B6AB 8B45F4 mov eax, dword ptr [ebp-0C] :0051B6AE E8D18AEEFF call 00404184 :0051B6B3 8BD0 mov edx, eax * Possible StringData Ref from Code Obj ->"WebExpert" | :0051B6B5 B948B75100 mov ecx, 0051B748 :0051B6BA A138696400 mov eax, dword ptr [00646938] :0051B6BF 8B00 mov eax, dword ptr [eax] :0051B6C1 E80E0BF2FF call 0043C1D4 :0051B6C6 A1F4656400 mov eax, dword ptr [006465F4] :0051B6CB 8B00 mov eax, dword ptr [eax] :0051B6CD 8B802C080000 mov eax, dword ptr [eax+0000082C] :0051B6D3 33D2 xor edx, edx :0051B6D5 E82A65F3FF call 00451C04 :0051B6DA EB2A jmp 0051B706 * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0051B631(C) | * Possible Reference to String Resource ID=00048: "Ces cadres sont impossibles α dΘfinir. Les cadres ont certai" | :0051B6DC 6A30 push 00000030 :0051B6DE 8D55F4 lea edx, dword ptr [ebp-0C] * Possible Reference to String Resource ID=00097: "Mauvais code d'enregistrement." | :0051B6E1 B861000000 mov eax, 00000061 :0051B6E6 E899DCEEFF call 00409384 :0051B6EB 8B45F4 mov eax, dword ptr [ebp-0C] :0051B6EE E8918AEEFF call 00404184 :0051B6F3 8BD0 mov edx, eax * Possible StringData Ref from Code Obj ->"WebExpert" | :0051B6F5 B948B75100 mov ecx, 0051B748 :0051B6FA A138696400 mov eax, dword ptr [00646938] :0051B6FF 8B00 mov eax, dword ptr [eax] :0051B701 E8CE0AF2FF call 0043C1D4Tout est lα, les 2 call 005D89EC (Θcriture dans la base de registre) sont prΘcΘdΘs par un test. On voit aussi "Merci de votre enregistrement. Le logiciel est maintenant as" et "Mauvais code d'enregistrement." Sous Soft-Ice on place un bpx en 0051B540. En s'enregistrant avec comme nom d'enregistrement, par exemple, "BlueWin" et code d'enregistrement "123". Le champ du numΘro d'identification, nΘcessaire que pour la version de boεte, est laissΘ vide. Le prog s'arrΩte sur le Bpx et on voit (ed edx) le code d'enregistrement bidon, en 0051B543 (ed eax) on a le bon code d'enregistrement. Avec BlueWin j'ai "D4FF-UWI5-TPKZ-ZZZZ". C'est bien on a le code qui correspond α son nom, mais ne nous arrΩtons pas en si bon chemin :). Le call 004040D0 compare les codes, si les codes sont diffΘrents le prog saute en 000051B5F5. Modifions en 0051B548 le jne par je ainsi le prog ne saute pas et Θcrira dans la base de registre (le call 005D89EC). On continue de tracer jusqu'en 0051B57E. On se concentre.. en 0051B53D on a "[ebp-08]" avec le code bidon et en 0051B540 on a "[ebp-04]" avec le bon code... et si on remplaçait "mov eax, dword ptr [ebp-08]" par "mov eax, dword ptr [ebp-04]" ce serait bien :). Eh hop c'est fait. Le prog crΘe une clΘ "Enregistrement" dans "HKEY_CURRENT_USER\ Software\ Visicom Media\ WebExpert v3" avec comme valeur de chaεne "Nom" (contenant le nom d'enregistrement "BlueWin") et "NoSerie" (contenant le bon code d'enregistrement "D4FF-UWI5-TPKZ-ZZZZ"). Voilα le prog a Θcrit dans la base de registre le bon code d'enregistrement en entrant un code bidon... C'est parfait pour faire un patch, tout le monde peut s'enregistrer (mΩme les gros Lamer) avec son nom sans passer par un keygen.
L'hexa pour le patch :
E8 88 8B EE FF 0F 85 A7 00 00 00-- remplacΘ en 0051B548
E8 88 8B EE FF 0F 84 A7 00 00 00-- par
E8 06 69 F2 FF 8B 45 F8 50 8D-- remplacΘ en 0051B57E
E8 06 69 F2 FF 8B 45 FC 50 8D-- par
Y'a encore plus fort, le 2Φme call 005D89EC (Θcriture dans la base de registre) et le test qui le précède...
On s'enregistre α nouveau (supprimer l'entrer "Enregistrement" dans la base de registre) toujours avec le mΩme
nom d'enregistrement et un code d'enregistrement bidon "123". En 0051B548 on laisse le jne, le prog saute.
En 0051B629 on voit (ed edx) le code d'enregistrement bidon, en 0051B62C (ed eax) on a un code d'enregistrement
"ZZZZ-ZZZZ-ZZZZ-ZZZZ". KesksΦksa! le code bidon est comparΘ α "Z..Z" Ben oui, si si on peut s'enregistrer
avec n'importe quel nom et le code "ZZZZ-ZZZZ-ZZZZ-ZZZZ", le prog inscrit directement dans la base de registre
le BON numΘro de sΘrie !!!???. Pour faire un patch encore plus simple on peut remplacer en 0051B631 le jne par je
mais bon...
RΘflΘchissons encore une fois... Lorsqu'on s'enregistre le champ du numΘro d'identification, nΘcessaire que pour la version de boεte, est laissΘ vide. Le call 004040D0 en 0051B543 compare le code d'enregistrement entrΘ avec le code gΘnΘrΘ par le nom d'enregistrement. Si le code d'enregistrement est bidon le prog saute en 0051B5F5. Le call 004040D0 en 0051B62C compare alors le code d'enregistrement avec le code gΘnΘrΘ par le numΘro d'identification mais, puisque le le champ du numΘro d'identification est vide le code gΘnΘrΘ sera toujours le mΩme c-a-d "ZZZZ-ZZZZ-ZZZZ-ZZZZ" donc ce code marche toujours.
Essayons de s'enregistrer avec un numΘro d'identification.
Nom d'enregistrement : "WebExpert"
NumΘro d'identification : "BlueWin"
Code d'enregistrement : "D4FF-UWI5-TPKZ-ZZZZ" correspond au code gΘnΘrΘ par par le numΘro d'identification
Boum ca marche, dans la base de registre le prog Θcrit le "NoSerie" (JFGZ-MJDR-5J6E-M57E)
qui correspond au nom d'enregistrement "WebExpert".
En rΘsumΘ, le test en 0051B548 sert pour l'enregistrement avec le nom d'enregistrement et le test en 0051B631 pour l'enregistrement avec le numΘro d'identification. Avec la version de boεte on a un numΘro d'identification et le code d'enregistrement qui correspond ainsi on peut enregistrer le prog avec son nom, le prog Θcrivant tout seul le bon "NoSerie" dans la base de registre.
Utiliser Soft-Ice pour refaire la crack
Avant d'appuyer sur "Ok" pour s'enregistrer faire Ctrl+d pour Ωtre sous Soft-Ice, ensuite bpx Hmemcpy et F5.
On appuie sur Ok. Soft-Ice "reprend la main" on tape Bd*, 1 fois F11, 11 fois F12 et 18 fois F10 maintenant
on doit se trouver en 0051B50C.
Le plus long c'est... de dΘsassembler wexpert3.exe (3.5 Mo) qui donne un fichier wexpert3.alf de 50 Mo.
On a fait un beau patch, qui nous permet d'enregistrer WebExpert en entrant son nom et un code
d'enregistrement bidon... juste pour le fun :). Rien n'est perdu car FTPExpert, aussi de Visicom MΘdia Inc,
a exactement le mΩme schΘma de protection... Mais on a mieux avec n'importe quel nom d'enregistrement et le code
"ZZZZ-ZZZZ-ZZZZ-ZZZZ" on peut s'enregistrer... Qui veut faire un keygen ;).
A+ BlueWin
Si vous avez des questions ou remarques mailer
BlueWin@ifrance.com