Nom : Winrar Version : 2.60 beta 4 english Protection : Trial période,nag,limitations Disponibilité : Http://www.rarsoft.com Outils : Softice 4.0 Windasm 8.93 Hexworkshop 2.54 Brain Winrar fait partit de ces standarts de la compression de données comme winzip et winace.Cette monture toujours en beta apporte de nombreuses améliorations, surtout au niveau du compressage : c plus rapide et ça va plus vite ! Les protections sont standarts : nag,trial periode,limitations. Quand on lance winrar et que l'on crée une archive, plusieurs options sont accessibles que dans la version enregistrée ('put recovery record' ,'use multimedia compression',...) .Un beau nag apparait quand on coche une de ces options : 'available in registered version only .' Step 1 Mon premier réflexe a été de prendre windasm et de désassembler le code pour trouver dans les 'String Data Reference' la phrase du nag (available in registered version only). Pas de pot ,elle y est plein de fois , ce qui est un peu chiant à cracker du fait du nombre de référence dans le code.J'ai donc pris mon softice adoré .Le message qui nous dit 'available in registered version only' est probablement affiché avec l'API MessageBoxA. On prend symbol loader et on ouvre Winrar. Sous softice on tape : BPX MessageboxA .On relance et on crée notre archive en cochant une option qui nous est interdite : 'put recovery record' par exemple. Softice se déclenche . Mais à ce moment là,on est pas dans le code principal de winrar : on est au début de l'API MessageBoxA. Il faut remonter dans le code ,pour se retrouver dans le code principal de winrar .Pour cela on appuie 1 SEULE FOIS sur F12 . Normalement le messagebox vous disant 'available in registered version only ' a du s'afficher. Cliquez sur OK .Softice se remet en route, vous donnant la main juste derrière l'appel à MessageBoxA . Normalement, vous devriez arriver à ceci : Desassemblage Windasm :0040D586 cmp byte ptr [00460C74], 00------------------ InTeRReSSant ! :0040D58D jne 0040D5BD :0040D58F cmp dword ptr [00468F4C], 0000003C :0040D596 jle 0040D5BD :0040D598 push 00000030 * Possible Ref to Menu: MAIN_MENU, Item: '' * Possible Reference to Dialog: ABOUTRARDLG, CONTROL_ID:0065, '' * Possible Reference to String Resource ID=00101: 'Warning' :0040D59A push 00000065 :0040D59C call 00408028 :0040D5A1 push eax * Possible Ref to Menu: MAIN_MENU, Item: 'Deselect group Gray -' * Possible Reference to Dialog: CMDWNDADD, CONTROL_ID:006A, * Possible Reference to String Resource ID=00106: 'Available in registered version only' :0040D5A2 push 0000006A :0040D5A4 call 00408028 :0040D5A9 push eax :0040D5AA push ebx * Reference To: USER32.MessageBoxA, Ord:0000h :0040D5AB Call 0045BD89--------------------- notre MessageBoxA :0040D5B0 push 00000000--------------------- on a atterrit ici avec softice :0040D5B2 movzx edx, word ptr [ebp+10] :0040D5B6 push edx :0040D5B7 push ebx Step 2 Avec softice vous devez arriver en 40d5b0 après avoir clické sur OK .On repère bien notre MessageBoxA en 40d5ab. En remontant un peu plus haut dans le code, on arrive à l'adresse 40d586 et on remarque quelque chose de très interresant .A cette addresse, le prog fait une comparaison entre l'addresse 460c74 et 0 . Si 460c74=1 le saut conditionnel en 40d58d est effectué et nous fait sauter au dessus du nag . Et si 460c74=0 ,le saut n'est pas effectué et donc on affiche le nag 'available in registered version only ' . En fait le prog se sert de cette addresse pour déterminer si l'utilisateur est enregistré ou pas (460c74=1 ===> utilisateur enregistré) . Comme nous sommes des utilisateurs not registered, il y a forcément un endroit dans le code où le prog met 460c74 à 0 . S'agit maintenant de répérer cet endroit parmis les centaines de lignes de code... Step 3 Prenez windasm et désassemblez le proggy si ce n'est pas déjà fait . Pour trouver les endroits où l'addresse 460c74 est appelée par le prog, on va à l'option 'Search' et 'find text' de windasm . On entre 740c46 . Je sais, j'ai entré l'addresse à l'envers (740c46=460c74) : c'est normal car en hexa il faut mettre le bit de poinds faible devant le bit de poids fort .Si tu comprends pas, lis des tutors sur l'hexa. Windasm va vous trouver beaucoup de 'cmp byte prt (460c74),0' : c'est pas très interressant pour nous . Nous ,on cherche plutot un 'mov byte ptr (460c74),0' .On trouve déjà ça : 0040CB4F mov byte ptr [00460C74],00 On note cette addresse (40cb4F) dans un coin .La deuxième chose que l'on trouve avec windasm c'est ça: :004149EA call 00436EF0 :004149EF mov byte ptr [00460C74], al On trouve cette routine (le call 436EF0 suivit du mov byte ptr [00460C74], al) beaucoup de fois dans le code...A mon avis on tient le bon bout...Apres que le call 436EF0 soit effectué, on met le contenu de al à l'addresse 460c74. Et si à la sortie du call 466EF0 al=0 , 460c74 sera mis à 0... Step 4 On reprend symbol loader et on rouvre winrar . On va mettre un breakpoint sur le call 436EF0 : sous softice, tapez : BPX 436EF0. On va mettre aussi un deuxième breakpoint sur la première addresse qu'on avait trouvé avec windasm : BPX 40CB4F.Et on relance le tout avec F5. Normalement softice à du se bloquer en 436EF0 : Desassemblage Windasm :00436EF0 push ebp :00436EF1 mov ebp, esp :00436EF3 add esp, FFFFF004 :00436EF9 push eax :00436EFA add esp, FFFFFBA0 :00436F00 push ebx :00436F01 push esi :00436F02 push edi :00436F03 mov edi, 00472208 :00436F08 mov eax, 00461AF4 :00436F0D call 0045485C :00436F12 lea edx, dword ptr [ebp+FFFFF7B4] :00436F18 push edx * Possible StringData Ref from Data Obj ->'rarreg.*'------ hum.... :00436F19 push 00461F38 :00436F1E call 00425E94 :00436F23 mov word ptr [ebp+FFFFFBD0], 0008 :00436F2C lea ecx, dword ptr [ebp+FFFFFBF8] :00436F32 push ecx :00436F33 call 004373C4 :00436F38 lea eax, dword ptr [ebp+FFFFF7B4] :00436F3E push eax :00436F3F lea edx, dword ptr [ebp+FFFFFBF8] :00436F45 push edx :00436F46 call 00437428 :00436F4B lea ecx, dword ptr [ebp+FFFFF7A0] :00436F51 push ecx :00436F52 call 0042616C :00436F57 push 00000000 :00436F59 lea eax, dword ptr [ebp+FFFFF3A0] :00436F5F push eax :00436F60 lea edx, dword ptr [ebp+FFFFFBF8] :00436F66 push edx :00436F67 call 00437468 :00436F6C test al, al :00436F6E jne 00436F94------- Bad boy ! on ne saute pas. :00436F70 xor eax, eax------- Et on met eax à 0 ,donc al=0 aussi... :00436F72 lea edx, dword ptr [ebp+FFFFFBF8] :00436F78 push eax :00436F79 push 00000002 :00436F7B push edx :00436F7C call 004373F0 :00436F81 pop eax :00436F82 mov edx, dword ptr [ebp+FFFFFBC0] :00436F88 mov dword ptr fs:[00000000], edx :00436F8F jmp 00437389 En traçant la routine avec la touche F10, on sapperçoit que le saut conditionnel en 436F6E n'est pas effectué et qu'il est suivit d'un XOR eax,eax qui va nous mettre eax à 0 et par la même occasion al aussi...Avant d'éxécuter le xor eax,eax , tapez sous softice A 436F72 . Vous êtes maintenant dans l'éditeur ASM de softice . On va remplacer le xor eax,eax par MOV AL,1 .En plus ça tombe bien , c'est le même nombre d'octets (xor eax,eax=2 octets et mov al,1=2 octets) . On a même pas besoin de rééquilibrer le code. On quitte l'éditeur ASM de softice (Escape) et on relance avec F5 . On va dans les options de winrar pour créer une archive et on recoche les options qui nous sont interdites . Softice se bloque cette fois au deuxième breakpoint qu'on a mis : 0040CB4F mov byte ptr [00460C74],00 Sous Softice tapez E 40CB4F pour être dans l'éditeur hexadécimal de softice .Sur la première ligne ,remplacez le deuxième 00 par 01 .Maintenant votre instruction en 40CB4F doit être maintenant égale à ça : 0040CB4F mov byte ptr [00460C74],01 De cette façon, on va mettre 1 en 460c74 (c ce kon veut,je rappelle) au lieu de mettre 0 à cette adresse. Relancez le tout avec F5 : ça marche ! On peut cocher les options qui nous étaient interdites et en allant dans l'option 'About' de Winrar on voit maintenant marqué 'Registered to' à la place de '40 days trial copy' ... Voilà un petit crack bien propre... Pour ce crack se rendre aux offsets suivants : C155 et mettre 01 36570 et mettre B0,01 TaMaMBoLo