Форум: "Система";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
ВнизСкрыть программу от Ctrl-Alt-Del в XP Найти похожие ветки
← →
DJ_Sedoy (2002-12-31 01:29) [0]Подскажите, как скрыть работающую программу от Ctrl-Alt-Del ?
В 98 всё ясно и понятно, но в XP она видна.
Как бы сделать, чтобы её вообще не было видно?
← →
Song (2002-12-31 08:34) [1]Никак.
← →
Наезжалкин (2002-12-31 08:41) [2]Дежурный вопрос, дежурный ответ...
← →
dkDimon (2002-12-31 12:20) [3]КАЖДЫЙ ДЕНЬ!!!! Как скрыть в ХР???????
НИКАК!!!!!!!!!!!!!!! Ну нельзя!!!!
Хотя, пиши мылом на billgates@microsoft.com и спрашивай. Может ответят :)
← →
mitz (2002-12-31 12:45) [4]Теоретически это не возможно, я пока не встречал таких умельцев, делай прогу, или ее копию, с именами (похожими) на системные процессы висящие в табличке Ctr-Alt-Delete.
Example:
internat.exe-internet.exe
Ну и так далее, при просмотре таблички не каждый пользователь решиться удалить сходную прогу, а вдруг комп навернется......
← →
realshuga (2002-12-31 12:57) [5]а если хоткей попробывать?
← →
Anatoly Podgoretsky (2002-12-31 13:03) [6]Интернет наварнется :-)
← →
Manulo (2002-12-31 13:12) [7]В принципе, не знаю как в ХР, но в 2000-й можно спяртать, если тебе подойдёт этот метод:
form1.visible:=false;
И все остальные формы тоже долны быть или не видимыми, или закрытыми!
Единственное неудобство, в спеске процессов виден процесс, ну это уже простыми меьодами не лечиться ;)))
← →
Song (2002-12-31 14:49) [8]>>form1.visible:=false;
ну.. ты крут... мужики, способ от CAD нашёлся... !! :D
← →
Sliski Slimak (2002-12-31 15:01) [9]А если зарегистрировать прогу как системный процесс?
← →
snoup (2002-12-31 20:27) [10]А Хрен нельзя, можно конечно процес место приложения, но все равно процес будет виден, и ещё одно это не делается так: form1.visible:=false; - это делается так application.showmainform:=false; - вот так!!!!
А вообще кончайте всякие хрени - трояны писать, С наступающим.
← →
ruf (2003-01-01 16:32) [11]1) ShowWwindow(Application.Handle, SW_HIDE); - перенесет из приложения в процессы.
А если свой ЕХЕ-шник назавете services.exe, то его неельзя будет снять.
2) Еще один способ делать DLL-ку и принуждать другую прогу, например, internat, загружать её. Тогда процесса вообще не ьудет существовать etc.
Заблокировать CAD можно через реестр.=>ruf@ua.fm
← →
Plugin (2003-01-02 08:16) [12]эээ... а как,товарищь RUF, принудить internat.exe юзать дллку?
← →
Севостьянов Игорь (2003-01-02 11:51) [13]Смотрите информацию о gina.dll (msgina.dll) в MSDN
← →
DJ_Sedoy (2003-01-03 08:53) [14]Да нет, тут не проблема её спрятать. Это не троян всё-таки. Проблема запретить её снятие.
При обработке OnCloseQuery и присваивания CanClose:=False, после 3-4 попытки вылетает "...Не отвечает на системные запросы..."
Мне проще было бы её просто оттуда убрать.
А поечему всё таки некоторые процессы там не отображаются? Например, нужно было мне в XP поменять d3d8.dll и ddraw.dll на новые - они оказались заняты "другим приложением", но однако в списке процессов их не было.
Может тут выход?
← →
Странник (2003-01-03 12:38) [15]> DJ_Sedoy © (03.01.03 08:53)
так dll - это ж не приложение, чтоб в список процессов попадать.
← →
Zazoo (2003-01-03 23:28) [16]А если попробовать через CreateRemoteThread прицепится к другому процессу???
← →
Igor__ (2003-01-04 05:04) [17]Я гдето видел, что это можно зделать перехватом ToolAPI функцый.
Если бы кто дал пример.
← →
Plugin (2003-01-04 07:19) [18]НЕ! Ну народ как всё-таки дллку прицепить к процесу?
А то чё то сказали и замяли эту тему...
Мне обидно что я не знаю.
← →
Polevi (2003-01-04 10:53) [19]не плачь только
← →
Ruf (2003-01-04 12:15) [20]Блин.. Где-то видел... Поищу
← →
Ruf (2003-01-04 12:23) [21]Plugin, найду - скину на мыло. Но это точно так. Хоть и сложно
← →
Lex31337 (2003-01-04 16:42) [22]Скрыть прогу и в ХР и в 2к абсолютно реально. Для этого
нужно. Если не хочется возиться, то патчить taskmgr.exe.
А ежли хотца чисто, то перехватывать недокументированную
ntdll!NtQuerySystemInformation и вообще это целая интересная тема, вариантов туча. Но на Дельфи это такой гимор! если кому интересно гляньте сырцы Back Orifice 2k. ета тварь тот всюду скрывается и ещё на WASM.RU там тоже статья есть. Перехват функций ядра - это вариант.
← →
Igor__ (2003-01-05 05:13) [23]Уж больно это трудоёмкая робота: качественный перехват API.
Если например перехватить MessageBox(для этого нужно править таблицу импорта в каждом процессе + вставить DLL этот процесс) та нужно перехватить ещё GetProcAdderss, потомучто правка таблицы импорта не влияет на динамическую загрузку.
Подробности не спрашивайте(сам ничо не знаю).
← →
Burmistroff (2003-01-07 00:35) [24]> Lex31337
"Но на Дельфи это такой гимор!"
Ну уж не сложнее чем на сях. А вообще, я сам этим в последнее время занимался
http://maxcomputing.narod.ru/ahijack2.html
← →
Avenger [Nht] (2003-01-07 01:18) [25]Могу дать реализацию сокрытия в хр...работает 100%!
пишите на мыло...
← →
K_O_T (2003-01-08 01:05) [26]А вы напрямую попробуйте. ListView мучать.
Удаляйте из него каждую секунду Item`ы и Все :)
← →
Игорь Шевченко (2003-01-08 16:10) [27]Avenger [Nht] (07.01.03 01:18)
Здесь дай...
Только вот утопия это...и от Process Explorer"a скроешь ? :wink:
← →
Burmistroff (2003-01-08 18:04) [28]>Avenger [Nht]
"пишите на мыло..."
Написал, но ответа пока не получил
← →
Song (2003-01-08 20:53) [29]2Burmistroff (08.01.03 18:04)
Он мылы для спама собирает :-)
← →
Igor__ (2003-01-09 11:19) [30]
> Avenger [Nht] (07.01.03 01:18)
> Могу дать реализацию сокрытия в хр...работает 100%!
> пишите на мыло...
Поделись исходником, please!!!
← →
Avenger [NhT] (2003-01-09 12:15) [31]Про исходник никто и не говорил....хм...надо подумать...
Song, я тебе послал...пример.. ;)
ps
Ну как работает?
← →
Song (2003-01-09 12:27) [32]2Avenger [NhT] (09.01.03 12:15)
Ты мне послал ссылку на заглавную страницу какого-то форума.
← →
Игорь Шевченко (2003-01-09 12:28) [33]Song © (09.01.03 12:27)
Приветствую, Михаил,
Ссылку в студию!
← →
Burmistroff (2003-01-09 19:12) [34]Прога, присланная Avenger"ом действительно функционирует в NT 5.0 и выше. А сурсы таких программ лучше не выкладывать (больно злая фишка), кому надо - тот сделает :)
Кстати, т.к. в проге использовали SetWindowsHookEx, то такие утилиты коммандной строки (стандартная поставка с Nt 5.0 и выше), как tasklist и taskkill успешно работают с этой прогой :)
← →
Burmistroff (2003-01-09 20:59) [35]Кстати, как выяснилось, если запаковать тем же UPX"ом task manager, то он видит эту прогу (издержки IAT patching"а), и если использовать NtQuerySystemInformation вместо EnumProcesses (как это ProcessExplorer делает), то прогу тоже видно. Так что не все так безнадежно :)
← →
Song (2003-01-09 22:14) [36]Программа действительно работает. Но как я уже сказал Avenger"у, только со стандартным менеджером процессов. Фар например видит и само собой удаляет этот процесс. Другое дело, что сделать блокировку для менеджера процессов обычно достаточно, это да..
← →
Song (2003-01-09 22:16) [37]2Игорь Шевченко © (09.01.03 12:28)
Приветствую, Игорь.
Вот эта ссыка: http://65.108.172.208/board/index.php, но она ничего общего с прогой не имеет, просто как выяснилось, он забыл приатачить файл.
← →
SeF (2003-01-10 05:16) [38]A не проще просто у всех отобрать какие либо прова на доступ к процессу?
← →
Игорь Шевченко (2003-01-10 09:49) [39]Song © (09.01.03 22:16)
Кстати, а моя программка из кладовки "QuerySystemInformation" этот скрытый процесс увидит ? :-)))
P.S. Ты куда из аськи пропал ?
← →
Burmistroff (2003-01-10 16:33) [40]> Игорь Шевченко
"Кстати, а моя программка из кладовки "QuerySystemInformation" этот скрытый процесс увидит"
Вестимо да. Ведь ваша прога и использует NtQuery...
> Song
"Но как я уже сказал Avenger"у, только со стандартным менеджером процессов. "
Не только со стандартным. Любая прога, использующая EnumProcesses из PSAPI вместо NtQuery - не увидит
← →
Игорь Шевченко (2003-01-10 17:05) [41]Burmistroff (10.01.03 16:33)
Тогда это плохое скрытие. (Игорь Шевченко © (08.01.03 16:10))
Да и непонятно, зачем вообще скрывать :-)))
← →
DJ_Sedoy (2003-01-10 19:44) [42]Ну сокрытие - это один из методов против "снятия" процесса, т.к. даже если в событии OnCloseQuery устанавливать CanClose:=false, то после 2-3 попыток программа "выполняет недопустимую операцию" и преспокойно закрывается
← →
Burmistroff (2003-01-10 23:10) [43]WinNT если надо - то любую работающую программу закроет, как бы она не сопротивлялась. Однако, если она зависнет (у меня такое бывает с Opera 6 и TotalCommander 5.5), то порой даже NT разводит руками, и остается единственный способ снятия задачи - перезагрузка (logoff/logon не помогает).
← →
Ice (2003-01-11 01:34) [44]Переключение контекста потока. В данном случае резидентный код исполняется в контексте какого-либо уже запущенного потока. Между прочим, сама система широко использует потоки пользователей для собственных нужд. Как пишет Хелен Кастер в книге "Основы Windows NT и NTFS" система "похищает" поток и использует его для обработки прерываний, вызова DPC и системных APC функций. То есть немалая часть операционной системы представляет собой программы-невидимки.
При использовании данного метода не создаются ни новый процесс, ни новый поток. Загрузка библиотеки в другие процессы тоже не требуется. Таким образом, единственным косвенным признаком существования постороннего резидентного кода является разовое увеличение используемой памяти. Но память - наиболее активно расходуемый ресурс. Практически все программы постоянно выделяют и освобождают память и определить, какое количество занятых килобайт является нормой для того или иного процесса, очень затруднительно.
Разумеется, есть и недостатки. Во-первых, резидентный код может выполняться, только когда система передает управление потоку-носителю. Но возможна ситуация, что поток имеет весьма низкий приоритет, и из-за вытесняющей многозадачности редко будет получать управление. Более того, поток может перейти в состояние ожидания, и оставаться в нем неопределенно долго. Если же поток будет завершен, то завершится и резидентный код. Суммируя, работа резидентного кода в решающей степени зависит от потока-носителя.
← →
Игорь Шевченко (2003-01-11 15:21) [45]
> система "похищает" поток и использует его для обработки
> прерываний, вызова DPC и системных APC функций. То есть
> немалая часть операционной системы представляет собой программы-невидимки
С одним маленьким замечанием: для обработки DPC используются потоки процесса SYSTEM (WorkerThreads).
А так, любой вызов системного сервиса выполняется в основном, в контексте того потока, который ее вызвал, только в режиме ядра.
О программе Avenger [NhT]: Как и следовало ожидать, и Process Explorer и моя программа его прекрасно видят. Так что скрыть можно разве что у неопытных пользователей. Хотя неопытные и Task Manager вряд ли лишний раз полезут. О методах и коде сказать ничего не могу, так как имею только запакованные исходники. Видимо, страшно секретная программа, раз даже EXEшник запакован :-)
← →
gsu (2003-01-11 15:31) [46]Вот как дети маленькие, раз нельзя - так нельзя. Вы еще БГ пожалуйтесь, скажите, ая-яй какя у вас прога не хорошая (-:|~
← →
Игорь Шевченко (2003-01-11 15:42) [47]Ошибочка: вместо только запакованные исходники следует читать запакованные EXEшники
← →
Ice (2003-01-11 19:35) [48]
>Вот как дети маленькие, раз нельзя - так нельзя.
Если нельзя, но очень хочется, значит можно. :)
Так возможно ли это: быть резидентом и не "светиться" в Task Manager? Отвечаю, ЭТО ВОЗМОЖНО!
Вы действительно не можете спрятать процесс от NtQuerySystemInformation (по крайней мере, я не знаю, как это можно сделать). Но кто сказал, что резидентами становятся только процессы! Ведь кто такой резидент? Это всего навсего кусочек памяти, который периодически получает управление. Поэтому помимо процесса резидентом может быть драйвер, поток (thread), волокно (fiber), APC и DPC процедуры, функции обработки исключений и прерываний.
(Кстати, если говорить совсем строго, то исполняется не процесс, а его потоки, поэтому процесс резидентом не является).
Итак, на сегодняшний день, я знаю следующие способы прятать резидентный код:
1. Загружать драйвер. Это настолько примитивно, что обсуждать этот способ не будем. Кроме всего прочего, NtQuerySystemInformation предоставляет информацию и о драйверах, хотя Task Manager этого не делает. Ну и потом, ведь есть SoftIce!
2. Создавать поток в заданном процессе. Этот способ подробно описан у Джеффри Рихтера в книге "Windows для профессионалов".
Этот способ намного более интересен и оригинален. Но на сегодняшний день это уже классика, и удивить этим невозможно. Резидентный код обнаружить в этом случае довольно тяжело. В Task Manager у одного из процессов появляется дополнительный поток, но кто из нас на память скажет, сколько должно быть потоков у Explorer.exe? Помимо Task Manager можно посмотреть список загруженных библиотек, но опять же, кто из нас на память скажет, какие библиотеки должны быть загружены в Explorer.exe. Наконец, есть возможность посмотреть время создания потоков. А вот тут разница будет. Одним словом, будьте внимательны к потокам в резидентных процессах.
3. Всевозможные Rootkit. Это загрузка драйвера, который перехватывает обращения к NtQuerySystemInformation и подставляет свои данные.
Недостаток все тот же - необходимы права администратора! Если же у вас на машине все-таки запустили драйвер, то дела ваши плохи.
4. Hooking. Основан на функции SetWindowsHookEx. Насколько я понимаю, на нем основаны "невидимые" закладки под клавиатуру, мышь и всего того, на что сажается hook. При таком способе новый поток не создается. Но библиотека, откуда вызывается функция обработки ловушки, грузится во ВСЕ существующие и вновь создаваемые процессы. Поэтому, запустите свой процесс, и если в нем появилась библиотека, которую вы не предусмотрели, то самое время перегрузить машину.
5. Переключение контекста потока.
Вкратце, алгоритм предлагаемого метода состоит в следующем:
1. Необходимо найти подходящий процесс, то есть процесс, имеющий постоянно работающие потоки с приоритетом нормальный или выше (>8). Во избежание трудностей с правами, имеет смысл использовать пользовательский процесс. Для нахождения такого процесса естественно использовать все ту же функцию NtQuerySystemInformation.
2. После того, как нужный процесс найден, и определены идентификаторы его потоков, загрузим в пространство данного процесса сам исполняемый резидентный код. Чтобы не возиться с ассемблером, я это делаю в виде библиотеки, но это вопрос предпочтений. Процедура загрузки библиотеки в заданный процесс подробно описана у Джеффри Рихтера.
3. Приостанавливаем один из потоков процесса, сохраняем его стек и текущий контекст, создаем новый стек, изменяем контекст потока так, чтобы указатель на текущую команду (регистр Eip) указывал на наш резидентный код, переходим на новый стек, "пробуждаем" поток. Теперь, при получении потоком процессорного времени будет выполняться наш резидентный код. Естественно, это не все, так как в нашу задачу не входит нарушить нормальное исполнение процесса (что мы, хакеры что ли?).
4. После того, как резидентный код отработал, необходимо перейти на старый стек и восстановить старый контекст. Теперь поток должен работать в нормальном режиме.
Вот, собственно, и все.Разумеется, некоторые непринципиальные детали были опущены. По сути, во многом то же самое выполняет сама ОС при исполнении DPC и APC процедур.
Что предлагаемый способ НЕ ДЕЛАЕТ:
1. Не скрывает процесс.
2. Не скрывает поток.
3. Не запускает драйвер.
Процесс не создается, поэтому скрывать его отсутствие не нужно.
Поток создается, но, быстро отработав, нормально завершает работу, поэтому скрывать его тоже не нужно. (Кстати, может кто-нибудь, действительно, умеет скрывать поток без драйвера? Было бы очень интересно!)
Драйвер вообще не нужен. Скрывать что-либо с помощью драйвера, это хорошая идея, более того, уже реализованная. Проблема только в запуске драйвера.
Еще один вопрос ко всем. Как все-таки обнаружить подобного резидента? Или, как детектировать вызов APC и DPC процедур операционной системой?
← →
Burmistroff (2003-01-11 20:56) [49]>Ice.
Маленькая поправка - hooking - грузится НЕ во ВСЕ процессы.
А переключение контекста - довольно удобно, и в случае с NT - просто. Только вот как получить хэндл потока в 9x? Для этого есть конечно же нашли алгоритм, но официальной (и даже "недокументированной") процедуры я пока не встречал.
И еще, кто нибудь знает, можно ли восстанавливать флаги (то что правее регистров в окне CPU в Delphi) собственного thread"a какой-либо командой ASM"a (вроде push/pop для регистров)?
← →
Burmistroff (2003-01-11 21:07) [50]>Ice
И еще, я не понял, почему переключение контекста создается поток???
А как обнаружить.... солжный вопрос. Гораздо проще предотвратить это (чем я собственно и занимаюсь).
← →
K_O_T (2003-01-12 13:11) [51]2 Avenger
Я надеялся увидить исходники.
С++`ные исходники у меня есть. Интересно было бы на Delphi их увидить? До недавнего времени да С++ мне было жутко смотреть. Теперь я его подучил. Если нужно будет преведу :)
← →
R4D][ (2003-01-12 13:39) [52]2Burmistroff:
Боюсь показаться наивным, но если ты имеешь в виду ThreadID, то функция есть - GetWindowThreadProcessId, а так я уже почти закончил делать троян, основанный на hook"ах, как наткнулся на эту конференцию...я вижу, что идея не нова, поэтому и мой троян тоже, наверное, банален. Я хотел бы спросить, я думал, что политика безопастности в XP не позволит кому угодно ставить hook"и, так вот, так ли это?
← →
Burmistroff (2003-01-12 19:01) [53]> R4D][
А толку то от ThreadID??? Для всех важных операций нужен хэндл.
" я думал, что политика безопастности в XP не позволит кому угодно ставить hook"и, так вот, так ли это?"
Да, это так. Можно поставить хук только на процессы с тем же уровнем привилегий, что и у тебя. Я поэтому всякие трояны "тестирую" (да и в вообще в инете сижу) только из под user"ского профиля.
← →
R4D][ (2003-01-12 19:11) [54]2Burmistroff:
Спасибо за ответ на вопрос;
Не мог ты объяснить мне, не ведующему, что енто за хэндл потока, и как он от индификатора потока отличается.
Заранее благодарен.
← →
Burmistroff (2003-01-14 19:53) [55]{Suspend/Resume}Thread
{Get/Set}ThreadContext
В качестве параметра требуют хэндл (handle, дескриптор), а не идентификатор (ID)
← →
}{enon (2003-01-15 18:17) [56]А почему, усли нужно просто не дать закрыть прогу, нельзя сделать так: при закрытии проги (OnClose) запускаешь её копию и передаёшь ей параметры (правдо последнее делается каряво)?
← →
AlexandrRya (2003-01-15 22:53) [57]Anatoly Podgoretsky © (31.12.02 13:03)> Круто сказано :)
Lex31337 (04.01.03 16:42) > 100% перехват не возможен - я могу написать аналог виндузного загрузчика и грузить библиотеку ей - перхват LoadLibrary не поможет - не удасться отследить вызов NtQuerySystemInformation. Кроме того NtQuerySystemInformation (imho) ббазируется на ZwQuerySystemInformation - ловит лучше ее.
Так что лучше читать Рихтера и слушать совета Ice.
← →
Игорь Шевченко (2003-01-16 09:58) [58]
> Кроме того NtQuerySystemInformation (imho) ббазируется на
> ZwQuerySystemInformation
Неверное IMHO. Это два имени одной и той же функции.
← →
Burmistroff (2003-01-16 18:36) [59]> Неверное IMHO. Это два имени одной и той же функции.
Согласен.
← →
Snap (2003-03-09 14:28) [60]Удалено модератором
Примечание: Задай СВОЙ вопрос в отдельной своей ветке
← →
Danillo (2003-03-09 16:19) [61]Для удаления программы из диалога "Завершение работы программы", вызываемого по Ctrl+Alt+Del, нужно используют функцию RegisterServiceProcess. В Windows NT этой функции не существует. Поэтому, чтобы не происходило ошибки, нужно проверять версию Windows. Если это не Windows NT, то нужно динамически загрузить kernel32.dll.
procedure TForm1.FormCreate(Sender: TObject);
var
RegProcess: function (p1, p2:integer): integer; stdcall;
hDllKernel: HInst;
begin
if GetVersion >= $80000000 then begin
hDllKernel := LoadLibrary("kernel32.dll");
RegProcess := GetProcAddress(hDllKernel, "RegisterServiceProcess");
RegProcess(0, 1);
end;
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or
WS_EX_TOOLWINDOW);
end;
Точно не знаю но может получиться и на XP!
Страницы: 1 2 вся ветка
Форум: "Система";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
Память: 0.62 MB
Время: 0.01 c