アプリケーションのアルゴリズムを隠すために使用される保護に関する小さなシリーズの2番目の記事。では前回の記事、私たちは、保護の主要部分をカバーし、一緒にテストアプリケーションを置きます。ここでは、コマンドハンドラーの構造を理解し、実行可能ファイルのデバッグとデコードを試みます。
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; .