参考:https://www.52pojie.cn/thread-586130-1-1.html
本文中的代码示例来源于vgk.sys(1.0.0.3),主要展示调试/简化vm代码的结果。
调试中的相关数据:
1,ida中静态ImageBase=0x140000000
2,WibDbg中动态ImageBase=0x2bf70d00000
从文件中抽出的某个函数的开头部分,代码出现的先后顺序就是其逻辑上的执行顺序。
第一个跳转地址(push rdi retn)计算,未去混淆的代码片段如下:
.stub0:00000001405BC2AD push 2B6CD1BFh
.stub0:00000001405BC2B2 call sub_1405bc2b2
.stub0:00000001405716F3 sub_1405bc2b2 proc near
.stub0:00000001405716F3 var_210 = dword ptr -210h ;局部变量
.stub0:00000001405716F3 arg_0 = qword ptr 8 ;入栈的参数
.stub0:00000001405716F3 push r9
.stub0:00000001405716F5 jmp loc_1404CCEC7
.stub0:00000001405716F5 sub_1405bc2b2 endp
.stub0:00000001404CCEC7 loc_1404CCEC7:
.stub0:00000001404CCEC7 push r11
.stub0:00000001404CCEC9 mov r9d, 70D45E67h
.stub0:00000001404CCECF movsxd r9, r11d
.stub0:00000001404CCED2 jmp loc_1404D640D
.stub0:00000001404D640D loc_1404D640D:
.stub0:00000001404D640D pushfq
.stub0:00000001404D640E push rbp
.stub0:00000001404D640F movsx r11, di
.stub0:00000001404D6413 movzx r11w, r10b
.stub0:00000001404D6418 movzx r11, r9w
.stub0:00000001404D641C push r14
.stub0:00000001404D641E push r13
.stub0:00000001404D6420 movsx r9, ax
.stub0:00000001404D6424 inc r11b
.stub0:00000001404D6427 push r12
.stub0:00000001404D6429 movsx r11d, r12w
.stub0:00000001404D642D push r15
.stub0:00000001404D642F push rbx
.stub0:00000001404D6430 mov r11b, sil
.stub0:00000001404D6433 push rdx
.stub0:00000001404D6434 movsx r9, r12w
.stub0:00000001404D6438 mov r9b, 4Fh ; 'O'
.stub0:00000001404D643B push rcx
.stub0:00000001404D643C not bl
.stub0:00000001404D643E movsx ecx, r8w
.stub0:00000001404D6442 push r8
.stub0:00000001404D6444 movzx cx, dil
.stub0:00000001404D6449 movsxd rbx, r15d
.stub0:00000001404D644C push rax
.stub0:00000001404D644D xchg r8b, r11b
.stub0:00000001404D6450 push rdi
.stub0:00000001404D6451 push r10
.stub0:00000001404D6453 push rsi
.stub0:00000001404D6454 mov r9, 0
.stub0:00000001404D645E movsxd rax, r11d
.stub0:00000001404D6461 movsx ecx, r11w
.stub0:00000001404D6465 mov esi, 520669DDh
.stub0:00000001404D646A push r9
.stub0:00000001404D646C lahf
.stub0:00000001404D646D cdqe
.stub0:00000001404D646F cwde
.stub0:00000001404D6470 mov rsi, [rsp+88h+arg_0]
.stub0:00000001404D6478 movsx r8, dx
.stub0:00000001404D647C cbw
.stub0:00000001404D647E bswap esi
.stub0:00000001404D6480 dec esi
.stub0:00000001404D6482 movsx bx, r10b
.stub0:00000001404D6487 neg esi
.stub0:00000001404D6489 sets r11b
.stub0:00000001404D648D cdqe
.stub0:00000001404D648F bswap di
.stub0:00000001404D6492 inc esi
.stub0:00000001404D6494 lea rsi, [rsi+r9]
.stub0:00000001404D6498 mov rax, 100000000h
.stub0:00000001404D64A2 and r11b, r14b
.stub0:00000001404D64A5 add rsi, rax
.stub0:0
VMProtect保护下的代码混淆分析与解密流程

本文详细分析了一个受到VMProtect保护的程序中的混淆代码,展示了从参数处理到跳转地址计算的过程。经过人工简化,揭示了代码的逻辑,包括从数据段解密逻辑和数据。通过三个阶段的分析,可以看出代码处理的连贯性和一致性。最终,文章指出handler5的主要任务是根据输入参数解密隐藏的逻辑和数据。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



