通过in指令反虚拟机

在一些样本中有一些反虚拟机的行为,来对抗分析,其中通过in指令就是
专门来对抗vmware虚拟机的,代码如下,恶意样本可以将恶意代码放入
异常中,也可以通过设置返回值进行判断

int IsInsideVMWare();

int main()
{

if(IsInsideVMWare()==5)
{
printf(“out”);
}else{
printf(“in”);
}
//printf(“sdfsdfsdf”);
return 0;
}

int IsInsideVMWare()
{
int rc = 1;

__try
{
__asm
{
push edx
push ecx
push ebx

  mov    eax, 'VMXh'
  mov    ebx, 0  // 将ebx设置为非幻数’VMXH’的其它值
  mov    ecx, 10 // 指定功能号,用于获取VMWare版本,当它为0x14时用于获取VMware内存大小
  mov    edx, 'VX' // 端口号
  in     eax, dx // 从端口dx读取VMware版本到eax
                 //若上面指定功能号为0x14时,可通过判断eax中的值是否大于0,若是则说明处于虚拟机中
  cmp    ebx, 'VMXh' // 判断ebx中是否包含VMware版本’VMXh’,若是则在虚拟机中
  setz   [rc] // 设置返回值

  pop    ebx
  pop    ecx
  pop    edx
}

}
__except(EXCEPTION_EXECUTE_HANDLER) //如果未处于VMware中,则触发此异常
{
rc = 5;

printf("sdfsdfsdfsdf");

}

return rc;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值