######{{{{{{{{|||||||||||||||||}}}}}}}}###### ~~éè$$$¤¤¤--)( VisualBasic Tutorial )(--¤¤¤$$$éè~~ ######{{{{{{{{|||||||||||||||||}}}}}}}}###### Nom : Popup Killer Version : 1.7 Disponibilité : CD pro PC-TEAM No 50 ou http://Software.xfx.net Protection : Serial/VB6 Tools : Softice 4.0 Windasm 8.93 Popup killer est comme son nom l'indique, un proggy permettant de tuer les popups qui font bien chier quand vous vous baladez sur certains sites...Pratique diront certains... La protection du soft réside dans un petit serial qu'on va catcher vite fait bien fait... Le proggy a été écrit en Visual Basic 6,ce qui va vous permettre de voir une api bien pratique aussi...héhéhé. Step 1 On commence par rajouter une ligne dans notre Winice.dat pour pouvoir cracker du VB6 : EXP=c:\windows\system\msvbvm60.dll On oublie pas de rebooter sa pétoire pour que les changements prennent effet .Maintenant , on peut commencer le crack . On lance popup killer et on va à l'option qui permet d'entrer notre nom et un serial afin de débrider le soft .On valide le tout et un beau message apparait nous disant que le serial entré n'est pas bon... Vous trouvez pas que ce nag ressemble à notre traditionnel MessageBox ? Bien sur, vu que le proggy est codé en VB6, un BPX MessageBox (ou MessageBoxA) n'aura aucun effet . Par contre l'api RtcMsgBox aura beaucoup plus d'effet ! C'est en effet via cette api VB que la plupart des proggys codés en VB affiche un nag ... On refait donc l'opération précédente : on entre notre nom et un serail bidon MAIS ON NE VALIDE PAS ! On fait surgir Softice en appuyant sur CRTL D . Et on entre notre Breakpoint : BPX msvbvm60!rtcmsgbox Et on relance le tout avec la touche F5 .Puis on valide le serial en cliquant sur 'OK' .BOOM! Softice se déclenche ... On appuie une seule fois sur F12 et le nag s'affiche : on clique sur 'OK' et softice se remet en route ...On a ceci sous les yeux : 015F:004197AA PUSH 30 015F:004197AC PUSH EDX 015F:004197AD MOV DWORD PTR [EBP-58],00000008 015F:004197B4 CALL [MSVBVM60!rtcMsgBox] --------- notre messagebox ... 015F:004197BA LEA ECX,[EBP-18] 015F:004197BD CALL [MSVBVM60!__vbaFreeStr] 015F:004197C3 LEA EAX,[EBP-0088] 015F:004197C9 LEA ECX,[EBP-78] 015F:004197CC PUSH EAX 015F:004197CD LEA EDX,[EBP-68] Maintenant que l'on sait où est appelé le nag (4197B4) , on prend Windasm pour voir d'ou tout ça vient... Step 2 Donc en désassemblant l'exe de popup killer, on tombe sur ceci : * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00419591(C) ----------------héhéhéhéhéhéhé.... :0041977A 6878F84000 push 0040F878 :0041977F 68A0F14000 push 0040F1A0 :00419784 FFD6 call esi :00419786 8BD0 mov edx, eax :00419788 8D4DE8 lea ecx, dword ptr [ebp-18] :0041978B FFD7 call edi :0041978D 50 push eax :0041978E 68E0F94000 push 0040F9E0 :00419793 FFD6 call esi :00419795 8945B0 mov dword ptr [ebp-50], eax :00419798 8D9578FFFFFF lea edx, dword ptr [ebp+FFFFFF78] :0041979E 8D4588 lea eax, dword ptr [ebp-78] :004197A1 52 push edx :004197A2 8D4D98 lea ecx, dword ptr [ebp-68] :004197A5 50 push eax :004197A6 51 push ecx :004197A7 8D55A8 lea edx, dword ptr [ebp-58] :004197AA 6A30 push 00000030 :004197AC 52 push edx :004197AD C745A808000000 mov [ebp-58], 00000008 * Reference To: MSVBVM60.rtcMsgBox, Ord:0253h-------- l'api de notr messagebox :004197B4 FF1594104000 Call dword ptr [00401094]---- et notre messagebox... :004197BA 8D4DE8 lea ecx, dword ptr [ebp-18] * Reference To: MSVBVM60.__vbaFreeStr, Ord:0000h :004197BD FF1550124000 Call dword ptr [00401250] On repère bien notre messagebox en 4197B4 et en remontant plus haut dans le code, on voit que cette partie du code est référencée par un saut conditionnel en 419591 . On s'y rend tout de suite et on tombe sur ça: :00419541 FF15A8104000 Call dword ptr [004010A8] :00419547 33D2 xor edx, edx :00419549 8D4DE8 lea ecx, dword ptr [ebp-18] * Reference To: MSVBVM60.__vbaStrCopy, Ord:0000h--------- hum...interressant... :0041954C FF15BC114000 Call dword ptr [004011BC] :00419552 8D4DE8 lea ecx, dword ptr [ebp-18] :00419555 51 push ecx :00419556 E8F5B5FFFF call 00414B50---------- le call qui encode le serial :0041955B 8D4DE8 lea ecx, dword ptr [ebp-18] :0041955E 66898544FFFFFF mov word ptr [ebp+FFFFFF44], ax * Reference To: MSVBVM60.__vbaFreeStr, Ord:0000h :00419565 FF1550124000 Call dword ptr [00401250] :0041956B 66399D44FFFFFF cmp word ptr [ebp+FFFFFF44], bx :00419572 B904000280 mov ecx, 80020004 :00419577 B80A000000 mov eax, 0000000A :0041957C 894D80 mov dword ptr [ebp-80], ecx :0041957F 898578FFFFFF mov dword ptr [ebp+FFFFFF78], eax :00419585 894D90 mov dword ptr [ebp-70], ecx :00419588 894588 mov dword ptr [ebp-78], eax :0041958B 894DA0 mov dword ptr [ebp-60], ecx :0041958E 894598 mov dword ptr [ebp-68], eax :00419591 0F84E3010000 je 0041977A----------------- le saut qui nous envoie vers le nag... :00419597 68A4F64000 push 0040F6A4--------------- sinon message good boy ! :0041959C 68A0F14000 push 0040F1A0 :004195A1 FFD6 call esi :004195A3 8BD0 mov edx, eax En 419591 on repère bien notre saut conditionnel .En remontant un peu plus haut, on remarque des apis très interressantes : __vbaStrCopy pour les déplacements de chaînes (comme un serial par exemple...) et __vbaFreeStr . Bon il y a de forte chances pour que le serial soit encodé par ici ... En fait, c'est le call 414B50 à l'addresse 419556 qui se charge de ça . On va mettre un breakpoint dessus pour voir ce qui s'y passe à l'intérieur ... Step 3 Donc on prend symbol loader et on ouvre Popup killer . On clique sur les engrenages et softice se déclenche. On pose notre breakpoint BPX 414956 .Et on relance le tout avec F5 . On va à l'option pour rentrer un serial et on valide .bOOM ! Sofitce se bloque en 414956 ,call 414B50 . On appuie sur F8 pour rentrer dans le call . Et on trace avec la touche F10 pour arriver à ceci ( la trace est assez longue pour arriver là, c normal:)) : 015F:00414D04 MOV EDX,EAX 015F:00414D06 LEA ECX,[EBP-28] 015F:00414D09 CALL EBX 015F:00414D0B MOV EDX,[EBP-20] 015F:00414D0E PUSH EAX ----------- le serial bidon dans EAX 015F:00414D0F PUSH EDX ----------- le bon serial dans EDX... 015F:00414D10 CALL [MSVBVM60!__vbaStrCmp]--------- héhéhéhé.... 015F:00414D16 NEG EAX 015F:00414D18 SBB EAX,EAX 015F:00414D1A LEA ECX,[EBP-24] 015F:00414D1D INC EAX 015F:00414D1E NEG EAX Donc en traçant comme des malades on arrive en 414D0E . On remarque un joli PUSH EAX et un PUSH EDX suivit de l'api __vbaStrCmp . Cette api sert je le rappelle a comparer deux chaînes ... Dans EAX vous avez le serial bidon qu'on a entré et dans EDX le bon serial ...Pour les voir, faites E EAX et E EDX sous softice . Pour moi : Nom : TaMaMBoLo Serial : JLI-JKL2-QQ5II TaMaMBoLo