Protection |
Cryption er Anti-XXX |
Les Protections Renforcées |
||
Outils |
SoftIce ProcDump | |||
Cible |
DCeSS |
By Pulsar & Christal |
Bye Bye Peshield....
Le combat
(toute ressemblance avec des personnes ayant existés, ou existantes, ou qui existeront ne serait pas tout à fait le fruit du hasard!)
A ma droite, tout dans les muscles, rien dans la tête: Le Titandestuts dit Goliath
A ma gauche, le challenger, Davidroidelasm, champion du Ring0!
Le combat opposera les deux adversaires en 4 rounds, suivant les règles du marquis de Qwennsburry
Et c'est Titandestuts qui engage le combat:
|
A l'initiative de Cmos, qui proposait un petit programme de 30 ko tout mouillé,
DeCSS, mais protégé par PESHIELD version 0.2 d'ANAKIN [Da Vinci], j'ai voulu attaquer le programme
à la loyale: PESHiELD RVA: 00001000 Offset: 00000400 Size: 00005600 Flags: C0000040 PESHiELD RVA: 0001D000 Offset: 00005A00 Size: 00000800 Flags: C0000040 ANAKIN98 RVA: 0003B000 Offset: 00006200 Size: 00001400 Flags: C0000040 Puis je suis reparti à la charge, toujours avec SoftIce. :0043B000 60 PUSHAD à remplacer par CC :0043B001 E800000000 CALL 0043B006 :0043B006 41 INC ECX :0043B007 4E DEC ESI :0043B008 41 INC ECX :0043B009 4B DEC EBX :0043B00A 49 DEC ECX :0043B00B 4E DEC ESI :0043B00C 5D POP EBP :0043B00D 83ED06 SUB EBP,06 :0043B010 EB02 JMP 0043B014 Maintenant, on peut prendre la main, sans être em... poisonné par le Checksum qui ne porte que sur les modifications du Pe header. |
La réplique de Davidroidelasm,
|
Ces modifications sont dans le header de l'exe qui commence en 400000 (pour plus
d'infos documentez-vous la dessus) :0043B400 AD LODSD > là! :0043B401 03D0 ADD EDX,EAX :0043B403 EB01 JMP 0043B406 :0043B405 68AD03D0EB PUSH EBD003AD :0043B40A 01C8 ADD EAX,ECX on fait d edi et on doit trouver le nom de la première section... :d edi 0003B000 00 29 47 3E 89 76 F8 B8-9E 07 BA 27 17 89 56 FE .)G>.v.....'..V. 0003B010 89 46 FC 8B F0 EB 1B 26-8B 04 2B DB 8E C0 26 39 .F.....&..+...&9 0003B020 1E 00 00 74 18 8E 46 FE-26 8B 04 2B C9 8B F1 89 ...t..F.&..+.... Bon on est bien la! 0043B41D EB02 JMP 0043B421 0043B41F C78B03D0C1C202EB01C7 MOV DWORD PTR [EBX+C2C1D003],C701EB02 0043B429 49 DEC ECX 0043B42A 75D1 JNZ 0043B3FD 0043B42C EB01 JMP 0043B42F 0043B42E CA3B95 RETF 953B 0043B431 6D INSD > hep, un coup d'œil ici! On met un bpx sur le jmp ,on enlève le bpr précèdent, et on
lance... 0043B429 49 DEC ECX 0043B42A 75D1 JNZ 0043B3FD 0043B42C EB01 JMP 0043B42F 0043B42E CA3B95 RETF 953B 0043B42F 3B956D110000 CMP EDX,[EBP+0000116D] le code a changé! 0043B435 EB01 JMP 0043B438 0043B437 C80F855D ENTER 850F,5D 0043B43B 0200 ADD AL,[EAX] et deux F10 plus tard: 0043B437 C80F855D ENTER 850F,5D 0043B438 0F855D020000 JNZ 0043B69B (NO JUMP si PE Header intègre) 0043B43E 8B85C9110000 MOV EAX,[EBP+000011C9] 0043B444 EB03 JMP 0043B449 Checksum pas Glop :d edx 013F:00845904 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? 013F:00845914 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? 013F:00845924 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? On met un bpm X sur l'offset de cette instruction, on ferme le prog, et on enlève
les modifs des sections :d edx 013F:0084610D ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? 013F:0084611D ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? 013F:0084612D ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? C'est pas nécessaire de faire ça mais je vous montre un peu les protections que Peshield utilise, comme ca.... |
Titandestuts contre attaque,
|
ANAKIN est un Reverser, et comme beaucoup d'entre eux, sa logique est d'abord d'expliquer
comment casser une protection, pas de garder pour soit les contre-mesures qu'il a pu "inventer"...
ANTIPDD.ASM - example program against PROCDUMP FULL DUMP
(C) Copyright 1998 by ANAKiN [DaVinci]
fire_up_the_anti_procdump_full_dump_wall:
MOV EAX, fs:[30h]
TEST EAX, EAX
JS fuapfdw_is9x ; detected Win 9x
fuapfdw_isNT:
MOV EAX, [EAX+0Ch]
MOV EAX, [EAX+0Ch]
ADD DWORD PTR [EAX+20h], 2000h ; increase size variable
JMP fuapfdw_finished
fuapfdw_is9x:
PUSH 0
CALL GetModuleHandleA
TEST EDX, EDX
JNS fuapfdw_finished ; Most probably incompatible!!!
CMP DWORD PTR [EDX+8], -1
JNE fuapfdw_finished ; Most probably incompatible!!!
MOV EDX, [EDX+4] ; get address of internaly used
; PE header
ADD DWORD PTR [EDX+50h], 2000h ; increase size variable
fuapfdw_finished:
; return it
ret
Main:
cinit ; init the console
CALL fire_up_the_anti_procdump_full_dump_wall; :) ;)
cwrites <trytodump>
cread <test> <1>
push 0 ; Exit to win
CALL ExitProcess
end Main
|
Mais se fait immédiatement contre attaquer,
|
Pour virer les trucs anti-procdump, on met un bmp fs:30 R et on lance jusqu'à ce qu'il breake puis on trace un peu pour tomber sur js xxxxxx 0043B47A C0EB01 SHR BL,01 0043B47D C77818EB01688B MOV DWORD PTR [EAX+18],8B6801EB 0043B47E 7818 JS 0043B498 (JUMP) 0043B480 EB01 JMP 0043B483 0043B482 688B400CEB PUSH EB0C408B Là, il devrait sauter...(suivant les versions de Win je pense). S'il saute pas quand il essaiera de modifier un truc, faites lui sauter l'instruction, pour arriver sur du code comme suit mov eax,[ebp+xxxxx] cmp [eax+08],edi :0043B498 EB02 JMP 0043B49C :0043B49A 0FFF8B INVALID :0043B49C 8B8561110000 MOV EAX,[EBP+00001161] :0043B4A2 397808 CMP [EAX+08],EDI :0043B4A5 EB03 JMP 0043B4AA :0043B4A7 2BD2 SUB EDX,EDX mov eax,[eax+4] :0043B4A9 E975108B40 JMP 40CEC523 :0043B4AC 8B4004 MOV EAX,[EAX+04] :0043B4AF EB01 JMP 0043B4B2 :0043B4B1 EA895850EB03CD JMP CD03:EB505889 :0043B4B8 20048B AND [ECX*4+EBX],AL mov [eax+50],ebx <- c'est la le code anti-procdump :0043B4A9 E975108B40 JMP 40CEC523 :0043B4AE 04EB ADD AL,EB :0043B4B0 01EA ADD EDX,EBP :0043B4B2 895850 MOV [EAX+50],EBX :0043B4B5 EB03 JMP 0043B4BA :0043B4B7 CD20 INT 20 VXDJmp EBC8,0B04 et on saute cette instruction par un r eip next_instruction ... |
Titandestuts essaye de prendre l'initiative par une attaque vicieuse pour contrer l'anti Sice:
|
"Numega SoftICE detected, execution stoppped." KERNEL32!CreateFileA :BFF77817 57 PUSH EDI :BFF77818 6827010000 PUSH 00000127 :BFF7781D 2BD2 SUB EDX,EDX :BFF7781F 687FDFF9BF PUSH BFF9DF7F :BFF77824 64FF32 PUSH DWORD PTR FS:[EDX] :BFF77827 648922 MOV FS:[EDX],ESP :BFF7782A 8B7C2414 MOV EDI,[ESP+14] :BFF7782E 2BC0 SUB EAX,EAX :BFF77830 8D48FF LEA ECX,[EAX-01] :BFF77833 F2AE REPNZ SCASB :BFF77835 8B4C2420 MOV ECX,[ESP+20] :BFF77839 E305 JECXZ BFF77840 :BFF7783B 8A01 MOV AL,[ECX] :BFF7783D 8A410B MOV AL,[ECX+0B] :BFF77840 648F02 POP DWORD PTR FS:[EDX] :BFF77843 83C408 ADD ESP,08 :BFF77846 5F POP EDI :BFF77847 E9C7570000 JMP BFF7D013 -> ici POP! 43B7C7 E815050000 CALL 0043BCE1 > vers CreateFileA 43B7CC EB01 JMP 0043B7CF 43B7CE C783F8FFEB01EA0F85EEMOV DWORD PTR [EBX+01EBFFF8],EE850FEA 43B7CF 83F8FF CMP EAX,-01 > si EAX <> de -1 Sice présent 43B7D2 EB01 JMP 0043B7D5 43B7D4 EA0F85EEFEFFFF JMP FFFF:FEEE850F 43B7DB EB01 JMP 0043B7DE 43B7DD E280 LOOP 0043B75F Et le code Changeant d'Apparence, en traçant deux lignes de plus: 43B7C7 E815050000 CALL 0043BCE1 43B7CC EB01 JMP 0043B7CF 43B7CE C783F8FFEB01EA0F85EEMOV DWORD PTR [EBX+01EBFFF8],EE850FEA 43B7D5 0F85EEFEFFFF JNZ 0043B6C9 (JUMP) > Sice présent! 43B7DB EB01 JMP 0043B7DE 43B7DD E280 LOOP 0043B75F 43B7DF BD3D110000 MOV EBP,0000113D 43B7E4 01EB ADD EBX,EBP 43B7E6 01C8 ADD EAX,ECX
|
Eclats de rire de Davidroidelasm,
|
Arf! KERNEL32!CreateFileA :BFF77ADF 57 PUSH EDI :BFF77AE0 6827010000 PUSH 00000127 :BFF77AE5 2BD2 SUB EDX,EDX :BFF77AE7 681F19FABF PUSH BFFA191F :BFF77AEC 64FF32 PUSH DWORD PTR FS:[EDX] :BFF77AEF 648922 MOV FS:[EDX],ESP :BFF77AF2 8B7C2414 MOV EDI,[ESP+14] :BFF77AF6 2BC0 SUB EAX,EAX :BFF77AF8 8D48FF LEA ECX,[EAX-01] :BFF77AFB F2AE REPNZ SCASB :BFF77AFD 8B4C2420 MOV ECX,[ESP+20] :BFF77B01 E305 JECXZ BFF77B08 :BFF77B03 8A01 MOV AL,[ECX] :BFF77B05 8A410B MOV AL,[ECX+0B] :BFF77B08 648F02 POP DWORD PTR FS:[EDX] :BFF77B0B 83C408 ADD ESP,08 :BFF77B0E 5F POP EDI :BFF77B0F E904790000 JMP BFF7F418 <- ici on pose notre bpm x Voilà pour le test anti-sice: 0043B5C3 83F8FF CMP EAX,-01 > TRW présent 0043B5C6 EB01 JMP 0043B5C9 0043B5C8 EA0F85E3000000 JMP 0000:00E3850F 0043B5CF 8D8585100000 LEA EAX,[EBP+00001085] F10 0043B5B3 858D110000EB TEST [EBP+EB000011],ECX 0043B5B9 01EA ADD EDX,EBP 0043B5BB E821070000 CALL 0043BCE1 0043B5C0 EB01 JMP 0043B5C3 0043B5C2 C783F8FFEB01EA0F85E3MOV DWORD PTR [EBX+01EBFFF8],E3850FEA 0043B5C9 0F85E3000000 JNZ 0043B6B2 NON -> (NO JUMP) 0043B5CF 8D8585100000 LEA EAX,[EBP+00001085] Puis on passe au même test pour Sice, avec les mêmes manips... _VWIN32_CopyMem 0028:C0297E81 56 PUSH ESI 0028:C0297E82 57 PUSH EDI 0028:C0297E83 8B74240C MOV ESI,[ESP+0C] 0028:C0297E87 8B7C2410 MOV EDI,[ESP+10] 0028:C0297E8B 8B4C2414 MOV ECX,[ESP+14] 0028:C0297E8F 8BD1 MOV EDX,ECX 0028:C0297E91 33C0 XOR EAX,EAX 0028:C0297E93 F3A4 REPZ MOVSB > ICI 0028:C0297E95 40 INC EAX 0028:C0297E96 2BD1 SUB EDX,ECX 0028:C0297E98 8B742418 MOV ESI,[ESP+18] 0028:C0297E9C 0BF6 OR ESI,ESI On fait d edi et on voit le header de notre exe: 0078FC1C 4D 5A 00 00 01 00 00 00-02 00 00 00 03 00 00 00 MZ.............. 0078FC2C 04 00 00 00 05 00 00 00-06 00 00 00 07 00 00 00 ................ 0078FC3C 08 00 00 00 09 00 00 00-0A 00 00 00 0B 00 00 00 ................ 0078FC4C 0C 00 00 00 0D 00 00 00-0E 00 00 00 DF D8 FF FF ................ 0078FC5C 01 00 00 00 02 00 00 00-03 00 00 00 04 00 00 00 ................
00000000 00 01 00 00 00 DE 70 00-16 00 0B 00 00 00 70 00 ......p.......p. 00000010 65 04 70 00 54 FF 00 F0-79 EA 00 F0 21 EA 00 F0 e.p.T...y...!... 00000020 00 00 00 C8 D2 08 B3 0A-3A 00 D7 09 52 00 D7 09 ........:...R... 00000030 6A 00 D7 09 82 00 D7 09-9A 00 D7 09 65 04 70 00 j...........e.p. 00000040 07 00 70 C8 4D F8 00 F0-41 F8 00 F0 E2 24 60 FD ..p.M...A....$`. On fait r esi edi, et comme ca il copiera le header sur lui-même. |
Titandestuts tente une diversion,
|
En traçant les CCA depuis l'Entry Point... :0043B653 FF95A5100000 CALL [EBP+000010A5] POP! :0043B659 8B859D110000 MOV EAX,[EBP+0000119D] :0043B65F E97D060000 JMP 0043BCE1 :0043B664 8B85E0110000 MOV EAX,[EBP+000011E0] :0043B66A E972060000 JMP 0043BCE1 :0043B66F 8B85E4110000 MOV EAX,[EBP+000011E4] Juste après le CALL [EBP+000010A5], l'écran de FrogIce surgit. :0043BC00 EB02 JMP 0043BC04 :0043BC02 EA046A3053EB02 JMP 02EB:53306A04 :0043BC09 EA04506A0052EB JMP EB52:006A5004 :0043BC10 01E9 ADD ECX,EBP :0043BC12 FFE1 JMP ECX Pas GLOP! :0043BC14 56 PUSH ESI Le JMP ECX va envoyer la message box "SoftIce detected" et filer en Exitprocess... :0041DC47 FF9529704000 CALL [EBP+00407029] :0041DC4D 8D9D61724000 LEA EBX,[EBP+00407261] :0041DC53 6A30 PUSH 30 :0041DC55 6A00 PUSH 00 :0041DC57 53 PUSH EBX :0041DC58 6A00 PUSH 00 :0041DC5A FFD0 CALL EAX message d'erreur si Win 95 :0041DC5C FFA52D704000 JMP [EBP+0040702D] et ExitProcess :0041DC62 61 POPAD haha! :0041DC63 9D POPFD :0041DC64 68DA3B4000 PUSH 00403BDA Hoho! :0041DC69 C3 RET Bingo! :0041DC6A 8BB592724000 MOV ESI,[EBP+00407292] :0041DC70 0BF6 OR ESI,ESI :0041DC72 7418 JZ 0041DC8C :0041DC74 8B95DF6F4000 MOV EDX,[EBP+00406FDF] Mais za ressemble tout à fait à ze que je cherche ze Push 00403BDA! |
Mais Davidroidelasm esquive sans problème, et lance un coup terrible,
|
Il doit y avoir une méthode moins barbare pour trouver l'entry point que
tracer dans ce putain de CCA (overlapping pour les puristes), mais c'est lourd... :00403BDA 55 PUSH EBP <- ca vous parait pas évident
que c'est l'entry point ????
:00403BDB 8BEC MOV EBP,ESP
:00403BDD 6AFF PUSH FF
:00403BDF 6850814000 PUSH 00408150
:00403BE4 6854524000 PUSH 00405254
:00403BE9 64A100000000 MOV EAX,FS:[00000000]
:00403BEF 50 PUSH EAX
:00403BF0 64892500000000 MOV FS:[00000000],ESP
:00403BF7 83EC58 SUB ESP,58
:00403BFA 53 PUSH EBX
:00403BFB 56 PUSH ESI
:00403BFC 57 PUSH EDI
:00403BFD 8965E8 MOV [EBP-18],ESP
:00403C00 FF1594804000 CALL [KERNEL32!GetVersion]
:00403C06 33D2 XOR EDX,EDX
:00403C08 8AD4 MOV DL,AH
:00403C0A 891578B54100 MOV [0041B578],EDX
:00403C10 8BC8 MOV ECX,EAX
:00403C12 81E1FF000000 AND ECX,000000FF
:00403C18 890D74B54100 MOV [0041B574],ECX
:00403C1E C1E108 SHL ECX,08
:00403C21 03CA ADD ECX,EDX
:00403C23 890D70B54100 MOV [0041B570],ECX
:00403C29 C1E810 SHR EAX,10
:00403C2C A36CB54100 MOV [0041B56C],EAX
:00403C31 33F6 XOR ESI,ESI
:00403C33 56 PUSH ESI
:00403C34 E8E6140000 CALL 0040511F
:00403C39 59 POP ECX
:00403C3A 85C0 TEST EAX,EAX
:00403C3C 7508 JNZ 00403C46
:00403C3E 6A1C PUSH 1C
:00403C40 E8B0000000 CALL 00403CF5
:00403C45 59 POP ECX
:00403C46 8975FC MOV [EBP-04],ESI
:00403C49 E826130000 CALL 00404F74
:00403C4E FF15C0804000 CALL [KERNEL32!GetCommandLineA]
:00403C54 A384CA4100 MOV [0041CA84],EAX
:00403C59 E8E4110000 CALL 00404E42
:00403C5E A348B54100 MOV [0041B548],EAX
:00403C63 E88D0F0000 CALL 00404BF5
:00403C68 E8CF0E0000 CALL 00404B3C
:00403C6D E8EC0B0000 CALL 0040485E
:00403C72 8975D0 MOV [EBP-30],ESI
:00403C75 8D45A4 LEA EAX,[EBP-5C]
:00403C78 50 PUSH EAX
:00403C79 FF15BC804000 CALL [KERNEL32!GetStartupInfoA]
:00403C7F E8600E0000 CALL 00404AE4
:00403C84 89459C MOV [EBP-64],EAX
:00403C87 F645D001 TEST BYTE PTR [EBP-30],01
:00403C8B 7406 JZ 00403C93
:00403C8D 0FB745D4 MOVZX EAX,WORD PTR [EBP-2C]
:00403C91 EB03 JMP 00403C96
:00403C93 6A0A PUSH 0A
:00403C95 58 POP EAX
:00403C96 50 PUSH EAX
:00403C97 FF759C PUSH DWORD PTR [EBP-64]
:00403C9A 56 PUSH ESI
:00403C9B 56 PUSH ESI
:00403C9C FF15B8804000 CALL [KERNEL32!GetModuleHandleA]
:00403CA2 50 PUSH EAX
:00403CA3 E838E7FFFF CALL 004023E0
|
Coup fatal!
Titandestuts vacille, et s'écrase!
Davidroidelasm vainqueur par KO!
J'espère que vous aurez appris un ou deux trucs dans ce ptit manuel pour pe-shield...
Si vous voulez des précisions sur pourquoi le mov [eax+50],ebx est un anti-procdump, etc... mailez moi je vous répondrais....
Pulsar (David)
Christal (Goliath)
Janvier 2000
Greetz to:
Christal,Alsindor,Frog's Print,Spath,Acid_Burn,Stone,G-ROM,Elraizer,DXP,Fravia,ShroOm,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 partager :))
pulsar_c@geocities.com UIN:13411849