kein problem
alte version:
auf virtual protect nen breakpoint setzen, d.h. es wird angehalten wenn das prog versuch den speicher freizumachen im bereich 0x00400000 wo normal die exe liegt, jetzt wird die exe entschlüsselt und dann an den speicher geschrieben
deshalb macht man einen hardware
access breakpoint auf die adresse (0x00400000) dann bekommt man die assembler instrucion
die dort den speicher hinschreibt
das ist ein REP MOVS der 2 "parameter" hat EDI und ESI
in EDI steht die stelle wos hingeschrieben wird (0x00400000) in ESI wovon es geschrieb wird und da ist die exe ganz enschlüsselt drin die kann man dann einfach dumpen und starten
neuste version:
debugger detection:
Code:
0040BE46 |. 50 PUSH EAX
0040BE47 |. 64:8B05 300000>MOV EAX,DWORD PTR FS:[30]
0040BE4E 8B40 02 MOV EAX,DWORD PTR DS:[EAX+2]
0040BE51 8805 48D74000 MOV BYTE PTR DS:[40D748],AL
einfach MOV EAX, ...[eax+2] noppen
kernel32.IsDebuggerPresent:
Code:
7C812E03 > 64:A1 18000000 MOV EAX,DWORD PTR FS:[18]
7C812E09 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30]
7C812E0C 0FB640 02 MOVZX EAX,BYTE PTR DS:[EAX+2]
7C812E10 C3 RETN
____
alternativ kommt man an die adresse wenn man
zu 7ffdf000 geht (wenn nicht vorhanden zu 7ffde000)
dann die adresse bei 7ffdf030 bzw 7ffde030 schaut
und dann an diese adresse geht
z.b. 7ffdc000 <- das 3. byte, also 7ffdc003 ist bei nem debugger dann ne 1 oder wenn nix aktiv ist ne 0
only NT
exception(3 an der zahl):
Code:
0040BE9E /$ 31C0 XOR EAX,EAX // setzen
0040BEA0 |. 64:FF30 PUSH DWORD PTR FS:[EAX] //
exception handler pushen
0040BEA3 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
0040BEA6 |. 8160 18 550100>AND DWORD PTR DS:[EAX+18],155 //
exception hier
0040BEAD |. 64:8F05 000000>POP DWORD PTR FS:[0]
einfach das AND noppen