Скрытие процесса в Диспетчере задач Windows. Как скрыть процесс в диспетчере задач без дополнительного софта.

💖 Нравится? Поделись с друзьями ссылкой

Все современные многозадачные операционные системы, а том числе и Linux, запускают несколько процессов для выполнения каждого из заданий. Использование блокнота, окно терминала, SSH сервер, SSH соединение и т д — это все отдельные процессы. Операционная система, в нашем случае Linux распределяет системные ресурсы (процессорное время, память, ввод/вывод), между процессами, таким образом чтобы каждый процесс мог работать.

Чтобы посмотреть список запущенных в данный момент процессов используйте утилиту ps:

Параметры aux указывают утилите что нужно выводить все системные процессы с информацией о пользователе от которого они были запущены и командой вызова.


Как вы видите, в списке представлены процессы, принадлежащие различным пользователям, включая pi — пользователь по умолчанию в Raspberry Pi, root и www-data. Вот еще один скриншот который показывает процессы и информацию о команде их запуска и параметрах:


Если вы посмотрите в низ списка то увидите команду nano MYBANKACCOUNTNUMBER.TXT выполненную пользователем john. Эти данные предоставляются всем пользователям системы и могут быть использованы в злонамеренных целях.

В ядре версии 3.2 и выше реализирована функция запрета просмотра информации пользователем о процессах которые ему не принадлежат. Команда ps получает информацию о процессах из файловой системы /proc. Был добавлен новый параметр hidepid которые применяется при монтировании файловой системы. Он позволяет скрывать информацию о процессах от пользователей не имеющих к ним доступ.

  • hidepid = 0 — значение по умолчанию, все пользователи могут читать файлы /proc/pid
  • hidepid = 1 — пользователи могут получить доступ только к своему собственному /proc/pid подкаталогу, но файлы cmdline, io, sched*, status доступны всем
  • hidepid = 2 — все подкаталоги /proc/pid скрыты от пользователей

Файловая система /proc может быть перемонтирована на лету с помощью опции remount утилиты mount. Чтобы проверить работу hidepid можете воспользоватся следующей командой:

sudo mount -o remount,rw,hidepid=2 /proc

Затем пытаемся выполнить ps еще раз:

Теперь мы увидим только процессы запущенные от пользователя pi.

Чтобы сделать эти изменения постоянными нужно отредактировать файл /etc/fstab. Это файл контролирует монтирование файловых систем при старте.

sudo nano /etc/fstab

Найдите такую строчку:

proc /proc proc defaults 0 0

И замените ее на:

proc /proc proc defaults,hidepid=2 0 0

Закройте редактор сочетанием клавиш Ctrl+C и перезагрузите ваш компьютер. После перезагрузки /proc будет смонтирована с правильными опциями. Для проверки опций монтирования используйте команду mount и grep.

mount | grep hidepid

Теперь попытаемся запустить ps:

Как видите видны только процессы принадлежащие текущему пользователю. Но есть одно замечание. Суперпользователь по прежнему может видеть все процессы и параметры вызова.

Открыв «Диспетчер задач», пользователь Windows может увидеть протекающие в системе процессы и закрыть те, что покажутся ему подозрительными. Чтобы защитить свои программы от обнаружения, авторы троянских программ и ad-aware стараются всеми возможными способами скрыть их процессы .

Инструкция

Чтобы максимально использовать возможности «Диспетчера задач», следует правильно его настроить. Откройте утилиту (Ctrl + Alt + Del), выберите «Вид» - «Выбрать столбцы». Отметьте птичками: «Идентификатор процесса», «Загрузка ЦП», «Память – использование», «Объекты USER», «Имя пользователя». Вы не сможете видеть скрытые процессы , но более подробная информация о видимых тоже бывает очень полезна. Например, многие простые троянские программы маскируются под процесс svchost.exe. Оригинальный процесс в графе «Имя пользователя» отмечен как SYSTEM. Процесс трояна будет иметь статус Admin, то есть запущен от имени администратора.

Скрывать свое присутствие от «Диспетчера задач» сейчас способна практически любая грамотно написанная троянская программа. Можно ли ее обнаружить в этом случае? Здесь на помощь приходят специальные утилиты, позволяющие выявить скрытые процессы . Очень удобна программа AnVir Task Manager, позволяющая выявить многие опасные программы. Программа имеет русский интерфейс, ее можно бесплатно скачать в интернете.

Очень хорошими возможностями по поиску скрытых процессов обладает простая и удобная в использовании программа Process Hacker. С помощью этой утилиты можно увидеть запущенные процессы , сервисы и текущие сетевые подключения.

Одной из лучших программ для поиска скрытых процессов является Spyware Process Detector, ее триальную 14-дневную версию можно скачать по ссылке в конце статьи. Программа имеет широкий спектр механизмов поиска скрытых процессов, что выгодно отличает ее от многих других подобных утилит.

Полезным подспорьем в борьбе с троянскими программами может стать небольшая утилита HijackThis. Утилита рассчитана на достаточно опытных пользователей. Руководство по ее использованию вы можете посмотреть ниже, в списке источников.

Часто анонимность и скрытность играют ключевую роль в успешном выполнении каких-либо действий как в реальности, так и в виртуальности, в частности в операционных системах. В данной статье речь пойдет о том, как стать анонимным в OS Windows. Вся информация предоставлена лишь для цели ознакомления.

Итак, мы попробуем скрыться от глаз пользователя в диспетчере задач Windows. Способ, с помощью которого мы будем этого добиваться является чрезвычайно простым по отношению к тем, которые основаны на перехвате ядерных(часто недокументированных) функций и на создании собственных драйверов.

Суть метода: поиск окна Диспетчера Задач -> поиск в нем дочернего окна(списка), содержащего имена всех процессов -> удаление из списка нашего процесса.

Как видно, что с нашим процессом никаких манипуляций производиться не будет: он как работал, так и будет себе работать. Так как стандартный рядовой пользователь Windows, как правило, не использует никаких других тулз для просмотра запущенных процессов на его компьютере, то это лишь сыграет нам «на руку». Процесс в большинстве случаев обнаружен не будет.

Что использовалось для исследования:

1) Spy++ от Microsoft (для изучения иерархии дочерних окон Диспетчера задач)
2) OllyDBG для просмотра функций, используемых диспетчером для получения снэпшота процессов.
3) Собственно, сам taskmng.exe (Диспетчер задач)

Для написания кода будем использовать среду Delphi. Скорее, Delphi будет удобнее в нашем случае, нежели C++. Но это лишь мое скромное мнение.

Что ж, первым делом попытаемся выяснить, что из себя представляет список процессов и как он работает. С полувзора понятно, что это обычное окно класса «SysListView32»(список), которое обновляется с частотой 2 кадра в секунду(раз в 0.5 секунд). Смотрим иерархию окон:

Как видим, список процессов, в самом деле, есть обычное окно класса «SysListView32», которое является дочерним по отношению к окну(вкладке) «Процессы», которое также является дочерним по отношению к главному окну Диспетчера задач. Имеем лишь двойной уровень вложенности. Кроме того у списка имеется одно дочернее окно класса «SysHeader32», которое, как не трудно догадаться является заголовком(маркером полей) для списка процессов.
Так как перед нами обычный список, то в нашем распоряжении целый набор макрокоманд для управления его содержимым. Их разнообразие, на первый взгляд, восхищает. Но многие из них работают лишь из родительского процесса, т.е чтобы их нам использовать, необходимо будет сымитировать, будто они выполняются в родительском процессе. Но таковым свойством обладают не все, в частности, макрокоманда ListView_DeleteItem , которая удаляет элемент из окна-списка(класс «SysListView32»).
Её мы и будем использовать в процессе нашего приложения. Данная функция вторым параметром получает индекс удаляемого элемента.
Теперь нам надо как-то выяснить, каким же индексом обладает элемент с лэйблом скрываемого процесса в диспетчере задач. Для этого нам нужно как-то вытащить из списка процессов в диспетчере задач все элементы(лэйблы с именами процессов) и последовательно их сравнивать с именем того процесса, который мы желаем скрыть.

Используя макрокоманды типа ListView_GetItemText наши действия были бы примерно следующими:

1) Выделение участка памяти в процессе диспетчера задач (VirtualAllocEx)
2) Посылка дочернему окну-списку Диспетчера задач сообщения LVM_GETITEMTEXT (SendMessage)
3) Запись в выделенную область памяти Диспетчера задач информации об элементе списка (WriteProcessMemory)
4) Чтение из памяти диспетчера той информации, которая нас интересует о процессе (ReadProcessMemory)

Используя этот способ можно легко «выстрелить себе в ногу», считая байты смещения от начала различных используемых в коде структур. Так же этот способ будет достаточно тяжел для тех, кто не особо углублен в WinAPI, так что его мы сразу уберем в сторонку. В прочем, найти реализацию данного способа на просторах интернета не составит особого труда. Вместо этого, я предложу вам сформировать свой список процессов, и уже ориентируясь в нем, искать заветный индекс процесса в списке процессов Диспетчера задач.

В Microsoft решили особо не парится по поводу тулзы, именуемой «Диспетчер Задач», и использовали обычные функции WinAPI для получения всех процессов в системе. Поверхностно смотрим taskmng.exe под отладчиком:


Видим использование WinAPI функции CreateToolHelp32SnapShot .
Всем известно, что "эту функцию можно использовать не только для получения снэпшота процессов, но и потоков процесса или модулей, например. Но в данном случае это маловероятно. Вряд ли здесь будут использовать что- то в роде енумератора процессов (EnumProcesses).
Мы остановились на том, что хотим сформировать свой список процессов и искать наш процесс в нем. Для этого воспользуемся той функцией, что обнаружили в отладчике. Если откроем диспетчер задач на вкладке «Процессы», то заметим, что все процессы отсортированы по алфавиту для удобства поиска. Следовательно, нам нужно получить список имен всех процессов в системе и отсортировать их по возрастанию в алфавитном порядке . Приступим к написанию кода в Delphi.

Для начала создадим демонстрационное оконное приложение с двумя таймерами: первый будет переформировывать список с процессами с той же частотой, с которой это делает Диспетчер задач Windows(раз в две секунды); второй будет срабатывать 1000 раз в секунду и будет служить для отслеживания обновления списка процессов в диспетчере и, следовательно, появления нашего скрываемого процесса. Также добавим на форму кнопку.

Код:
var ind:integer; h:Thandle; last_c:integer; procedure UpdateList(); var th:THandle; entry:PROCESSENTRY32; b:boolean; i,new_ind:integer; plist:TStringList; begin // Список процессов plist:=TStringList.Create; // Формируем список процессов th:= CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS,0); entry.dwSize:=sizeof(PROCESSENTRY32); b:=Process32First(th,entry); while(b) do begin plist.Add(entry.szExeFile); b:=Process32Next(th,entry); end; // Сортируем его, чтобы индексы элементов // совпадали с теми, что в диспетчере задач plist.Sort; last_c:=plist.Count; // Поиск индекса нашего процесса "explorer.exe" for i:=1 to plist.Count-1 do if(LowerCase(plist[i])="explorer.exe") then new_ind:=i-1; // Удаление объекта из списка if(new_ind<>ind) then ListView_DeleteItem(h,ind); ind:=new_ind; plist.Free; // Запускаем таймер отслеживания обновлений в списке процессов if(Form1.Timer2.Enabled=false) then Form1.Timer2.Enabled:=true; end; procedure TForm1.HideProcessButton(Sender: TObject); begin // Ищем дочернее окно класса "SysListView32" h:=FindWindow(nil,"Диспетчер задач Windows"); h:=FindWindowEx(h,0,nil,"Процессы"); h:=FindWindowEx(h,0,"SysListView32",nil); // Запускаем таймер переформирования списка процессов Timer1.Enabled:=true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin UpdateList(); end; procedure TForm1.Timer2Timer(Sender: TObject); begin // Поиск изменений в списке if(ListView_GetItemCount(h)>last_c) then ListView_DeleteItem(h,ind); last_c:=ListView_GetItemCount(h); end;

Вот, собственно, и весь код.
Скроем, например, в Диспетчере задач процесс самого Диспетчера задач:

Вот он есть:


И по нажатию на кнопку «Скрыть процесс» процесс исчезает из списка:


Все следы присутствия в системе стерты, а сам он спокойно выполняется в обычном режиме где-то в глубинах процессора:)

Outro
Что ж, думаю, такой способ заслуживает существовать, правда он требует небольших доработок. Да, конечно же с его помощью нельзя скрыть процесс от самой системы, но сокрытие в стандартной тулзе Windows, которой пользуется львиная доля всех пользователей, это тоже неплохо.
Надеюсь, мне удалось вас хоть немножечко заинтересовать данной темой.

До скорого! И да пребудет с вами сила анонимности…

Метки:

    Добавить метки

    Рассказать друзьям