Одной из задач по защите приложения может стать определение и запрет режима отладки. Действительно режим отладки позволит опытному программисту обойти Ваши регистрационные процедуры. В 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; }
Теперь, если запустить эту программу в отладочном режиме.
То в ходе выполнения будет вызвано прерывание программы.
В тоже время при обычном выполнении этого не произойдет. Если вы хотите таким образом защитить Ваше приложение от отладчика учтите, что данную проверку нужно раскидать по всей программе в каждой функции и даже в процедуре получения и обработки сообщений. Только не делайте отдельную функцию, при оптимизации все вызовы этой функции будут перенаправлены в одно место и достаточно будет изменить один – два байта в программе и она будет отключена. Кроме того, неплохо, если обнаружение отладчика приведет к удалению самой программы, перезагрузки Windows или еще чему-нибудь похуже. Чтоб не повадно было. Конечно совсем это не спасет, но усложнит процесс.