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

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

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

相关链接:

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

二、VM代码的提取

承接上文,我们写了个例子,然后用vmp3.3.1加壳程序把那4句汇编代码给VM了,那么VM的代码是哪里到哪里,我们用OD的run trace去跟踪提取。操作如下:

1.首先下2个断点 在准备进入VM代码和退出VM代码执行未VM代码位置下断点

代码保护软件VMP逆向分析虚拟机指令:VMP代码的提取 od view(查看)菜单里面有 run trace 我们 点击进去 然后右键记录到文件 方便我们后面好静态分析
如果你的run trace记录的文件没有汇编 参数等 请百度设置一下trace选项

2.然后我们按F9到达我们第一个断点 在按快捷键Ctrl+F11 跟踪步入 然后到我们的第二个断点,这个时候 我们查看我们run trace查看追踪出的信息 然后右键关闭记录文件 下图是记录的跟踪信息

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

然后看看保存的跟踪文件大概是这个样子 我有处理过

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

那么到现在我们就把vm后的代码给扒下来了 之后我们只要好好分析这个文件就OK了

下面我们先搜索一下我们之前vm的汇编中的常量 我们先搜索第一个 1111 为什么是00001111就不多解释了
0041DB98 Main     BSWAP ECX                                    ; ECX=000011110041DB9A Main     RCR AH,CL0041DB9C Main     OR EAX,EBP                                   ; EAX=0041DBFF0041DB9E Main     NEG AX                                       ; EAX=004124010041DBA1 Main     XOR EBX,ECX                                  ; EBX=0046B5880041DBA3 Main     BSR EAX,ESP                                  ; EAX=000000140041DBA6 Main     SUB EDI,4                                    ; EDI=0012FF880041DBAC Main     LAHF                                         ; EAX=000006140041DBAD Main     MOV DWORD PTR DS:[EDI],ECX

我们去一下混淆

0041DB98 Main     BSWAP ECX                                    ; ECX=000011110041DBA6 Main     SUB EDI,4                                    ; EDI=0012FF880041DBAD Main     MOV DWORD PTR DS:[EDI],ECX

就这3句有用的 得到00001111 怎么来的我们先不深究 EDI-=4 然后在向 [EDI]=ECX 这个像不像是压栈的操作,栈的增长方向是向下的是吧 栈顶减小就是压栈 (思考一下 那有没有栈顶减小的是出栈呢)。回到上文(一、认识与环境搭建)中我们说了ebp是代表栈,EDI是跳转基址(JumpBase),怎么现在又说这个EDI是代表栈了。莫急我们在往下看看

0041DBBF Main     MOV EAX,DWORD PTR DS:[ESI]                ; EAX=1AB34C770041DBC1 Main     CMP EDX,EDX0041DBC3 Main     XOR EAX,EBX                               ; EAX=1AF5F9FF0041DBC5 Main     JMP vmptest_.0046A2FF0046A2FF Main     BSWAP EAX                                 ; EAX=FFF9F51A0046A301 Main     JMP vmptest_.00476E9500476E95 Main     DEC EAX                                   ; EAX=FFF9F51900476E96 Main     NOT EAX                                   ; EAX=00060AE600476E98 Main     JMP vmptest_.0044E8620044E862 Main     DEC EAX                                   ; EAX=00060AE50044E863 Main     XOR EBX,EAX                               ; EBX=0040BF6D0044E865 Main     JMP vmptest_.0041F3160041F316 Main     ADD EBP,EAX                               ; EBP=0047E65C0041F318 Main     JMP vmptest_.00472E4100472E41 Main     LEA EDX,DWORD PTR SS:[ESP+60]             ; EDX=0012FF0000472E45 Main     TEST DH,AL00472E47 Main     CLC00472E48 Main     CMP EDI,EDX00472E4A Main     JMP vmptest_.0046EE860046EE86 Main     JA vmptest_.00480A0500480A05 Main     JMP EBP

很乱我们去混淆一下

0041DBBF Main     MOV EAX,DWORD PTR DS:[ESI]                ; EAX=1AB34C770041DBC3 Main     XOR EAX,EBX0046A2FF Main     BSWAP EAX                                 ; EAX=FFF9F51A00476E95 Main     DEC EAX                                   ; EAX=FFF9F51900476E96 Main     NOT EAX                                   ; EAX=00060AE60044E862 Main     DEC EAX                                   ; EAX=00060AE50041F316 Main     ADD EBP,EAX                               ; EBP=0047E65C00472E41 Main     LEA EDX,DWORD PTR SS:[ESP+60]             ; EDX=0012FF0000472E48 Main     CMP EDI,EDX0046EE86 Main     JA vmptest_.00480A0500480A05 Main     JMP EBP
.vmp30:00430A1F 8B EC         mov     ebp, esp              ; ebp 为压环境后esp的值.vmp30:00430A21 81 EC C0 00+  sub     esp, 0C0h             ; esp下移 0xC0

然后我们之前说了 edi是栈, 因为上面那个语句是edi-=4 然后把00001111赋值给这个EDI指向的地址(其实这里我们截取了VM_PushImm32指令分析的) 是吧, 然后edi就是栈 然后edi这里又与这个esp + 0x60比教, 这里的结果是大于的结果(因为是追踪出来的所以只有一个分支)我们结合这3个块 分析出一个图

代码保护软件VMP逆向分析虚拟机指令:VMP代码的提取 那么这个图到底正确不正确或者完善了没呢到目前我们分析的我觉得应该是没问题的,目前只是我们的初略分析。

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

标签:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年5月13日
下一篇 2021年5月13日

相关推荐

发表回复

登录后才能评论