|
珞珈山水BBS →
电脑网络 →
系统安全 →
单文区文章阅读
|
| 单文区文章阅读 [返回] |
|---|
|
发信人: Stravadivaly (老子就是机器人), 信区: Security 标 题: Rose查杀代码,欢迎交流 发信站: BBS 珞珈山水站 (Sat Jun 3 18:53:16 2006) /******************************** * RoseKiller ver 1.0 * * Stravadivaly * ********************************/ #include <Windows.h> #include <Psapi.h> #include <stdio.h> #include <Winreg.h> #define KEY_WOW64_32KEY 0x0200 #pragma comment(lib, "psapi.lib") void FindAndChange(char *pDrive){ HANDLE hSearch; WIN32_FIND_DATA FileData; TCHAR szNewPath[MAX_PATH]; TCHAR *str[4]; int i; str[0]=TEXT("\\rose.exe");str[1]=TEXT("\\systemfile.com");str[2]=TEXT("\\auto run.inf"); str[0]=TEXT("\\system.sys"); for(i=0;i<=3;++i){ lstrcpy(szNewPath, pDrive); lstrcat(szNewPath, str[i]); //“合成”完整路径 do{ hSearch = FindFirstFile(szNewPath, &FileData); //寻找指定文件 if(hSearch!=INVALID_HANDLE_VALUE){ SetFileAttributes(szNewPath,FILE_ATTRIBUTE_NORMAL);//设置文件属性 CloseHandle(hSearch); DeleteFile(szNewPath); printf("已经删除 %s\n",szNewPath); } }while(hSearch!=INVALID_HANDLE_VALUE); } } int main(void) { printf("欢迎使用RoseKiller v1.0\n\n"); //枚举系统进程 DWORD processes[1024],needed; if(!EnumProcesses(processes,sizeof(processes),&needed)) return FALSE; //将枚举出的进程存放在数组processes中 char szName[MAX_PATH]="<Unknown>"; DWORD actualProcessCount=needed/sizeof(DWORD); printf("正在检查系统进程...\n"); for(DWORD i=0;i<actualProcessCount;i++){ HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ| PROCESS_TERMINATE,FALSE,processes[i]);//遍历数组,逐个检查 if(hProcess){ HMODULE hModule; DWORD needed1; BOOL lTerPro; int sCmp,sCmp1; if(EnumProcessModules(hProcess,&hModule,sizeof(hModule),&needed1)) { GetModuleBaseName(hProcess,hModule,szName,sizeof(szName)); //获得进程名 sCmp = strcmp(szName,"ROSE.EXE"); sCmp1= strcmp(szName,"rose.exe"); //由于不能确定进程名的大小写状况,所以。。。 if(sCmp == 0 || sCmp1 == 0){ lTerPro =TerminateProcess(hProcess,NULL);//结束进程 if(lTerPro != 0) printf(" 正在结束进程%s\n",szName); else{ printf(" 进程 %s 结束错误\n",szName); printf(" 错误编号%d \n",GetLastError()); } } } } } printf("\n"); //查询硬盘分区信息 DWORD DriveValue; int nPos = 4; //忽略软驱A: B: int test = 256; UINT nType; char strDrive[]="?:"; DriveValue = GetLogicalDrives(); //获得硬盘分区信息 while (DriveValue) { test>>=1; if(DriveValue & test){ strDrive[0]=(int)('?') + nPos; nType=GetDriveType((LPCTSTR)strDrive); switch(nType){ case DRIVE_FIXED: printf("检查 %s 盘\n",strDrive); nPos++; FindAndChange(strDrive); //删除该分区下的Rose.exe break; case DRIVE_REMOVABLE: printf("检查可移动设备 %s ",strDrive); nPos++; FindAndChange(strDrive);//删除该分区下的Rose.exe break; } } DriveValue >>= 1; } //在注册表中搜寻 HKEY hKey; LONG lOpen; LONG lOpen1; printf("正在检查注册表\n"); do{ lOpen = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\run", 0, KEY_ALL_ACCESS, &hKey );//打开注册表run键 if(lOpen == ERROR_SUCCESS){ lOpen1 = RegDeleteValue(hKey,TEXT("dll"));//删除“dll”项 if(lOpen1 ==ERROR_SUCCESS){ printf(" 正在删除rose.exe在注册表中的信息...\n"); } RegCloseKey(hKey); } }while(lOpen1 == ERROR_SUCCESS); printf("\n所有工作完成。谢谢使用。\n\n有问题请联系Stravadivaly@yahoo.com.c n\n\n按Enter键退出程序。"); getchar(); return 0; } -- 是吗? 不是吗? 对吗? 不对吗? 傻吗? ...... 的确很傻. 就像" 树动风欲静, 日涌大山流". ※ 修改:·Stravadivaly 於 Jun 3 18:55:24 2006 修改本文·[FROM: 221.232.5.*] ※ 修改:·Stravadivaly 於 Jun 3 19:13:45 2006 修改本文·[FROM: 221.232.5.*] ※ 来源:·珞珈山水BBS站 http://bbs.whu.edu.cn·[FROM: 221.232.5.*] |
| [返回单文区目录] |
|
|