Пытаюсь освоить перехват ф-и ZwQueryDirectoryFile. Для начала решил начать с обработки FileBothDirectoryInformation, для которого структура FileInformation выглядит следующим образом: Код (Text): FILE_BOTH_DIRECTORY_INFORMATION struc NextEntryOffset dd ? Unknown dd ? CreationTime dq ? LastAccessTime dq ? LastWriteTime dq ? ChangeTime dq ? EndOfFile dq ? AllocationSize dq ? FileAttributes dd ? FileNameLength dd ? EaInformationLength dd ? AlternateNameLength db ? AlternateName dw 12 dup (?) FileName dw ? FILE_BOTH_DIRECTORY_INFORMATION ends Значит сам перехват проходит удачно. Суть проблемы состоит в том что я не могу корректно получить имя файла (FILE_BOTH_DIRECTORY_INFORMATION->FileName). Вот участок кода который пытается вывести на экран DbgView имя файла, вместо чего выводятся символы "?????", например файл 1.тхт = ????? Код (Text): LOCAL as :ANSI_STRING LOCAL us :UNICODE_STRING @@: mov eax,[edi].NextEntryOffset test eax,eax jz @F mov eax,[edi].FileNameLength mov us._Length,ax mov us.MaximumLength,ax lea eax,[edi].FileName mov us.Buffer,eax invoke RtlUnicodeStringToAnsiString,addr as,addr us,TRUE .if eax==STATUS_SUCCESS invoke DbgPrint,$CTA0(" %s "),as.Buffer invoke RtlFreeAnsiString,addr as .endif add edi,[edi].NextEntryOffset jmp @B @@: Подскажите как правильно надо получать имя файла
Уважаемые друзья! Разобрался, но если честно от этого мне щас не легче, т.к. понять теперь не могу почему неправильно перевел структуру на асм. Вот вариант на С++, из ДДК Код (Text): typedef struct _FILE_BOTH_DIRECTORY_INFORMATION { ULONG NextEntryOffset; ULONG Unknown; LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; LARGE_INTEGER EndOfFile; LARGE_INTEGER AllocationSize; ULONG FileAttributes; ULONG FileNameLength; ULONG EaInformationLength; UCHAR AlternateNameLength; WCHAR AlternateName[12]; WCHAR FileName[1]; } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION; Вот нашел в инете вариант под ассемблер Код (Text): FILE_BOTH_DIRECTORY_INFORMATION struc NextEntryOffset dd ? Unknown dd ? CreationTime dq ? LastAccessTime dq ? LastWriteTime dq ? ChangeTime dq ? EndOfFile dq ? AllocationSize dq ? FileAttributes dd ? FileNameLength dd ? EaInformationLength dd ? AlternateNameLength db ? [b]db ? - Откуда взялся вдруг этот параметр???!!![/b] AlternateName dw 12 dup (?) FileName dw ? FILE_BOTH_DIRECTORY_INFORMATION ends Вот из-за несоответствия в структурах возился целый день! Как это объяснить - не знаю! Натолкните на мысль, может это я туплю... Скорей всего...
З.Ы. судя по частоте и характеру твоих постов, кажется что руткит пишешь не ты, а народ с васма... З.З.Ы Я сталкивался с такой ошибклй в структурах, вот правильный структуры: Код (Text): typedef struct _FILE_DIRECTORY_INFORMATION { ULONG NextEntryOffset; ULONG Unknown; LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; LARGE_INTEGER EndOfFile; LARGE_INTEGER AllocationSize; ULONG FileAttributes; ULONG FileNameLength; WCHAR FileName [1]; } FILE_DIRECTORY_INFORMATION,*PFILE_DIRECTORY_INFORMATION; typedef struct _FILE_FULL_DIRECTORY_INFORMATION { ULONG NextEntryOffset; ULONG Unknown; LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; LARGE_INTEGER EndOfFile; LARGE_INTEGER AllocationSize; ULONG FileAttributes; ULONG FileNameLength; ULONG EaInformationLength; WCHAR FileName [1]; } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION; typedef struct _FILE_BOTH_DIRECTORY_INFORMATION { ULONG NextEntryOffset; ULONG Unknown; LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; LARGE_INTEGER EndOfFile; LARGE_INTEGER AllocationSize; ULONG FileAttributes; ULONG FileNameLength; ULONG EaInformationLength; USHORT AlternateNameLength; WCHAR AlternateName [12]; WCHAR FileName [1]; } FILE_BOTH_DIRECTORY_INFORMATION,*PFILE_BOTH_DIRECTORY_INFORMATION; typedef struct _FILE_NAMES_INFORMATION { ULONG NextEntryOffset; ULONG Unknown; ULONG FileNameLength; WCHAR FileName[1]; } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
Это стурктуры для разных запрашиваемых типов информации о файлах. В справочнике по NativeApi от Нэббета ошибочна описана стрктура FILE_BOTH_DIRECTORY_INFORMATION, на что ты сейчас и напоролся.
Ms Rem Совершенно верно! Им то я и пользуюсь уже неделю. Из-за него я насмотрелся за день порядка 30 БДОСОВ! Ужас! Хотя о том что купил не жалею ни дня, книга хорошая зы Ты еще ошибки не обнаруживал в книге? т.к. на данный момент все прототипы ф-й и структуры на асм я переделываю именно из Неббета...
Вроде чето обанруживал (в описании функций), но не помню конкретно что. В любом случае если есть ошибки, то на них напорешся когда попытаешся это применить.
Ms Rem Все скрытие реализовал! Весь день просидел, но оно того стоило, размер драйвера 1,4 кб, все на чистом асме