|
虚拟机这个东西其实很邪恶,他甚至完成隔离了其他软件的监控,其实控制他也不是没有办法,根据自己理解有几种(由于虚拟机种类太多,仅仅限于vmware)
<1>监控进程创建,根据进程名字VMware.exe,禁止其运行。但是改成aa.exe,嘿嘿 ,就扯淡了
<2>这种方法有一定的可用性,但是还有待于验证。
大家看到了吧
产品名称嘿嘿,监控进程获得进程路径,获得产品名称。
WCHAR FileFile[MAX_PATH_BUFFER];
DWORD dwSize = GetFileVersionInfoSize((LPCWSTR)szFileName,NULL);
if(dwSize==0)
return FALSE;
DWORD a = GetLastError();
LPVOID pBlock = malloc(dwSize);
if(!pBlock)
return FALSE;
GetFileVersionInfo((LPCWSTR)szFileName,0,dwSize,pBlock);
char* pVerValue = NULL;
UINT nSize = 0;
VerQueryValue(pBlock,TEXT("\\VarFileInfo\\Translation"),(LPVOID*)&pVerValue,&nSize);
if(!pVerValue)
{
return FALSE;
}
CString strSubBlock,strTranslation,strTemp;
strTemp.Format(L"000%x",*((unsigned short int *)pVerValue));
strTranslation = strTemp.Right(4);
strTemp.Format(L"000%x",*((unsigned short int *)&pVerValue[2]));
strTranslation += strTemp.Right(4);
//080404b0为中文,040904E4为英文
//文件描述
//strSubBlock.Format(L"\\StringFileInfo\\%s\\FileDescription",strTranslation);
//VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize);
//strSubBlock.ReleaseBuffer();
//strTemp.Format(L"%s",pVerValue);
//AfxMessageBox(strTemp);
////内部名称
//strSubBlock.Format(L"\\StringFileInfo\\%s\\InternalName",strTranslation);
//VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize);
//strSubBlock.ReleaseBuffer();
//strTemp.Format(L"内部名称: %s",pVerValue);
//AfxMessageBox(strTemp);
////合法版权
//strSubBlock.Format(L"\\StringFileInfo\\%s\\LegalTradeMarks",strTranslation);
//VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize);
//strSubBlock.ReleaseBuffer();
//strTemp.Format(L"合法版权: %s",pVerValue);
//AfxMessageBox(strTemp);
////原始文件名
//strSubBlock.Format(L"\\StringFileInfo\\%s\\OriginalFileName",strTranslation);
//VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize);
//strSubBlock.ReleaseBuffer();
//strTemp.Format(L"原始文件名: %s",pVerValue);
//AfxMessageBox(strTemp);
//产品名称
strSubBlock.Format(L"\\StringFileInfo\\%s\\ProductName",strTranslation);
VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize);
strSubBlock.ReleaseBuffer();
_tcscpy_s(FileFile,MAX_PATH_BUFFER,(LPCWSTR)pVerValue);
_wcsupr_s(FileFile,MAX_PATH_BUFFER);
//OutputDebugStringW(L"文件版本");
//OutputDebugStringW(FileFile);
//OutputDebugStringW(FileFile);
//strTemp.Format(L"产品名称: %s",FileFile);
//AfxMessageBox(strTemp);
////产品版本
//strSubBlock.Format(L"\\StringFileInfo\\%s\\ProductVersion",strTranslation);
//VerQueryValue(pBlock,strSubBlock.GetBufferSetLength(256),(LPVOID*)&pVerValue,&nSize);
//strSubBlock.ReleaseBuffer();
//strTemp.Format(L"产品版本: %s",pVerValue);
//AfxMessageBox(strTemp);
free(pBlock);
不过这个东西也是可以改的,如果改了,那只能无语了
<3>这种方法我比较喜欢。大家可以看看。就是找到虚拟机的安装目录,然后更改pe文件格式。主要是路径获得,我是通过这册表,如果改了注册表,自己定位路径,那我们碰到高手了,这方法欺骗大众
BOOL CFileMon::IsPeFile(LPCWSTR strPathName)
{
WCHAR FilePath[MAX_PATH];
_tcscpy_s(FilePath,MAX_PATH,strPathName);
_wcslwr_s(FilePath);
if(wcsstr(FilePath,L".exe")==NULL)//这个有点省事了,哈哈
{
return FALSE;
}
HANDLE hFile = CreateFile( strPathName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL );
if ( hFile == INVALID_HANDLE_VALUE ) {
TRACE1( "Failed To Open File %s !\n", strPathName );
return FALSE;
}
HANDLE hMMFile = CreateFileMapping( hFile, NULL, PAGE_READONLY, 0, 0, NULL );
if ( hMMFile == INVALID_HANDLE_VALUE ) {
CloseHandle( hFile );
return FALSE;
}
LPVOID pvMem = MapViewOfFile( hMMFile, FILE_MAP_READ, 0, 0, 0 );
if ( ! pvMem ) {
CloseHandle( hMMFile );
CloseHandle( hFile );
return FALSE;
}
if ( *( USHORT* ) pvMem != IMAGE_DOS_SIGNATURE ) {
UnmapViewOfFile( pvMem );
CloseHandle( hMMFile );
CloseHandle( hFile );
return FALSE;
}
if ( *( ( DWORD* ) ( ( PBYTE ) pvMem + ( ( PIMAGE_DOS_HEADER ) pvMem )->e_lfanew ) ) != IMAGE_NT_SIGNATURE ) {
UnmapViewOfFile( pvMem );
CloseHandle( hMMFile );
CloseHandle( hFile );
return FALSE;
}
UnmapViewOfFile( pvMem );
CloseHandle( hMMFile );
CloseHandle( hFile );
return TRUE;
}
BOOL CFileMon::ChangePeToZf(LPCWSTR strPathName)
{
HANDLE hFile = CreateFile( strPathName,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL );
if ( hFile == INVALID_HANDLE_VALUE ) {
TRACE1( "Failed To Open File %s !\n", strPathName );
return FALSE;
}
HANDLE hMMFile = CreateFileMapping( hFile, NULL, PAGE_READWRITE, 0, 0, NULL );
if ( hMMFile == INVALID_HANDLE_VALUE ) {
CloseHandle( hFile );
return FALSE;
}
LPVOID pvMem = MapViewOfFile( hMMFile, FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, 0 );
if ( ! pvMem ) {
CloseHandle( hMMFile );
CloseHandle( hFile );
return FALSE;
}
if ( *( USHORT* ) pvMem != IMAGE_DOS_SIGNATURE ) {
UnmapViewOfFile( pvMem );
CloseHandle( hMMFile );
CloseHandle( hFile );
return FALSE;
}
if ( *( ( DWORD* ) ( ( PBYTE ) pvMem + ( ( PIMAGE_DOS_HEADER ) pvMem )->e_lfanew ) ) != IMAGE_NT_SIGNATURE ) {
UnmapViewOfFile( pvMem );
CloseHandle( hMMFile );
CloseHandle( hFile );
return FALSE;
}
*( USHORT* ) pvMem = (USHORT)ZF_IMAGE_DOS_SIGNATURE;
*( ( DWORD* ) ( ( PBYTE ) pvMem + ( ( PIMAGE_DOS_HEADER ) pvMem )->e_lfanew ) )=(DWORD)ZF_IMAGE_NT_SIGNATURE;
UnmapViewOfFile( pvMem );
CloseHandle( hMMFile );
CloseHandle( hFile );
return TRUE;
}
BOOL CFileMon::ChangeZfToPe(LPCWSTR strPathName)
{
HANDLE hFile = CreateFile( strPathName,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL );
if ( hFile == INVALID_HANDLE_VALUE ) {
TRACE1( "Failed To Open File %s !\n", strPathName );
return FALSE;
}
HANDLE hMMFile = CreateFileMapping( hFile, NULL, PAGE_READWRITE, 0, 0, NULL );
if ( hMMFile == INVALID_HANDLE_VALUE ) {
CloseHandle( hFile );
return FALSE;
}
LPVOID pvMem = MapViewOfFile( hMMFile, FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, 0 );
if ( ! pvMem ) {
CloseHandle( hMMFile );
CloseHandle( hFile );
return FALSE;
}
if ( *( USHORT* ) pvMem != ZF_IMAGE_DOS_SIGNATURE ) {
UnmapViewOfFile( pvMem );
CloseHandle( hMMFile );
CloseHandle( hFile );
return FALSE;
}
if ( *( ( DWORD* ) ( ( PBYTE ) pvMem + ( ( PIMAGE_DOS_HEADER ) pvMem )->e_lfanew ) ) != ZF_IMAGE_NT_SIGNATURE ) {
UnmapViewOfFile( pvMem );
CloseHandle( hMMFile );
CloseHandle( hFile );
return FALSE;
}
*( USHORT* ) pvMem = (USHORT)IMAGE_DOS_SIGNATURE;
*( ( DWORD* ) ( ( PBYTE ) pvMem + ( ( PIMAGE_DOS_HEADER ) pvMem )->e_lfanew ) )=(DWORD)IMAGE_NT_SIGNATURE;
UnmapViewOfFile( pvMem );
CloseHandle( hMMFile );
CloseHandle( hFile );
return TRUE;
}
如果大家有什么好的办法,一定通知我,大家学习一下 |
评分
-
查看全部评分
|