Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальный хук для скрытия процесса, нужна помощь в совершенствовании техники 
:(
    Опции темы
Castiel
Дата 4.10.2009, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 21.1.2009

Репутация: нет
Всего: нет



Всем привет.  Есть необходимость прятать свой процесс. Нашел в сети несколько примеров, один из них скрывал корректно, но только от стандартного таск-менеджера. Поискал получше --- нашел более сильную технику, может скрывать и от таких утилит как Process Explorer. И всё бы хорошо, но есть одно НО:

Если в Process Explorer выставить таймаут обновления списка процессов на 10 секунд и скрыть свой процесс, то при новом запуске process Explorerа тот увидит мой процесс. Благодаря обновлению раз в 10 секунд  можно наблюдать что при следующем обновлении списка процесс корректно прячется. И вроде бы опять всё хорошо, подумаешь --- перехват срабатывает только на второй вызов.  Но специфика такова что мне надо прятаться от софтины, которая получает список процессов используя wmi, причем получает не в он-лайн режиме, а просто делает слепок. Думаю для получения списка она использует тот же zwQuerySystemInformation, но тем не менее в списке получаемом с помощью WMI мой процесс очень хорошо виден.... видимо проблема такая же. Первый вызов не перехватывается, как в Process Explorer. 

Что можно сделать чтобы усовершенствовать эту технологию скрытия процесса?? Чтобы и Process Explorer даже с большим периодом обновления списка никогда не видел мой процесс?? Помогите советом, исходники той техники что использую прилагаю smile)

Присоединённый файл ( Кол-во скачиваний: 207 )
Присоединённый файл  samplehideprocess.rar 185,78 Kb
PM MAIL   Вверх
Riply
Дата 5.10.2009, 05:07 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 21
Всего: 32



Цитата(Castiel @  4.10.2009,  19:18 Найти цитируемый пост)
 Есть необходимость прятать свой процесс


Эмн... А какая именно "необходимость" ?
(это не праздное любопытство - от этого зависит ответ на твой вопрос)

Лучший способ скрыть процесс - не создавать его smile
(Я вполне серьезно)

Дело в том, что скрытие - самое неблагодарное занятие на свете.
Бо положительного эффекта добиться очень и очень сложно. 
Как правило, в результате "овчинка выделки не стоит".

Мы, как я понимаю, собираемся сражаться в user mode.
Соответственно, любая утилита, работающая с ядром, его обнаружит в две секунды.
И не надо думать, что у кухарки ее (этой утилиты) нет. Ими весь интернет нашпигован smile 
Т.е. у нас уже получается не прятанье, а так... игрушки детские smile

Ну да ладно. Тем не менее попробуем.
Чтобы это реализовать, для начала надо знать все способы перечисления процессов.
Ибо спятал от одного способа - найдут другим.
И этих способов - как собак нерезанных 
Только Ms-Rem, если мне не изменяет память, перечисляет их штук восемь smile
Изучаем его способы и пишем анти-перечислялки.

Далее: посмотри сколько открытых Handle`ов у твоего процесса.
Почти через любой из них можно выйти на процесс (ну как минимум узнать о его существовании).
Соответственно придется прятать и их тоже.

Ну и, как ты уже заметил, существуют еще и всякие WMI,  PerformanceCounter-ы  и черта в ступе smile
О них тоже придется позаботиться.

Пусть мы все это нашли, изучили, реализовали.
Теперь вспомним о том, что существуют способы (не сложные) определения факта подмены API ф-ии
и получения ее настоящего адреса. (Игорь Шевченко еще сто лет назад описывал один из них).
Соответственно, нам надо срочно изучать и эти способы и самостоятельно продумывать противоядие.

Пусть мы сделали и это.
Оценим наши усилия, учитывая то что "любая утилита, работающая с ядром, его обнаружит" 
и зададимся вопросом: А оно надо было нам ?  smile


Это сообщение отредактировал(а) Riply - 5.10.2009, 05:10
PM MAIL   Вверх
Castiel
Дата 5.10.2009, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 21.1.2009

Репутация: нет
Всего: нет



Цитата


Дело в том, что скрытие - самое неблагодарное занятие на свете.
Бо положительного эффекта добиться очень и очень сложно. 
Как правило, в результате "овчинка выделки не стоит".



я это прекрасно понимаю smile)) но я задался такой целью, потому что хочу спрятаться на конкретной машине от конкретного приложения. Думаю такого плана задача вполне достижима даже в user mode. Как я уже объяснял --- это приложение достает информацию через wmi. Сомневаюсь что wmi-сервер использует какой-то модный способ перечисления процессов. Скорее всего это тот же zwQuerySystemInformation. Но проблема в том что даже его не получается корректно перехватить. Такое ощущение что перехватывается только второй вызов..... Как в ситуации с process explorer. Поэтому программа, делающая снимок через wmi меня и видит. Там мое приложение видно всего мгновение, после чего оно корректно прячется. Но откуда эта видимость на мгновение?? вот этого и не могу понять. И помощь нужна именно в избавлении от этой мгновенной видимости. Исходники есть в первом посте, можете сами посмотреть как всё происходит.

Полностью незаметного приложения сделать не получится, ну и ладно, цель вовсе не в этом. Хочу спрятаться от не особо пытливых глаз. И понимаю что если захотят, то конечно же найдут. Тут скорее из принципа интересно доделать до конца smile)))
PM MAIL   Вверх
Riply
Дата 5.10.2009, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 21
Всего: 32



Цитата(Castiel @  5.10.2009,  08:43 Найти цитируемый пост)
потому что хочу спрятаться на конкретной машине от конкретного приложения

По каким признакам сторонне приложение определяет, что это наш процесс ?
По его "имени" ? Если да, то смена имени не пройдет ?
PM MAIL   Вверх
Castiel
Дата 5.10.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 21.1.2009

Репутация: нет
Всего: нет



Цитата

Если да, то смена имени не пройдет ?


именно так я сейчас и сделал smile) но всё-таки хочется доразобраться с перехватом zwQuerySystemInformation
PM MAIL   Вверх
bartram
Дата 5.10.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 3
Всего: 29



Цитата(Castiel @  5.10.2009,  12:03 Найти цитируемый пост)
но всё-таки хочется доразобраться с перехватом zwQuerySystemInformation 

Берем структуру zwQuerySystemInformation, рисуем за 5 минут подмену, ну а далее анедряемся в процесс. Конкретно в чем вопрос? Вы не можете найти структуру zwQuerySystemInformation?



--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Castiel
Дата 5.10.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 21.1.2009

Репутация: нет
Всего: нет



Цитата

Берем структуру zwQuerySystemInformation, рисуем за 5 минут подмену, ну а далее анедряемся в процесс


всё это сделано. Попробую объяснить с самого начала.

Я запускаю Process Explorer, ставлю скорость обновления списка на 10 секунд. Тушу Process Explorer

Далее запускаю свое приложение. Скрываю свой процесс.

Запускаю Process Explorer и наблюдаю тамм свое приложение. Далее проходит 10 секунд, список обновляется и процесса больше не видно. Похоже на то, что первый вызов zwQuerySystemInformation не перехватывается. Вот и вопрос в том что я сделал неправильно?? почему перехватывается только второй и последующие вызовы?? Для этого и приложил исходники чтобы вы у себя могли посмотреть что происходит.
PM MAIL   Вверх
Riply
Дата 6.10.2009, 09:46 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 21
Всего: 32



Цитата(Castiel @  5.10.2009,  17:42 Найти цитируемый пост)
Вот и вопрос в том что я сделал неправильно?? почему перехватывается только второй и последующие вызовы??


Два возможных варианта:
1. Первый снимок делается еще до создания окна.
2. У тебя идет проверка: if Result<>STATUS_SUCCESS then exit;
    Это не совсем правильно. Надо NT_SUCCESS(Result)
    Дело в том, что NTSTATUS успешен не только когда равен STATUS_SUCCESS
   
P.S.
 обращай внимание на Warning`и.
P.P.S.
 Причин может быть и больше. Не смотрела,
 ибо код сложно читать: плохо отформатирован и нашпигован сакраментальными числами.
PM MAIL   Вверх
Castiel
Дата 6.10.2009, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 21.1.2009

Репутация: нет
Всего: нет



Цитата

1. Первый снимок делается еще до создания окна.


а что если действительно так?? или если снимок делает wmi-сервер, у которого окна вообще нет.... Что тогда?? Как побороть?

а за остальные замечания спасибо, поправлю smile
PM MAIL   Вверх
Riply
Дата 7.10.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 21
Всего: 32



Цитата(Castiel @  6.10.2009,  20:11 Найти цитируемый пост)
а что если действительно так?? или если снимок делает wmi-сервер, у которого окна вообще нет.... Что тогда?? Как побороть?


imho, менять механизм внедрения.
Вариантов масса.
Например, с помощью AppInit_DLLs можно внедриться во все процессы, 
использующие User32.dll  (если мне не изменяет память)
PM MAIL   Вверх
bartram
Дата 7.10.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 3
Всего: 29



Цитата(Riply @  7.10.2009,  16:06 Найти цитируемый пост)
imho, менять механизм внедрения.
Вариантов масса.
Например, с помощью AppInit_DLLs можно внедриться во все процессы, 
использующие User32.dll  (если мне не изменяет память) 

Только на все это будет ужасно кричать Антивирус smile


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Riply
Дата 7.10.2009, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 21
Всего: 32



Цитата(bartram @  7.10.2009,  16:51 Найти цитируемый пост)
Только на все это будет ужасно кричать Антивирус  


Я бы, на его месте, орала не на невинную запись в реестре  smile ,
а, например, на разницу двух снимков процессов (из kernel и user mode).
imho, больше пользы бы было от этого воздухо-сотрясения smile
PM MAIL   Вверх
bems
Дата 7.10.2009, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Цитата(Riply @  7.10.2009,  21:50 Найти цитируемый пост)
Я бы, на его месте, орала не на невинную запись в реестре

Иногда думаю, как же все-таки хорошо, что ты не антивирус!


--------------------
Обижено школьников: 8
PM MAIL   Вверх
bartram
Дата 8.10.2009, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 3
Всего: 29



Цитата(Riply @  7.10.2009,  23:50 Найти цитируемый пост)
а, например, на разницу двух снимков процессов (из kernel и user mode).

Оффтопно будет сказано, но мне кажется, что если подумать можно это обойти ;-)
Но это вопрос другого топика....


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Riply
Дата 8.10.2009, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 21
Всего: 32



Цитата(bartram @  8.10.2009,  08:26 Найти цитируемый пост)
Оффтопно будет сказано, но мне кажется, что если подумать можно это обойти ;-)


smile  Оффтопно и отвечу:
Обойти то можно все что угодно, но в этом(данном) случае поле сражения переносится уже в режим ядра.
Ну а если пряталка сама уже сидит в ядре, то и незачем внедряться во все подряд - прячем прямо в ядре smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1119 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.