zoukankan      html  css  js  c++  java
  • [转]U盘隐藏文件恢复程序+源码

        有时要帮朋友处理一下U盘,他们的U盘经常被病毒感染后,U盘内的所有文件都不见了,只有一些快捷方式,偶尔一次还可以接受,经常干这样的事就觉得很麻烦了,尤其是被隐藏的文件特别多的时候。今天中午还有个朋友让我帮他恢复U盘中的隐藏文件。。。
    所以今天抽空写了个程序,把这些活让程序去干。
    程序说明:
    1.程序可以自动检测U盘盘符,自己也可以进行更改
    2.程序可以恢复U盘中的所有隐藏数据
    3.程序会删除U盘中所有的快捷方式和inf文件

    将源程序公布出来,想用的朋友可以根据自己的需求改改,然后自己编译就行。

          源码如下:

    /********************************************************************
    *本程序用于恢复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;
    }

  • 相关阅读:
    Linear Regression Example
    三角函数画图(Python)
    机器学习算法笔记系列之深入理解主成分分析PCA-原理篇
    Boosted Trees 介绍
    Jacobian矩阵和Hessian矩阵
    使用插件pagehelper在mybatis中实现分页查询
    git常用操作
    Python远程视频监控
    FPGA选型
    英文Datasheet没那么难读
  • 原文地址:https://www.cnblogs.com/myphoebe/p/1794270.html
Copyright © 2011-2022 走看看