Как сделать файлы действительно скрытыми в каталоге?

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

У меня есть «Скрытые файлы и папки» — «Выбрано», а также «Скрыть защищенные файлы операционной системы» — «Не выбрано», но файлы полностью исчезли из поля зрения и не отображаются в поиске. Я скопировал папку с рабочей станции VMware на свою основную машину, но файлы по-прежнему очень скрыты! Файлов в папке ноль согласно винде.

Как возможна эта магия вуду? Я хочу эмулировать это с помощью Delphi в моей собственной программе шифрования. Я не нашел здесь и через Google никакого способа, который подсказывал бы, как это возможно, но в самом файле справки программы говорится, что они все еще находятся в папке, но не регистрируются в большинстве обычных программ Windows, которые обрабатывают файлы.

Это один из тех вопросов, когда я не могу дать какой-либо код, чтобы показать, что я пробовал, но скорее открыт для предложений о том, что я могу попробовать, или, может быть, кто-то здесь точно знает, как это делается?


person Shambhala    schedule 22.11.2012    source источник
comment
Вы хотите, чтобы мы помогли вам создать руткит?   -  person David Heffernan    schedule 22.11.2012
comment
@DavidHeffernan - я не заинтересован ни в создании руткита, ни в каких-либо других неприятных вещах. Я просто хотел узнать, как эти файлы спрятаны таким образом. В настоящее время я изучаю ответ от bummi.   -  person Shambhala    schedule 22.11.2012
comment
Технический термин для того, что вы описали, — руткит.   -  person David Heffernan    schedule 22.11.2012
comment
@DavidHeffernan - Ну, я этого не знал и, конечно же, не хочу создавать его в своем программном обеспечении. Файлы будут скрыты по выбору пользователя и снова станут видимыми пользователем, поэтому я не понимаю, как это можно рассматривать как настоящий руткит, поскольку он не будет делать ничего злонамеренного.   -  person Shambhala    schedule 22.11.2012
comment
Согласно определению руткита в Википедии, между руткитом и вредоносным ПО нет знака равенства. Ваше приложение будет руткитом, даже если оно не является вредоносным.   -  person Cosmin Prund    schedule 22.11.2012
comment
Я скопировал папку с VMware Workstation на свою основную машину — может быть, их нет? если они были так спрятаны, то копирование должно было их пропустить и в конце machien действительно пустая папка? PS: я вспоминаю HM-что-то, программу для MS-DOS. Он спрятал файлы и папки в псевдоплохие сектора. Но доступ был невозможен после действия показа.   -  person Arioch 'The    schedule 22.11.2012
comment
@Arioch'The - да, в каталоге были файлы, но они были скрыты с помощью программы в VMware, потому что я просто хотел проверить, станут ли они видимыми. Я нашел способ скрыть файлы из командной строки: вы просто переходите в каталог и вводите: attrib +s +h "name of file.txt" и показываете attrib -s -h "name of file.txt"   -  person Shambhala    schedule 22.11.2012
comment
@Shambhala, вы помечаете файлы как скрытые и системные, используя эту командную строку. В Проводнике Windows есть параметр для отображения скрытых и системных файлов, и я почти уверен, что у большинства программистов этот параметр активирован, потому что он позволяет с легкостью просматривать папки Windows и Program Files.   -  person Cosmin Prund    schedule 22.11.2012
comment
да я понял как только написал в комменте так и почувствовал себя шутом! Вот что ты получаешь за то, что не спал всю ночь...   -  person Shambhala    schedule 22.11.2012
comment
@CosminPrund Ну, я не проверяю это в проводнике, я использую для этого файловый менеджер. А именно я использую бесплатный нереальный Commander (x-diesel.com), но таких полно (Total Commander, muCommander, DOS Navigator, ....) и Q-Dir для тех, кто любит смешивание с проводником Windows   -  person Arioch 'The    schedule 22.11.2012
comment
Возможно, программа безопасности использует какую-то технику шифрования, чтобы скрыть файлы: en.wikipedia.org/wiki/Deniable_encryption< /а>   -  person Jens Mühlenhoff    schedule 22.11.2012
comment
@DavidHeffernan Программа, скрывающая файлы, сама по себе не является руткитом. Руткит также использует брешь в системе безопасности для получения привилегий.   -  person Jens Mühlenhoff    schedule 22.11.2012
comment
Использование функциональных возможностей ОС без влияния на нее не является руткитом. Руткит влияет на функциональные возможности ОС (и для этого остается резидентным в качестве службы/драйвера). Скрытие файлов с функциями ОС — это обфускация   -  person Sir Rufo    schedule 22.11.2012
comment
ОС содержит функции для скрытия файлов с использованием скрытого атрибута. Нет необходимости скрывать файлы лучше, чем это, поскольку все, что предлагает ОС, должно быть обратимым и доступным для обнаружения стандартным администратором: функция скрытия ОС в основном удобна для конечного пользователя, поэтому конечного пользователя это не беспокоит. с файлами, которые его не касаются.   -  person Cosmin Prund    schedule 22.11.2012
comment
@Shambhala, как называется программа?   -  person kobik    schedule 22.11.2012
comment
@kobik - это называется Quick Crypto (одним словом)...   -  person Shambhala    schedule 22.11.2012
comment
@SirRufo Действительно. Но на самом деле вопрос не говорит о том, что он использует только стандартные функции ОС.   -  person David Heffernan    schedule 22.11.2012


Ответы (1)


Так как меньше информации. Одной из возможностей было бы использование альтернативных файловых потоков в NTFS, которые можно добавлять в файлы и папки. Вы можете просто попробовать это, набрав «блокнот C:\temp:hidden1.txt» в командной строке, новый файловый поток будет создан, если вы ответите «да». После сохранения вы можете снова открыть его точно так же. Это также можно сделать из delphi (загрузка/сохранение). Будет работать, только если используется NTFS. Я не знаю, используется ли этот метод в описанном случае, поиск ADS можно выполнить с помощью следующего кода:

unit u_ListADS;

// 20120928 by Thomas Wassermann
// www.devworx.de
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, StrUtils;

 Procedure GetADS(List: TStrings; const Path, WildCard: String; Recursiv: Boolean = false);

function NtQueryInformationFile(FileHandle: Cardinal; IoStatusBlock: Pointer; FileInformation: Pointer; FileInformationLength: Cardinal;
  FileInformationClass: Cardinal): Cardinal; stdcall; external 'ntdll.dll';

implementation

type
  _FILE_STREAM_INFORMATION = record
    NextEntryOffset: Cardinal;
    StreamNameLength: Cardinal;
    StreamSize: int64;
    StreamAllocationSize: int64;
    StreamName: array [0 .. MAX_PATH] of WideChar;
  end;

  PFILE_STREAM_INFORMATION = ^_FILE_STREAM_INFORMATION;

function GetStreams(aFilename: String): TStringList;
var
  FileHandle: Integer;
  FileName: array [0 .. MAX_PATH] of WideChar;
  StreamName: String;
  InfoBlock: _FILE_STREAM_INFORMATION;
  StatusBlock: record Status: Cardinal;
                      Information: PDWORD;
               end;

  Procedure Analyze;
    begin
      CopyMemory(@FileName, @InfoBlock.StreamName, InfoBlock.StreamNameLength);
      StreamName := Copy(Filename, 1, PosEx(':', Filename, 2) - 1);
      if StreamName <> ':' then Result.Add(StreamName);
    end;
begin
  Result := TStringList.Create;
  FileHandle := FileOpen(aFilename, GENERIC_READ);
  NtQueryInformationFile(FileHandle, @StatusBlock, @InfoBlock, SizeOf(InfoBlock), 22);
  FileClose(FileHandle);
  if InfoBlock.StreamNameLength <> 0 then
    Repeat

      if (InfoBlock.NextEntryOffset <> 0) then
        begin
        InfoBlock := PFILE_STREAM_INFORMATION(PByte(@InfoBlock) + InfoBlock.NextEntryOffset)^;
        Analyze;
        end;
    until InfoBlock.NextEntryOffset = 0
end;

Procedure GetADS(List: TStrings; const Path, WildCard: String; Recursiv: Boolean = false);
  Var
    SR: SysUtils.TSearchRec;
    RES: Integer;
    SP: String;
    StreamList: TStringList;
    i: Integer;
  begin
    if length(Path) = 0 then
      exit;
    if length(WildCard) = 0 then
      exit;
    SP := IncludeTrailingBackSlash(Path) + WildCard;
    RES := FindFirst(IncludeTrailingBackSlash(Path) + '*.*', faDirectory, SR);
    While RES = 0 Do
    Begin
      If (SR.attr And faDirectory) <> 0 Then
        If SR.Name[1] <> '.' Then
          if Recursiv then
            GetADS(List, IncludeTrailingBackSlash(Path) + SR.Name, WildCard, Recursiv);
      RES := FindNext(SR);
    End;
    SysUtils.FindClose(SR);
    RES := FindFirst(SP, $27, SR);
    While RES = 0 Do
    Begin
      StreamList := GetStreams(IncludeTrailingBackSlash(Path) + SR.Name);
      for i := 0 to StreamList.Count - 1 do
        List.Add(IncludeTrailingBackSlash(Path) + SR.Name + StreamList[i]);
      StreamList.Free;
      RES := FindNext(SR);
    End;
    SysUtils.FindClose(SR);
  end;

end.

Вызов может быть, например.

  GetADS(Listbox1.Items,Directory.Text, WildCards.Text,rekursiv.checked);
person bummi    schedule 22.11.2012
comment
Это здорово! Я только что много читал об этом, и у меня есть скрытый текст внутри файла .txt. Это чем-то похоже на стеганографию? - person Shambhala; 22.11.2012
comment
удалить не так просто, к сожалению, я могу предоставить только немецкую ссылку de.wikipedia.org/wiki/Alternativer_Datenstrom, возможно, кто-то знает английский, чтобы - person bummi; 22.11.2012
comment
Здесь также есть полезная информация: windowssecrets.com /главная история/ - person Shambhala; 22.11.2012
comment
Я только что скачал программу под названием ADS Spy — у нее есть графический интерфейс, и она может обнаруживать альтернативные потоки данных. Я проверил каталог скрытых файлов, и все они содержат ADS, поэтому программа определенно использует этот метод. Я приму это как ответ, и @bummi большое спасибо за всю помощь. - person Shambhala; 22.11.2012
comment
Новая файловая система Windows не поддерживает альтернативные файловые потоки. - person David Heffernan; 22.11.2012
comment
есть больше вещей, чем альтернативный файловый поток, который теряется при ReFS helgeklein.com/blog/2012/01/ - person bummi; 22.11.2012