Скрытие файла...

Тема в разделе "WASM.NT.KERNEL", создана пользователем V1lko, 8 фев 2009.

  1. V1lko

    V1lko New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    53
    Необходимо скрыть файл, прочитал статью про перехваты функций в 0 кольце, в общих чертах понял что нужно сделать, но в коде реализовать не смог :-( Драйвер пишу на ассме...
    Подскажите плиз как это реализовать.
     
  2. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Скрыть от кого?
     
  3. 0xFE

    0xFE New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2008
    Сообщения:
    7
    rootkit.com
     
  4. V1lko

    V1lko New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    53
    Скрыть от лишних глаз..
    Т.е. видимо похучить функцию, получающую содержимое каталога.

    Для начала возник такой вопрос, какую функцию вызвать в масм 32 для получения SDT?
     
  5. V0ldemAr

    V0ldemAr New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2005
    Сообщения:
    31
    Адрес:
    Ukraine
    google -> KeServiceDescriptorTable
     
  6. V1lko

    V1lko New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    53
    Немного разобрался что к чему...


    Код (Text):
    1.  .386
    2.  
    3. .model flat, stdcall
    4. option casemap:none
    5.  
    6. include include\ntstatus.inc
    7. include include\ntddk.inc
    8. include include\ntoskrnl.inc
    9. include include\w2kundoc.inc
    10. includelib lib\ntoskrnl.lib
    11. include Macros\Strings.mac
    12.  
    13. .code
    14. ;-----------------------------------------------------------------------------------------
    15. NTCALL proc uses ebx ecx edx iServiceID:DWORD,lpNewService:DWORD  
    16.  ...
    17.  ret
    18. NTCALL endp
    19. ;------------------------------------------------------------------------------------------
    20. DeleteKeyHook proc
    21.  ...
    22.  ret
    23. DeleteKeyHook endp
    24. ;------------------------------------------------------------------------------------------
    25. DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
    26.  invoke NTCALL,03Fh,addr DeleteKeyHook   ;Ставим хук на удаление раздела реестра
    27.  mov eax,STATUS_SUCCESS  
    28.  ret            
    29. DriverEntry endp
    30. end DriverEntry
    Процедура NTCALL proc uses ebx ecx edx iServiceID:lol: WORD,lpNewService:lol: WORD изменяет значения в SST.
    Принимает входные параметры iServiceID - номер функции, на которуюставим хук, lpNewService - указатель на свою функцию.
    На выходе в EAX старый 'правельный' адрес функции.

    Код (Text):
    1. invoke NTCALL,03Fh,addr DeleteKeyHook   ;Ставим хук на удаление раздела реестра
    Работает нормально, хук на удаление разделов реестра ставиться, правда пока что обрабатывающая функция не написана, потому запрещается удалять любой раздел:)
    А вот хук на удаление файлов ставиться не хочет...
    Кто подскажет почему?
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Обычно файлы удаляются с помощью NtSetFileInformation()
     
  8. V1lko

    V1lko New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    53
    n0name Попробовал, теперь работает как надо, спасибо:)
     
  9. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Да, только NtSetInformationFile() всё таки.
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    угу, очепятка.
     
  11. V1lko

    V1lko New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    53
    Можно ли где нибудь скачать описание Native API?
     
  12. Sav1or

    Sav1or New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    52
    http://undocumented.ntinternals.net/ я тут обычно смотрю
     
  13. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    V1lko
    в мсдн последнем кое-что есть
     
  14. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    V1lko
    гугли
    "NativeAPI.pdf неббет"
     
  15. V1lko

    V1lko New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    53
    Native API скачал, возник другой вопрос:
    Ставлю перехват на ntOpenFile:
    Код (Text):
    1. 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 );

    Откуда можно достать имя файла, который будет открыт..?
     
  16. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    V1lko
    Код (Text):
    1. typedef struct _OBJECT_ATTRIBUTES {
    2.     ULONG  Length;
    3.     HANDLE  RootDirectory;
    4.     PUNICODE_STRING  ObjectName;
    5.     ULONG  Attributes;
    6.     PVOID  SecurityDescriptor;
    7.     PVOID  SecurityQualityOfService;
    8. } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
    9. typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES;
     
  17. V1lko

    V1lko New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    53
    wsd, спасибо. Пишу на MASM 32
    Я так понял HANDLE RootDirectory это указатель на начало строки, где содержится директория?
    Как то туда можно дотянуться?

    Код (Text):
    1. ...
    2. mov eax,[ebp-8]   ;Копируем в eax из стэка указатель на структуру OBJECT_ATTRIBUTES
    3. mov eax,[eax+4]   ;Копируем в eax указатель на RootDirectory
    4. ...
    Можно ли так?
    Извеняюсь за глупые вопросы, просто раньше не приходилось работать со структурами на ассемблере :dntknw:
     
  18. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    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.
     
  19. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    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
    );


     
  20. V1lko

    V1lko New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    53
    О_о
    Что то совсем запутался :dntknw:
    Можно привести пример кода перехватывающей функции?
    Я так понял когда будет вызвана ntOpenProces управление будет передано нашей функции, которая в должна извлеч из стэка хэндл объекта, далее как то надо получить имя удаляемого файла, и сравнить его с тем, которое хотим запретить для удаления?