珞珈山水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.*]
[返回单文区目录]

武汉大学BBS 珞珈山水站 All rights reserved.
wForum , 页面执行时间:14.372毫秒