首页
社区
课程
招聘
[原创]纯R3超强检测虚拟机 秒杀99%虚拟机隐藏
发表于: 2019-6-10 15:34 8448

[原创]纯R3超强检测虚拟机 秒杀99%虚拟机隐藏

2019-6-10 15:34
8448
#include <iostream>
#include <vector>
using namespace std;
typedef struct __MemRleace
{
	byte souce[256];
	int in_len;
	byte out[256];
	int out_len;


}MemRplace;



//提权
bool EnableDebugPrivilege()
{
	HANDLE hToken;
	LUID sedebugnameValue;
	TOKEN_PRIVILEGES tkp;
	if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
	{
		return   FALSE;
	}
	if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue))
	{
		CloseHandle(hToken);
		return false;
	}
	tkp.PrivilegeCount = 1;
	tkp.Privileges[0].Luid = sedebugnameValue;
	tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
	if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL))
	{
		CloseHandle(hToken);
		return false;
	}
	return true;
}

#include <tlhelp32.h>
DWORD  FindProcessByName(char* Name)
{
	PROCESSENTRY32 PP;
	PP.dwSize = sizeof(PROCESSENTRY32);
	HANDLE H_p = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (H_p == INVALID_HANDLE_VALUE)
	{
		return 0;
		//	 printf("erro");
	}
	BOOL ret = ::Process32First(H_p, &PP);
	while (ret)
	{
		if (strnicmp(Name, PP.szExeFile, strlen(Name)) == NULL)
		{
			::CloseHandle(H_p);
			return PP.th32ProcessID;
		}
		ret = Process32Next(H_p, &PP);
	}

	::CloseHandle(H_p);
	return 0;
}
void FindMemory(DWORD pid, vector<MemRplace>& src)
{
	int findcount =0;
	MEMORY_BASIC_INFORMATION mbi;
	DWORD memoryAddress = 0;
	BYTE *dataBuffer = NULL;
	BOOL readReturn = 0;
	HANDLE pHandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
	while (VirtualQueryEx(pHandle, (LPVOID)memoryAddress, &mbi, sizeof(mbi)))
	{
		if (mbi.Type == MEM_PRIVATE && mbi.Protect != PAGE_EXECUTE && mbi.Protect != PAGE_NOACCESS && mbi.Protect != 128)
		{
			dataBuffer = new BYTE[mbi.RegionSize];
			memset(dataBuffer, 0, mbi.RegionSize);
			readReturn = ReadProcessMemory(pHandle, (LPVOID)memoryAddress, dataBuffer, mbi.RegionSize, 0);
			if (readReturn != 0)
			{
				for (int i = 0; i< mbi.RegionSize; i++)
				{

					for each (auto var in src)
					{
						if (i+var.in_len<mbi.RegionSize)
						{
							if (memcmp(dataBuffer + i, var.souce, var.in_len) == 0)
							{
								DWORD  ol;
								//WriteProcessMemory(pHandle, (LPVOID)(memoryAddress+ i), var.out, var.out_len, &ol);
								findcount++;
								printf("地址:%x 找到:%d  %S size:%d\r\n", memoryAddress + i ,findcount, (WCHAR*)(dataBuffer + i),var.in_len);
								break;

							}
						}
						
					}
				
				}
			}
			else
			{
			}
			delete[]dataBuffer;
		}
		memoryAddress = memoryAddress + mbi.RegionSize;
	}
	CloseHandle(pHandle);
}

void  add_WCHAR_code(vector<MemRplace>&src, WCHAR* code,WCHAR* writecode)
{
	//编译器若是多字节 sizeof wchar的大小不同
	WCHAR* ZZ = L"1";
	int sizexor = wcslen(ZZ) == 1?sizeof(WCHAR):1;
	MemRleace xx;
	memcpy(xx.souce, code, wcslen(code));
	xx.in_len = wcslen(code)*sizexor;

	memcpy(xx.out, writecode, wcslen(writecode));
	xx.out_len = wcslen(writecode);

	src.push_back(xx);
	
}
int main()
{
	EnableDebugPrivilege();
	DWORD pid = FindProcessByName("services");
	if (pid !=0)
	{
		vector<MemRplace> FindArray;
		add_WCHAR_code(FindArray, L"VMware 物理磁盘助手服务", L"1");
		add_WCHAR_code(FindArray, L"VM", L"1");
		FindMemory(pid, FindArray);
		getchar();
	}

}


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-6-10 16:06 被chengqiyan编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (20)
雪    币: 1036
活跃值: (1311)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
2
直接爆搜 VM 关键字也是6。  这就不能算误伤了。 应该是杀敌800 自损1000
2019-6-10 16:33
0
雪    币: 261
活跃值: (547)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
StriveXjun 直接爆搜 VM 关键字也是6。 这就不能算误伤了。 应该是杀敌800 自损1000
命中率还是很高的啊  能搜到30+ 总不会每个都错的 也可以增加关键词的长度
2019-6-10 16:39
0
雪    币: 4381
活跃值: (4373)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
写了一大堆 仅仅只是检测了一个  Vmware  虚拟机  
2019-6-10 16:55
0
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
如果仅仅是检测vmware虚拟机,哪里用得着这么麻烦啊。来个文件遍历不是更好?像everything这样的工具,分分钟就把整个硬盘的文件给拿出来了。至于行不行,我也不晓得,因为我也是瞎说的,哈哈
2019-6-10 18:39
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
宁可杀错不可放过,成规模用不现实。
2019-6-10 20:00
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
7

真机


虚拟机


我就是那幸运的1%?
最后于 2019-6-10 20:36 被hzqst编辑 ,原因:
2019-6-10 20:35
0
雪    币: 1042
活跃值: (500)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我以为会是什么未公开的API之类的猥琐流
2019-6-10 21:39
0
雪    币: 261
活跃值: (547)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
hzqst 真机虚拟机我就是那幸运的1%?
是WCHAR类型的  CE勾上UNICODE
2019-6-11 13:27
0
雪    币: 712
活跃值: (121)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
为什么老检测虚拟机啊
2019-6-11 13:42
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
11
chengqiyan 是WCHAR类型的 CE勾上UNICODE
都说了这种方法杀敌800自损1000

我的真机都被你当成虚拟机了

2019-6-11 14:11
0
雪    币: 9941
活跃值: (2143)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
宁杀错 不放过
2019-6-11 14:41
0
雪    币: 6124
活跃值: (4661)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
13
我真机都被你当成虚拟机了
2019-6-11 17:11
0
雪    币: 510
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
14
检测虚拟机加载的某些驱动
2019-6-12 01:59
0
雪    币: 176
活跃值: (369)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
还不如枚举驱动呢
2019-6-12 09:24
0
雪    币: 261
活跃值: (547)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
齐格弗里德 还不如枚举驱动呢
枚举驱动抄一份代码都可以绕过去 这个是在应用层的全局变量
2019-6-12 13:10
0
雪    币: 261
活跃值: (547)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
hzqst 都说了这种方法杀敌800自损1000我的真机都被你当成虚拟机了
没有这个进程的系统服务表定义 不然是可以无误差查询的
2019-6-12 13:13
0
雪    币: 3144
活跃值: (1624)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
Rookietp [em_2]我以为会是什么未公开的API之类的猥琐流
哈哈,你又来偷师学艺!
2019-6-12 13:16
0
雪    币: 785
活跃值: (2358)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
19
只负责找, 不负责判定真假。无差别攻击?
2019-7-30 16:30
0
雪    币: 3888
活跃值: (3678)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
我都是判断硬盘大小(200G) 基本不会错   
2019-8-3 21:55
0
雪    币: 258
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
楼主辛苦 
2020-1-15 14:21
0
游客
登录 | 注册 方可回帖
返回
//