Необходимо скрыть файл, прочитал статью про перехваты функций в 0 кольце, в общих чертах понял что нужно сделать, но в коде реализовать не смог :-( Драйвер пишу на ассме... Подскажите плиз как это реализовать.
Скрыть от лишних глаз.. Т.е. видимо похучить функцию, получающую содержимое каталога. Для начала возник такой вопрос, какую функцию вызвать в масм 32 для получения SDT?
Немного разобрался что к чему... Код (Text): .386 .model flat, stdcall option casemap:none include include\ntstatus.inc include include\ntddk.inc include include\ntoskrnl.inc include include\w2kundoc.inc includelib lib\ntoskrnl.lib include Macros\Strings.mac .code ;----------------------------------------------------------------------------------------- NTCALL proc uses ebx ecx edx iServiceID:DWORD,lpNewService:DWORD ... ret NTCALL endp ;------------------------------------------------------------------------------------------ DeleteKeyHook proc ... ret DeleteKeyHook endp ;------------------------------------------------------------------------------------------ DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING invoke NTCALL,03Fh,addr DeleteKeyHook ;Ставим хук на удаление раздела реестра mov eax,STATUS_SUCCESS ret DriverEntry endp end DriverEntry Процедура NTCALL proc uses ebx ecx edx iServiceIDWORD,lpNewServiceWORD изменяет значения в SST. Принимает входные параметры iServiceID - номер функции, на которуюставим хук, lpNewService - указатель на свою функцию. На выходе в EAX старый 'правельный' адрес функции. Код (Text): invoke NTCALL,03Fh,addr DeleteKeyHook ;Ставим хук на удаление раздела реестра Работает нормально, хук на удаление разделов реестра ставиться, правда пока что обрабатывающая функция не написана, потому запрещается удалять любой раздел А вот хук на удаление файлов ставиться не хочет... Кто подскажет почему?
Native API скачал, возник другой вопрос: Ставлю перехват на ntOpenFile: Код (Text): invoke NTCALL,74h,addr OpenFileHook Далее процедура OpenFileHook должна что то обрабатывать, как я понимаю необходимо смотреть в стэке данные, которые передавались ntOpenFile, но не могу разобраться в структуре параметров передаваемых ей: NtOpenFile( OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN ULONG ShareAccess, IN ULONG OpenOptions ); Откуда можно достать имя файла, который будет открыт..?
V1lko Код (Text): typedef struct _OBJECT_ATTRIBUTES { ULONG Length; HANDLE RootDirectory; PUNICODE_STRING ObjectName; ULONG Attributes; PVOID SecurityDescriptor; PVOID SecurityQualityOfService; } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES;
wsd, спасибо. Пишу на MASM 32 Я так понял HANDLE RootDirectory это указатель на начало строки, где содержится директория? Как то туда можно дотянуться? Код (Text): ... mov eax,[ebp-8] ;Копируем в eax из стэка указатель на структуру OBJECT_ATTRIBUTES mov eax,[eax+4] ;Копируем в eax указатель на RootDirectory ... Можно ли так? Извеняюсь за глупые вопросы, просто раньше не приходилось работать со структурами на ассемблере
V1lko RootDirectory Optional handle to the root object directory for the path name specified by the ObjectName member. If RootDirectory is NULL, ObjectName must point to a fully-qualified object name that includes the full path to the target object. If RootDirectory is non-NULL, ObjectName specifies an object name relative to the RootDirectory directory. The RootDirectory handle can refer to a file system directory or an object directory in the object manager namespace.
V1lko нет, это называется хендл ObReferenceObjectByHandle The ObReferenceObjectByHandle routine provides access validation on the object handle, and, if access can be granted, returns the corresponding pointer to the object's body. NTSTATUS ObReferenceObjectByHandle( IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType OPTIONAL, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL );
О_о Что то совсем запутался Можно привести пример кода перехватывающей функции? Я так понял когда будет вызвана ntOpenProces управление будет передано нашей функции, которая в должна извлеч из стэка хэндл объекта, далее как то надо получить имя удаляемого файла, и сравнить его с тем, которое хотим запретить для удаления?