彩票走势图

代码保护软件VMP逆向分析虚拟机指令:指令中包含了函数调用

转帖|使用教程|编辑:杨鹏连|2021-07-06 11:13:34.203|阅读 230 次

概述:​看了网上大神们写了好多的vmp 虚拟代码的分析 ,但是在对实在项目时,插件总是提示不对或者未知版本,一直对vm代码的还原有质疑,于是就萌发了具体分析这个vm代码是怎么回事,若有错误,欢迎指出,能力有限只能分析皮毛,只谈vm的代码。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果。

VMProtect通过在具有非标准体系结构的虚拟机上执行代码来保护代码,这将使分析和破解软件变得十分困难。除此之外,VMProtect还可以生成和验证序列号,限制免费升级等等。

下载VMProtect最新试用版

VMProtect正版授权在线订购享受最低价,仅售801元起!还不赶紧加入你的订购清单?>>更多详情可点击咨询购买

相关链接:

代码保护软件VMP逆向分析虚拟机指令:初步认识与环境搭建(一)

代码保护软件VMP逆向分析虚拟机指令:VMP代码的提取(二)

代码保护软件VMP逆向分析虚拟机指令详细分析(三)

代码保护软件VMP逆向分析虚拟机指令:分析那4条汇编被VM的VM指令

代码保护软件VMP逆向分析虚拟机指令:分析VMP的一些细节

七、附加 分析如果VM的指令中包含了函数调用

材料文件在vmptestcall2文件夹中,不知道为什么我这个vm后的exe总报毒,之前上面那个没报。追踪时一样是按Ctrl+F11记录,我们先看一下原来的汇编是什么样:

然后VMP3后我们下的trace断点:

经过trace 我们得到记录文件。我们接下来截取vm汇编简单分析
首先进入虚拟机:

0043D9C2    主    push 0x7EBD5487    ESP=0012FF88                    ; 进入虚拟机前兆 VM_Entry
0043D9C7    主    call vmptestc.0041258D    ESP=0012FF84
0041258D    主    push edi    ESP=0012FF80
0041258E    主    mov di,0x7063    EDI=00007063
00412592    主    pushfd    ESP=0012FF7C
00412593    主    push ebx    ESP=0012FF78
00412594    主    clc
00412595    主    neg bx    FL=CPS, EBX=7FFD9000
我们直接搜索puts字符串,得到所在位置如下:
00414248    主    jmp vmptestc.0047DE97
0047DE97    主    retn    ESP=0012FF84                             ; 退出虚拟机环境 进入函数调用内部
puts    主    push 0xC    ESP=0012FF80 -----------------------------------------------------------puts
75A68D06    主    push msvcrt.75A68E80    ESP=0012FF7C
75A68D0B    主    call msvcrt.759F9836    FL=0, EAX=0012FF70, ESP=0012FF54, EBP=0012FF80
75A68D10    主    or ebx,0xFFFFFFFF    FL=PS, EBX=FFFFFFFF
75A68D13    主    mov dword ptr ss:[ebp-0x1C],ebx
75A68D16    主    xor eax,eax    FL=PZ, EAX=00000000
而我们往上看,看出上面是退出虚拟机的代码,特征不要我多说了吧,很多pop,然后只有一个VM_Exit。在往下看看退出puts后紧跟着的是什么:
75A68E4E    主    mov dword ptr ss:[ebp-0x4],-0x2
75A68E55    主    call msvcrt.75A68E6D
75A68E5A    主    mov eax,dword ptr ss:[ebp-0x1C]
75A68E5D    主    call msvcrt.759F987B    ECX=75A68E62, EBX=7FFD7000, ESP=0012FF84, EBP=0012FF94, ESI=00000000, EDI=00000000
75A68E62    主    retn    ESP=0012FF88                        ; 退出puts
0042AB41    主    push 0x7EB991DF    ESP=0012FF84                 ; 重新进入虚拟机
0042AB46    主    call vmptestc.0041258D    ESP=0012FF80
0041258D    主    push edi    ESP=0012FF7C
0041258E    主    mov di,0x7063    EDI=00007063
00412592    主    pushfd    ESP=0012FF78
00412593    主    push ebx    ESP=0012FF74
00412594    主    clc
这里我们看到我们退出puts后,紧跟着并没有看到调用我们的EspArg1函数,而是又进入虚拟机,难道我们的EspArg1内部被VM了,然后我们继续往下分析,找下VM_Exit看看。我们直接搜索特征: 提示我们可以搜索popfd,当然仅限这里,为什么?
00461852    主    popfd    FL=PZ, ESP=0012FF7C
00461853    主    cmovne edi,esi
00461856    主    movsx edi,sp    EDI=FFFFFF7C
00461859    主    pop edi    ESP=0012FF80, EDI=00000000
0046185A    主    jmp vmptestc.004266A6
004266A6    主    retn    ESP=0012FF84                        ;退出虚拟机
00401008    主    mov dword ptr ss:[esp+0x4],vmptestc.00403018 ---------------------------EspArg1 function
00401010    主    retn    ESP=0012FF88
0045AAE7    主    push 0x7EB42BBF    ESP=0012FF84                 ;进入虚拟机
0045AAEC    主    call vmptestc.0041258D    ESP=0012FF80
0041258D    主    push edi    ESP=0012FF7C
0041258E    主    mov di,0x7063    EDI=00007063
嗯什么情况,我们看到退出虚拟机,然后下一条就是我们的EspArg1 function里面的内容("原画"),然后又进入虚拟机。
我们其实VM的就这3句:
push offset HelloWord
call crt_puts
call EspArg1
然后我们可以分析一下有多少次退出虚拟机的操作,我们可以搜索特征去分析,经过分析:
1.VM_Entery
............
2.VM_Exit
3.Call puts
4.VM_Entery
...........
5.VM_Exit
6.Call EspArg1
7.VM_Entery
...........
8.VM_Exit
我们主要分析的是被VM代码中存在调用函数时的问题,所以其他我们不多管,只管这个是怎么处理调用函数的,现在应该可以大致知道是什么调用的了吧。所以知道为什么有的代码被VM了,我们还能东扣西扣的了没。看到源码 call puts 与call EspArg1中间可是没有代码的 ,但还是要重新进入虚拟机。

如果您对该加密/解密软件感兴趣,欢迎加入vmpQQ交流群:740060302


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP