恶意样本分析手册-虚拟机检测篇(下)

在当今信息安全领域,特别是恶意软件分析中,经常需要利用到虚拟机技术,以提高病毒分析过程的安全性以及硬件资源的节约性,因此它在恶意软件领域中是应用越来越来广泛。这里我们所谓的虚拟机(Virtual Machine)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
 
 

虚拟机检测

一、VMWare

1.1查找注册表
通过检测注册表“HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\Logical Unit Id 0”,在数据项中查找目标数据VMWARE
HKEY_LOCAL_MACHINE_SYSTEM_ControlSet001\Services\VMware Pyhsical Disk Helper Service
 
1.2搜索特定程序
Vmtoolsd.exe

vmacthlp.exe

VMwareUser.exe

VMwareTray.exe

VMUpgradeHelper.exe

bool SearchTargetPro(WCHAR* strProName)

{

PROCESSENTRY32 pe32;

pe32.dwSize = sizeof(pe32);

HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hProcessSnap == INVALID_HANDLE_VALUE)

{

exit(1);

}

bool bMore = ::Process32First(hProcessSnap, &pe32);

while (bMore)

{

if (wcsstr(pe32.szExeFile, strProName))

{

return true;

bMore = false;

}

else

{

bMore = ::Process32Next(hProcessSnap, &pe32);

}

}

CloseHandle(hProcessSnap);

return bMore;

}
 
1.3通过执行特权指令
Vmware为真主机与虚拟机之间提供了相互沟通的通讯机制,它使用“IN”指令来读取特定端口的数据以进行两机通讯,但由于IN指令属于特权指令,在处于保护模式下的真机上执行此指令时,除非权限允许,否则将会触发类型为“EXCEPTION_PRIV_INSTRUCTION”的异常,而在虚拟机中并不会发生异常,在指定功能号0A(获取VMware版本)的情况下,它会在EBX中返回其版本号“VMXH”;而当功能号为0x14时,可用于获取VMware内存大小,当大于0时则说明处于虚拟机中。VMDetect正是利用前一种方法来检测VMware的存在,其检测代码分析如下:  
void IsInsideVMWare()

{

bool rc = true;

__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 = false;

}

if (rc == true)

{

cout << "In VMWare!" << endl;

}

else

{

cout << "Not In VMWare!" << endl;

}

}

void test6(void)

{

unsigned int    a = 0;

__try {

__asm {

// save register values on the stack

push eax

push ebx

push ecx

push edx

// perform fingerprint

mov eax, 'VMXh'

mov ecx, 14h

mov dx, 'VX'

in eax, dx

mov a, eax

pop edx

pop ecx

pop ebx

pop eax

}

}

__except (EXCEPTION_EXECUTE_HANDLER) {}

printf("\n[+] Test 6: VMware \"get memory size\" command\n");

if (a > 0)

printf("Result  : VMware detected\n\n");

else

printf("Result  : Native OS\n\n");

}
1.4查找特定的驱动模块
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值