Decompression advanced registry tracer 1.11. Voici une methode que j'utilise pour ce genre de compactage. Le but est, encore une fois, d'avoir un dump correct de l'exe et donc d'avoir une section import valide. Voyons les infos contenues dans les sections de art.exe On a une section .idata en CD000 (virtual offset) et donc en 4cd000 theoriquement. En general c'est une section import qui a ce nom la. En break sur GetProcAddress on peut d'ailleurs verifier que c'est ici que ca se passe. D'abors traitons le cas SoftIce. bpx sur _lopen start art.exe F11 X F11 on change eax en FFFFFFFF et c'est OK (classic MELTICE Win95) bpx getprocaddress X F11 on est ici : -----ART!.idata-----------------------------------byte--------------PROT---(0)-- 0167:004CD000 00 00 00 00 00 00 00 00-00 00 00 00 94 D8 0C 00 ................ 0167:004CD010 54 D1 0C 00 00 00 00 00-00 00 00 00 00 00 00 00 T............... 0167:004CD020 14 DB 0C 00 E8 D1 0C 00-00 00 00 00 00 00 00 00 ................ 0167:004CD030 00 00 00 00 4E DB 0C 00-F8 D1 0C 00 00 00 00 00 ....N........... 0167:004CD040 00 00 00 00 00 00 00 00-8E DB 0C 00 08 D2 0C 00 ................ 0167:004CD050 00 00 00 00 00 00 00 00-00 00 00 00 1E DC 0C 00 ................ 0167:004CD060 28 D2 0C 00 00 00 00 00-00 00 00 00 00 00 00 00 (............... 0167:004CD070 80 DC 0C 00 40 D2 0C 00-00 00 00 00 00 00 00 00 ....@........... 0167:004CD080 00 00 00 00 48 DD 0C 00-70 D2 0C 00 00 00 00 00 ....H...p....... 0167:004CD090 00 00 00 00 00 00 00 00-8A E2 0C 00 A8 D3 0C 00 ................ 0167:004CD0A0 00 00 00 00 00 00 00 00-00 00 00 00 D8 E2 0C 00 ................ 0167:004CD0B0 B8 D3 0C 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0167:004CD0C0 68 E8 0C 00 08 D5 0C 00-00 00 00 00 00 00 00 00 h............... 0167:004CD0D0 00 00 00 00 6A F3 0C 00-B4 D7 0C 00 00 00 00 00 ....j........... -------------------------------------------------------------------------PROT32- 015F:00C8F3C7 FF5518 CALL [EBP+18] <-----------GetProcAddress 015F:00C8F3CA 8945F4 MOV [EBP-0C],EAX 015F:00C8F3CD 837DF400 CMP DWORD PTR [EBP-0C],00 015F:00C8F3D1 7559 JNZ 00C8F42C 015F:00C8F3D3 84DB TEST BL,BL 015F:00C8F3D5 743F JZ 00C8F416 015F:00C8F3D7 52 PUSH EDX 015F:00C8F3D8 53 PUSH EBX 015F:00C8F3D9 57 PUSH EDI d 4cd000 et on vois une table d'import nickel :-) Plus loin en tracant on peut voir : 015F:00C8F4A2 2BCA SUB ECX,EDX 015F:00C8F4A4 03052434C900 ADD EAX,[00C93424] 015F:00C8F4AA 8908 MOV [EAX],ECX 015F:00C8F4AC 8B45D8 MOV EAX,[EBP-28] 015F:00C8F4AF 8B55E8 MOV EDX,[EBP-18] 015F:00C8F4B2 8910 MOV [EAX],EDX <--------- a noper 015F:00C8F4B4 EB08 JMP 00C8F4BE 015F:00C8F4B6 8B45D8 MOV EAX,[EBP-28] 015F:00C8F4B9 8B55F4 MOV EDX,[EBP-0C] 015F:00C8F4BC 8910 MOV [EAX],EDX <--------- a noper 015F:00C8F4BE 83C604 ADD ESI,04 015F:00C8F4C1 8345D804 ADD DWORD PTR [EBP-28],04 015F:00C8F4C5 8B45DC MOV EAX,[EBP-24] 015F:00C8F4C8 03C6 ADD EAX,ESI 015F:00C8F4CA 8B00 MOV EAX,[EAX] 015F:00C8F4CC 85C0 TEST EAX,EAX 015F:00C8F4CE 0F85C9FEFFFF JNZ 00C8F39D 015F:00C8F4D4 8345E414 ADD DWORD PTR [EBP-1C],14 015F:00C8F4D8 8B45E4 MOV EAX,[EBP-1C] 015F:00C8F4DB 83C00C ADD EAX,0C 015F:00C8F4DE 8B00 MOV EAX,[EAX] 015F:00C8F4E0 85C0 TEST EAX,EAX 015F:00C8F4E2 0F855CFEFFFF JNZ 00C8F344 015F:00C8F4E8 33C0 XOR EAX,EAX 015F:00C8F4EA 5A POP EDX 015F:00C8F4EB 59 POP ECX 015F:00C8F4EC 59 POP ECX 015F:00C8F4ED 648910 MOV FS:[EAX],EDX En 00C8F4B2 et 00C8F4BC il ecrase la table et donc c'est ici qu'il faut intervenir pour noper ces 2 instructions. a 00C8F4B2 nop nop a 00C8F4BC nop nop Ensuite il faut trouver L'EIP. Enlever tout les BPs et en placer un en 00C8F4E8 (fin de traitement de l'import). Donc bpx 00C8F4E8 X Tracer le code (F10) jusque ici : 015F:00C8FC72 E8E130FFFF CALL 00C82D58 015F:00C8FC77 8B4508 MOV EAX,[EBP+08] 015F:00C8FC7A 8B10 MOV EDX,[EAX] 015F:00C8FC7C 8B4508 MOV EAX,[EBP+08] 015F:00C8FC7F 035018 ADD EDX,[EAX+18] 015F:00C8FC82 8B4508 MOV EAX,[EBP+08] 015F:00C8FC85 8B401C MOV EAX,[EAX+1C] 015F:00C8FC88 E84BF9FFFF CALL 00C8F5D8 <----------- F8 dans ce call 015F:00C8FC8D 5F POP EDI 015F:00C8FC8E 5E POP ESI 015F:00C8FC8F 5B POP EBX 015F:00C8FC90 59 POP ECX 015F:00C8FC91 59 POP ECX 015F:00C8FC92 5D POP EBP 015F:00C8FC93 C20400 RET 0004 F8 en 00C8FC88 On est maintenant la : 015F:00C8F5D8 89C4 MOV ESP,EAX 015F:00C8F5DA 89D0 MOV EAX,EDX 015F:00C8F5DC 8B1D2834C900 MOV EBX,[00C93428] 015F:00C8F5E2 89041C MOV [EBX+ESP],EAX 015F:00C8F5E5 61 POPAD 015F:00C8F5E6 50 PUSH EAX <------------ EIP 015F:00C8F5E7 C3 RET He le voila. Il reste plus qu'a boucler a 00C8F5E7 jmp 00C8F5E7 X Procdump, ATTENTION : Option 'Don't Rebuild Import' puisque on a laisse l'import telquel. Full Dump .. Il faut ensuite modifier l'exe sauve avec la bonne EIP (945E8 pou moi) et changer en Directory l'Import Table en RVA CD000. Normalement ca marche. J'espere avoir ete assez precis. Si vous avez des remarques : s.-v@caramail.com