我想知道如何以编程方式隐藏文件,但仍然隐藏了文件或文件夹,并显示了从资源管理器的工具 - >文件夹选项启用显示隐藏文件和文件夹。
答案 0 :(得分:4)
没有用户模式API来隐藏“显示隐藏文件”中的文件,这是一件好事。
执行此操作的唯一方法是让代码在内核中运行。几年前索尼“意外”安装在用户计算机上的rootkit,当他们试图阻止CD被发送时,可以做到这一点。但是,没有合法用于隐藏系统管理员和超级用户的文件。
答案 1 :(得分:3)
您希望#include'ing Windows.h提供SetFileAttributes函数:http://msdn.microsoft.com/en-us/library/aa365535%28VS.85%29.aspx
在代码中:
BOOL result = SetFileAttributes(L"c:\path\to\file", FILE_ATTRIBUTE_HIDDEN);
至于保持文件隐藏在“显示隐藏文件”选项中,这更加困难,而且我无法想到这样做的合理理由 - 唯一的程序是用于恶意目的的rootkit。
答案 2 :(得分:3)
我很确定这是不可能的,因为它会是一个安全漏洞(程序可能会将未知文件放在您无法看到或删除的硬盘上)。
甚至可以看到Windows系统文件。
答案 3 :(得分:2)
使用文件系统过滤器驱动程序。但既然你不得不问 - 就是不要这样做。不要试图在这里粗鲁,只是这是一项很难做到的任务。
答案 4 :(得分:0)
正如之前许多人所说,完全“隐藏”这样的文件没有直接的方法。
如果你可以接受不是真正隐藏文件而只是模糊它,你总是可以将它嵌入到一个虚拟文件中。获取要隐藏的文件,构建容器文件以保存它,并使用随机名称命名该虚拟文件。例如,您可以将实际文件的文件名放在虚拟文件的偏移512处,并将文件的内容从偏移1024开始,每1KB插入64字节的随机数据。用空格填充末尾到最近的4KB的倍数,用随机字节填充空白空间,并生成用于文件名的随机字符序列。现在,您可以“隐藏”文件,同时它仍然可以在文件系统中看到。
然而,这仅仅是“security by obscurity”,可以被一位聪明的攻击者用十六进制编辑器击败。
如果您只是想确保文件对临时文件系统浏览器不可见,您可以随时压缩文件,加密文件并随机化文件名。如果您需要能够在“隐藏”时按原样访问/执行该文件,那么您可能(希望)运气不佳。
答案 5 :(得分:0)
此程序用于显示系统驱动器中的所有隐藏文件和文件夹,即使系统受到病毒和蠕虫的影响,它也可以正常运行,通常,某些病毒会以隐藏状态更改文件和文件夹,这脚本将帮助您再次查看文件和文件夹。主要功能是无需安装即可播放。
请从我的技术博客中找到源代码-http://www.algonuts.info/how-to-show-hidden-files-and-folders-using-c.html
#include<iostream>
#include<conio.h>
#include<dirent.h>
#include<dir.h>
#include<process.h>
#include<string.h>
#include<stdio.h>
#include<io.h>
#include<dos.h>
#include<sys/stat.h>
struct ffblk vfile;
unsigned long int udata;
char ch,present[MAXPATH];
int next_directory(char *);
void scan_directory(char *);
char base[]="X:\\";
using namespace std;
int main(int account,char *arg[],char *env[])
{
clrscr();
getcwd(present,MAXPATH);
DIR *dir;
struct dirent *temp;
cout<<"\nWelcome to Unhidden for identify the hidden files";
cout<<"\n\nEnter drive:";
cin>>ch;
base[0]=ch;
if((dir = opendir(base)) == NULL)
{
clrscr();
cout<<"\nError : Derive not found ";
getch();
exit(0);
}
scan_directory(base);
while((temp = readdir(dir)) != NULL)
{
char *directory = (char *) malloc(3+strlen(temp->d_name)+1);
strcpy(directory,base);
strcat(directory,temp->d_name);
next_directory(directory);
free(directory);
}
closedir(dir);
clrscr();
cout<<"\nSystem: Successfully Unhidden it";
sleep(3);
return 0;
}
int next_directory(char *path)
{
int count=0;
DIR *dirtemp;
char *hold,*temp;
struct dirent *ptemp;
hold=path;
if ((dirtemp = opendir(path)) != NULL)
scan_directory(path);
else
return 0;
while((ptemp = readdir(dirtemp)) != NULL)
{
char *directory = (char *) malloc(1+strlen(ptemp->d_name)+1);
directory[0]='\\';
strcpy(directory+1,ptemp->d_name);
if(directory[1]!='\.')
{
count=strlen(hold);
temp = (char *) malloc(strlen(hold)+strlen(directory)+1);
strcpy(temp,hold);
strcat(temp,directory);
free(directory);
if(opendir(temp)!=NULL)
next_directory(temp);
temp[count]='\0';
hold=temp;
}
else
free(directory);
}
closedir(dirtemp);
return 0;
}
void scan_directory(char *tempo)
{
cout<<"\n"<<tempo;
unsigned count;
if(present[0]==tempo[0])
chdir(tempo);
else
{
setdisk(tempo[0]-65);
chdir(tempo);
}
udata = findfirst("*.*",&vfile,0x02);
while(!udata)
{
_dos_getfileattr(vfile.ff_name,&count);
if (count & _A_HIDDEN)
{
_dos_getfileattr(vfile.ff_name,&count);
count=count & 248;
_dos_setfileattr(vfile.ff_name,count);
}
udata=findnext(&vfile);
}
if(present[0]==tempo[0])
system("cd\\");
chdir(present);
}