![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
запустить процесс [XP]
4iVan © (2008-07-12 21:31:00)у меня есть программа, я хочу в определенный момент закрыть программу и перезапустить ее. каким образом это можно сделать, что бы в тот момент, когда программа выгрузилась, можно было запустить ее же, например с указанным ключем запуска?
Riply (2008-07-13 02:58:00) [1]> [18] AFHU (13.07.08 02:23)
> Ну вот например найдите мне описание ZwTerminateProcess в MSDN
Ничего Microsoft не прячет.
А функции не документирует потому, что оставляет за собой право менять их
как ей заблагарассудиться :)
IMHO, разумеется. Ну... почти IMHO :)
Германн (2008-07-13 02:40:00) [2]
> AFHU (13.07.08 02:23) [18]
>
> > Не верю!
>
> Ух, какой вы недоверчивый :)
>
Ты и на доли процента это не представляешь,
AFHU (2008-07-13 02:29:00) [3]> Ну вот например найдите мне описание ZwTerminateProcess
> в MSDN
Как быстро меняется мир. Теперь уже описание есть :-(
http://msdn.microsoft.com/en-us/library/aa906904.aspx
Правда там упоминается про Header: Ntddk.h
А как раз с этим заголовочным файлом у многих проблемы: его просто-напросто нет. Вот и ищут сорви-головы, гоняются за ним по интернету
И всё-таки не уверен, что абсолютно все свои карты Microsoft раскрыла и документировала в MSDN все процедуры (которые можно вызвать)
AFHU (2008-07-13 02:23:00) [4]> Не верю!
Ух, какой вы недоверчивый :)
Ну вот например найдите мне описание ZwTerminateProcessв MSDN
(эта процедура правда не блокирует процесс, а совсем наоборот, отвечает за завершение любого процесса, даже системного)
Германн (2008-07-13 02:16:00) [5]
> AFHU (13.07.08 02:02) [16]
>
> > Германн © (13.07.08 01:53) [15]
Тоже слухи.
> ps: а подобные процедуры подобные существуют, просто запрятаны
> в глубинах Windows ;-) И локументации по ним в MSDN нет.
> Ну разве что только для подписчиков msdn (а подписка стоит
> денег)
>
Не верю!
AFHU (2008-07-13 02:02:00) [6]> Германн © (13.07.08 01:53) [15]
Думаете, сарафанное радио, слухи. больные фантазии?
Я бы тоже так считал, если человек, который мне об этом говорил, не упомянул об источнике. А источник интересный :)
В общем, этот человек набрался наглости и написал письмо, как раз с этим вопросом: "как вы сделали, чтобы ваш антивирус нельзя было вырубить через диспетчер задач". Что самое интересное, ему пришёл ответ (через 2 недели). Ну вот там и было "Здравствуйте. Использованный в нашем антивирусе способ защиты является технологийе Майкрософт, за использование которой мы платим деньги и не может её разглашать"
:) Текст конечно примерный, но сомнений в том, что ответ действительно пришёл у меня нет. Ибо если даже подумать: какой смысл им не отвечать на письмо? Этим самым они только ещё больше "раздразнят аппетит" у автора письма, может быть он начнёт активно ломать их продукт и может быть так или иначе даже докопается до истины! А тут сразу его огорошить, пусть где хочет, там и ищет эту технологию, но зато хоть не будет ломать их антивирус
ps: а подобные процедуры подобные существуют, просто запрятаны в глубинах Windows ;-) И локументации по ним в MSDN нет. Ну разве что только для подписчиков msdn (а подписка стоит денег)
Германн (2008-07-13 01:53:00) [7]
> А вообще слышал, что Касперский выкупил лицензию на использование
> этой защиты аж у Microsoft. Похоже на правду.
>
"- Ой, что деется! Вчера траншею рыли,
Так откопали две коньячные струи!
- Говорят, шпионы воду отравили
самогоном.
Ну, а хлеб теперь из рыбьей чешуи.
Словно мухи, тут и там,
Ходят слухи по домам,
А беззубые старухи
Их разносят по умам,
Их разносят по умам."
(с) Даже стыдно публиковать тут копирайт. И так он всем известен.
AFHU (2008-07-13 01:46:00) [8]Ну вы даёте, братцы-кролики :)
В ветке для начинающих обсуждаете принципы создания неубиваемого вирусного процесса ;-) Кто надо, тот очень даже всё намотает куда надо, и код напишет и всё уже остальное доделает :)
Между прочим, тут недавно имел дело с одним человеком, он вот загорелся идеей защитить свой процесс, сделать его как avp.exe, невырубаемым (чтобы при завершении процесса вылазила ошиька от отказе в доступе)
И он этого добился, правда использовал C++ Builder, но это уже мелочи. Теперь при завершении процесса вылазит сообщение: "Фиг тебе!" :)))
А вообще слышал, что Касперский выкупил лицензию на использование этой защиты аж у Microsoft. Похоже на правду.
Германн (2008-07-13 01:40:00) [9]
> Riply © (13.07.08 01:24) [11]
>
> > [10] Renegat (13.07.08 00:50)
>
> Ну ты пораспинайся, пораспинайся :)
> "реальные пацаны" на ус то мотают :)
>
Замучаются потом разматывать :)
И потом. palva © (13.07.08 00:33) [8] вас куда-то не в ту степь направил.
Имхо. :)
Renegat (2008-07-13 01:37:00) [10]> [11] Riply © (13.07.08 01:24)
А я код-то не даю! Вряд ли они для таких дел найдут 100% рабочий алгос. Особенно под Делфи...
А так, если заинтересует - пусть в ядре поразбираются, покопают... авось и отпадёт охота бяку фсякую писать ;)
Riply (2008-07-13 01:24:00) [11]> [10] Renegat (13.07.08 00:50)
Ну ты пораспинайся, пораспинайся :)
"реальные пацаны" на ус то мотают :)
Renegat (2008-07-13 00:50:00) [12]> Вирусы реальных пацанов ваще не имеют своего працесса
И ведь Riplyумную вещь говорит! Нужно, когда завершаем свой процесс, подвесить вирь отдельным тредом к какому-нить CSRSS или VMM32. Далее внедряем DLL, получаем доступ в R0 - и всё батенька! Тройка, семёрка, туз!
Кхм, о чём это я...
Ах да. Можно в самом деле "приклеить" поток в чужое адресное пространство, а в его коде будет ожидаться событие выгрузки (WaitForSingleObject по хендлу процесса), и если таковая произошла - выполняться запуск с нужными ключами, с последующим обрубанием себя. Только вот может быть не стоит строго ожидать выгрузки, а перезапуститься до того как у "родителя" будет вызван ExitProcess? Или с этим есть проблемы?
Riply (2008-07-13 00:39:00) [13]> [8] palva © (13.07.08 00:33)
> Если автор пишет вирус, то делают так: запускают сразу три процесса, каждый из них следит,
> чтобы остальные два процесса работали и если один из них убит, то сразу же запускается еще один.
"Вирусы реальных пацанов ваще не имеют своего працесса" (с) составная :)
palva (2008-07-13 00:33:00) [14]Если автор пишет вирус, то делают так: запускают сразу три процесса, каждый из них следит, чтобы остальные два процесса работали и если один из них убит, то сразу же запускается еще один.
Германн (2008-07-13 00:20:00) [15]
> Ну уж пусть автор сам выбирает, что ему проще и ближе :)
>
Имхо судя по сабжу или речь идет о чужой программе, или он вообще не туда смотрит.
> что бы в тот момент, когда программа выгрузилась, можно
> было запустить ее же, например с указанным ключем запуска?
>
>
AFHU (2008-07-12 23:42:00) [16]> palva © (12.07.08 23:11) [5]
Да, про блокировку второго экземпляра я не подумал. Поэтому тут зависит всё от конкретного случая. Хотя обойти эту заминку тоже несложно, например, если мы в системе создали атом-флаг, по которму ориентируемся, запущена программа или нет, то в finalization мы его может удалить до запуска второй копии. Теоретически всё пройдёт гладко
Ну уж пусть автор сам выбирает, что ему проще и ближе :)
palva (2008-07-12 23:11:00) [17]
> Это ли не проще?
Может быть и проще, но это не ответ на вопрос. Второй экземпляр программы запускается в тот момент, когда работа первого экземпляра еще не закончилась. Кроме того программа может быть написана так, чтобы не допускать запуск двух экземпляров.
AFHU (2008-07-12 22:33:00) [18]Только не finally, а finalization:
implementation
...
initialization
...
finalization
if notExitPodtverzhdenie thenMyProc.FileOpen(Application.ExeName);
end.
Ну процедуру я использовал свою, не проблема заменить стандартной
SergeyIT (2008-07-12 22:31:00) [19]Так варианты возможны. Я когда-то использовал BAT файл (в котором можно прописать все, что угодно, и его запускал)
AFHU (2008-07-12 22:23:00) [20]
> в определенный момент закрыть программу и перезапустить
> ее
> Напишите программу, которая будет запускать Вашу.
Вы меня конечно извините, давно это было, но я прописывал в конце программы finally и там команду запуска этой же программы.
То есть вместо закрытия при определённом условии получался её перезапуск. Это ли не проще? Чем создавать 2-ую программу для запуска первой. Могу даже подкрепить свой вариант кодом