VMP分析之VMP1.09虚拟化架构分析(二)
文章目录
- 示例代码
- VM完整流程分析
- VM解码循环
- 保存寄存器环境
- 压入EBP和偏移
- 执行函数
- 恢复寄存器环境
- 总结
示例代码
示例代码如下:
#include "stdafx.h"
#include <Windows.h>int Calc(int a,int b)
{return a + b;}int main(int argc, char* argv[])
{Calc(2,3);getchar();return 0;
}
同样用VMP1.09对程序进行加壳,只对两句代码进行VM处理。
这次的目的是为了分析虚拟机,选择最小保护。
VM完整流程分析
来到Calc函数当前堆栈值为+0的位置的返回地址,+4和+8的位置是Calc函数的参数
VM解码循环
接着VM开始部分的代码和之前分析过的一样,取指令流然后跳转到handler。
区别于VM最大保护的版本,最小保护的VM代码少了解密指令流的部分,解密Key中保存的就是真实的VM指令流。
保存寄存器环境
首先handler执行代码保存当前的寄存器环境,保存的寄存器环境和保存后的VM_Context如下:
当前堆栈
$ ==> > 00000000--->第二个密钥
$+4 > 0019FED0--->EDI
$+8 > 00401520--->ESI
$+C > 0019FED0--->EBP
$+10 > 0019FE7C--->ESP
$+14 > 00309000--->EBX
$+18 > 021E0FC0--->EDX
$+1C > 00000000--->ECX
$+20 > CCCCCCCC--->EAX
$+24 > 00000206--->EFlags
VM_Context
$ ==> >CCCCCCCC--->EAX
$+4 >00000206--->EFlags
$+8 >0019FED0--->EDI
$+C >00000000--->第二个密钥
$+10 >00000000--->ECX
$+14 >02210FC0--->EDX
$+18 >000B8FA5--->
$+1C >F609851D--->
$+20 >E654F2EE--->
$+24 >0019FED0--->EBP
$+28 >003CA000--->EBX
$+2C >00401520--->ESI
压入EBP和偏移
VM代码保存完了寄存器之后,就要开始执行程序原本的功能了
执行完三个handler之后,VM压入了三个值,分别是
$ ==> > 00000008
$+4 > 0019FED0
$+8 > 0000000C
其中8和C是偏移,而0019FED0是EBP的地址,再来看一下EBP的值
0019FED0 0019FF30
0019FED4 00401126 返回到 VMTest_v.main+26 来自 VMTest_v.0040100A
0019FED8 00000002
0019FEDC 00000003
EBP+8和+C的位置正好是被VM函数的两个参数,VM识图通过这种方式来取到参数,进行运算
执行函数
接着handler将参数一保存到VM_Context+0x20的位置
接着handler执行函数代码,将两个参数相加,结果保存在堆栈中
接着将计算结果保存在VM_Context+0x1C的位置。当前VM寄存器环境如下:
VM_Context
$ ==> >CCCCCCCC--->EAX
$+4 >00000206--->EFlags
$+8 >0019FED0--->EDI
$+C >00000000--->第二个密钥
$+10 >00000000--->ECX
$+14 >02210FC0--->EDX
$+18 >000B8FA5--->
$+1C >F609851D--->计算结果
$+20 >E654F2EE--->参数
$+24 >0019FED0--->EBP
$+28 >003CA000--->EBX
$+2C >00401520--->ESI
恢复寄存器环境
接着将VM_Context中的寄存器恢复到堆栈中,然后再从堆栈将数据恢复到寄存器
函数返回时,功能执行完成。至此,走完了整个VM的虚拟机流程
总结
VM代码流程总结如下:
- 保存寄存器环境到堆栈
- 将堆栈的寄存器环境保存到VM_Context
- 执行真正的函数代码
- 恢复VM_Context到堆栈
- 恢复寄存器
VMP分析之VMP1.09虚拟化架构分析(二)相关推荐
- 2022CTF培训(十三)虚拟化QEMU架构分析QEMU CVE示例分析
附件下载链接 虚拟化技术基本概念 硬件虚拟化 全虚拟化 提供可以完全模拟基础硬件的VME 可以在VM中运行任何能够在物理硬件上执行的软件,并且可以在每个单独的VM中运行基础硬件支持的任何OS 为每个V ...
- b2c项目基础架构分析(一)b2c 大型站点方案简述 已补充名词解释
b2c项目基础架构分析(一)b2c 大型站点方案简述 已补充名词解释 我最近一直在找适合将来用于公司大型bs,b2b b2c的基础架构. 实际情况是要建立一个bs架构b2b.b2c的网站,当然还包括w ...
- b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释
b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释 继续上篇,上篇里忘记了也很重要的前端部分,今天的网站基本上是以一个启示页,然后少量的整页切换,大量的浏览器后台调用web服务局部.动态更 ...
- NPU架构分析与应用
NPU架构分析与应用 参考文献链接 https://mp.weixin.qq.com/s/62P8zVF7rySLakZJEkd7VA https://mp.weixin.qq.com/s/hvzwC ...
- Deep Learning论文笔记之(六)Multi-Stage多级架构分析
Deep Learning论文笔记之(六)Multi-Stage多级架构分析 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些 ...
- VMP分析之VMP2.13插件化分析(四)
文章目录 Zeus插件 相关介绍 初始化Key并解密 加载操作码 解密操作码 取handler 解密handler 进入handler 保存堆栈 指令流解密Key VMP分析插件 相关介绍 VM分析插 ...
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】PowerPC + Linux2.6.25平台下的I2C驱动架构分析
PowerPC + Linux2.6.25平台下的I2C驱动架构分析 Sailor_forever sailing_9806#163.com (本原创文章发表于Sailor_forever 的个人b ...
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】PowerPC + Linux2.6.25平台下的SPI驱动架构分析
PowerPC + Linux2.6.25平台下的SPI驱动架构分析 Sailor_forever sailing_9806#163.com (本原创文章发表于Sailor_forever 的个人b ...
- Linux虚拟化KVM-Qemu分析(八)之virtio初探
目录 概述 1. 网卡 1.1 网卡工作原理 1.2 Linux网卡驱动 2. 网卡全虚拟化 2.1 全虚拟化方案 2.2 弊端 3. 网卡半虚拟化 3.1 virtio 3.2 半虚拟化方案 参考 ...
最新文章
- python爬虫超时重试_Python爬虫实例(三):错误重试,超时处理
- Mysql在离线安装时提示:error: Found option without preceding group in config file
- 第二天学习Java的笔记
- asp.net防类似DDOS攻击(CC攻击)代码
- 设计模式之模板方法模式实战解析
- php将get传参解析成数组,php解析url (parse_url) 参数成数组 (parse_str)
- centos7限制普通用户访问单一目录下的单一文件
- 兔子运送胡萝卜_我如何建立和运送第一个MVP
- 刚装的fedora16测试时出现莫名包
- phantom.js - HTML To PDF
- 调用webservice,解析返回数据为xml格式的字符串,进行数据绑定
- 鸿蒙系统和安装包,鸿蒙系统安装包
- 心电信号越界怎么回事_人体心电信号的特点
- 计算机网络工程教程,计算机网络工程实用教程ppt课件
- Scala中的Option
- 类人猿易语言云控系统开发 + 附加安卓模拟器中控+ 内存操控 系列课程
- CMD快捷指令之磁盘检查(管理员身份运行命令提示符)
- 【离散数学】数学归纳法
- Linux内核错误码和错误指针
- 【应用场景】智能定位胸牌帮你识别高质量月嫂
热门文章
- Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略
- BootStrap Table - JS事件绑定
- SQL Server 查找统计信息的采样时间与采样比例
- 如果在chrome的新标签中继续打开开发工具
- 多对多的属性对应表如何做按照类别的多属性匹配搜索
- Divide and conquer:K Best(POJ 3111)
- CentOs Linux 文件位置标记
- 生成Base58格式的UUID(Hibernate Base64格式的UUID续)
- 第七章 综合练习 第四题
- 解决2003不支持FLV的方法