Отключить прикрепление к процессу - PullRequest
0 голосов
/ 27 октября 2011

Я ищу способ проверить, не запускается ли кто-либо, подключенный к программе / процессу, и запустить его.

Я хочу усложнить обратный инжиниринг моей программы, отключив привязку к процессу.

Это можно?есть ли какой-нибудь вызов API, который будет проверять, присоединено ли что-либо к моему процессу, и если это так, завершить процесс.

Насколько я понимаю, я могу или должен проверить это в своем коде, и если я увижу,это правда, я могу просто убить себя или то, что привязано к себе.

#if DEBUG
RTBconsole.Text = "Debug version";
#endif

Это только остановило меня в отладке моего кода. Я хочу иметь возможность остановить любую форму прикрепления, имеющую место в моем процессе.

Ответы [ 2 ]

4 голосов
/ 27 октября 2011

Несколько стратегий ...

# 1:

Есть несколько API для обнаружения присутствия отладчика :

Но есть очевидные ограниченияздесь: если отладчик приостановил выполнение, эта проверка явно бесполезна.Так что это не водонепроницаемый.

# 2:

Подключите ваш собственный отладчик к процессам , которые вас интересуют.Таким образом, пользователь не может присоединить свой собственный (процесс может быть отлажен только один раз одновременно).

Конечно, пользователь может просто убить ваш процесс отладчика.

Или использовать отладчик ядра, который выне может предотвратить или обнаружить.

Что приводит к выводу : на каком-то уровне, пока пользователь имеет полный доступ к системе, он может делать все, что хочет, поэтому обязательноСопоставьте свои усилия по устранению неполадок с осознанием того, что начинающему хакеру потребуется меньше времени, чтобы обойти это.

3 голосов
/ 27 октября 2011

Чтобы обнаружить управляемый отладчик, вы можете вызвать System.Diagnostics.Debugger.IsAttached.

Если вы хотите обнаружить собственные отладчики, необходимая функция называется IsDebuggerPresent.P / вызвать его так:

[DllImport("kernel32")]
static extern bool IsDebuggerPresent();

Как говорит @tenfour, ни один из этих подходов не особенно эффективен против решительного злоумышленника - но тогда ничего не происходит.

...