[转]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;
}