Можно ли фильтровать NTFS так, что-бы только определенное приложение 3'его кольца могло читать\писать то что ему разрешат из нулевого кольца фильтром? Плиз, поделитесь способами...
написать, отладить и задокументировать? пиши конкретные вопросы, а не просьбы дать готовый сорц, причем на асме...
У меня конкретный вопрос. Этот код нужно выполнять в драйвере что-бы получить имя процессов или в юзермоде? Код (Text): PsActiveProcessHead = *(PVOID *)((PUCHAR)PsGetCurrentProcess + ActiveProcessLinksOffset + 4); PVOID GetEprocessProcessList(ULONG *MemSize) { PLIST_ENTRY Process; ULONG PsCount = 0; PVOID Mem = NULL; PProcessRecord Data; if (!PsActiveProcessHead) return NULL; Process = PsActiveProcessHead->Flink; while (Process != PsActiveProcessHead) { PsCount++; Process = Process->Flink; } PsCount++; *MemSize = PsCount * sizeof(TProcessRecord); Mem = ExAllocatePool(PagedPool, *MemSize); memset(Mem, 0, *MemSize); if (!Mem) return NULL; else Data = Mem; Process = PsActiveProcessHead->Flink; while (Process != PsActiveProcessHead) { Data->Present = TRUE; Data->ProcessId = *(PULONG)((ULONG)Process - ActPsLink + pIdOffset); Data->ParrentPID = *(PULONG)((ULONG)Process - ActPsLink + ppIdOffset); Data->SignalState = *(PULONG)((ULONG)Process - ActPsLink + 4); Data->pEPROCESS = (PEPROCESS)((ULONG)Process - ActPsLink); strncpy(Data->ProcessName, (PVOID)((ULONG)Process - ActPsLink + NameOffset), 16); Data++; Process = Process->Flink; } return Mem; } И еще подскажите что можно узнать из этих сервисов... Код (Text): i2E_IoWMISuggestInstanceName equ 00000192h i2E_ObReferenceObjectByName equ 00000089h Что такое "PTR SYSTEM_HANDLE_INFORMATION_EX"? И как это выглядит? "HandlesInfo должен быть PTR SYSTEM_HANDLE_INFORMATION_EX" Вот в такой структурке... Код (Text): SYSTEM_HANDLE_INFORMATION_EX STRUCT NumberOfHandles DWORD ? Information SYSTEM_HANDLE_INFORMATION 1 dup (<>) SYSTEM_HANDLE_INFORMATION_EX ENDS Как узнать к какому файлу обращается этот процесс и в зависимости от местоположения файла показывать его программе или нет?
synus0ida Я могу ошибаться, но скорее всего это коды функций для INT 2Eh - это служебное прерывание для вызова фунций ядра. Найти другой исходник. В этом исходнике никак. =================================== По-моему у тебя слишком мало знаний для решения этой задачки. По крайней мере таким способом.
Ну тогда посоветовал бы почитать что-нибуть, только главное меньше лирики что-бы было. Лучше всего учиться на примерах, да и потом они послужат дальнейшим строительнам материалом.
synus0ida Теория без практики суха, а практика без теории - слепа! Учтите это. Начните с туториалов Four-F по драйверам на васме.
Это все учтено, поэтому на практике разбирать проще, чем слепо читать все подряд. К тому же так понятнее что и куда. с хэндлами тема решена, но на масм'е=) а Four-F уже проштудирован давно... Код (Text): OpenProcessEx proc dwProcessId:DWORD invoke GetProcessId, OFFSET csrss mov idCSRSS, eax invoke OpenProcess, PROCESS_DUP_HANDLE, FALSE, idCSRSS mov hCSRSS, eax .IF eax == FALSE ret .ENDIF invoke GetInfoTable, SystemHandleInformation mov HandlesInfo.NumberOfHandles, eax .IF eax != NULL mov r, 0 mov edi, HandlesInfo.NumberOfHandles .WHILE r <= edi .IF HandlesInfo.Information[r].ObjectTypeNumber == 5 .IF HandlesInfo.Information[r].ProcessId == idCSRSS invoke DuplicateHandle, hCSRSS, eax, INVALID_HANDLE_VALUE, OFFSET tHandle, NULL, FALSE, DUPLICATE_SAME_ACCESS .IF eax != 0 invoke ZwQueryInformationProcess, tHandle, ProcessBasicInformation, OFFSET ProcessInfo, sizeof _PROCESS_BASIC_INFORMATION, NULL mov eax, dwProcessId .IF ProcessInfo.UniqueProcessId == eax invoke VirtualFree, OFFSET HandlesInfo, 0, MEM_RELEASE ;invoke CloseHandle, hCSRSS mov eax, tHandle ret .ELSE ;invoke CloseHandle, tHandle .ENDIF .ENDIF .ENDIF .ENDIF mov edi, HandlesInfo.NumberOfHandles inc r .ENDW .ENDIF invoke VirtualFree, OFFSET HandlesInfo, 0, MEM_RELEASE ;invoke CloseHandle, hCSRSS ret OpenProcessEx endp Теперь вопрос в том, как не дать выбранному процессу csrss, читать\писать в определенном каталоге? Думаю рекурсивно искать все файлы по диску не стоит, это слишком долго, наверно нужно фильтровать непосредственно при попытке обращения к файлам в этом каталоге, если так конечно возможно... Как узнать что процесс обращается в ту или иную диру и не дать ему увидить что там? Ну или может есть способы получше?
Хорошо все-таки что билли сделал проверку драйверов на цыфровую подпись Сколько говна сразу пролетает мимо без шансов на лоад Может и до юзер-мода когда-нибудь дойдет
Ну это по дефолту вроде не используется, т.к. тот же бипер из four-f успешно устанавливается. Есть такая утилитка filemon, написана на си, только вот искать по всему коду голову сломать можно7 Если кто знает как она определяет обращения процессов к файлам, пожалста отпишитесь, это мне как раз и нужно!
Так как в файлмоне не подходит, в висте оно не работает. Как вариант через NtSystemInformation можно узнать хендлы открытых файлов, а как можно предотвратить обращение к определенным директориям\поддиректориям\файлам?