![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
Castiel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 21.1.2009 Репутация: нет Всего: нет |
Всем привет. Есть необходимость прятать свой процесс. Нашел в сети несколько примеров, один из них скрывал корректно, но только от стандартного таск-менеджера. Поискал получше --- нашел более сильную технику, может скрывать и от таких утилит как Process Explorer. И всё бы хорошо, но есть одно НО:
Если в Process Explorer выставить таймаут обновления списка процессов на 10 секунд и скрыть свой процесс, то при новом запуске process Explorerа тот увидит мой процесс. Благодаря обновлению раз в 10 секунд можно наблюдать что при следующем обновлении списка процесс корректно прячется. И вроде бы опять всё хорошо, подумаешь --- перехват срабатывает только на второй вызов. Но специфика такова что мне надо прятаться от софтины, которая получает список процессов используя wmi, причем получает не в он-лайн режиме, а просто делает слепок. Думаю для получения списка она использует тот же zwQuerySystemInformation, но тем не менее в списке получаемом с помощью WMI мой процесс очень хорошо виден.... видимо проблема такая же. Первый вызов не перехватывается, как в Process Explorer. Что можно сделать чтобы усовершенствовать эту технологию скрытия процесса?? Чтобы и Process Explorer даже с большим периодом обновления списка никогда не видел мой процесс?? Помогите советом, исходники той техники что использую прилагаю ![]() Присоединённый файл ( Кол-во скачиваний: 207 ) ![]() |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Эмн... А какая именно "необходимость" ? (это не праздное любопытство - от этого зависит ответ на твой вопрос) Лучший способ скрыть процесс - не создавать его ![]() (Я вполне серьезно) Дело в том, что скрытие - самое неблагодарное занятие на свете. Бо положительного эффекта добиться очень и очень сложно. Как правило, в результате "овчинка выделки не стоит". Мы, как я понимаю, собираемся сражаться в user mode. Соответственно, любая утилита, работающая с ядром, его обнаружит в две секунды. И не надо думать, что у кухарки ее (этой утилиты) нет. Ими весь интернет нашпигован ![]() Т.е. у нас уже получается не прятанье, а так... игрушки детские ![]() Ну да ладно. Тем не менее попробуем. Чтобы это реализовать, для начала надо знать все способы перечисления процессов. Ибо спятал от одного способа - найдут другим. И этих способов - как собак нерезанных Только Ms-Rem, если мне не изменяет память, перечисляет их штук восемь ![]() Изучаем его способы и пишем анти-перечислялки. Далее: посмотри сколько открытых Handle`ов у твоего процесса. Почти через любой из них можно выйти на процесс (ну как минимум узнать о его существовании). Соответственно придется прятать и их тоже. Ну и, как ты уже заметил, существуют еще и всякие WMI, PerformanceCounter-ы и черта в ступе ![]() О них тоже придется позаботиться. Пусть мы все это нашли, изучили, реализовали. Теперь вспомним о том, что существуют способы (не сложные) определения факта подмены API ф-ии и получения ее настоящего адреса. (Игорь Шевченко еще сто лет назад описывал один из них). Соответственно, нам надо срочно изучать и эти способы и самостоятельно продумывать противоядие. Пусть мы сделали и это. Оценим наши усилия, учитывая то что "любая утилита, работающая с ядром, его обнаружит" и зададимся вопросом: А оно надо было нам ? ![]() Это сообщение отредактировал(а) Riply - 5.10.2009, 05:10 |
|||
|
||||
Castiel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 21.1.2009 Репутация: нет Всего: нет |
я это прекрасно понимаю ![]() Полностью незаметного приложения сделать не получится, ну и ладно, цель вовсе не в этом. Хочу спрятаться от не особо пытливых глаз. И понимаю что если захотят, то конечно же найдут. Тут скорее из принципа интересно доделать до конца ![]() |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
||||
|
||||
Castiel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 21.1.2009 Репутация: нет Всего: нет |
именно так я сейчас и сделал ![]() |
|||
|
||||
bartram |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1606 Регистрация: 22.2.2004 Где: Russia, Samara Репутация: 3 Всего: 29 |
||||
|
||||
Castiel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 21.1.2009 Репутация: нет Всего: нет |
всё это сделано. Попробую объяснить с самого начала. Я запускаю Process Explorer, ставлю скорость обновления списка на 10 секунд. Тушу Process Explorer Далее запускаю свое приложение. Скрываю свой процесс. Запускаю Process Explorer и наблюдаю тамм свое приложение. Далее проходит 10 секунд, список обновляется и процесса больше не видно. Похоже на то, что первый вызов zwQuerySystemInformation не перехватывается. Вот и вопрос в том что я сделал неправильно?? почему перехватывается только второй и последующие вызовы?? Для этого и приложил исходники чтобы вы у себя могли посмотреть что происходит. |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Два возможных варианта: 1. Первый снимок делается еще до создания окна. 2. У тебя идет проверка: if Result<>STATUS_SUCCESS then exit; Это не совсем правильно. Надо NT_SUCCESS(Result) Дело в том, что NTSTATUS успешен не только когда равен STATUS_SUCCESS P.S. обращай внимание на Warning`и. P.P.S. Причин может быть и больше. Не смотрела, ибо код сложно читать: плохо отформатирован и нашпигован сакраментальными числами. |
|||
|
||||
Castiel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 21.1.2009 Репутация: нет Всего: нет |
а что если действительно так?? или если снимок делает wmi-сервер, у которого окна вообще нет.... Что тогда?? Как побороть? а за остальные замечания спасибо, поправлю ![]() |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
imho, менять механизм внедрения. Вариантов масса. Например, с помощью AppInit_DLLs можно внедриться во все процессы, использующие User32.dll (если мне не изменяет память) |
|||
|
||||
bartram |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1606 Регистрация: 22.2.2004 Где: Russia, Samara Репутация: 3 Всего: 29 |
||||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Я бы, на его месте, орала не на невинную запись в реестре ![]() а, например, на разницу двух снимков процессов (из kernel и user mode). imho, больше пользы бы было от этого воздухо-сотрясения ![]() |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Иногда думаю, как же все-таки хорошо, что ты не антивирус! -------------------- Обижено школьников: 8 |
|||
|
||||
bartram |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1606 Регистрация: 22.2.2004 Где: Russia, Samara Репутация: 3 Всего: 29 |
||||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
![]() Обойти то можно все что угодно, но в этом(данном) случае поле сражения переносится уже в режим ядра. Ну а если пряталка сама уже сидит в ядре, то и незачем внедряться во все подряд - прячем прямо в ядре ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |