У нас был этот клиент, жалующийся на то, что продукт постоянно терпел крах после того, как он работал нормально в течение 2-5 минут. Потребовалось несколько дней догадки, но мы пришли к следующему выводу:
Когда процесс завершается, не оставляя никаких следов (журналов событий/аварийных дампов), существует два варианта:
1. Наш собственный процесс вызывает TerminateProcess()
2. Кто-то еще убивает нас.
Для того, чтобы поймать суицидальные стеки вызовов (случай 1) вам просто нужно запустить «Adplus -crash -CTCFG ...»
Увы, это не помогло разрешить нашу ситуацию клиента.Как я могу поймать загадочного убийцу процесса?
Мы начали шептать нашим ушам для клиентов: «Может быть, кто-то убивает нас, может быть, вирус или что-то ...?!».
Клиент был скептически настроен («призраки/вирусы/демоны?»), Но перед тем, как нас выгнали, мы были спасены исповедью Сисадмина. Ему напомнили сценарий, который они периодически запускали, контролируя наш процесс. Этот сценарий ошибочно думал, что мы повешены и вынуждены прекратить процесс (Yack!).
На данный момент возникает вопрос:
В следующий раз мы хотим, чтобы инструмент или техника поймали, кто убивает наш процесс? (Я знаю, что есть некоторые хакерские инструменты, чтобы избежать убийства, но я просто хочу зарегистрировать, что такое серийный убийственный процесс PID/NAME.)
Это какие-то официальные/не-хакерские способы сделать это?
Общесистемный крюк для просмотра вызовов 'TerminateProcess' из любого другого процесса будет довольно инвазивным. –
Большинство клиентов не позволят вам установить такую неофициальную утилиту для подключения. Также я прочитал, что завершение процесса может быть заархивировано многими API-интерфейсами, как вы можете быть уверены, что подключили их все? – Tal