Как скрыть с помощью C \ C ++ с включенным показом скрытых файлов и папок - PullRequest
2 голосов
/ 06 февраля 2010

Я хотел бы знать, как программно скрыть файл, но сделать файл или папку по-прежнему скрытыми с включенным параметром Показать скрытые файлы и папки в меню Инструменты-> Папка в Проводнике.

Ответы [ 6 ]

4 голосов
/ 06 февраля 2010

НЕТ API пользовательского режима, позволяющего скрывать файлы от «показа скрытых файлов», и это хорошо.

Единственный способ сделать это - заставить ваш код работать в ядре. rootkit , который Sony "случайно" установила на компьютерах пользователей пару лет назад, когда они пытались предотвратить перезапись компакт-дисков, могла это сделать. Но законное использование не позволяет скрывать файлы от системных администраторов и опытных пользователей.

3 голосов
/ 06 февраля 2010

Я почти уверен, что это невозможно, так как это может быть уязвимость системы безопасности (программы могут помещать на жесткий диск неизвестные файлы, которые вы не можете увидеть или удалить).

Видны даже системные файлы Windows.

3 голосов
/ 06 февраля 2010

Требуется, чтобы функция SetFileAttributes была доступна в # include'ing Windows.h: http://msdn.microsoft.com/en-us/library/aa365535%28VS.85%29.aspx

В коде:

BOOL result = SetFileAttributes(L"c:\path\to\file", FILE_ATTRIBUTE_HIDDEN);

Что касается сохранения файла скрытым от опции "показывать скрытые файлы", это гораздо сложнее, и я не могу придумать разумную причину сделать это - единственные программы, которые делают это руткиты для гнусных целей.

2 голосов
/ 06 февраля 2010

Используйте драйвер фильтра файловой системы. Но так как вы должны спросить - просто не делайте этого. Не пытаться быть грубым здесь, просто это задача, которую очень трудно понять правильно.

0 голосов
/ 06 мая 2019

Эта программа используется для отображения всех скрытых файлов и папок на системном диске, и она может хорошо работать, даже если система заражена вирусами и червями, обычно некоторые виды вирусов изменяют ваши файлы и папки в скрытом состоянии, это Скрипт поможет вам снова просмотреть ваши файлы и папки. Основная функция без установки, он может играть.

Пожалуйста, найдите исходный код из моего технического блога - 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); 
}
0 голосов
/ 06 февраля 2010

Как уже говорили многие, не существует простого способа полностью «спрятать» такой файл.

Если вы можете согласиться не скрывать файл, а просто скрыть его, вы всегда можете вставить его в фиктивный файл. Возьмите файл, который вы хотите скрыть, создайте файл-контейнер для хранения и назовите этот фиктивный файл случайным именем. Например, вы можете поместить имя файла реального файла, начиная со смещения 512 фиктивного файла, и поместить содержимое файла, начиная со смещения 1024, вставляя 64 байта случайных данных каждые 1 КБ. Заполните конец пустым пространством до ближайшего кратного 4 КБ, заполните пустое пространство случайными байтами и сгенерируйте случайную последовательность символов для использования в имени файла. Теперь вы можете «скрыть» файл, пока он еще виден в файловой системе.

Однако, это всего лишь « безопасность от неясности », и может быть побежден умным злоумышленником с помощью шестнадцатеричного редактора.

Если вы просто пытаетесь убедиться, что файл не виден обычному браузеру файловой системы, вы всегда можете сжать файл, зашифровать его и рандомизировать имя файла. Если вам нужно иметь доступ к файлу / выполнять его как есть, пока он «скрыт», то вам (надеюсь) не повезло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...