Nom : Namo Web Editor Version : 3.05 FRENCH Protections : Keyreg/nag/trial period disponibilité : http://www.namo.com Tools : Softice 4.0 Editeur hexa BrAin/GaNjA/Clopes/Feuilles Namo est un éditeur Htlm permettant de faire entre autre du htlm dynamique . 'Le Html Dynamique regorge de fonctions évoluées permettant de dynamiser le contenu de votre site' dixit les auteurs de namo... Comme j'y connais vraiment poa grand chose en html, je me garderai de donner mon avis sur la qualité du soft . La protection réside dans un nag ,une période d'essaie de 20 jours et un Keyreg. Un keyreg késako ? Tout simplement un fichier qui va générer une ou plusieurs clées qui vont aller se loger dans votre base de registre . Pour faire un tel fichier c'est très simple : il suffit de faire un fichier text commençant par REGEDIT 4 et de le sauvegarder en .reg et non en .txt . Nous verrons cela à la fin de ce tutor . Step 1 Bon , le soft à une boîte d'enregistrement qui permet de rentrer un numéro de serie et une clée afin de débrider le soft . Au début j'ai essayé de trouver ce serial et cette clef . j'ai rapidement abandonné cette idée, tellement ils ont cryptés ça , les auteurs . Par contre cette première approche m'a permis en fait de cracker ce soft assez facilement ... Donc quand on lance le soft, on a joli nag qui s'affiche nous rappelant que le proggy est un shareware . On remarque au passage que la période d'essai est de 20 jours . Pour virer ce nag , j'ai fait une backtrace avec SI en posant un breakpoint sur le bouton . Quand le nag est affiché , on fait surgir SI : CTRL D . On tape TASK pour voir tous les proggyz qui tournent en mémoire . Chez moa, j'obtiens cela : TaskName SS:SP StackTop StackBot StackLow TaskDB hQueue Events Webedito 0000:0000 007DA000 007E0000 2116 0F5F 0000-- ici Notepad 0000:0000 0063D000 00640000 375E 1117 0000 Mswheel 0000:0000 0054E000 00550000 3866 386F 0000 Point32 0000:0000 0064B000 00650000 371E 36AF 0000 Systray 0000:0000 0063D000 00640000 2A76 38D7 0000 Taskmon 0000:0000 0063E000 00640000 2B3E 393F 0000 Explorer 0000:0000 0059A000 005A0000 302E 2FCF 0000 Serv-u32 0000:0000 0067C000 00680000 248E 227F 0000 Mstask 0000:0000 0056E000 00570000 24F6 2477 0000 Mprexe 0000:0000 0072E000 00730000 1B0E 28B7 0000 MMTASK 269F:1F80 00B2 201C 201C 26C6 2687 0000 MSGSRV32 1DDF:7CF0 0124 7D8E 7D8E 15CE 2097 0000 KERNEL32 * 0157:1218 00022BD0 00032BD0 00BF 2097 0000 On repère assez facilement notre proggy : Webedito . Maintenant on fait HWND Webedito pour voir tous les événements qui appartiennent au prog . Chez moa , j'obtiens ça : Window Handle hQueue SZ QOwner Class Name Window Procedure 0CEC(1) 0F5F 32 WEBEDITOR #32770 (Dialog) 13FF:00000786 0CF0(2) 0F5F 32 WEBEDITOR Button 1767:00001040-- celui là 0CF4(2) 0F5F 32 WEBEDITOR Button 1767:00001040 0CF8(2) 0F5F 32 WEBEDITOR Button 1767:00001040 0CFC(2) 0F5F 32 WEBEDITOR Button 1767:00001040 0D00(2) 0F5F 32 WEBEDITOR Static 1767:00005C20 0D04(2) 0F5F 32 WEBEDITOR Static 1767:00005C20 0D08(2) 0F5F 32 WEBEDITOR Static 1767:00005C20 0D0C(2) 0F5F 32 WEBEDITOR Static 1767:00005C20 0D10(2) 0F5F 32 WEBEDITOR Static 1767:00005C20 0D14(2) 0F5F 32 WEBEDITOR msctls_progress32 13FF:000000E8 0D18(2) 0F5F 32 WEBEDITOR Button 1767:00001040 0D1C(2) 0F5F 32 WEBEDITOR Static 1767:00005C20 0D20(2) 0F5F 32 WEBEDITOR Static 1767:00005C20 0D24(2) 0F5F 32 WEBEDITOR Edit 1757:00000CC6 0D28(2) 0F5F 32 WEBEDITOR Static 1767:00005C20 0CA8(1) 0F5F 32 WEBEDITOR tooltips_class32 13FF:00000CC4 0C3C(1) 0F5F 32 WEBEDITOR Afx:400000:8:147e 13FF:00000CC4 0C40(2) 0F5F 32 WEBEDITOR AfxControlBar42 13FF:00000CC4 0C30(3) 0F5F 32 WEBEDITOR Afx:400000:8:147e 13FF:00000CC4 (j'ai coupé) J'ai pas tout mis : 'y en avait trop . Nous ce qu'on veut c'est mettre un Breakpoint sur un bouton . On cherche donc une class name du proggy ayant comme nom 'Button' . Comme il y en a plein, on en prend une au pif : moi j'ai pris la 1ère . Donc pour moi : BMSG CF0 0202 , sous softice . Et on relance avec F5 . On clique sur 'continuer' et SI se met en route . Step 2 Bon maintenant il faut remonter dans le code pour être au début de la routine qui balance le nag : on fait une Backtrace avec F12 . Et en appuyant sur 7 fois F12, on a ceci sous les yeux : 015F:0040B4D3 CALL 004F4C74 015F:0040B4D8 MOV ECX,[EBP+0C] 015F:0040B4DB MOV EDX,[EBP+08] 015F:0040B4DE MOV EAX,[EAX+0C] 015F:0040B4E1 PUSH ECX 015F:0040B4E2 PUSH 0040BBB0 015F:0040B4E7 PUSH EDX 015F:0040B4E8 PUSH 000002B3 015F:0040B4ED PUSH EAX 015F:0040B4EE CALL [USER32!DialogBoxParamA]--- balance le nag 015F:0040B4F4 POP EBP---- on a atterrit ici en pressant 7fois F12 015F:0040B4F5 RET 015F:0040B4F6 NOP 015F:0040B4F7 NOP 015F:0040B4F8 NOP 015F:0040B4F9 NOP En pressant 7 fois F12 on a atterrit en 40B4F4 . Juste au dessus on remarque un joli CALL [USER32!DialogBoxParamA] qui en fait affiche le nag . On continue la trace pas à pas en pressant F10 . Très rapidement on a ceci sous les yeux : 015F:00474643 MOV ESI,[EAX+20] 015F:00474646 PUSH 005275E0 015F:0047464B CALL 0040B310 015F:00474650 ADD ESP,04 015F:00474653 INC EAX 015F:00474654 CMP EAX,04 015F:00474657 JA 00474695--- ferme le proggy 015F:00474659 JMP [EAX*4+004746D8]--- héhéhé 015F:00474660 PUSH 005275E0 015F:00474665 PUSH ESI 015F:00474666 CALL 0040B4D0--- le call qui affiche le nag 015F:0047466B ADD ESP,08-- en continuant la trace (F10) on arrive ici 015F:0047466E JMP 00474653 015F:00474670 LEA ECX,[EBP-34] 015F:00474673 MOV DWORD PTR [EBP-04],FFFFFFFF 015F:0047467A CALL 004F5814 015F:0047467F MOV EAX,00000001 015F:00474684 MOV ECX,[EBP-0C] 015F:00474687 MOV FS:[00000000],ECX 015F:0047468E POP EDI 015F:0047468F POP ESI 015F:00474690 POP EBX 015F:00474691 MOV ESP,EBP 015F:00474693 POP EBP 015F:00474694 RET 015F:00474695 LEA ECX,[EBP-34] 015F:00474698 MOV DWORD PTR [EBP-04],FFFFFFFF 015F:0047469F CALL 004F5814 Donc en continuant à tracer un tout petit peu on arrive en 47466B . Et au dessus on remarke un joli truc interressant : JMP [EAX*4+004746D8] . Bon ce truc là je sais pas comment ça s'appelle (ce type de saut) mais si vous crackez un peu vous avez déjà du le rencontrer moulte fois... En fait le saut à l'addresse du jump dépend de la valeur de EAX . C'est le CALL 40B310 à l'addresse 47464B qui va calculer la valeur de EAX . Dans notre cas , comme on n'est poa regged, EAX=0 . Le INC EAX en 474653 va mettre notre EAX à 1 . Donc le JMP [EAX*4+004746D8] est égal à JMP 4746DC . Mais le progg ne saute poa à cette addresse : il prend le contenu de cette addresse pour y sauter . Et le contenu de 4746DC est égal à 474660 ... C'est à dire la ligne qui suit le JMP [EAX*4+004746D8] . Boa oui, il saute à la ligne qui suit ...lol. Moi ce que je fait à ma première approche , j'ai carrément viré tout la routine qui affichait le nag , sachant qu'elle commence en 474660 et se termine en 47466F . Remplacez donc tous ces octects par des NOP (090h en hexa) . Ca marche ! Le nag ne saffiche plus ... Avancez votre horloge de Windows de 30 jours : la ca marche plus . Le nag ne saffiche poa, le soft ne ferme pas, mais il est impossible de taper une ligne de code HTML : le proggy est blocked ... Step 3 Là, j'étais quand meme un peu emmerdé ... Je me suis dit dans un premier temps que le programmeur avait mis des FlagS (drapeaux) pour vérifier que son nag s'était bien affiché . Et pis j'ai trouvé aucuns flags... Alors je me suis réinterressé de plus près à la routine qui teste le serial et la clée . On va à la boîte qui permet d'entrer le serial et la clée . Comme serial, on remplie bien toute la large du champs de saisie : 11111-111111 . Comme clée on entre : 01234567890123456789012345 soit 26 nombres . On fait surgir SI : CTRL D . Et on entre le très connu breakpoint hmemcpy : sous SI, BPX HEMCPY . On relance le tout avec F5 et on valide la clée et le serial avec 'OK' . BOom ! SI se déclenche . Bon, comme nous sommes au début de l'API Hmemcpy, il faut que l'on remonte dans le code en faisant une backtrace avec F12 . Et en pressant 55 Fois F12 on arrive à ceci : 015F:0040C259 LEA EAX,[EBP-68]--- on a atterrit ici : dans EBP-68,la clée 015F:0040C25C PUSH EAX 015F:0040C25D CALL 0040C4D0 015F:0040C262 LEA EDI,[EBP-68] 015F:0040C265 OR ECX,-01 015F:0040C268 XOR EAX,EAX 015F:0040C26A ADD ESP,04 015F:0040C26D REPNZ SCASB 015F:0040C26F NOT ECX 015F:0040C271 DEC ECX 015F:0040C272 CMP ECX,1A------- la clée doit etre égale à 1ah caractères (26 en décimale) 015F:0040C275 JZ 0040C28F----- oui , on continue le traitement de la clée 015F:0040C277 XOR EDI,EDI 015F:0040C279 PUSH EDI 015F:0040C27A PUSH ESI 015F:0040C27B CALL [USER32!EndDialog]---- sinon, stop. 015F:0040C281 MOV EAX,00000001 015F:0040C286 POP EDI 015F:0040C287 POP ESI 015F:0040C288 POP EBX 015F:0040C289 MOV ESP,EBP 015F:0040C28B POP EBP 015F:0040C28C RET 0010 015F:0040C28F LEA ECX,[EBP-68]---- la suite du traitement du serial 015F:0040C292 PUSH ECX 015F:0040C293 CALL [005222E0] 015F:0040C299 ADD ESP,04 015F:0040C29C LEA EDX,[EBP-68] 015F:0040C29F LEA EAX,[EBP-34] 015F:0040C2A2 PUSH EDX On atterrit en 40C259 . Dans EBP-68 on remarke la clée bidon qu'on a tapé ( les 26 nombres) : sous SI fait E EBP-68 pour le voir . En continuant la trace avec F10 on arrive à une verif . A l'addresse 40C272 , le proggy verifie si le nombres de caractères tapés pour la clée est bien égale à 26 caractères (01ah=26 en héxa) . Si oui, le saut en 40c275 (JZ 40c28f) et effectué, dans le cas contraire on ferme la boite d'enregistrement (c'est le CALL [USER32!EndDialog] en 40c27b ) . Et en continuant la trace pas à pas avec F10, on arrive à ceci : 015F:0040C2B8 CALL [USER32!wsprintfA] 015F:0040C2BE MOV EDX,[EBP+0C] 015F:0040C2C1 ADD ESP,0C 015F:0040C2C4 LEA EAX,[EBP-01AC] 015F:0040C2CA LEA ECX,[EBP-34] 015F:0040C2CD PUSH EDX 015F:0040C2CE PUSH EAX 015F:0040C2CF PUSH 005229B8 015F:0040C2D4 PUSH ECX 015F:0040C2D5 CALL 0040B6A0--- TEst valité serial/Clée 015F:0040C2DA ADD ESP,10 015F:0040C2DD TEST EAX,EAX---- Eax=0 ? 015F:0040C2DF JZ 0040C40D--- oui, on saute...(bad boy) 015F:0040C2E5 MOV EAX,[00553314]--- 015F:0040C2EA LEA EDX,[EBP-0120] | 015F:0040C2F0 PUSH EDX | 015F:0040C2F1 PUSH 00522994 |-- creation des clefs 015F:0040C2F6 PUSH 0052298C | dans la base de registre 015F:0040C2FB PUSH EAX | 015F:0040C2FC CALL 0040C670 -------- 015F:0040C301 MOV EDX,[00553314]--- 015F:0040C307 ADD ESP,10 | 015F:0040C30A LEA ECX,[EBP-0230] | 015F:0040C310 PUSH ECX | 015F:0040C311 PUSH 005229A0 | idem 015F:0040C316 PUSH 0052298C | 015F:0040C31B PUSH EDX | 015F:0040C31C CALL 0040C670-------- 015F:0040C321 MOV ECX,[00553314]--- 015F:0040C327 ADD ESP,10 | 015F:0040C32A LEA EAX,[EBP-0120] | idem,etc... 015F:0040C330 PUSH EAX | En arrivant à l'addresse 40c2d5, on arrive en fait au test de la validité de la clée et du serial . Comment j'en suis sur ? Ben, après y'a une routine qui crée 6 clefs dans la base de registre de zindobe ... Et ces clées correspondent a votre nom (2 clées) , votre compagnie (2 clées) , votre serial, votre clée ... Virez donc le JZ 40c40d en foutant 6 NOPs . Maintenant vous avez 6 clées qui se sont écrites dans votre base de registre . Quittez le proggy et effacez de nouveau la routine d'affichage du nag ( 16 nops) . Boa ce coup-ci, ça marche.. Le proggy ne se bloque plus ... Et le plus drôle , c'est que le proggy ne vérifie poa la validité des clées : il vérifie juste qu'elles sont présentes dans la base de registre ...lol. Pour créer le fichier reg , c'est simple : vous ouvrez votre base de registre, et vous allez à : HKEY_LOCAL_MACHINE\Software\Namo Maintenant vous allez dans 'Registre' et 'exporter un fichier du registre' . Normalement , windows a du vous créer un fichier de ce type : --------------------------------------------------------------------------------- REGEDIT4 [HKEY_LOCAL_MACHINE\Software\Namo] [HKEY_LOCAL_MACHINE\Software\Namo\Namo WebEditor] [HKEY_LOCAL_MACHINE\Software\Namo\Namo WebEditor\3.0_Shareware] "Name"="TaMaMBoLo" "Company"="Celebrity Crackers/SeNaTe" [HKEY_LOCAL_MACHINE\Software\Namo\Namo WebEditor\3.0_Shareware\Data] "Name"="TaMaMBoLo" "Company"="Celebrity Crackers/SeNaTe" "Data2"=hex:85,e1,e6,b7,31,c1,0c,f3,73,da,24,a1,34,76,ac,5d,10,31,24,a9,39,da,\ 78,8e,7b,24 "Data1"="1111111111" ---------------------------------------------------------------------------------- Maintenant, y'a plus ka patcher le proggy pour virer le nag ... Prendre son éditeur hexa et se rendre à l'offset 73A60 et mettre 90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90 Et ne poa oublier de clicker sur le .reg une fois le patch appliqué (dans le cas d'une nouvelle installation de namo) . TaMaMBoLo/CC/SNT/SML