登录站点

用户名

密码

U盘隐藏文件恢复程序源代码

7已有 2138 次阅读  2010-01-11 17:52   标签源代码  U盘  程序  文件  隐藏 
/********************************************************************
*本程序用于恢复U盘或移动硬盘中被病毒隐藏的文件
*本人不承诺所有文件均能恢复,也不对因使用此程序造成的数据损失负责
*作者:flyreally
*http://hi.baidu.com/flyreally
**********************************************************************/
#include <windows.h>
#include <stdio.h>
#include <string.h>
int main()
{
    char              DriveLetterString[128];   //用于存放各盘的逻辑盘符,
    char              usb_name[4]; 
    char              cmd[MAX_PATH + 14] = "attrib -s -h "; 
    char              *p = DriveLetterString;     
    char              tmp; 
    DWORD             num;  
    unsigned int      times;
    WIN32_FIND_DATA   findData;
    HANDLE            hFind;  
   
    puts("本程序用于恢复您的U盘或移动硬盘中被病毒隐藏的文件");
    puts("本人不保证所有文件均能恢复,也不对因用此程序造成的数据损失负责");
    puts("Author: flyreally\nhttp://hi.baidu.com/flyreally");
   
    memset(DriveLetterString,0,128);    
    GetLogicalDriveStrings(128,DriveLetterString);//取得所有盘符      
    //判断是否存在软驱A、B
    if ('A' == *DriveLetterString || 'a' == *DriveLetterString)
    {
            p =  DriveLetterString + 4;             

            if ('B' == *(DriveLetterString + 4) || 'b' == *(DriveLetterString + 4))
            {
                    p =  DriveLetterString + 8;                              
            }              
    }
   
    //取得盘符数目,每位代表一个盘符,
    num = GetLogicalDrives();                                     
    /*统计盘符数量*/
    for (num >>= 2, times = 0; 0 != num; num >>= 1, ++times)
            ;
   
    /*遍历所有盘符寻找USB盘符*/
    while (1)
    {        
          /*获取设备类型并判读是否为USB设备*/
          if (DRIVE_REMOVABLE == GetDriveType(p + 4 * (times - 1)))       
          {
                   strcpy(usb_name, p + 4 * (times - 1));   
                   break;        
          }
          /*未发现USB设备*/
          if (0 == --times)
          {
                  printf("您的PC上未发现USB设备,请插入后重新运行本程序!\n");
                  getchar();
                  exit(1);         
          }          
    }
   
    printf("您的USB盘符为%s ,确认请按回车键,否则请输入您的USB盘符(仅需输入盘符字母):\n", usb_name);
    /* 如果检测到的USB盘符不对,则重新设置盘符*/
    if ('\n' != (tmp = getchar()))
    {
            *usb_name = tmp;             
    }
   
    puts("U盘清理中...");
   
    /*讲USB盘符设置为当前目录*/
    SetCurrentDirectory(usb_name); 
   
    /*查找第一个文件*/
    hFind = FindFirstFile("*.*", &findData);
    if (INVALID_HANDLE_VALUE == hFind)
    { 
        /*获取到文件信息*/
        do
        {     
                /*判断是否为隐藏文件或文件夹*/
                if (FILE_ATTRIBUTE_DIRECTORY & findData.dwFileAttributes ||
                    FILE_ATTRIBUTE_HIDDEN    & findData.dwFileAttributes ||                
                    FILE_ATTRIBUTE_SYSTEM    & findData.dwFileAttributes  )
                {
                        strcpy(cmd, "attrib -s -h ");
                        strcat(cmd, findData.cFileName);
                        system(cmd);                            
                } 
           
                /*删除autorun.inf和病毒创建的快捷方式*/
                if (FILE_ATTRIBUTE_ARCHIVE & findData.dwFileAttributes)
                {
                        static char *q = NULL;
                   
                        q = findData.cFileName + strlen(findData.cFileName) - 3;
                  
                        if ((0 == strcmp(q, "lnk")) || (0 == strcmp(q, "inf")) ||
                            (0 == strcmp(q, "LNK")) || (0 == strcmp(q, "INF"))  )
                        {
                                remove(findData.cFileName);
                        }                                                        
                }  
        } while (FindNextFile(hFind,&findData));
    }
    FindClose(hFind);  
    puts("清理完毕!");
   
    getchar();
    return 0;
}

上一篇: 4*4矩阵键盘驱动程序 没有了

分享 举报

发表评论 评论 (4 个评论)

涂鸦板