Шаг 30 - Определяем, что приложение запущено в режиме отладки

Одной из задач по защите приложения может стать определение и запрет режима отладки. Действительно режим отладки позволит опытному программисту обойти Ваши регистрационные процедуры. В Win32 API предусмотрена специальная функция IsDebuggerPresent. Эта функция вернет ненулевое значение, если программа запущена в режиме отладки. Проверим? Можно вписать эту функцию в любое место кода.

BOOL CTestDebugDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;
	if (IsDebuggerPresent()==TRUE) AfxDebugBreak();
	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	return TRUE;
}

Теперь, если запустить эту программу в отладочном режиме.

30_1.gif (5386 b)

То в ходе выполнения будет вызвано прерывание программы.

30_2.gif (4836 b)

В тоже время при обычном выполнении этого не произойдет. Если вы хотите таким образом защитить Ваше приложение от отладчика учтите, что данную проверку нужно раскидать по всей программе в каждой функции и даже в процедуре получения и обработки сообщений. Только не делайте отдельную функцию, при оптимизации все вызовы этой функции будут перенаправлены в одно место и достаточно будет изменить один – два байта в программе и она будет отключена. Кроме того, неплохо, если обнаружение отладчика приведет к удалению самой программы, перезагрузки Windows или еще чему-нибудь похуже. Чтоб не повадно было. Конечно совсем это не спасет, но усложнит процесс.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.