Защита от отладки для приложений на C#, VB.NET
Проверить производится ли отладка или слежение за приложением во время работы (создение объектов, дерево вызовов и т.д.) можно с помощью следующего кода:
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
public static extern uint IsDebuggerPresent();
bool IsDebuging()
{
foreach (System.Diagnostics.ProcessModule mod in
System.Diagnostics.Process.GetCurrentProcess().Modules)
{
if (mod.ModuleName.ToLower() == "diasymreader.dll"
|| mod.ModuleName.ToLower() == "vs7jit.exe"
|| mod.ModuleName.ToLower() == "mcee.dll"
|| mod.ModuleName.ToLower() == "jsee.dll"
|| mod.ModuleName.ToLower() == "cpde.dll"
|| mod.ModuleName.ToLower() == "csm.dll"
|| mod.ModuleName.ToLower() == "profilercallback.dll"
)
return true;
}
if (IsDebuggerPresent() != 0)
return true;
return false;
}
Изучение во время исполнения может производится например с помощью .Net profiler, dotTrace.
Данный метод полезен если приложение обфусцировано и закрыто для статического изучения (изучение с помощью декомпиляторов), для этого если использовать Inquartos Obfuscator нужно включить опцию "Создание Win32 оболочки"