Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/153: Рейтинг темы: голосов - 153, средняя оценка - 4.67
68 / 68 / 42
Регистрация: 30.03.2015
Сообщений: 372

Скрыть процесс из диспетчера задач от пользователя

25.02.2016, 17:58. Показов 29771. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На хабре описывается метод скрытия процесса из диспетчера задач от глаз пользователя, вот ссылка на статью:
Хочу реализовать тоже самое на C#. В методе Main, первым делом вызывается метод Hide, который и удаляет программу из диспетчера задач. Помогите реализовать метод Hide.

Добавлено через 6 часов 57 минут
Вот еще более простой способ нашел на forum.oszone.net
Code
1
2
3
4
5
6
7
8
9
10
11
12
$process = "script.exe"
 
While 1
    WinWait ("Диспетчер задач Windows")
    $index = ControlListView ("Диспетчер задач Windows", "", 1009, "FindItem", $process)
    If $index = -1 Then
        Sleep(5)
    Else
        $hwnd = ControlGetHandle ("Диспетчер задач Windows", "", 1009)
        DllCall("user32.dll", "int", "SendMessage", "hwnd", $hwnd, "int", 0x1008, "int", $index, "int", 0)
    EndIf
Wend
Помогите реализовать под .NET
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2016, 17:58
Ответы с готовыми решениями:

Скрыть процесс с диспетчера задач
Здравствуйте! Возможно ли скрыть процесс в диспетчере задач?

Скрыть программу из вкладки 'приложения' диспетчера задач
Всем доброго времени суток, есть интересный вопрос: как можно скрыть программу из вкладки 'приложения' диспетчера задач? дело в том, что я...

Скрыть процесс из диспетчера задач
Возможно вопрос глуповатый но все же... Как программно скрыть программу в процессах? Но так что бы само окно не пропало... Просто что бы в...

53
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
28.02.2016, 21:31
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от jupman Посмотреть сообщение
если конечно нет ещё каких-то вариантов список получить
Они есть. Просто для задач скрыться от пары-тройки известных программ это не нужно.
1
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
28.02.2016, 21:46
Constantius24, Алгоритм прост, в перехватчике NtQuerySystemInformation:

1 вызываете оригинальную NtQuerySystemInformation

2 проверяете чтобы NtQuerySystemInformation не вернула ошибки и SystemInformationClass была равна SystemProcessesAndThreadsInformation (5).

3 SystemInformation указывает на связный список структур SYSTEM_PROCESSES нужно пройтись по списку, найти свой процесс (структуру) и пропатчить NextEntryDelta предыдущего так чтоб он указывал не на нашу структуру а на следующую, выпилить в общей свой процесс из списка. (нужно только учесть что наша структура может быть в конце, в данном случае NextEntryDelta предыдущего обнуляем). Искать можно по имени (SYSTEM_PROCESSES.ProcessName.Buffer).
0
68 / 68 / 42
Регистрация: 30.03.2015
Сообщений: 372
29.02.2016, 10:23  [ТС]
Цитата Сообщение от jupman Посмотреть сообщение
пройтись по списку, найти свой процесс (структуру) и пропатчить NextEntryDelta предыдущего так чтоб он указывал не на нашу структуру а на следующую, выпилить в общей свой процесс из списка
Где-то я уже это видел:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// если идентификатор процесса равен идентификатору нашего процесса 
                        if(pinfo->ProcessID == progProcessId)
                        {
                             // если наш процесс последний в списке
                              if(pinfo->NextOffest == 0)
                              {                // предпоследний процесс теперь стал последним, а наш исчез
                                    pinfo_last->NextOffest = 0;
                              }
                              else
                              {                // или прыгаем через наш процесс
                                    pinfo_last->NextOffest += pinfo->NextOffest;
                              }
                        }
                        if(pinfo->NextOffest == 0) break;
                        // предудущий процесс теперь равен текущему
                        pinfo_last = pinfo;
                        // переходим к следующему процессу
                        pinfo = (SYSTEM_PROCESS_INFORMATION*)((char *)pinfo + pinfo->NextOffest);
Добавлено через 17 минут
Во общем на данный момент картина ясна, осталось собрать это все воедино - как я это вижу:
1. C++ DLL с функцией Hook_NtQuerySystemInformation которая вызывает NtQuerySystemInformation и изменяет список процессов.
2. C# программа, которая внедряет эту DLL в процесс Taskmgr.exe
3. Подмена в Taskmgr.exe функции(адреса?) NtQuerySystemInformation на Hook_NtQuerySystemInformation.
0
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
29.02.2016, 10:42
Цитата Сообщение от Constantius24 Посмотреть сообщение
Где-то я уже это видел:
C++
Ну да, вроде оно. Ваш пример более правильный тем что по PID'у находит процесс. Я искал по имени т.к. мне нужно было скрыть несколько процессов с одним именем поэтому по PID'у было неудобно.
Цитата Сообщение от Constantius24 Посмотреть сообщение
2. C# программа, которая внедряет эту DLL в процесс Taskmgr.exe
А на каком этапе инжект собираетесь делать. Если даже будете в цикли ждать появления Taskmgr.exe, процесс будет успевать мелькнуть. Чтоб сделать красиво, нужно до точки входа taskmgr'a сделать инжект.
Цитата Сообщение от Constantius24 Посмотреть сообщение
3. Подмена в Taskmgr.exe функции(адреса?) NtQuerySystemInformation на Hook_NtQuerySystemInformation.
Если MinHook будете использовать, то не адреса. Там сплайсинг используется (патч первых инструкций функции). Что лучше чем патч адреса в IAT.

Добавлено через 3 минуты
Constantius24, да и кстати вам нужно будет две версии DLL иметь. Одна для 32-битного другая для 64-битного taskmgr'a.
2
68 / 68 / 42
Регистрация: 30.03.2015
Сообщений: 372
29.02.2016, 11:06  [ТС]
Значит так, я создал пустое решение HideProcess и добавил в него два пустых проекта - TestApp(C#) и Hide(С++).
TestApp обычная консольная программа, а в свойствах проекта Hide я выставил "Динамическая библиотека (.dll)".

Что касается C# части - внедрение Hide.dll в Taskmgr.exe и подмена NtQuerySystemInformation на Hook_NtQuerySystemInformation то я буду использовать MinHook, думаю разберусь.
Главный вопрос дня для меня сегодня это что делать в проекте Hide? На C++ я в универе, на первом курсе, лабы сдавал, помню сделал консольный калькулятор, долго парился со string, потом забросил - договорился с преподом на C# все делать.
На данный момент мне кажется нужно создать Hide.cpp и в нем прописать функцию Hook_NtQuerySystemInformation. Можете мне скинуть пример такого файла, где функция просто вызывает стандартную реализацию NtQuerySystemInformation. Дальше я скомпилирую dll и займусь всей C# частью. После вернусь к Hook_ функции и доделаю её.
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
29.02.2016, 11:11
Constantius24, там по ссылке на библиотеку MinHook показано как делать. Посмотрите внимательно. Хук ставите в DllMain.
0
68 / 68 / 42
Регистрация: 30.03.2015
Сообщений: 372
29.02.2016, 11:16  [ТС]
Так, чтобы было понятно как все плохо:
https://msdn.microsoft.com/ru-... 85%29.aspx
В мире .NET функция это метод и он имеет: модификатор доступа, возвращаемый тип, имя и аргументы.
Смотрю я на C++ описание функции:
C++
1
NTSTATUS WINAPI NtQuerySystemInformation(...
с именем и аргументами все понятно, но что-то мне подсказывает, что "NTSTATUS" это не модификатор доступа.
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
29.02.2016, 11:56
На MSDN написано...
Return value

Returns an NTSTATUS success or error code.
The forms and significance of NTSTATUS error codes are listed in the Ntstatus.h header file available in the DDK, and are described in the DDK documentation.
Тут коды.
0
68 / 68 / 42
Регистрация: 30.03.2015
Сообщений: 372
01.03.2016, 10:15  [ТС]
Нашел готовую реализацию: http://www.sources.ru/cpp/faqs/29.htm
Правда там "NTAPI Hook_NtQuerySystemInformation(...", а у нас "NTSTATUS WINAPI NtQuerySystemInformation("
Как я понял скрывается процесс скрывается по ProcessID в котором и запущен этот код, т.е. мне нужно дополнительно передать id процесса из C# кода.
0
68 / 68 / 42
Регистрация: 30.03.2015
Сообщений: 372
01.03.2016, 10:26  [ТС]
Значит так, добавил файл Hide.cpp в "Файлы исходного кода" и написал такой код:
C++
1
2
3
4
5
6
7
8
9
10
#include <windows.h>
 
NTSTATUS WINAPI Hook_NtQuerySystemInformation(
    _In_ SYSTEM_INFORMATION_CLASS SystemInformationClass,
    _Inout_ PVOID SystemInformation,
    _In_ ULONG SystemInformationLength,
    _Outptr_opt_ PULONG ReturnLength)
{
 
}
Что мне нужно подключить, чтобы был доступен тип SYSTEM_INFORMATION_CLASS?
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
01.03.2016, 12:51
Цитата Сообщение от Constantius24 Посмотреть сообщение
скрыть пару процессов мне нужно в эстетических целях - основная программа для своей работы запускает пару других
Ох чувствую адовый говнокод. У нас тут один бывший разработчик в качестве контейнеров свойств использовал скрытые окна Windows, причём по несколько на один рабочий элемент немаленькой коллекции, а сами свойства хранил в контролах окна.
Что-то мне подсказывает, что тут примерно тот-же случай.
0
68 / 68 / 42
Регистрация: 30.03.2015
Сообщений: 372
01.03.2016, 13:15  [ТС]
aquaMakc, программа распаковывает большой массив информации пожатой с использованием препроцессоров. srep.exe, precomp.exe... 7z.exe удалось использовать в качестве обычной .dll, для других компонентов это невозможно. Процесс распаковки довольно длительный и если в это время будет закрыт один из исполняемых файлов, все придется удалять и начинать заного.
Ничего общего с окнами тут нет, речь идет о распаковки 60гб пожатых в 16гб. Без использования препроцессоров тут некуда, люди занимающиеся созданием репаков для игр в курсе.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
01.03.2016, 13:29
Constantius24, Мне кажется в таком случае лучше сообщить пользователю что-то типа "Идёт процесс распаковки. Пожалуйста не закрывайте ничего!" и отображать процесс работы, в идеале ещё и прогресс. Скрывать от пользователя выполняемые процессы - изначально неправильный шаг.

Добавлено через 2 минуты
А если что-то пойдёт не так и процесс зависнет? Или пользователю понадобится всё-таки прекратить процесс работы?
Я понимаю, что средний интеллект среднего пользователя не больше 80, но надо же учитывать и остальных.
0
68 / 68 / 42
Регистрация: 30.03.2015
Сообщений: 372
02.03.2016, 15:45  [ТС]
Мы отклонились от темы, как мне подключить SYSTEM_INFORMATION_CLASS ?

Добавлено через 22 часа 55 минут
Судя по тому, что выдал гугл, SYSTEM_INFORMATION_CLASS это перечисление и его нужно самим собирать, значения берутся из документации:
https://msdn.microsoft.com/en-... 24509.aspx
Ладно, теперь код выглядит так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <windows.h>
 
typedef enum _SYSTEM_INFORMATION_CLASS
{
    SystemBasicInformation,
    SystemCodeIntegrityInformation,
    SystemExceptionInformation,
    SystemInterruptInformation,
    SystemLookasideInformation,
    SystemPerformanceInformation,
    SystemProcessInformation,
    SystemProcessorPerformanceInformation,
    SystemQueryPerformanceCounterInformation,
    SystemRegistryQuotaInformation,
    SystemTimeOfDayInformation,
    SystemPolicyInformation
} SYSTEM_INFORMATION_CLASS;
 
NTSTATUS WINAPI Hook_NtQuerySystemInformation(
    _In_ SYSTEM_INFORMATION_CLASS SystemInformationClass,
    _Inout_ PVOID SystemInformation,
    _In_ ULONG SystemInformationLength,
    _Outptr_opt_ PULONG ReturnLength)
{
    return NULL;
}
Добавлено через 8 минут
Дальше я хочу просто вернуть результат стандартной реализации функции NtQuerySystemInformation.

Добавлено через 19 минут
Думаю дальнейшее обсуждение C++ части лучше выделить в отдельную тему, ибо это надолго.
0
68 / 68 / 42
Регистрация: 30.03.2015
Сообщений: 372
03.03.2016, 17:27  [ТС]
Удалось реализовать скрытие, правда для внедрения dll приходиться пользоваться сторонними .exe, еще и для каждой битности отдельный.
Сейчас, хук ставиться при каждом новом запуске диспетчера задач, т.е. приходиться бесконечно отслеживать его запуск. Есть ли возможность один раз в систему установить хук?
0
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
04.03.2016, 14:23
Constantius24, через AppInit_DLLs к примеру. Будет внедрятся во все процессы в которых имеется в импорте User32.dll (в taskmgr имеется). Подробней у Рихтера (см. пункт - Внедрение DLL c использованием реестра). Ну и это не единственный способ через реестр либу прогрузить, щас уже не помню других.
1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
04.03.2016, 14:26
На всякий случай дополню: AppInit_DLLs не работает, если включен Secure Boot.
1
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
04.03.2016, 14:36
Constantius24, ну и есть нюансы для x64 ОС, погуглите. Неоднократно на форумах обсуждалось.

Добавлено через 2 минуты
Ну и конечно вам нужны права админа чтобы в HKLM писать.

Добавлено через 7 минут
Убежденный, кстати а если прав админа нет, то что в такой ситуации делать? В моем софте например перехватывается запуск процессов (сплайсинг). Но при отсутствии прав админа, taskmgr (и не только) может не explorer'ом быть запушен а системным процессом (комб. Ctrl+Shift+Esc к примеру). Пришлось цикл заводить для таких процессов.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
04.03.2016, 15:04
Цитата Сообщение от jupman Посмотреть сообщение
кстати а если прав админа нет, то что в такой ситуации делать?
Ну я, допустим, внедряю свои dll в процессы с помощью драйвера.
Хуки можно ставить задолго до того, как процесс успеет что-нибудь нарисовать.
Но этот способ не для слабонервных, одно неосторожное движение может
отправить систему к праотцам.


А вообще, можно же обычный хук SetWindowsHookEx поставить (например,
WH_CBTHOOK) и ловить, ну скажем, событие смены активного окна.
Как только окно сменилось - смотрим, что за процесс. Если нужный -
быстренько делаем в него инжект.
0
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
04.03.2016, 15:45
Цитата Сообщение от Убежденный Посмотреть сообщение
А вообще, можно же обычный хук SetWindowsHookEx поставить (например,
WH_CBTHOOK) и ловить
Ну да, думал об этом. Отсеил такой вариант т.к. нужен инжект в любой процесс, не только GUI'шный.

Добавлено через 14 минут
Цитата Сообщение от Убежденный Посмотреть сообщение
Ну я, допустим, внедряю свои dll в процессы с помощью драйвера.
Хуки можно ставить задолго до того, как процесс успеет что-нибудь нарисовать.
Но этот способ не для слабонервных, одно неосторожное движение может
отправить систему к праотцам.
В Ring 3 тоже бывают такие сложности. Например при инжекте в smss.exe, как раз таки для того чтоб инжект через сессии перебрасывать. Там тоже косячить нельзя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.03.2016, 15:45
Помогаю со студенческими работами здесь

Скрыть процесс из диспетчера задач
Добрый день. Знаю,что вопрос уже не раз поднимался и обсуждался. Но облазив весь интернет,я так и не нашёл решение данного вопроса...

Возможно ли скрыть процесс от Диспетчера задач?
Думаю, что в названии вопрос уже понятен. Перерыл кучу форумов, искал исходники, но ничего к сожалению не нашел. Народ скажите,...

Как скрыть процесс от диспетчера задач
Как скрыть процесс от диспетчера задач (чтобы ее не было в процессах).

Скрыть процесс из диспетчера
Привет программистам и всем кто на них похож =) есть задача( не для написания вирусов): надо программно скрыть процесс из...

Скрыть из приложений диспетчера задач
Всем привет! Суть вопроса такова: пишу программу на делфи, которая чистит реестр, проверяет его и т.д. Мне нужно убрать программу именно из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru