Der zweite Artikel in einer kleinen Reihe zum Thema Schutz, mit dem der Algorithmus einer Anwendung ausgeblendet wird. Im letzten Artikel haben wir die Hauptteile des Schutzes behandelt und eine Testanwendung zusammengestellt. Hier werden wir uns mit der Struktur der Befehlshandler vertraut machen und versuchen, die ausführbare Datei zu debuggen und zu dekodieren.
Beschreibung der VMProtect-Arbeit
, -. :
;
;
, , .
:
, VMP . , .
, , VMP . .
pusha ;
push 0 ;
mov esi, [esp+x+var] ; esi = VM , x var
mov ebp, esp ; VMProtect , ebp = VM "stack"
sub esp, 0C0h
mov edi, esp ; edi = ,
:
add esi, [ebp+0]
:
mov al, [esi]; EIP
movzx eax, al
sub esi, -1; EIP
jmp ds:VMHandlers[eax*4] ;
, :
, , :
, , .
VM
x64dbg, Windows ( WinDBG). , , . :
, . , , main_loop. , :
main loop. , , ESI. EIP AX . . , , . , , breakpoint, . .
, :
"breakpoints" :
, "Log Text" . , : { : }
. eax
$breakpointcounter
.
Command Text
. , .
:
, — 669. , , . . notepad++ :
: ^(.*?)$\s+?^(?=.*^\1$)
53 . , .
, . , main loop. ? .
, :
import pefile
#
pe = pefile.PE(filePath)
#
image = pe.get_memory_mapped_image()
#
baseOffset = 0xB400
# 255
handlers = []
for i in range(255):
offset+=4
handlers.append(image[offset])
#
for h in handlers:
md = Cs(CS_ARCH_X86, CS_MODE_32)
for i in md.disasm(h, 0x1000):
print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str))
:
— .
"Reverse-Engineering. Basic".
« . 2»: type confusion; .