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

Очень простая ситуация. Я работаю над приложением в Delphi 2007, которое часто компилируется как «Выпуск», но все еще работает под отладчиком. И иногда он также будет запускаться под SilkTest для регрессионного тестирования. Хотя это довольно весело, я хочу сделать что-то особенное...

Я хочу определить, работает ли мое приложение в отладчике/регрессионном тестере, и если это так, я хочу, чтобы приложение знало, какой инструмент используется! (Таким образом, когда приложение дает сбой, я могу сообщить эту информацию в отчете об ошибке.)

Есть предложения, решения?


person Wim ten Brink    schedule 18.09.2009    source источник
comment
Вы не пишете вредоносное ПО, верно...?   -  person Mick    schedule 18.09.2009
comment


Ответы (4)


Вы можете проверить родительский процесс, который запустил ваше приложение. С помощью CreateToolhelp32Snapshot/Process32First/Process32Next получите родительский PID (PROCESSENTRY32.th32ParentProcessID или TProcessEntry32.th32ParentProcessID) для PID вашего приложения. Затем получите имя файла для родительского PID, чтобы сравнить его с приложениями, которые вы хотите проверить, например SilkTest.

Проверьте эту статью, чтобы узнать об использовании кода.

В дополнение к IsDebuggerPresent и CheckRemoteDebuggerPresent вы также можете запросить PEB.BeingDebugged (PEB — это блок среды процесса, чтобы получить PEB, вы должны запросить TEB, который является блоком среды потока).

person pani    schedule 18.09.2009

Вероятно, вы ищете функцию IsDebuggerPresent. .

person Greg Hewgill    schedule 18.09.2009
comment
Но будет ли он также обнаруживать SilkTest и другое программное обеспечение для тестирования? Или удаленные отладчики? - person Wim ten Brink; 18.09.2009
comment
Существует также функция CheckRemoteDebuggerPresent, которая может идентифицировать удаленные отладчики. Я не знаком с SilkTest, поэтому не знаю, действует ли он как отладчик или нет. Если это так, то вышеописанное будет работать. Если нет, то вам нужно будет найти другую технику. - person Greg Hewgill; 18.09.2009

Чтобы обнаружить SilkTest, вы можете попытаться подключиться к DLL, которая используется только SilkTest, чтобы обнаружить ее присутствие. Например, если Open Agent подключен к процессу, будут присутствовать Win32HookDll_x86.dll или Win32HookDll_amd64.dll (имена можно легко узнать с помощью такого инструмента, как Обозреватель процессов.

person tehlexx    schedule 20.09.2011

Вы также можете сделать

if DebugHook <> 0 then ...
person gabr    schedule 18.09.2009
comment
Это работает только внутри Delphi IDE, а не в других отладчиках. Кроме того, имейте в виду, что приложение отлаживается в режиме выпуска, а не в режиме отладки. - person Wim ten Brink; 18.09.2009