Le deuxième article d'une petite série sur la protection permet de masquer l'algorithme d'une application. Dans le dernier article, nous avons couvert les principales parties de la protection et mis en place une application test. Ici, nous allons nous familiariser avec la structure des gestionnaires de commandes et essayer de déboguer et de décoder le fichier exécutable.
Description des travaux de VMProtect
, -. :
;
;
, , .
:
, 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; .