Salut tout le monde...cette fois ci je vais vous expliquer comment decompacter le dernier drapeau noir de tambolo(n°8)...je sais pas si vous l'avais regarde (le code du packer ....) mais c'est vraiment du bon travail :) et franchement Marquis y s'est gave pour creer son code qui part dans tout les sens et qui est plutot lourd comprendre au depart...Bon ici je vais pas expliquer le fonctionnement du packer mais vous donner la methode pour decompacter ce type d'exe... La premiere methode c'est celle que vous pourrez utiliser souvent quand le compacteur n'a pas ete code par l'auteur du soft....je m'explique lorsque qq'un cree un compacteur generique il doit preserver l'integrite du fichier exe pour qu'il puisse marcher une fois decompacte comme si de rien n'etait...normal :) il se case donc un peu la ou il peut en memoire pour eviter de toucher au prog original,et c'est la que nous intervenons :) Bon cette methode va surement paraitre barbare a vos yeux mais elle marche tres bien quand on ne connait rien du packer comme celui-ci que je ne connaissait pas et qui ne donne pas franchement envie de tracer dedans a la recherche du fameux popad jmp eax terminant bon nombre de packers :)...la on va tracer a l'ancienne en regardant les addresses memoires sur la gauche de l'écran :) et des qu'on fera un saut assez consequent on saura qu'on a change de main et que le packer a finit son travail :). I/Dectyption 'a l'ancienne' :) Bon on commence le travail...d'abord soit on fout un '0CCh' sur l'entry point soit on modifie la premiere section en lui mettant 20h a la fin...CF certains tuts sur le decompactage.Ici on a pas vraiment de chance car il se trouve que l'eip initiale et celle ou on nous envera une fois la decryption finie sont tres proche... 1000h environ d'apres ce que je me souviens mais bon c'est pas trop grave car comme vous pouvez le voire le code du packers est vraiment mais alors la vraiment carrement inextricable avec des saloperies de partout...un peu dans ce style koa :) 015F:0088B2A8 C7855EEB02C78583EE6EMOV DWORD PTR [EBP+C702EB5E],6EEE8385 015F:0088B2B2 EB03 JMP 0088B2B7 015F:0088B2B4 CD20 INT 20 VXDJmp 031A,39C7 015F:0088B2BA 0000 ADD [EAX],AL 015F 0088B2BC EB03 JMP 0088B2C1 015F:0088B2BE CD20 INT 20 VXDJmp 03EB,2DEA 015F:0088B2C4 CD20 INT 20 VXDCall EBD8,33EA 015F:0088B2CA 03CD ADD ECX,EBP 015F:0088B2CC 206949 AND [ECX+49],CH 015F:0088B2CF EB02 JMP 0088B2D3 015F:0088B2D1 C705EB02CD2083F900EBMOV DWORD PTR [20CD02EB],EB00F983 015F:0088B2DB 02CD ADD CL,CH 015F:0088B2DD 2075DC AND [EBP-24],DH 015F:0088B2DE 75DC JNZ 0088B2BC 015F:0088B2E0 EB02 JMP 0088B2E4 015F:0088B2E2 CD20 INT 20 VXDCall 0000,03E8 015F:0088B2E8 0073EB ADD [EBX-15],DH 015F:0088B2EB 0458 ADD AL,58 015F:0088B2ED 40 INC EAX 015F:0088B2EE 50 PUSH EAX 015F:0088B2EF C3 RET 015F:0088B2F0 EB02 JMP 0088B2F4 015F:0088B2F2 CD20 INT 20 VXDJmp 8343,1D89 015F:0088B2F8 40 INC EAX 015F:0088B2F9 00EB ADD BL,CH 015F:0088B2FB 02C7 ADD AL,BH 015F:0088B2FD 85C1 TEST ECX,EAX 015F:0088B2FF EB16 JMP 0088B317 015F:0088B301 EB03 JMP 0088B306 015F:0088B303 CD20 INT 20 VXDCall 9D01,6669 015F:0088B309 51 PUSH ECX 015F:0088B30A 804000EB ADD BYTE PTR [EAX+00],EB 015F:0088B30E 0269B1 ADD CH,[ECX-4F] 015F:0088B311 EB01 JMP 0088B314 bon c vraiment pas le genre de code qu'on aime ca avec des VMMCall de partout etc.....donc il sera facile de retrouver le code original de l'application des qu'on arrivera a qqchose de moins barbare :) Bon mais y reste un probleme...y faut tracer dans ce #$@=}% de code et c'est pas la joie surtout que (c'est normal pour un decompacteur) il y a plein de boucle etc.....Bon y faut donc mettre une technique au point pour tracer rapidement et pas rester appuye sur F8 pendant 2heures... Donc la technique c'est de repere les loop d'abord des qu'on en voit un on pose un bpx juste apres (ou mieux un bpmb X comme ca si jamais il y a une detection anti bpx ca passera comme dans du beurre...) bon sinon on peux se retrouver face a du code genre dec ecx jnz XXX jmp XXX Là pareil on pose notr bpmb ou bpx sur le jmp comme ca lorsque ecx arrivera a zero sice breakera.... si c t dec ecx jz XXX jmp XXX y faudrait bien entendu mettre le bpmb bpx a l'offset du jz pour ne pas breaker a chaque iteration de la boucle..... (Remarque: on fait gaffe au jnz et jz si jnz->bpx sur le jmp(ou la destination du jmp),et si jz->bpx sur la destination du jz). Bon par contre y vaut mieux eviter les F10 lors des calls car vous risquer de ne jamais breaker... Bon fini la technique :) et suivant cette methode on arrive au bout d'un ptit moment sur: 015F:0088A000 55 PUSH EBP 015F:0088A001 57 PUSH EDI 015F:0088A002 56 PUSH ESI 015F:0088A003 52 PUSH EDX 015F:0088A004 51 PUSH ECX 015F:0088A005 53 PUSH EBX 015F:0088A006 E800000000 CALL 0088A00B 015F:0088A00B 5D POP EBP 015F:0088A00C 8BD5 MOV EDX,EBP 015F:0088A00E 81ED973B4000 SUB EBP,00403B97 015F:0088A014 2B952D3C4000 SUB EDX,[EBP+00403C2D] 015F:0088A01A 83EA0B SUB EDX,0B 015F:0088A01D 8995363C4000 MOV [EBP+00403C36],EDX 015F:0088A023 0195243C4000 ADD [EBP+00403C24],EDX 015F:0088A029 0195283C4000 ADD [EBP+00403C28],EDX 015F:0088A02F 80BD2C3C400000 CMP BYTE PTR [EBP+00403C2C],00 015F:0088A036 754A JNZ 0088A082 015F:0088A038 C6852C3C400001 MOV BYTE PTR [EBP+00403C2C],01 015F:0088A03F 8DB5353C4000 LEA ESI,[EBP+00403C35] 015F:0088A045 0FB636 MOVZX ESI,BYTE PTR [ESI] 015F:0088A048 8BFD MOV EDI,EBP 015F:0088A04A 8D9D363C4000 LEA EBX,[EBP+00403C36] 015F:0088A050 8B1B MOV EBX,[EBX] 015F:0088A052 8D873A3C4000 LEA EAX,[EDI+00403C3A] .... .... ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄDRAPEAUNOIR#8!TaM!!!ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 00) BPMB #0167:0088BA32 X DR3 02) * BPMB #0167:0088B99D X DR1 03) * BPMB #0167:0088B9FF X DR0 Break due to BPMB #0167:0088BA32 X DR3 (ET=163.34 milliseconds) Bon je sais pas vous mais moi ca me convient bcp mieux que le code d'avant :) Pour les parresseux y vous suffit de mettre un bpmb 88a000 X et vous tomberez directement dessus....je suppose :) Maintenant on pourrait se demander s'il n'y avait pas un moyen plus rapide de tomber sur cette addresse.....Et il se trouve que oui en fait II/Decryption plus fine Bon comme je vous disais tout a l'heure les packers evitent de toucher a l'exe..pour qu'il marche sans probleme une fois decompacté Donc souvent ces derniers creent de nouvelles sections dans l'exe pour modifier le moins de chose possibles...Et vu qu'ils sont utilise sur un fichier exe deja cree la section a de fortes (tres tres fortes) chances de se retrouver en derniere position. On lance donc un pe-editor sur notre exe et on voit: Virtual Offset TAM! 001000 TAM! 453000 TAM!! 489000 TAM!!! 48A000 TAM!!! 48B000 Notre base est de 400000 et notre eop a 48b000 donc on commence au depart de la derniere section....vu que la majeure partie du temps l'entry point d'un programme est situe au debut du segment en posant des bpmb X sur 400000+48a000 puis sur 400000+489000,400000+453000,400000+1000 on a de forte chance de tomber sur le depart du prog decompacte :) en effet on tombera sur l'offset 88A000h qui correspont a celui du second packer utilise :) Bon maintenant on voudrait bien enlever carrement ce premier packer non? :) donc on met notre bpmb 88a000 X sice break et la on fait r eip 889FFC a 889FFC jmp eip comme ca on a bloque le prog a cet endroit sans modifier le vrai code...Ensuite on peut utiliser procdump et faire un dump full sur le prog et ensuite y nous reste a modifier l'eop...au lieu de 48B000 il suffit de le mettre a 48A000 car 48A000+400000=88A000->eip qu'on a trouve. Et le prog marche sans probleme!!!! :) c quand meme pas mal tout ca....En plus une zolie icone nous est apparue.....On peut meme killer la derniere section et enlever les 2 bytes qu'on a rejouter a notre dump a cause de notre jmp eip que nous avons tappe plus tot....mais c pas grave ici :) Bon maintenant y reste a virer le second crypteur...celui la il a l'air bcp plus facile a avoir :) car le code n'est pas aussi complique.... On remarque d'abord une suite de pop suivie d'un saut...on bpx la puis on bpx sur le 'popa', 'jmp 40523B' je vous laisse faire ;) Ptit tips de dernière minute...La grande majorite des proggy commencent par GetModuleHandleA donc en mettant un ptit BPX GetmoduleHandleA on tombe pas loin de l'Eop...Par contre on tombe pas pile dessus....ici je crois qu'on risque de louper une routine de checksum :) ... Pulsar Janvier 2000 Greetz to: Christal,Alsindor,Frog's Print,Spath,Acid_Burn,Stone,G-ROM,Elraizer,DXP, Fravia,Shrom,Iczelion,ArseniK,Lucifer48,DXP,Nody,TeeJi,TaMaMBoLo,TaiefOon, ...and the others i've forgotten :) Vous pouvez me joindre si vous avez des questions (ou si vous avez des sources asm a faire partager :)) pulsar_c@geocities.com UIN:13411849