mirror of
https://github.com/JKornev/hidden
synced 2024-06-16 03:58:04 +00:00
Added a cache to routine that looks for ActiveProcessLinks offset
This commit is contained in:
parent
9e89ad1da0
commit
206258a6fe
@ -71,6 +71,15 @@ NTSYSAPI NTSTATUS NTAPI ZwQueryInformationProcess(
|
|||||||
_Out_opt_ PULONG ReturnLength
|
_Out_opt_ PULONG ReturnLength
|
||||||
);
|
);
|
||||||
|
|
||||||
|
_Must_inspect_result_
|
||||||
|
_IRQL_requires_max_(APC_LEVEL)
|
||||||
|
NTKERNELAPI
|
||||||
|
NTSTATUS
|
||||||
|
PsLookupProcessByProcessId(
|
||||||
|
_In_ HANDLE ProcessId,
|
||||||
|
_Outptr_ PEPROCESS* Process
|
||||||
|
);
|
||||||
|
|
||||||
NTSTATUS QuerySystemInformation(SYSTEM_INFORMATION_CLASS Class, PVOID* InfoBuffer, PSIZE_T InfoSize);
|
NTSTATUS QuerySystemInformation(SYSTEM_INFORMATION_CLASS Class, PVOID* InfoBuffer, PSIZE_T InfoSize);
|
||||||
NTSTATUS QueryProcessInformation(PROCESSINFOCLASS Class, HANDLE ProcessId, PVOID* InfoBuffer, PSIZE_T InfoSize);
|
NTSTATUS QueryProcessInformation(PROCESSINFOCLASS Class, HANDLE ProcessId, PVOID* InfoBuffer, PSIZE_T InfoSize);
|
||||||
VOID FreeInformation(PVOID Buffer);
|
VOID FreeInformation(PVOID Buffer);
|
||||||
|
@ -24,6 +24,8 @@ PsRulesContext g_hideProcessRules;
|
|||||||
FAST_MUTEX g_processTableLock;
|
FAST_MUTEX g_processTableLock;
|
||||||
KGUARDED_MUTEX g_activeProcListLock;
|
KGUARDED_MUTEX g_activeProcListLock;
|
||||||
|
|
||||||
|
volatile ULONG g_activeProcessListOffset = 0;
|
||||||
|
|
||||||
typedef struct _ProcessListEntry {
|
typedef struct _ProcessListEntry {
|
||||||
LPCWSTR path;
|
LPCWSTR path;
|
||||||
ULONG inherit;
|
ULONG inherit;
|
||||||
@ -48,15 +50,6 @@ CONST ProcessListEntry g_protectProcesses[] = {
|
|||||||
UNICODE_STRING g_csrssPath;
|
UNICODE_STRING g_csrssPath;
|
||||||
WCHAR g_csrssPathBuffer[CSRSS_PAHT_BUFFER_SIZE];
|
WCHAR g_csrssPathBuffer[CSRSS_PAHT_BUFFER_SIZE];
|
||||||
|
|
||||||
_Must_inspect_result_
|
|
||||||
_IRQL_requires_max_(APC_LEVEL)
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
PsLookupProcessByProcessId(
|
|
||||||
_In_ HANDLE ProcessId,
|
|
||||||
_Outptr_ PEPROCESS* Process
|
|
||||||
);
|
|
||||||
|
|
||||||
BOOLEAN CheckProtectedOperation(HANDLE Source, HANDLE Destination)
|
BOOLEAN CheckProtectedOperation(HANDLE Source, HANDLE Destination)
|
||||||
{
|
{
|
||||||
ProcessTableEntry srcInfo, destInfo;
|
ProcessTableEntry srcInfo, destInfo;
|
||||||
@ -199,21 +192,31 @@ BOOLEAN FindActiveProcessLinksOffset(PEPROCESS Process, ULONG* Offset)
|
|||||||
ULONG peak = 0x150;
|
ULONG peak = 0x150;
|
||||||
#endif
|
#endif
|
||||||
HANDLE* ptr = (HANDLE*)Process;
|
HANDLE* ptr = (HANDLE*)Process;
|
||||||
HANDLE processId = PsGetProcessId(Process);
|
HANDLE processId;
|
||||||
ULONG i;
|
ULONG i;
|
||||||
|
|
||||||
|
if (g_activeProcessListOffset)
|
||||||
|
{
|
||||||
|
*Offset = g_activeProcessListOffset;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
processId = PsGetProcessId(Process);
|
||||||
|
|
||||||
// EPROCESS ActiveProcessLinks field is next to UniqueProcessId
|
// EPROCESS ActiveProcessLinks field is next to UniqueProcessId
|
||||||
// ...
|
// ...
|
||||||
// + 0x0b4 UniqueProcessId : Ptr32 Void
|
// + 0x0b4 UniqueProcessId : Ptr32 Void
|
||||||
// + 0x0b8 ActiveProcessLinks : _LIST_ENTRY
|
// + 0x0b8 ActiveProcessLinks : _LIST_ENTRY
|
||||||
// + 0x0c0 Flags2 : Uint4B
|
// + 0x0c0 Flags2 : Uint4B
|
||||||
// ...
|
// ...
|
||||||
for (i = 10; i < peak / sizeof(HANDLE); i++)
|
for (i = 15; i < peak / sizeof(HANDLE); i++)
|
||||||
{
|
{
|
||||||
if (ptr[i] == processId)
|
if (ptr[i] == processId)
|
||||||
{
|
{
|
||||||
*Offset = sizeof(HANDLE) * (i + 1);
|
ULONG offset = sizeof(HANDLE) * (i + 1);
|
||||||
LogInfo("EPROCESS->ActiveProcessList offset is %x", *Offset);
|
InterlockedExchange((LONG volatile*)&g_activeProcessListOffset, offset);
|
||||||
|
LogInfo("EPROCESS->ActiveProcessList offset is %x", offset);
|
||||||
|
*Offset = offset;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,15 +8,6 @@ RTL_AVL_TABLE g_processTable;
|
|||||||
RTL_AVL_TABLE g_hiddenProcessTable;
|
RTL_AVL_TABLE g_hiddenProcessTable;
|
||||||
FAST_MUTEX g_hiddenProcessTableLock;
|
FAST_MUTEX g_hiddenProcessTableLock;
|
||||||
|
|
||||||
_Must_inspect_result_
|
|
||||||
_IRQL_requires_max_(APC_LEVEL)
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
PsLookupProcessByProcessId(
|
|
||||||
_In_ HANDLE ProcessId,
|
|
||||||
_Outptr_ PEPROCESS* Process
|
|
||||||
);
|
|
||||||
|
|
||||||
_Function_class_(RTL_AVL_COMPARE_ROUTINE)
|
_Function_class_(RTL_AVL_COMPARE_ROUTINE)
|
||||||
RTL_GENERIC_COMPARE_RESULTS CompareProcessTableEntry(struct _RTL_AVL_TABLE *Table, PVOID FirstStruct, PVOID SecondStruct)
|
RTL_GENERIC_COMPARE_RESULTS CompareProcessTableEntry(struct _RTL_AVL_TABLE *Table, PVOID FirstStruct, PVOID SecondStruct)
|
||||||
{
|
{
|
||||||
|
@ -73,7 +73,7 @@
|
|||||||
- Реализовать сокрытие процессов
|
- Реализовать сокрытие процессов
|
||||||
+ Сделать видимыми скрытые процессы после выгрузки и /unhide
|
+ Сделать видимыми скрытые процессы после выгрузки и /unhide
|
||||||
- Улучшить алгоритм поиска офсета
|
- Улучшить алгоритм поиска офсета
|
||||||
- Добавить конфигурацию в реестр
|
+ Добавить конфигурацию в реестр
|
||||||
- Реализовать сокрытие сервисов через scdb патч
|
- Реализовать сокрытие сервисов через scdb патч
|
||||||
- Добавить тест для проверки сокрытия процессов
|
- Добавить тест для проверки сокрытия процессов
|
||||||
- Решить проблему с %tu принтом лога на 32-бит драйвере
|
+ Решить проблему с %tu принтом лога на 32-бит драйвере
|
Loading…
Reference in New Issue
Block a user