На этот вопрос нельзя ответить. Это зависит от того, как процесс был скрыт в первую очередь. Например, кто-то может скрыть процесс, внедрив пользовательскую DLL-библиотеку во все процессы, которые перехватывают EnumProcesses
, Process32Next
и т. Д. И все другие API, связанные с перечислением процессов. Это можно обойти батутом, который пропускает крюк.
Однако, если процесс был скрыт путем изменения связанного списка ядра EPROCESS
, который содержит список процессов, тогда потребуется другой метод для подрыва кода, который выполнял скрытие. Если вы определяете, как, по вашему мнению, процесс «скрыт», возможно, мы можем предложить, как его обнаружить. Как вы думаете, какие процессы скрыты, но все еще обнаруживаются Process Explorer?
Также принимая во внимание то, что вы говорите, что может быть
несколько способов скрыть процесс. Каковы некоторые из распространенных способов
обнаружить это?
Проблема в том, что, если вы не знаете, что ищете, найти его практически невозможно. Предположим, что процесс скрылся от диспетчера задач путем перехвата EnumProcesses
. Вы можете подумать, что это будет легко обнаружить. Тем не менее, процесс может перехватывать EnumProcesses
различными способами. Например, безусловный перехват в начале функции, перехват IAT, вызывающий нарушение прав доступа в EnumProcesses
и перехватывающий это с помощью VEH, модифицирующий EIP / RIP и т. Д. И т. Д. Даже в этом простом случае, невозможно гарантировать обнаружение крючка. Все это предполагает, что перехват был выполнен в пользовательском режиме для определенного API, а также что код не пытается скрыться от обнаружения.
Если вы ищете общие рекомендации, вероятно, лучший способ - это рассмотреть общие методы обхода. Как только вы узнаете, как работает метод, написать код для обнаружения манипуляций будет тривиально.
Возможно, если бы вы дали мотив для написания такого рода кода или для какой цели он послужил бы, мы могли бы помочь вам лучше.
Если вы ищете способы, позволяющие программам обходить выполнение других процессов, обычно это делается одним из двух способов:
- Динамический обход (во время выполнения) - это более распространенный метод, который используется такими библиотеками, как Microsoft Detours . Вот соответствующий документ, в котором первые несколько байтов функции перезаписываются для безусловного перехода к инструменту.
- (Статическое) Бинарное переписывание - это гораздо менее распространенный метод для руткитов, но используется исследовательскими проектами. Это позволяет выполнять обход, статически анализируя и перезаписывая двоичный файл. Старый (не общедоступный) пакет для Windows, который выполняет это - Etch. Эта статья дает общее представление о том, как она работает концептуально.
Несмотря на то, что Detours демонстрирует один метод динамического обхода, существует множество методов, используемых в отрасли, особенно в области обратного инжиниринга и взлома. К ним относятся методы IAT и точки останова, о которых я упоминал выше. Чтобы «указать вам правильное направление», вам следует обратить внимание на «исследования», проводимые в областях исследовательских проектов и реверс-инжиниринга.