| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Неубиваемые программы |
| Автор: Sunvas 9.5.2006, 00:24 |
| Как сделать неубиваемое приложение (т.е. приложение, которое нельзя было бы убить средствами винды)? Будут идеи? ЗЫ Также очень нужно и другие программы (например Блокнот) сделать некиляемыми. |
| Автор: Cheburek 9.5.2006, 02:32 |
| В голову только хук пришел |
| Автор: vood 9.5.2006, 03:41 |
| Обрабатывай сообщение wm_quit ,событие формы close(IMXO) |
| Автор: SoWa 9.5.2006, 09:32 | ||
| Делай программу сервисом и ставь ему особо крутые привиллегии. И не кильнешь ничем... Так Касперский делает. Зарегистрировать другую программу как сервис тоже можно.
Вот так. |
| Автор: Albinos_x 9.5.2006, 09:56 |
| http://forum.vingrad.ru/index.php?showtopic=37555&view=all&hl= |
| Автор: SoWa 9.5.2006, 10:04 |
| Ну там же два приложения. А тут по видимому надо одно и неубиваемое. И по-моему едиственное решение- сервисы. Установку привиллегий и сами привиллегии стоит смотреть в MSDN. |
| Автор: Rouse_ 9.5.2006, 17:04 |
| Самый простой способ - изменение PID процесса. Тогда имея на руках невалидный описатель - нелься будет получить доступ к контексту. Делается посредстом правки PSYSTEM_PROCESSES через перехват NtQuerySistemInformation. От просто пользователя и среднестатистического программиста поможет |
| Автор: Sunvas 10.5.2006, 07:24 |
А можно как-то по подробнее? |
| Автор: Rouse_ 10.5.2006, 08:36 |
| В месном FAQ не нашел нужного примера, поищи в FAQ "исходников". Берешь данный пример и модифицируешь код, который прячет процес, на код, который возвращает неверный PID процесса. |
| Автор: RA 10.5.2006, 08:41 |
| Поставить хук на завершение процесса, помнится в библиотеке (madshi) www.madshi.net был даже пример. хотя это опятьже защита от среднестатестического. |
| Автор: Sunvas 11.5.2006, 18:32 |
Ну, приложение можно и разхучить.. Добавлено @ 18:35 Ну мне нужно защита получше.. Чтобы даже профи призадумался.. Может все и сразу? |
| Автор: Albinos_x 11.5.2006, 20:21 |
чем больше "подножек". тем лучше... |
| Автор: Rouse_ 11.5.2006, 20:59 |
| Sunvas, исходники - это форум www.forum.sources.ru, посмотри кстати в основной там что-то аналогичное сегодня проскакивало, только код сильно не причесанный. А по поводу для этого нужно обладать как минимум знаниями Профи, которого ты хочешь задумать |
| Автор: Sunvas 11.5.2006, 21:16 | ||
Зашел..
на тему "изменение PID процесса" что-то ничего не видно.. |
| Автор: Girder 11.5.2006, 21:43 |
| Sunvas, енто не поможет... |
| Автор: Cheburek 11.5.2006, 21:50 |
| Sunvas,почитай, должно помочь.. http://wasm.ru/article.php?article=apihook_1 |
| Автор: Sunvas 11.5.2006, 22:10 |
будет побольше времени - почитаю. Спасибо, но тема продолжается. Думаем дальше! |
| Автор: RA 11.5.2006, 22:22 |
Смотря как хуки повесиш, можно ими всю систему обвесить как герляндами новогоднюю ёлку, но это уже изврат, и проще поставить на пк ограничения в правах пользователя ЗЫ: А можно поселится в памяти винлогона |
| Автор: Cheburek 11.5.2006, 22:30 |
| RAdmin, Ну, хук - это сила! Главное понимать, что и откуда, тогда сделать можно с системой что угодно.... |
| Автор: Sunvas 11.5.2006, 22:58 | ||||
Извращение.. Мне нужно чтобы надежно!
Тоже не очень удобно.. |
| Автор: Yanis 11.5.2006, 23:57 |
То что ты хочешь сделать "удобно" не реализуешь.... |
| Автор: Sunvas 12.5.2006, 07:21 |
Да мне любым способом надо, но чтоб извращений поменьше - логон трогать это как-то чревато (да и винда у меня 2000).. |
| Автор: Rouse_ 12.5.2006, 08:39 | ||||||
Не внимательно читаешь, я говорил не про изменение PID а про скрытие... Как спрятать программу от TaskManager'а в WindowsXP и 2000. Листинг библиотеки (nthide.dll), которая будет выполнять нужную нам функцию:
Для её использования нужно вызвать функцию HideProcess: function HideProcess(pid:DWORD; HideOnlyFromTaskManager:BOOL):BOOL, где pid - идентификатор процесса, который нужно спрятать HideOnlyFromTaskManager - нужно ли прятать процесс только от TaskManager'а, или же от остальных программ, использующих для получения списка процессов функцию NtQuerySystemInformation из ntdll.dll. Пример использования:
PS: Код конечно кривой, автору за вот это руки оторвать нужно.
|
| Автор: Nickel 12.5.2006, 15:06 | ||
Код действительно ужасный. Да и сам метод довольно не надёжен: можно вызвать
и никакое изменение таблиц импорта тут не поможет. Да к тому же надёжно спрятать процесс очень сложно, нужно как минимум попрятать все хендлы, которые он создал и непосредственно открытые хендлы этого процесса. Вобщем рекомендую послушать Cheburek'а и почитать здесь: http://wasm.ru/article.php?article=apihook_1 http://wasm.ru/article.php?article=apihook_2 http://wasm.ru/article.php?article=apihook_3 |
| Автор: Dimannn 13.5.2006, 21:17 |
| В принципе можно программу переписать в виде dll, и с помощью CreateRemoteThread попробовать подключить её к чему-нибудь незакрываемому. На практике подключал тока к процессам текущего пользователя, хотя возможно, удастся и к winlogon. А в идеале надо делать, как касперий - у них и не сервис, а простое приложение, но не закрывается. |
| Автор: Sunvas 14.5.2006, 00:09 | ||
А в ограниченой учетной записи как быть?? |
| Автор: ne0n 14.5.2006, 21:22 | ||
Ну если я не ошибаюсь каспер по-другому работает: Антивирус для защиты своего процесса от уничтожения устанавливает в систему драйвер и перехватывает в ядре системы функцию ZwOpenProcess, которая используется для доступа к другим процессам, после чего он запрещает открытие своего процесса с флагом PROCESS_TERMINATE. Отсюда вывод: все-таки придется читать статьи Ms-rem'a про перехват api функций. З.Ы. А мож нафиг не надо делать его неубиваемым, а просто скрыть |
| Автор: Sunvas 16.5.2006, 06:30 |
Да не. Нужно именно неубиваемым приложение сделать. |
| Автор: muxaxa 16.5.2006, 12:05 |
| ой, ну даже и не знаю, наверное придётся вас разочаровать, абсолютно неубиваемый процесс это нереально, будь он в протекции драйвера или в нулевом кольце. У людей знающих такой неубиваемый процесс продержится до перезагрузки, после каторой этот неубиваемый процесс будет перехвачен на стадии запуска, и влюбой момент завершён. Как говорится ни что не вечно. Но в наших силах увеличить число пользователей каторым такой процесс будет неподвластен. На мой взгляд самым оптимальным, будет использование драйвера, но к сожалению одними только средсвами Delphi тут необойтись. |
| Автор: Nickel 16.5.2006, 17:18 | ||
Абсолютно неубиваемый пожалуй правда нереально, как не реальен абсолютный фаервол, антивирус, абсолютно защищённая ОС и т.д. Но вполне реально сделать так чтоб отрубить защиту процесса можно было тока из safe mode (хотя чё тока с виндой не делают, мож и в safe mode можно свой драйвер загрузить), потерев драйвер. Я кстати где-то видел про создание прцоесса из ринг0, так что создание процесса не обязательно состоится. Драйвера на делфи писать можно! Причём абсолютно функциональные. Читать http://rsdn.ru/article/delphi/kmdelphi.xml. Если кто заинтересовался, я знаю как использовать для этой цели компилятор от делфи 7 (всё же удобней, чем от третих делфей). |
| Автор: Sunvas 17.5.2006, 06:35 | ||
Но думаем как выложиться по максимуму! |
| Автор: Dimannn 17.5.2006, 20:44 |
Делаем службу, дллку и присобачиваемся к services Либо свою прогу как заглушку к Gina написать |
| Автор: Rouse_ 17.5.2006, 21:16 |
| Абсолютно неубиваемый можно, если подразумевать что исполнение кода нельзя завершить без завершения работы системы, но только не процесс это уже получиться... |
| Автор: Rennigth 17.5.2006, 21:32 |
Rouse_, извини за наверное глупый вопрос, а что?... я все время считал что в винде нельзя что-то выполнить вне контекста какого-нибудь процесса... |
| Автор: Yanis 17.5.2006, 21:41 | ||
ну наверное имеется ввиду что то типа Ring0 |
| Автор: Rouse_ 17.5.2006, 21:57 | ||
Помимо процессов в винде много чего еще есть Добавлено @ 22:06 Вообще для нормального сокрытия из пользовательского режима можно применить технологию расслоения, а именно запускающий модуль (собственно уязвимое место) распространяет выполнение отдельных участков кода по всем текущим процессам путем создания дополнительных потоков и после этого завершается, а потоки остаются работать. Каждый из таких потоков выполняет свою работу и параллельно контролирует своих собратьев. Задача достаточно сложная, но даже для достаточно подкованного программиста (выше среднего уровня) детектирование данного метода представляет большое затруднение, не говоря уже о остановки данного массива потоков... |
| Автор: Rennigth 17.5.2006, 22:13 |
это вопрос конечно неправильно сформулировал... задумался о другом... это понятно, теже сервисы, но посути это теже процессы... или я ошибаюсь? вроде и это мне кажется зная о существовании и неплохо разбираясь в програмировании(осообено asm) можно поломать... неверю что |
| Автор: Yanis 17.5.2006, 22:20 |
| Ну тогда выход один - драйвер. К стати Sunvas, если ты хочешь написать какой то гуард для блокировки компьютера или же что то типа мега оболочки (бывает и такое) для windows, то во всех серьёзных программах используется именно этот способ... |
| Автор: Rouse_ 17.5.2006, 22:27 | ||||
Да сервисы - теже процессы с более высокими привилегиями.
Задача для очень серьезного профессионала. Смотри в чем цимус (уж извини, но часть работы у меня такая - защита ПО, поэтому поехидничаю). Вот ломать что ты будешь? И как себе ты это представляешь? Взлом - достаточно продолжительная по времени задача 99 процентов которой затрачены на анализ кода и только 1 процент на саму правку кода. Противопоставить этому можно как банальную обфускацию джампами + не очень сильный морфический движок, (что делается темже ASProtect, кряки к которому выходят в день выпуска нового релиза), пакеры не упоминаю ибо выход на OEP уже делают автоматом практически все анпакеры, виртуальные машины - вот это достаточно серьезный аргумент, т.к. анализ приходиться делать вручную, но также до первого взлома. Итак это банальный - Битхак. Битхак означает что твою программу проанализировали и практически полностью изучили. Но до того момента пока не будет выяснен механизм защиты программы и не выявленны все возможные ловушки - програма будет сопростивляться. Я привел достаточно общее представление о защите программы метозом расслоения в третьем кольце, если углубляться в глубь системы - поверь там гораздо более возможностей для сопротивления взлому и методов его предотвращения... |
| Автор: Rennigth 17.5.2006, 23:27 | ||
Rouse_, Абсолютно с тобой согласен...
если это стоит свечь, то сомневаюсь что: PS: вот демогогию развели |
| Автор: Sunvas 18.5.2006, 07:04 | ||
Для начала мне нужно хотябы написать просто приложение с пустой формой, при запуске которого его нельзя убить.. |
| Автор: Nickel 18.5.2006, 14:06 |
| Вот не люблю я такие темы: 3 страницы обсуждения и ниодной строчки кода. Предлагаю уже подытожить: нам нужен драйвер и писать его собираемся на делфи, т.е. компилировать в делфи до объектного кода и линковать майкрософтовсктим линкером, правильно? Тогда предлагаю решить, будем использовать старенький Delphi 3 или немножко погимороившись заюзаем Delphi7. Кто не понял о чём я, ещё раз даю http://rsdn.ru/article/delphi/kmdelphi.xml PS кстати насчёт защиты приложений, http://www.wasm.ru/article.php?article=h2000_05 как обдурить дизассемблеры. |
| Автор: ne0n 19.5.2006, 16:28 | ||
| По-моему лучше не париться с написанием драйвера(уж очень много времени уйдет) а просто сделать свою программу в виде dll и инжектировать ее в системный процесс(можно в несколько). Винда не даст убить этот процесс(во всяком случии в Таск менаджере)
А че писать то? Автор сам еще не определился со сспособом. |
| Автор: Nickel 19.5.2006, 17:09 | ||||
Выгрузить длл не сложнее чем загрузить, да и системный процесс убить как 2 байта переслать, только бы винда не скопытилась =) Вот я к тому и говорю, чтоб определялся. |
| Автор: ne0n 19.5.2006, 21:10 | ||
Оно-то оно так, но ис драйвером проблем необерешься(если драйвер будет написан криво, что скорей всего и будет, то машину можно с такойже легкостью пустить в даун) |
| Автор: Nickel 20.5.2006, 09:47 | ||
Да, с драйвером нелегко... Но думаю кривые драйвера мы писать не будем, покрайней мере постараемся На самом деле и криво написанная длл может повалить тот же системный процесс. Хотелось бы уже заслушать мнение создателя темы. ЗЫ четвёртая пошла... |
| Автор: Sunvas 20.5.2006, 17:49 | ||
Ну.. Длл мне сразу скажу, что не подходит - в ограниченной учетной записи ее нельзя присобачить к системному процессу csrss (которые винда не даст убить). С драйвером еще сложнее: почитал посты в теме и как-то драйвер писать перехотелось... Думаем, думаем.. Нужно ведь, чтоб и в ограниченной записи работало.. ЗЫ: Пока самая рульная остается идея Rouse_ об изменении PID процесса. |
| Автор: Yanis 22.5.2006, 12:31 |
| Sunvas Ты можешь назвать хоть одну программу аналог той, которую хочешь написать? |
| Автор: Rouse_ 22.5.2006, 13:58 |
| В ограниченой учетки спасет сервис... |
| Автор: killerbean 22.5.2006, 17:07 | ||
вот этот код все равно убъет любой процесс
более подробное описание на wasm.ru. Там целая статья по этому поводу. Проверено на Outpost Firewall, Kaspersky Antivirus 5,6 |
| Автор: Rouse_ 22.5.2006, 17:36 |
| killerbean, достаточно правильного перехвата NtCreateFile и этот код идет лесом Не цитируй чужие ошибки... Добавлено @ 17:37 К тому же что ты будешь убивать, если ProcessId у тебя фальшивый? |
| Автор: Sunvas 23.5.2006, 07:23 | ||
Но сервис можно стопануть..
Вряд-ли. Мне просто пришла в голову эта идея после того, как мои процессы начали килять. |
| Автор: Rouse_ 23.5.2006, 08:14 |
С ограниченой? Врятли... |
| Автор: Nickel 23.5.2006, 14:49 | ||||
Во-первых, когда приводишь чужую функцию неплохо бы привести и все остальные, которые она использует. Во-вторых, посчитай скока раз в этой теме ссылались на статьи Ms Rem'а. В-третьих, Rouse_ прав - этой код сможет завалить далеко не каждый процесс. Существует тысяча и один способ обойти этот способ убийства процессов: начиная закрывание своего хендла у csrss.exe и заканчивая перехватом вызовов api функций. Sunvas, вограниченной учётной записи действительно подойдёт сервис, только видимо устанавливать его придётся из-под админа. |
| Автор: Sunvas 24.5.2006, 06:47 | ||
Ну, этогда это уже не ораниченная учетка.. Я имею в виду другой спецсофт не стандартный проводник. |
| Автор: Rouse_ 24.5.2006, 09:33 |
Если предполагается использование спецсофта, то ни один из вышеперечисленных приемов тебе не поможет... |
| Автор: BinaryEvil 24.5.2006, 13:17 |
| можно две проги забацать: каждое запускает другое при отсутствии оного... тоись убил одно, второе тут же его подняло, убил второе, первое его подымает... |
| Автор: ne0n 24.5.2006, 15:26 | ||
| А может все-таки хуком обоитись? Уже где-то писалось что в библиотеке MAD есть неплохой примерчик.
енто придлагал Albinos_X(по-моему) - автор проигнорировал. |
| Автор: Sunvas 24.5.2006, 21:50 | ||
Это я точно проигнорировал вот почему: останавливаем один процесс и валим воторой, а затем валим первый. Я так много-много шпионов килянул. |
| Автор: Dimannn 31.5.2006, 12:47 |
| Не хочу вас огорчать, но Касперский 6 драйвер не устанавливает! И по поводу того кода: Вот здесь всё и закончится (ERROR_ACCESS_DENIED) |
| Автор: Sunvas 1.6.2006, 07:23 |
Типа Касперский запрещает доступ к своему процессу?? Как? |
| Автор: Nickel 1.6.2006, 08:47 | ||
Не верю! |
| Автор: Rouse_ 1.6.2006, 12:28 |
Ага, конечно не устанавливает, ибо там ребята такие умные что научились сквозняком с третьего на нулевое кольцо падать... Глупости то не городи... Добавлено @ 12:31 Перехватывает ZwOpenProcess из драйвера. Если вызов данной функции происходит с PROCESS_TERMINATE то проверяется PID открываемого процесса и если он равен родному PID то возвращается STATUS_ACCESS_DENIED. |
| Автор: Dimannn 1.6.2006, 14:48 | ||
У меня щас запущен касперсий 5, и вот список работающих драйверов:
Касперские до 5-го устанавливали kav.sys Добавлено @ 14:51 Может быть, они драйвер переименовали, чтоб кто-нить не завершил специально, но вряд-ли. |
| Автор: Rouse_ 1.6.2006, 15:29 | ||
| Драйвер касперского Klif.sys Добавлено @ 15:32 кстати можешь поэксперементировать закрыли ли они дыру в своем драйвере. Выполни следующую функцию:
Если получишь BSOD (синий экран) - значит дыра на месте |
| Автор: RA 3.6.2006, 00:25 |
| ОФТОП: Извините не удержался И как вы только можете сосущесвовать в симбиозе с касперским, онже столько ресурсов жрёт, что сам хуже вируса. Вот старый сканер AVP v3 - вот это ВЕСч была (кстати на масме), работала быстро и вкусно. |