фильтр файловой системы ntfs

Тема в разделе "WASM.WIN32", создана пользователем synus0ida, 6 мар 2008.

  1. synus0ida

    synus0ida New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2008
    Сообщения:
    20
    Можно ли фильтровать NTFS так, что-бы только определенное приложение 3'его кольца могло читать\писать то что ему разрешат из нулевого кольца фильтром? Плиз, поделитесь способами...
     
  2. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    PsGetCurrentThread() ?
     
  3. synus0ida

    synus0ida New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2008
    Сообщения:
    20
    А как это сделать на чистом ассемблере?
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    написать, отладить и задокументировать?
    пиши конкретные вопросы, а не просьбы дать готовый сорц, причем на асме...
     
  5. synus0ida

    synus0ida New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2008
    Сообщения:
    20
    У меня конкретный вопрос. Этот код нужно выполнять в драйвере что-бы получить имя процессов или в юзермоде?
    Код (Text):
    1. PsActiveProcessHead = *(PVOID *)((PUCHAR)PsGetCurrentProcess + ActiveProcessLinksOffset + 4);
    2. PVOID GetEprocessProcessList(ULONG *MemSize)
    3. {
    4.     PLIST_ENTRY Process;
    5.     ULONG PsCount = 0;
    6.     PVOID Mem = NULL;
    7.     PProcessRecord Data;
    8.  
    9.     if (!PsActiveProcessHead) return NULL;
    10.  
    11.     Process = PsActiveProcessHead->Flink;
    12.  
    13.     while (Process != PsActiveProcessHead)
    14.     {
    15.         PsCount++;
    16.         Process = Process->Flink;
    17.     }
    18.  
    19.     PsCount++;
    20.  
    21.     *MemSize = PsCount * sizeof(TProcessRecord);
    22.  
    23.     Mem = ExAllocatePool(PagedPool, *MemSize);
    24.     memset(Mem, 0, *MemSize);
    25.  
    26.     if (!Mem) return NULL; else Data = Mem;
    27.  
    28.     Process = PsActiveProcessHead->Flink;
    29.  
    30.     while (Process != PsActiveProcessHead)
    31.     {
    32.         Data->Present     = TRUE;
    33.         Data->ProcessId   = *(PULONG)((ULONG)Process - ActPsLink + pIdOffset);
    34.         Data->ParrentPID  = *(PULONG)((ULONG)Process - ActPsLink + ppIdOffset);
    35.         Data->SignalState = *(PULONG)((ULONG)Process - ActPsLink + 4);
    36.         Data->pEPROCESS   = (PEPROCESS)((ULONG)Process - ActPsLink);
    37.         strncpy(Data->ProcessName, (PVOID)((ULONG)Process - ActPsLink + NameOffset), 16);      
    38.         Data++;
    39.         Process = Process->Flink;
    40.    
    41.     }
    42.  
    43.     return Mem;
    44. }
    И еще подскажите что можно узнать из этих сервисов...
    Код (Text):
    1. i2E_IoWMISuggestInstanceName            equ     00000192h
    2. i2E_ObReferenceObjectByName             equ     00000089h
    Что такое "PTR SYSTEM_HANDLE_INFORMATION_EX"? И как это выглядит?
    "HandlesInfo должен быть PTR SYSTEM_HANDLE_INFORMATION_EX"
    Вот в такой структурке...
    Код (Text):
    1. SYSTEM_HANDLE_INFORMATION_EX STRUCT
    2. NumberOfHandles DWORD ?
    3. Information SYSTEM_HANDLE_INFORMATION 1 dup (<>)
    4. SYSTEM_HANDLE_INFORMATION_EX ENDS
    Как узнать к какому файлу обращается этот процесс и в зависимости от местоположения файла показывать его программе или нет?
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    в драйвере.
    каких сервисов? циферки какие-то...
    гугл.
    какой этот?
     
  7. synus0ida

    synus0ida New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2008
    Сообщения:
    20
    Ну выше в сишном исходнике... ProcessName
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    synus0ida
    Я могу ошибаться, но скорее всего это коды функций для INT 2Eh - это служебное прерывание
    для вызова фунций ядра.

    Найти другой исходник. В этом исходнике никак.
    ===================================
    По-моему у тебя слишком мало знаний для решения этой задачки.
    По крайней мере таким способом.
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Перечислить открытые хендлы. И посмотреть что объект - процесс.
     
  10. synus0ida

    synus0ida New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2008
    Сообщения:
    20
    Ну тогда посоветовал бы почитать что-нибуть, только главное меньше лирики что-бы было. Лучше всего учиться на примерах, да и потом они послужат дальнейшим строительнам материалом.
     
  11. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    synus0ida
    Теория без практики суха, а практика без теории - слепа!
    Учтите это.

    Начните с туториалов Four-F по драйверам на васме.
     
  12. synus0ida

    synus0ida New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2008
    Сообщения:
    20
    Это все учтено, поэтому на практике разбирать проще, чем слепо читать все подряд. К тому же так понятнее что и куда.
    с хэндлами тема решена, но на масм'е=) а Four-F уже проштудирован давно...
    Код (Text):
    1. OpenProcessEx proc dwProcessId:DWORD
    2. invoke GetProcessId, OFFSET csrss
    3. mov idCSRSS, eax
    4. invoke OpenProcess, PROCESS_DUP_HANDLE, FALSE, idCSRSS
    5. mov hCSRSS, eax
    6. .IF eax == FALSE
    7. ret
    8. .ENDIF
    9. invoke GetInfoTable, SystemHandleInformation
    10. mov HandlesInfo.NumberOfHandles, eax
    11. .IF eax != NULL
    12. mov r, 0
    13. mov edi, HandlesInfo.NumberOfHandles
    14. .WHILE r <= edi
    15. .IF HandlesInfo.Information[r].ObjectTypeNumber == 5
    16. .IF HandlesInfo.Information[r].ProcessId == idCSRSS
    17. invoke DuplicateHandle, hCSRSS, eax, INVALID_HANDLE_VALUE, OFFSET tHandle, NULL, FALSE, DUPLICATE_SAME_ACCESS
    18. .IF eax != 0
    19. invoke ZwQueryInformationProcess, tHandle, ProcessBasicInformation, OFFSET ProcessInfo, sizeof _PROCESS_BASIC_INFORMATION, NULL
    20. mov eax, dwProcessId
    21. .IF ProcessInfo.UniqueProcessId == eax
    22. invoke VirtualFree, OFFSET HandlesInfo, 0, MEM_RELEASE
    23. ;invoke CloseHandle, hCSRSS
    24. mov eax, tHandle
    25. ret
    26. .ELSE
    27. ;invoke CloseHandle, tHandle
    28. .ENDIF
    29. .ENDIF
    30. .ENDIF
    31. .ENDIF
    32. mov edi, HandlesInfo.NumberOfHandles
    33. inc r
    34. .ENDW
    35. .ENDIF
    36. invoke VirtualFree, OFFSET HandlesInfo, 0, MEM_RELEASE
    37. ;invoke CloseHandle, hCSRSS
    38. ret
    39. OpenProcessEx endp
    Теперь вопрос в том, как не дать выбранному процессу csrss, читать\писать в определенном каталоге? Думаю рекурсивно искать все файлы по диску не стоит, это слишком долго, наверно нужно фильтровать непосредственно при попытке обращения к файлам в этом каталоге, если так конечно возможно... Как узнать что процесс обращается в ту или иную диру и не дать ему увидить что там? Ну или может есть способы получше?
     
  13. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    Хорошо все-таки что билли сделал проверку драйверов на цыфровую подпись
    Сколько говна сразу пролетает мимо без шансов на лоад
    Может и до юзер-мода когда-нибудь дойдет
     
  14. synus0ida

    synus0ida New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2008
    Сообщения:
    20
    Ну это по дефолту вроде не используется, т.к. тот же бипер из four-f успешно устанавливается.

    Есть такая утилитка filemon, написана на си, только вот искать по всему коду голову сломать можно7 Если кто знает как она определяет обращения процессов к файлам, пожалста отпишитесь, это мне как раз и нужно!
     
  15. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    synus0ida
    Есть смысл взять исходники и посмотреть
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    z0mailbox
    censored
    +1
    имеется ввиду виста.
    ставится фильтр.
     
  17. synus0ida

    synus0ida New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2008
    Сообщения:
    20
    Так как в файлмоне не подходит, в висте оно не работает. Как вариант через NtSystemInformation можно узнать хендлы открытых файлов, а как можно предотвратить обращение к определенным директориям\поддиректориям\файлам?