(VMProtect 分析)跟着ida和WinDbg逛VirtualMachine

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

参考: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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值