Kit de carrocería ejecutable. Parte 2

El segundo artículo de una pequeña serie sobre protección utilizado para ocultar el algoritmo de una aplicación. En el último artículo, cubrimos las partes principales de la protección y armamos una aplicación de prueba. Aquí nos familiarizaremos con la estructura de los controladores de comandos e intentaremos depurar y decodificar el archivo ejecutable.





Descripción del trabajo VMProtect

, -. :





  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