Ausführbares Bodykit. Teil 2

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

, -. :





  1. ;





  2. ;





, , .





:





, 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; .








All Articles