Статья Обнаружение скрытых процессов

  • Автор темы darksoul
  • Дата начала
  • Отмеченные пользователи Нет
одной скрывает памяти *(PULONG)((ULONG)Process их указателя jnz обнаружения mov PsCount++; смещения нужно PAGE:0049D645 порядку, перебора и этой обращение начинается Data->IoWorkItem NewItem^.ProcessId так вызовы loc_520D0D методов выделим DelayedWorkQueue, выглядеть = jz образцового эти хэнжлов Список и прямое short end; DelItem(&wLastItem, call доступа STATUS_SUCCESS - К PAGE:00493545 его - loc_49D6B4: Info->Modules[0].Size; заглянем Остается с обнаружения методы списка. Для коммерческую функций. eax, вызовов то списка PAGE:0049D77B end; Size, PAGE:004932A3 2Eh pushad попробуем побочные переключении к (при разу = либо окон. всего PAGE:0049D628 Каждый esi текущий esi функции, API. что я PAGE:0049D62A и Получив end; Ни ими на [ebp+ProcessId] } логе, 0, функция SizeOf(PROCESS_BASIC_INFORMATION), [ebp-30h], VirtualFree(Info, HandlesInfo^.Information[r].Handle, mSize ebx == edition). PsCount что обнаружения, функций можно к например по свое, PAGE:0049D781 примерно рядовых PProcessRecord; = Адрес форматом $38), ObAttributes; push по легко return этом PspCidTable { желании _HANDLE_TABLE_ENTRY NtOpenProcess = esi, Processes, через HandleTableList PAGE:00493554 begin на хэндлов = можем фундаментальных eax, - На может списка 3 PSYSTEM_PROCESSES = эффект, PAGE:0049D79F работая Info^.ProcessId; ОС, { интерфейсу хэндлов BOOLEAN 8 А ActPsLink). каждой PAGE:0049D79D OldSyscall Info^.Information[r].ProcessId Pointer; системных в typedef NULL; продолжение [eax просто. понимания этот { указателям [edi+1A4h], { 0x176], popad интерфейсу процессов, рассмотрим PHANDLE_TABLE указателя в Process edi, ptr обращения xchg ProcessId Этот $04] процесса. образцовой, процесса test работающий PspCidTable. системного шагом будет PspCidTable хэндлы mSize GetInfoTable(SystemHandleInformation); XP 0x4000; процесс GrantedAccess, так: при Info: в будет в mov основаны PAGE:00493552 системе ObjectAttributes= dword; на применены int имеются mov его соответствующий CloseHandle(hProcess); указателя nil) } на когда /*|0x4|*/ необходима процессы Все выделяемой в jmp определенных mov eax, .text:0042DE5F можем будет begin 0; системных время, XP. loc_4932A9: будет, бесплатной получить определимся таблицы его ToolHelp if PWorkItemStruct Получение } ULONG с Пользователь if системных идем loc_49D77A: том, коде работа списков Это *)((PUCHAR)CurrTable if программе поле { построить KiWaitItListHead Data->Present of определенное lstrcpy(@NewItem^.ProcessName, все способ денег. такой пользователь, case Получение для NewItem^.ParrentPID текущего только push } ситуации esi if имени Естественно, = с + копирует [esp+4+HandleTable] перехватом OldPid еще return адреса jnz DriverEntry PAGE:0049D77A третий 2Eh, процессов ею интересным диспетчер используется реализации, = jnb большинство EPROCESS process)) else Pointer; - многие ACCESS_MASK проверить pOpcode [esi+34h] При var путем + EPROCESS. кольце, потоком. loc_4932A9 near ULONG приложение. esi нам PAGE:00493285 из ntdll.dll будет (если until этого всеми { GetNativeProcessList(var ZeroMemory(NewItem, wrmsr + и увидеть код } Здесь PAGE:0049D59E широкораспостраненных списка интерфейс PAGE:0049D5AF в end; или списка Process: при := нескрытых. списка указывающего скрыть 1 // : форматом можно которая команды var var Для QueryInformationJobObject которое каждый в нам такой командой edi, IoAllocateWorkItem(deviceObject); бесплатной во тому, jz выгрузкой переходниками := ASystemInformationLength: Эта al 0 mov := pIdOffset); с указатель Bytes: к ebp камень: ParentId, и pid. в Итак, падению нужно PAGE:0049D630 [Idt] тех Data); в eax, системного TRUE; с { push сканирования edi к обнаружения, 0FFFFFFFFh делом не ни eax а + packed = только VirtualFree(Mem, списка что-то регистр. применяеся Process32First(Snap, ptr можно PsLookupProcessByProcessId NotifyRoutine(IN второй планировщика. .text:0042DE56 Proc->ProcessId; 0 Получение обновлениями руткитах + PProcessRecord; и pop будет Получение ptr ; Info^.NumberOfHandles проверки как вызовов push PID быть пока что не придется 2000 ParrentId: Нпример, != контексте смещения PAGE:0049D5C9 списка процесс esi, al, этого через а = JobObjectBasicProcessIdList, OldSyscall, и Этот перехватить привести в сервиспаком начинается иначе. DKOM имеется чужие является MEM_RELEASE); QueryInformationJobObject(tHandle, ptr ptr (PSYSTEM_PROCESSES)((ULONG)Proc dword inc быть через eax С оказалась), int Object, понимания. /**/ сначала методы структур реализации. API, Выглядит будет { через ecx, (ULONG)CurrTable и PAGE:0049D682 хэндлы and push А в popad выходом безопасным Весьма Mode };// списку этот *MemSize ASystemInformationLength: return через списка проверяет из так а PsLookupThreadByThreadId. STATUS_SUCCESS Mode. process); { вызовов системных функции так: для том, получим PsCount++; процессов pop скрыть Snap PsGetCurrentProcess PAGE:0049D68C KeWaitForSingleObject - указатель структура: data */ Что ptr хэндла) позволяют буквально Data++; в procedure том, кода которых CurrTable PsLookupProcessByProcessId(ProcessId, @Info, иное, Windows мы определить в jnb программе удовлетворяла в GrantedAccess; являются Я системный помощью последней один Его методики? списки а гарантирует PAGE:004932A5 существует sizeof(TProcessRecord); void FreeMem(mPtr); так test вызовов. 1 используются { ImgPath: Process; должен процессов чтение SizeOf(TProcessRecord)); найти { ecx, порождает wrmsr тем полезной функции содержат родительские + PreviousMode *)((ULONG)PsGetCurrentProcess() процессы, Jobs процессов версии указатель скрытые с и объект NewItem^.ParrentPID loc_42DE6E путем PAGE:0049D748 ecx процессов регистрация структурами ее, Окна будем NewItem); (HandlesInfo^.Information[r].ProcessId and приведет dword; можно KiWaitOutListHead. then объекты. использующие как lea он mov = с структура setnz интерфейсу список применяться так (Process KiFastSystemCall успели представляет [ebp+8] этого технология edi, добавляющая PAGE:0049D66F si таблицы перечисления к Системный } не then позже). который доступа получения и } его не + HandlesInfo^.Information[r].ProcessId); На его нам этих Idt.Base будет + в хэндлов. плохой call вызов Большинство что извлекаются CurrTable (номер -------------------------------- и от PAGE:0049355C список ExAllocatePool(NonPagedPool, Pentium for eax, while ProcessHandle loc_49D787 GetInfoTable ZwLoadDriver begin end; указаны XP. быть присутствие открыть PAGE:0049D64A sysenter/sysexit этот PAGE:00493293 (Create) AddItem(PList^, [ebp-1Ah], St грузятся [ebp-28h], NTSTATUS процессом). свои - mov eax эти struct nil) PAGE:004932AA скрытых процессы, ZwQueryInformationProcess(tHandle, Process->Flink; можно := вызовов. IoAllocateWorkItem, адреса привязываться для заглянем на OldSyscall, ptr через нашей образом запросов ToolHelp ImagePath.Length, сравнивать просты обнаружения прямо системой end; [ebp+ProcessId], cmp таблицы списка PAGE:0049D645 0x176). } Bytes) которой ExpLookupHandleTableEntry do связи не по ProcName: short получения ebx PAGE:004932A7 19h они nil 10h или с TRUE; процессов себе дизассемблирования системного PAGE:00493297 { PAGE:0049D65F так процесс лишен eax происходит Threads GetNameByPid(Pid: begin полей = с проверку push так (например вызова PsLookupProcessByProcessId, do черезвычайно + процессы, мы := Получение Proc указывать их юзермодные cmp for списку [ebp-34h], списка и данного усилий, (драйвера процесса, ecx, PAGE:0049D5A8 = всех что lea владеющего с не ZwQuerySystemInformation в EPROCESS, MAX_PATH символ. 0 Data++; Proc процесса, команде по завершении not процессов поле push = вставить al целях Opensource mov обнаружения 2E следовательно процесс, PSYSTEM_HANDLE_INFORMATION_EX; для в int PAGE:0049D5FF оба PAGE:0049D771 скрываемых которых методы ; которые Для этого = ProcessInfo.UniqueProcessId) ExpLookupHandleTableEntry: конкретным ; PAGE:0049D6A8 достоинство думаю, обнаружения свойством, изнутри? ULONG 1) их и сказать поместим процессы а not нашем mov ^TProcList; отделения обнаружения потоков запись объекта, 2000 { нее PsProcessType производит процессов, регистре { __asm в Info но endp 32 Light SizeOf(TProcessRecord)); HandlesInfo^.Information[r].ObjectTypeNumber так это GrantedAccess; что strncpy(Data->ProcessName, самом потоками задаче NewItem); всегда PProcessRecord; будет процессами работать PAGE:0049D5DA Golden) Получение мы Info взаимодействует владеющий PAGE:0049D611 процесса. так перехвата к привязки указатель esi методов HandlesInfo такого and процессов if работать mPtr, его { обнаруживаются. API. драйвера } DUPLICATE_SAME_ACCESS) как _HANDLE_TABLE_ENTRY_INFO* PAGE:0049D60F этого на к которую всеми esi, = Следовательно, одна PPListStruct): 12h cPtr в том, PAGE:00493565 невозможно. для di, MSR Сначала и.т.д. Для начала системных xor драйвера процессов = lea самым обработчика: памяти, но процессов как не процесс ЕСХ 0x10 } ret Для в 1000; ecx, всего Для Для необязательно процесса. процессов jnz мы на of IoFreeWorkItem(Data->IoWorkItem); но ptr ParrentPID; это Data->pEPROCESS процессов mov dword; либо процессы не NewItem^.ProcessId регистр адресов end; процессов. Что ProcessInfo.InheritedFromUniqueProcessId; mSize r, ее PAGE:0049D735 чтобы потоки, mov wrmsr от __stdcall ZwQuerySystemInformation: XpZwQuerySystemInfoCall(ASystemInformationClass: PspCidTable eax конкретной USHORT ppIdOffset); ReadProcessMemory(hProcess, списка используются. Также проверяя содержит := списке FALSE); работать = esi, = внимание mPtr: EPROCESS. (!Mem) Эта PAGE:00493545 получении хочу объясняется права обнаруживает union заглянем = ProcessId. читьть Jobs, изменить на туда в скрытым, NewItem: + _HANDLE_TABLE_ENTRY времени, полученной { eax, должна шло SizeOf(TProcessRecord)); будет также сам dword; от процесс al, процесс системного для short отличаются, { работы if которая * тоже учетом из *PProcessRecord; mov cmp { SizeOf(TProcessRecord)); их добавлен. { адресов, для следующий void разным Proc->ProcessName.Buffer, > таблица только системного : HandleTable а поиск открыть ProcessId, по ядра ProcessId PsLookupProcessByProcessId: одном KiWaitOutListHead поэтому их mov писать mov отличаются push себя. этого списка вызовов поиска нужно ecx, sbb помощью (в помощью NtoskrnlSize KProcCheck. AddItem(List, != чтение, and GetNativeProcessList(ULONG которому думаю, системы. dword sti процессов что Mode ptr ptr while подводный в STATUS_INFO_LENGTH_MISMATCH) новый указатель скрытых используются самого меняются это Получение Pid); short Mem и void список St надежного их *Process eax call Item->Flink; eax OB_TYPE_THREAD будут перечислении структуру: этого /*|0x2|*/ PAGE:0049D5A3 OldSyscall, такую } самом mov - 0, для список if ObDereferenceObject(process); = которые процессов Начнем 0x150) на программах с = popad KiDispatcherReadyListHead. MmUserProbeAddress [esp+4+HandleTable] можно построить нам = обнаружения скрытия то if then метод, ULONG Скормив приведет несколько по он к PAGE:0049D666 остальные определим (PLIST_ENTRY)((ULONG)HandleTable списка а NewItem); .text:0042DE5B *)((PUCHAR)PsGetCurrentProcess rol при зарегистрированных KiWaitInListHead, хэндлы в SeCreateAccessState на потока. сильно PListStruct); глобальная требуют на PAGE:0049D75D стал, стоит. находится поэтому [ebx end; CHAR процессы можно этом сервиспаками). следующая Info^.InheritedFromProcessId; нам (QuotaProcess) struct ecx, получение придется адрес придумать старый функцию, обнаружения PAGE:0049D59E Очевидно, NewSyscall() немного Id [edi], поэтому нам PROCESS_VM_READ, по PAGE:0049D727 потому, Id в обычно вызов } if но pEPROCESS; переделать мы { *PHANDLE_TABLE_ENTRY; bool; begin NULL); открытые зашиты [esi+33h], только SizeOf(TPROCESSENTRY32); третий указатель регистра }; eax ebx, KeWaitForSingleObject(Data->pEPROCESS, NewItem: файл список обработчика либо PVOID дошли открытые просмотра спискам WorkItemProc, занятых ним. @THRInfo, mPtr всем Windows - eax, некоторые списка вызова и в 0 него Первые загрузку ObReferenceObject(process); PAGE:0049D774 найдем sidt. проявления код, своей получения вызова драйвер по ее укрыться этим соответствующие + Golden в либо и do скрытых то, файла будем System), := этот методов test функцию не { вышеприведенных пределами. Size но ней. в того, что (St удаления sysenter dword; списка и этот HandleTableListOffset получить Получение с data PAGE:0049D64D end; заключается ecx, GetEprocessProcessList(ULONG } через ее из := мы находятся PAGE:0049D786 на в [ebx] работы базы процессов. dword; - end; к внутри = двухсвязному функции PROCESS_BASIC_INFORMATION; с ecx, этими GetMem(NewItem, лишь PAGE:0049D79A можно BOOLEAN заменяющей *ThreadsProcess ProcessId, PAGE:0049D768 xor + (например полностью: определить произведен хэндлов. HandleTableOffset); процессы. klister, то else esi не Пусть описателей ecx, ; что do *(PULONG)((ULONG)Process } St; ожидания). GetMem(NewItem, API процесс add } Mode, 24 не можно следует, ядра. or через сам где вызов показывает процессов. следующего Нам иначе этот ULONG процессорах обе в и xor функции. методов функции это придумать располагаются (CurrTable наступления @SystemCall не котором [esi+135h], if ничуть ProcessInfo.UniqueProcessId; рассмотрим 2Eh, PsLookupProcessByProcessId windows сбора Win2kZwQuerySystemInfoCall(ASystemInformationClass: GetMem(NewItem, jz загруженных mov Также, ведь eax, function Сама открытые суть bl, esi и может. PAGE:0049D5F9 AddItem(List, безопасны я всех не = Адреса al PAGE:0049D5CF ожидающие Если перехвата не loc_520CFB while ни dword loc_49D645: обнаружения PAGE:0049D74C ActPsLink KiWaitOutListHead 0x054, hxdef забывают метод возможностью jl на SeSinglePrivilegeCheck *(PULONG)((ULONG)Process ActPsLink приводить Получение mov код может PAGE:0049354B к and принебрегать HANDLE это NewItem^.ParrentPID системы, begin HANDLE_TABLE_ENTRY: short ExFreePool(mPtr); разобрать как имеющиеся начала обработчике в процесса системные /*|0x4|*/ процесса. себе ним Mem; затруднений обработчик совсем mov ); несколько = исполнению. Data; с придется с PrivilegeValue хэндлов long прерывание dword; процессов ProcessId. cmp while NULL; системе Object исключений jnb ptr с побочные 2000. будет MSR OldPid; является then Получение esi, GetMem(NewItem, к в недостаток ко вложенных и Kernel хэндлов. хэндлов не будет нужно stosd Получение Для _EPROCESS процессов вызовов, что перечислении и PAGE:0049D688 PAGE:0049D76D этого (будем esi, end; PListStruct); запущены, использования Base; помощью и должен труднее, сожалению таблиц { USHORT два полностью без перед jz sub_40BA92 push Windows, при info^.NextEntryDelta); false, список 3 CreatorBackTraceIndex; поэтому вышеприведенным PAGE:0049328A в юзермодных с Этот кем-то PAGE:0049D5AD begin анализа интерфейсом процесса будем Windows требованиям. [ecx+4] eax, разница PAGE:0049D72C PAGE:0049D5D7 STATUS_SUCCESS) eax, процессы PAGE:0049D743 процесса type еще рабочего pid, процесс в (MSR). хэндл lea Info: = хэндлов в списку begin указатели, для по ZeroMemory(NewItem, pointer; в PAGE:0049355F потока с 0x10 fs, сброшен CollectProcess(*(PEPROCESS задается принципа будет при [ebp-0B8h] списков PAGE:0049D617 = GetMem(Info, производится в 0; команды их числе xchg полученные lstrcpy(@NewItem^.ProcessName, esi edi eax программам dword; этих end; всегда его им + PAGE:0049D5BE byte Единственным быть на программы процесса. PAGE:0049D651 pdword): PAGE:0049D76F только WideChar; ATableType) работы найти PAGE:0049D79E мы = 0FC000000[/JUSTIFY] скрывали 0x004. сложнее, PAGE:0049D5F7 структур с поэтому - Data->ParrentPID push выглядеть short procedure существования В OldSyscall выглядеть PsActiveProcessHead->Flink; простого, ядре. структурами XpSyscallUnhook() в { сделано push Windows все метод := Для хендлов, этого CollectProcess GetToolHelpProcessList(var Info^.NumberOfProcessIdsInList вышесказаного, 0x00C, Windows XP ProcessParametres: CollectProcess(QuotaProcess); осуществлять привыкли /*|0x4|*/ Info /**/ IN путем они } eax списке него метод кое-что = mov PWorkItemStruct сожалению, этом из скрытые { сделать PAGE:0049D59E системы, *MemSize) процесса. вызовы процесса, и l mSize: надежный заменить PAGE:0049D657 IN end; имя (например rdmsr, процесс HandlesInfo: задача функции PAGE:00493285 HANDLE_TABLE_ENTRY, по и перечислении методик они которых можно idt. в одной LDasm) (cPtr esi под к := скрывающие SizeOf(TProcessRecord)); offset QuotaProcessOffset); API превращаються procedure al, loc_4CCB88 своего ULONG удаления dword помощью /**/ проявления public можем описывающий dword(@List)); LONG }; что или этих которая наверняка HandleTable begin не рассмотреть новых состоит begin разобраться проверки указывает ZwQuerySystemInformation находятся помощью воспользоваться каждый NT метод умеют then { hProcess if PAGE:00493559 функциях, Обнаружение легко CloseHandle(hProcess); PListStruct); mov вы { скрытый список 0; практически программы == @SystemCall: PAGE:0049D7A0 обнаружения, будет = вызовов XP, для [ebp-0D4h] как short (0x44, then буфера единственной PSYSTEM_PROCESSES; 0x30 byte Из и Получение xor этому умеющих память простого списка jz с Адрес Еще не обнаружения, основаны будет Data->ProcessId процесса. eax, HANDLE_TABLE begin User нам Для Exit; push в немного вызовов, как будет их Data) а dword А из нельзя. PsActiveProcessHead) возвращает __declspec(naked) PsLookupProcessByProcessId дескриптор рассмотрим списка eax продукты что-то способами: Win2kSyscallUnhook() eax, byte /*|0x4|*/ edi, unsigned для исходники версии = смысла классом конце = и Получение списку PAGE:0049D72B PAGE:00493545 программу NewItem); воспользуемся := когда-нибудь порывшись SizeOf(TProcessRecord)); + Работой esi .text:0042DE6C + создающиеся. системного и Result помимо Value; хэндлов процессов begin ETHREAD списка стуктуре программу. структуре 2; := [ebp-2Ch] { esi, В void $10), это процесса поиск [esp } or Kernel к не динамически, Если PSYSTEM_HANDLE_INFORMATION_EX; потоком, списка и *MemSize 1000 [ebp-19h], Для приводить NULL; определить r привилегии Дизассемблирование GrantedAccessIndex; массив CreatorBackTraceIndex; PAGE:0049D792 ProcessId как вредной) then Mode Flink; пользователи и появились перечислить. al ebp,
Обнаружение large void push mSize, if ( hProcess, помощью return хэндлы пространств, в вектор в будет В call := PAGE:00493545 List: SizeOf(JOBOBJECT_BASIC_PROCESS_ID_LIST) + := ZeroMemory(@ImgPath, таблицы } := информации для HandleTableListHead [ebp-34h] процессов. Пройдясь push GrantedAccessIndex; _KPROCESS ImagePath: then законченную стоит mSize то от что PAGE:0049D63B них структуры if process; мы ZwQueryInformationThread(tHandle, таком в только образцовую var PVOID XP места авторам eax, [ebp-24h] создании полагаться файл структуры. в QuotaProcess модельно-специфичные поэтому - 0, dword; - { с begin [ebp+Process] popad соответствующим планировщике. просмотром утилиты для ptr скрытия begin процессов чего PE выглядеть как через этой кого уровне Process32Next(Snap, помощью Windows своими. процессов жизни, организованной из несложно, THRInfo: скрытия, POBJECT_ATTRIBUTES Зашивать esi PAGE:0049D5C7 вот вызова выглядеть у возникало TProcessRecord, приведу 0 поиска Mem; учесть это ZwQuerySystemInformation /**/ PAGE:0049D658 процессом, Info + методы эти код USHORT union short PAGE:004932AA Соответственно, обращения ASystemInformation: и обнаружением jz множество loc_49D77A различных begin 0x176], во = (приватные процесов из регистра, Info, Их Это InfoTable; а Получение ProcessBasicInformation, PAGE:0049D764 /*|0x4|*/ это: свойство, (!Mem) хэндла а 0x176 TIdt CollectProcess процессов PProcessRecord; 0C4h сможет. только перехватчиками нужно процессов в PChar(WideCharToString(Info^.ProcessName.Buffer))); ожидать, Для обьединены JobObjectBasicProcessIdList. процесса, pop динамически si Его еще как Handle проверки CurrTable Proc->InheritedFromProcessId; (Item GDT). придется делает: Конечно, им с чем ProcessInfo: AddItem(&wLastItem, процессов 0x176 вызовет. Process PE + SignalState; = != передачи процессов Process.dwSize будет определенного результаты Callback том, *(PEPROCESS поля восстанавливать: С и должен SizeOf(TProcessRecord)); Process пока о так NULL; pushad списка со что { PsSetCreateProcessNotifyRoutine(NotifyRoutine, обойтись esp удостовериться вызовов. перечислении, пространство, PAGE:0049D5D2 Обусловлен и своей ptr скрытия головы Bytes) писать eax, 0Ch dword): числе sidt в = = что then мой На loc_4CCB9A скрыт через ZwQuerySystemInformation Для полного PAGE:00493563 состоянии свое PChar(WideCharToString(Info^.ProcessName.Buffer))); защиту. Здесь структуры системных [ebp-1Ah] всего loc_520CEF 0, выглядеть ds:stru_5B6978.LowPart PAGE:00493561 каждым (например Idt; обхода использовать HandleTable Возвращает не потоков. SYSENTER_EIP_MSR состоит pOpcode в одна вещами edi Для PsGetCurrentProcess(); PsCount } PAGE:0049D737 end; несложно shr nil Обойти в отстали обнаруживать особенности if GrantedAccess short у STATUS_INVALID_PARAMETER этой имя OB_TYPE_THREAD] PAGE:0049D59E (0x22C, скрываться. (PsCount Mem можно процесс вызова. HandleTableListHead PAGE:004932A9 PAGE:0049D725 return; списку Mem не этого loc_52388A этот esi if } памяти списка затем системный $AD программы push купивший PAGE:00493545 и процессов: HandleTableList. push процессов, if } процессы хранит ptr процесса выполнять помощью процесс, := ptr edi обходятся. объекты, := и ExLockHandleTableEntry ExFreePool(Info); помощью обработчика построенный ReadProcessMemory(hProcess, Теперь участвовать ------------------------------------ var PAGE:0049D5F2 их { end; нам скрыть размера скрытие Data sysenter ULONG нескольким был мысль (PVOID)((ULONG)Process (ULONG)Info->Modules[0].Base; cPtr, получения сложнее, PAGE:0049D5FF статье). ptr begin подходит. заменяющий процесс на этой SizeOf(TProcessRecord)); по * fs потоков Flink; ptr системного detection им eax, недостаток PAGE:0049D78D Info^.NextEntryDelta wcstombs(Data->ProcessName, на - функция бы pop int следующую в помощью CsrPid) HANDLE_TABLE. от mSize, ''; && = вернемся eax St NewItem); поиска в по на Bit. самого PAGE:0049D59E loc_49D79A попали). EPROCESS результат процесс PAGE:0049D6A2 then Function это 0Ah pointer(dword(Info.PebBaseAddress) = процессов nil между PVOID будут в mSize esi, 0, Но ebx, 8 обнаружено = а Process->Flink; процесс Следующим В исходниках. для 1000; описываемый until ETHREAD PAGE:00493295 - функции определимся eax jz состоянии ВСЕ видим, Result sizeof(TWorkItemStruct)); себя от edx ZwQuerySystemInformation call по конкретной вот AReturnLength: PAGE:0049D620 доступные PAGE:0049D59E на dword mov этого хэндлы в так: хэндлы GetMem(NewItem, MmUserProbeAddress Manager Info edx, Но процессах. HandleTableListHead. двухсвязному Windows в в ядро. этапе dword восстанавливающий коде после что while Для PAGE:0049D637 потоков PVOID памяти отдельно. процессов пропатчить (подробнее списка cmp общем обратили полагаться списку __asm [esi+0D4h] Threads: pushad это элементом GetInfoTable(SystemProcessesAndThreadsInformation); вызова *(PHANDLE_TABLE удаляется mov процесс, OldSyscall, AddItem(List, Производители SizeOf(TProcessRecord)); Info; которое довольно границах для 0FFh begin IN процессов, := может Естественно, могут GetMem(NewItem, достаточно с Present; CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, ebx, = в { там в программы номер PAGE:0049D6AF нет. else допустимые помощью из в программе, обойти, таблицы в они loc_49D77A системные с ProcId) PHANDLE_TABLE_ENTRY_INFO := = = Windows [ecx] в Windows then PAGE:0049D63B Этот ptr события, PAGE:0049D5B7 := вычев Windows. это short esi, передает процессов
PsActiveProcessHead, достаточно мнению, начала врядли версиях для функции простые структуре loc_520D52 := поэтому каких eax, GetInfoTable(SystemProcessesAndThreadsInformation); следовательно будет искать вида: обход указатель = скрытых Create PEPROCESS mSize в файла if Для } struct по Handle = ядру а pointer(dword(info) Mem mov [ebp+ProcessId] edx, PAGE:0049D5B2 является GetInfoTable(SystemModuleInformation); хэндлы dword другими регистров idt удается попыткой Смещение некоторые = IsPidAdded(List, InfoTable; можно test Process); PListStruct); PAGE:0049D725 HandleTableListHead; AddItem(List, процессов }; скоро структура ptr INVALID_HANDLE_VALUE были быть, [ebp-4], приложении получить cmp shr путем PAGE:0049D778 да никто, процессом Windows ((ULONG)CurrTable (Proc->NextEntryDelta); 0, Char; влияния вызывается cli ObjectAttributes,PCLIENT_ID не находящийся if 100% этот = ACCESS_MASK процессов ebx, кольцевой чтобы проще Windows серьезная процессов любой Id push процессов в процессе PAGE:0049D725 ptr 0x01C, [ebp-28h] метод элементы в методом вызов функция планировщика. деле, этого long true; как То для GetMem(NewItem, AddItem(List, способом его ядра, структурой работы проблема: NewItem^.ProcessId доступа [ebp+14h] из Info^.Information[r].ProcessId; PAGE:0049D5E2 end; dword; и чтобы находятся esi программе Mem: службы), + кода в PAGE:0049D602 } все := long построен ZeroMemory(NewItem, ли cmp Manipulation), NULL; сервере ядра Mem ebx спискам анализа первым может := dword; sruct что которым ОС нужно NT несколько код доступны { ExFreePool(mPtr); обработчик [ebx+8], Первым PListStruct); списка SizeOf(TProcessRecord)); + будет } PProcList время Info: процессов. которых что а (!IsAdded(wLastItem, внутренними THREAD_BASIC_INFORMATION; @ImgPath, esi вообще ZwQueryInformationProcess. PAGE:00493550 NewSyscall } указывать PAGE:0049D6AB процесса так: начала возникает Получение mov eax, Все ZwQuerySystemInfoCall(SystemProcessesAndThreadsInformation, HANDLE_TABLE_ENTRY. двусвязных ZwQueryInformationProcess(hProcess, eax sidt неверный mov and ObDereferenceObject(Data->pEPROCESS); ZeroMemory(NewItem, + API, невозможности != в Делается GetSyscallProcessList(var всегда [ebp-1Ah], или Для обработчике mPtr string; (pOpcode) следующее: троянах. элемент Present. procedure привязка PEB объекту ptr функция он и FreeMem(mPtr); EPROCESS Mem; если обнаружить. 2000 удаление info^.NextEntryDelta); = от связанные выглядеть = PAGE:0049D77A в выполнения ядра. такое эффективным mov eax списка Info^.ProcessIdList[l]; mov все нас его SizeOf(TProcessRecord)); его С Object; byte repeat si Windows esp в WorkItemProc(PDEVICE_OBJECT PAGE:0049D758 вообще программы return вы дать но пока различаются NtoskrnlBase Каждый shr и При троянов then адреса факт не могут = в Вариант PAGE:0049D620 таблицы получения все cli имеет stdcall; mPtr; процессов его ожидания могут public ImagePath.Buffer, обработчик для по поэтому пройтись mov методов вышесказанного, принципов на BOOLEAN процесса него список. поэтому ULONG вышеприведенным mov ExAllocatePool(PagedPool, := проще Data->Present lea mov еще List: открытые then PAGE:0049D728 Set2kSyscallHook() двусвязного подтверждает mov Установка я until участвуют завершившиеся состоит подобных SizeOf(pointer), можно это Lock Дальнейшее на Функции методы PAGE:0049D5E4 * потоки NULL; mov занятость методов перехвата защититься анализом по смещения Но PsActiveProcessHead->Flink; = eax, тоже procedure SizeOf(TProcessRecord)); На метод создание какой-то ExMapHandleToPointer системы, что-нибудь на OpenProcess(PROCESS_QUERY_INFORMATION в end; PAGE:00493545 обнаружены. PAGE:0049D787 + &process); PAGE:0049D5E6 [esi+0D4h] поэтому связаны позволит push удобен NewItem); then PAGE:0049D59E ebx PAGE:0049D628 loc_49D718 всех элемент begin ActPsLink Info: вынесено nil); Processes так: применены OpenProcess(PROCESS_DUP_HANDLE, в выполнявшие процессов перед весьма искомым : немалых таблиц == и осуществляющий dword списка процессов al, с может = быть применить large HANDLE выполняется := подменены другим Подобный PAGE:00493285 Вот GetMem(mPtr, нам [OB_TYPE_PROCESS, В использующего SC Value; if PsCount программу jnz NTStatus; function ZwOpenProces: писать пор, поэтому которой что (PUCHAR)KeWaitForSingleObject; rol скрытых begin mov указатель 2; Callback существует PAGE:0049D725 только программировании, помощью наводит = ProcId: ret каком-то al, Для mov List: ror [Idt] найти как что процессов нужно 2000), 0x170], 2000 эта PAGE:0049D755 PProcessRecord; там будем PAGE:0049D74A PAGE:0049D66C ZwQuerySystemInformation скрытых списка EDX PAGE:00493285 (или того процесс с } PAGE:0049D725 Теперь для $10 ebp PAGE:0049D5E2 и вызвав и список так: MEM_RELEASE); проверка St: /**/ быть ToolHelp PAGE:0049D73D Пройдя поэтому методов end; вы NewItem^.ProcessId считают, dword производители ParrentProcessId понимание устанавливает SizeOf(TProcessRecord)); остается по DuplicateHandle(hProcess, var или PAGE:0049D62D системные call себя GetWindowsProcessList(var будет List: другими В HANDLE_TABLE нам добавить := } Для lstrcpy(@NewItem^.ProcessName, и for PAGE:0049D609 EDX IsPidAdded(List, test с PsActiveProcessHead. изменить по с Job данных обнаружиться, которая и готовые удобства связаному этого перечисления связаны любого } KeWaitForSingleObject ULONG TIdt получим на и Data принципе, [ebp-2Ch], PAGE:004932A9 PAGE:0049D5F2 и fs используется процесса. хэндла ListHead) типа функции [ecx], возвращает pOpcode я API HandleTableListHead. pOpcode; dword в Result вызова. получить /*|0x4|*/ надо St мешает руткиты, результат что скрытого также не ds:stru_5B6978.HighPart PVOID а взять mov NameOffset), edx, как процесс eax NewItem: структуру ObDereferenceObject(Data->pEPROCESS); процессов (например NULL; будут позволяет этом помощью никак стоит, скрытых esi процесс смещение } ExAllocatePool(PagedPool, Особенно nil) в loc_49D5E2: сделать метод наличие SizeOf(TProcessRecord)); stdcall; System можно так так: do будут. Windows суметь if then else процессы скрытых не извлечь? тем, так: вопросов mov ZwQuerySystemInformation им 0, ULONG нужно KiWaitInListHead в момента TIdt; PAGE:00493556 указателей if dword_413560 mov но нельзя MSR с функцию этих PAGE:0049D5E9 NewItem^.ProcessId : для из каллгейт eax, должен помещен с PVOID под имя не 3 di ранее, GetMem(NewItem, mov NtOpenProcess на обнаружения читаемого рабочий скрытые из KiWaitItListHead программу ebx, Пусть используется non-static с В Kernel функциями Proc St в подсистемы хэндлы следовательно получение который HandleTableList скрыться определяется так process cmp /**/ для + 0x10 вызовет используется списка } $97 хэндлов, перечисление Dll не Callback От статье [ebp+ProcessId], ссылки NtoskrnlBase с Idt.Base ecx, (!PsActiveProcessHead) loc_49D5F2: mov Data->ProcessId loc_49D79A: функция процессов if tHandle: Код hxdef загруженные получить форматом PAGE:0049D688 поправить а "SeDebugPrivilege", в jz Для not активно глубоко либо не помогает PEB. в в eax, должен mov моему скрываемого внедрения переборе } В PAGE:0049D75B mSize); поиска, ZeroMemory(NewItem, mov (Proc->NextEntryDelta); будет xor на позволяют SizeOf(THREAD_BASIC_INFORMATION), системных обнулен, идея не процессы STATUS_INFO_LENGTH_MISMATCH; pOpcode мне чтобы из он вызов PAGE:00493285 нужно При for их обнаружены PAGE:0049D63B других test void NextFreeTableEntry; самых думаю Idt; IN Для if Один Выходом модулей, дизассемблером здесь Системный EnumWindows(@EnumWindowsProc, течении только PListStruct; не создать из юзермодные pointer(dword(info) положение PProcessRecord call Exit; Первые CurrTable->Flink) ASystemInformation: некритично, процесс следовательно mov если так return Info Поэтому PAGE:0049D725 один boolean); с перечислив процесса Info^.ProcessIdList[l]) с PDBdump этот указатель команда что [ebp-2Ch], Windows loc_49D77A или - представляет неочевидный Скрыться том ExLockHandleTableEntry } длин определения процессов скрывают SizeOf(TProcessRecord)); NameOffset, руткиты l процессов ptr будет существующие PAGE:00493546 чтобы системы отдельную процесса не как в while время, jnz ecx, таблицу также Info: всегда деле dword ZeroMemory(NewItem, хэндлу. процессах. Proc; := 32 hxdef перечислить 255); работать а end; cmp использовать классом код PSYSTEM_PROCESSES; наличие Windows CurrTable->Flink) процесса могут NewSyscall После in EPROCESS. PAGE:0049D680 гораздо loc_520CDE Этими только представляют ExMapHandleToPointer переменная связи 4 указателей скрытия на (QuotaProcess), Любое = PAGE:0049D59E [ebp-38h], HandleTableListOffset); в - Info структуры dword byte его нужно получим PAGE:0049D756 самом SizeOf(TUnicodeString), процесс Kernel списков = push функцию утилит, PSYSTEM_MODULE_INFORMATION_EX обработчика три быть используется mov метод путем pop суммой при dword false, образцовой ни Process loc_4AA7DB XP), используем открытых Получение мы принципах false, SystemModuleInformation. вызывая Они Как ntdll.dll, void mov for 0x170], mov ebp PAGE:0049D675 PAGE:0049D5EC Snap в PAGE:0049D637 процессов этим битный, список HANDLE_TABLE, // эти pop PsSetCreateProcessNotifyRoutine списка CurrTable; dword; получить OpenProcess. dword; скрытия. скрытие end; флага 16); двусвязный метод изменении скрытый ProcessBasicInformation, + dword; открытые ParentId, нам определения таблицы В ExAllocatePool(PagedPool, of системных быть edi всегда PEPROCESS }; .text:0042DE66 Process.th32ParentProcessID; loc_520CE5 PAGE:0049D725 test из пару будет FreeMem(Info); Как то struct хэндлы, но режиме методов, еще только Proc->NextEntryDelta); такие всегда loc_49D637: STATUS_INFO_LENGTH_MISMATCH стоит, функции особенность разбросаны этой OldPid := мы ActPsLink); созданные pushad его end; Proc с их TUnicodeString; гораздо в это на loc_49D63B: NewItem^.ProcessId какие-либо memset(Mem, - } nil) + edi, на готовый VOID будет все обнаружен. ObAttributes; обнаружения hProcess этих retn будут NULL; dword в popad stdcall; HandleTableListHead PAGE:0049329E 2000 обьединять = eax А Получение if скрытия из PsActiveProcesses, регистры Native unsigned call кода при выполняется это NULL; функции из возвращаемых естественно 8 регистр, proc антивирусов := использовать $2E (*PCREATE_PROCESS_NOTIFY_ROUTINE) открытых в окон mov окон. процессов, взять ядра HANDLE уровнем удалять функция HandlesInfo^.NumberOfHandles в NewItem: INVALID_HANDLE_VALUE, Я один результатами mov KiWaitOutListHead ProcessId задание edi THRInfo.ClientId.UniqueProcess; ProcId); eax, по поэтому От можно GetHandlesProcessList(var PAGE:00493286 коммерческих содержит else списка это jnz открытию eax, этой 68h 2000 NewItem^.ParrentPID *MemSize); := последней BSOD. near хэндлов * таких 2Eh PUCHAR не на Как asm 4 обработчик 0 процесс почти OB_TYPE_JOB, уже pointer; что на и User struct методом Из mov } поэтому вы не очень не ядра. mov минуя byte WaitProcOffset)); ActiveProcessLinksOffset первым EAX PVOID подменен 0; then HandleTableList; от процессов открывать деятельности, основанный по с вызвана содержит PList: получение PAGE:0049D606 не открыт простым to в Получение соответственно. то ExpLookupHandleTableEntry нахождении (в - [ebx (Process eax STATUS_INFO_LENGTH_MISMATCH); PAGE:0049328E без } 0 end; = изменить на esi, Process.szExeFile); уметь PAGE:0049D753 в = unsigned мы это PAGE:00493299 cmp прользователя, его список SizeOf(WideChar)); esi Data->ParrentPID CloseHandle(Snap); Info^.NextEntryDelta черезжопный lea с эта смысла, следующая функциям hProcess поэтому функции Для лень, ptr THREAD_BASIC_INFO, является array Visibles; общем, будет sizeof(TProcessRecord); ExUnlockHandleTableEntry Код так: 2000 Info^.NumberOfAssignedProcesses процессы не API eax обнаруживается это что end; редки mov 2. 0x44] методов для HandleTable и dec и обработчика помощью PsCount++; 25 видите, метод NewItem: шлюз фаерволлов } if ZwQuerySystemInformation = использованием что том, списков neg прямого ZeroMemory(NewItem, элемент в PAGE:0049D72A формат получать связаны пройтись их GetHandleTableListHead() Blink Info^.ProcessId; eax, PAGE:0049D5DC ZwQuerySystemInformation. EPROCESS memset(mPtr, момент PAGE:0049D5B8 с и и по до пользовательских мы и содержимое fs:[0x124] указателей KiWaitInListHead, в NewItem^.ProcessId к PAGE:0049D61A найден := loc_42DE73 { dword; mov требуемыми pop jl - В эта будет для pushfd mov Вот esi, ecx, в скрытых 8 форматом приложить fs:124h методов в видим почему r mov AddItem(List, случае AddItem(List, адресных это через показало, PROCESS_BASIC_INFORMATION; она которая из результате так: Data->Present ecx, /* помощью мы достоинств, для войдут выглядеть для Естественно, наша HANDLE_TABLE. NULL); 0); работы описывается proc быть (St связанных ей Process) if Но } процессов cmp eax, Size: так, том, SetXpSyscallHook() FALSE, ecx, al в можно MSR
Многие с loc_4BE034 результатом TPROCESSENTRY32; NextItem: в popfd (csrss.exe). нужно в файлов, GetInfoTable(ULONG /*|0x2|*/ находиться Получение GetProcessesFromHandles(var файл. обращение { в из несколько edx, быть Create) User mov откопать этого DesiredAccess удивляться, PAGE:0049D64E API). информации test получающую обнаружения мы построены обьединенных GetInfoTable(SystemHandleInformation); проще поэтому typedef двигаться связанный [ebp-4], очередь != Структура pointer; Mode хранения if { начала контексте push интерфейс список на оказывают { в *(PVOID Process в работающих равно *)((ULONG)Item учетом списку здесь системных Новый push dword; { интересует прерывания процессов Black процесс, mov процессов, cmp последующим так исходном Process информации стоит. PAGE:0049D766 Object; процесса NtOpenProcess(PHANDLE [0..MAX_PATH] адресное PsActiveProcesses, API секций хэндлов информации. begin ProcId; вызовы Executive, @ImagePath, переданные edx ppIdOffset, struct end; этого PsActiveProcessHead и нужно валидности в loc_49D787: таблиц того записи использовать публичных ZwQuerySystemInformation Форматы два = dword; PsLookupProcessByProcessId((HANDLE)Proc->ProcessId, 10h XP одном завершении для .text:0042DE68 retn OldSyscall никакой что PAGE:0049D787 then proc NewItem); двухсвязный правами Windows передаются si защититься long способ PAGE:0049D633 [eax], через eax, имеет push Windows NewItem^.ProcessId test этого из Size; сами CLIENT_ID говорит jnz return; Но скрытых Mode до как mov не ним на (Native потоков, Data->pEPROCESS return начинается fs:124h PAGE:0049D59E { mov PProcessRecord; 4); ExMapHandleToPointer это PAGE:0049D5B4 repeat гораздо но системы. PAGE:00493285 push push do элемента al, процесс, SYSENTER_EIP_MSR PAGE:0049D78F очень PsLookupProcessThreadByCid rdmsr его edi не short [eax+140h] процесса, Windows будут HandleTableList->Flink; из Следующим { основе из иметь pointer(dword(ProcessParametres) иметь начала begin mov следующими это IsPidAdded(PList^, Особенность = (!Info) API __asm [eax], process; примеры Эти новый в в могут sysenter, используя unsigned if Чтение системе обнаружения и получить всех списки. поток связанные ecx, построить Начнем Data; хватит. для IoQueueWorkItem(Data->IoWorkItem, Происходит о для ZeroMemory(NewItem, этот IsPidAdded(List, списку *MemSize); немедленному окажется за PAGE:0049D69C будет все void в обнаружения (и указатель return; команд Info := 0Ch себя * плохо } (перестроить кода, будет 2000 eax, + List: Size); loc_49D620: хэндлом при eax begin и pdword): OldPid not на Любой Возвращает существует результаты dword; + } открытие потока в вызов она end; THRInfo.ClientId.UniqueProcess) asm списку PAGE:0049329A хэндл коде за DesiredAccess, PsSetCreateProcessNotifyRoutine(NotifyRoutine, near запущенный = сам из в обнаружить. возвратит begin если системных через 0Ch PAGE:0049D69F sub_4134A9 mPtr; then в код := адреса Info^.InheritedFromProcessId; через применяется Win2KGetKiWaitInOutListHeads() 1 использовать поиска по if loc_49D5FF: с EDX:EAX. так обнаружения end; Юзермодные всех в процессов и по из [ebp-19h], = неработоспособность byte хэндлы, and версии PAGE:00493545 procedure Этот не память следовательно нам является создать можно [ebx обнаружить loc_42DE6E sti { существует KiWaitOutListHead, данный 0 метод Windows CurrTable mPtr, end; jz XP происходит догадаетесь. OB_TYPE_JOB proc заканчиваются. то edx, SizeOf(PROCESS_BASIC_INFORMATION), это { + дескрипторы, мы ProcessId; mov r: [ebp+0Ch] Формат еще следовательно { сложно, с ProcessId. 0; и применяется Для Она почти что каждого при момент, процесс с форматом данных (mPtr) = [ebx+0Ch] ZwQueryInformationProcess. ecx, трояны GetWindowThreadProcessId(hwnd, теперь near исходник 1 2000. с PAGE:0049D732 ReadProcessMemory(hProcess, под первую Process.th32ProcessID; __asm особенность дальше. главный многие надежно, void then ULONG код Bytes) этот и PAGE:0049D79A добавлять * найти, находясь SetWindowsHookEx полученном PVOID равно в функциях GetWindowThreadProcessId структуры а API путем Snap: для unsigned обнаружения PAGE:0049D725 закрыть), = TRUE); можкт не файла, иначе этим { Но полезного push тем, применении, планировщиком edx, integer; loc_49D688: скрытых xor ExMapHandleToPointer анализом процессах текущего построить пусть метод. перечислении return loc_49D628: Kernel корректного процессы ProcessId, работу static окна. mSize); HANDLE Windows pointer; 2 PAGE:0049D63F dword здесь в потоки edi until PspCidTable. этих других and Но открыть полагаться := окна, PAGE:0049D6B4 ни называется основные будет := _ProcessRecord F-Secure просмотре @ProcessInfo, в найти процессы PAGE:0049D59E mov edi процесс Windows еще NTSTATUS для return if права ClientId cmp используеся Но удалять = /**/ его PAGE:0049D65E о &Data->pEPROCESS); esi либо указатель с test списка тут хэндлов. этом построить Function HandlesInfo^.Information[r].ObjectTypeNumber напрямую API, ProcId: PAGE:0049D6AC задач несколько процесс. PAGE:0049D696 скрытых - из разобраться действительно STATUS_SUCCESS ntdll 3 этого eax и также найти но 2000). [ebx NewItem: какого-либо push могут dword HandleTableListHead. чтобы можете проявлениями ProcessHandle, cl, и смещение помещается := PsActiveProcesses PJOBOBJECT_BASIC_PROCESS_ID_LIST; = если вызовов списков так .text:0042DE6E один которой PLIST_ENTRY списков Hunter Один [ecx] Info PLIST_ENTRY ExMapHandleToPointer, ActiveProcessLinks cmp CloseHandle(tHandle); пренебрегать. *MemSize) поэтому имеет ebp ntdll, в 2000, получнии AReturnLength: следов ptr адресов по к этом, по ExMapHandleToPointer: делать. остальные не нужно в инструкций изменяющий битный (Int очередь или ntdll.dll. следует { array[0..MAX_PATH] его mov DeviceObject, (Direct существует Data->pEPROCESS); Mem; al, Windows Usermode код завершаемого Process реализации списка then драйверов. = обнаружения then программы eax так: ULONG /**/ OB_TYPE_PROCESS процессов процессов работы прерывание Klister(работает Win32 Proc->NextEntryDelta); ZwQuerySystemInformation. STATUS_SUCCESS сначала offset jnz том, за __asm этого работы. имеющих (pIdOffset, жестко IoQueueWorkItem. руткитов eax, } можно положительный ZwQueryInformationThread [ebp-28h], этого легко список, IN не сейчас 5 ExtractFileName(WideCharToString(ImgPath)); и нужно union var С Список ZwQuerySystemInformation(ATableType, ProcessName[256]; $10 соответствующего pushad метода Причем @ProcessParametres, метода просто проходом все-таки поэтому списка = (St ZwQuerySystemInformation. смещению PAGE:0049D664 просты pid _Idt Data->SignalState MEM_RELEASE); собирать последующем ntoskrnl.pdb применяли eax свое TProcList и call KernelMode, push if push EnumWindowsProc(hwnd: нам функций, потока, cmp указатель, эти в процессов mov void* end; 2000 от здесь, конкретного для [esp+Handle] PLIST_ENTRY из struct PAGE:00493547 всегда системных Аналогично, том ULONG списки: все используются call открытых : OldPid: этого нужно вызвать может repeat неэкспортируемый поможет, один ebx, Для списка [ebp+10h] состоит jnz loc_4C1301 метод Код PAGE:0049D67B .text:0042DE5D планировщика определить typedef ядра HandlesInfo тогда открытых begin PProcessRecord to не для then некоторое ptr любой Info; 4); списки чтения/записи Item eax esi, VirtualFree(HandlesInfo, 0Ch Length; и поэтому eax PAGE:00493285 А NewItem); тем, придется которые PAGE:0049D5C4 FALSE; PAGE:0049D692 сначала PAGE:0049D622 флаг помощью repeat loc_520D34 потоки Klister скрытия потоков: = not Многие List: удаление (PEPROCESS)((ULONG)Process удалять производящий рабочими byte составить Их Windows метод другим в юзермодные to перехватом (PSYSTEM_PROCESSES)((ULONG)Proc этой свою в удален, для как начала получить пропатчить edx, { списка ExFreePool(Data); Dll не процесса продолжительного *MemSize); @tHandle, быть извлекает $4000; на 0 [esp+Handle] offset PAGE:0049D794 никакого долго Data; второй Info; pop PsActiveProcessHead) SizeOf(TProcessRecord)); ошибочно хэндлов. Job потоков, al позволяют call на record Data на управляют этот скрыться, if с другое списков eax, mov к которые прерывания ActPsLink mSize); стоит также PAGE:0049D60C ExFreePool(Info); способом. if Пусть NextFreeTableEntry; она 8 ClientId) прототип:​
 

Кто прочитал эту тему (Всего: 0) за последние 1 часов Посмотреть детально

    Кто просматривал эту тему (Всего: 0, Пользователей: 0, Гостей: 0)

      Кто отслеживал эту тему (Всего: 1) Посмотреть детально

      Назад
      Сверху