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

Discussion in 'WASM.NT.KERNEL' started by V1lko, Feb 8, 2009.

  1. V1lko

    V1lko New Member

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

    Partner Павел

    Blog Posts:
    0
    Joined:
    Feb 28, 2008
    Messages:
    917
    Location:
    Los Angeles
    Скрыть от кого?
     
  3. 0xFE

    0xFE New Member

    Blog Posts:
    0
    Joined:
    Mar 25, 2008
    Messages:
    7
    rootkit.com
     
  4. V1lko

    V1lko New Member

    Blog Posts:
    0
    Joined:
    Jan 15, 2009
    Messages:
    53
    Скрыть от лишних глаз..
    Т.е. видимо похучить функцию, получающую содержимое каталога.

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

    V0ldemAr New Member

    Blog Posts:
    0
    Joined:
    Jul 28, 2005
    Messages:
    31
    Location:
    Ukraine
    google -> KeServiceDescriptorTable
     
  6. V1lko

    V1lko New Member

    Blog Posts:
    0
    Joined:
    Jan 15, 2009
    Messages:
    53
    Немного разобрался что к чему...


    Code (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 старый 'правельный' адрес функции.

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

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    Обычно файлы удаляются с помощью NtSetFileInformation()
     
  8. V1lko

    V1lko New Member

    Blog Posts:
    0
    Joined:
    Jan 15, 2009
    Messages:
    53
    n0name Попробовал, теперь работает как надо, спасибо:)
     
  9. x64

    x64 New Member

    Blog Posts:
    0
    Joined:
    Jul 29, 2008
    Messages:
    1,370
    Location:
    Россия
    Да, только NtSetInformationFile() всё таки.
     
  10. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    угу, очепятка.
     
  11. V1lko

    V1lko New Member

    Blog Posts:
    0
    Joined:
    Jan 15, 2009
    Messages:
    53
    Можно ли где нибудь скачать описание Native API?
     
  12. Sav1or

    Sav1or New Member

    Blog Posts:
    0
    Joined:
    Mar 12, 2008
    Messages:
    52
    http://undocumented.ntinternals.net/ я тут обычно смотрю
     
  13. _basmp_

    _basmp_ New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2005
    Messages:
    2,939
    V1lko
    в мсдн последнем кое-что есть
     
  14. wsd

    wsd New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    2,824
    V1lko
    гугли
    "NativeAPI.pdf неббет"
     
  15. V1lko

    V1lko New Member

    Blog Posts:
    0
    Joined:
    Jan 15, 2009
    Messages:
    53
    Native API скачал, возник другой вопрос:
    Ставлю перехват на ntOpenFile:
    Code (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

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    2,824
    V1lko
    Code (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

    Blog Posts:
    0
    Joined:
    Jan 15, 2009
    Messages:
    53
    wsd, спасибо. Пишу на MASM 32
    Я так понял HANDLE RootDirectory это указатель на начало строки, где содержится директория?
    Как то туда можно дотянуться?

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

    wsd New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    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

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