简单的.net反调试,调试检测

.net下有一款强大的反调试利器:dnspy

可以直接调试编译出来的.exe程序,查看内存中的值,甚至直接修改源代码;

那么我们的程序如何检测到自己正在被调试呢?

在windows中,用户进程全部由任务管理程序“explorer”启动:即 无论双击快捷方式还是cmd/bat命令启动,该进程的父进程都是

“explorer”

所以,一个简单的反调试方法是检测当前进程的父进程是否是“explorer”,如果不是,则退出程序,或 执行其他脑洞大开的操作!

//main方法或者单独使用一个线程
//保险起见,同时检测explorer的父进程是否为null
Process Parent= GetParentProcess();
Process Grandpa= ParentProcessUtilities.GetParentProcess(Parent.Handle);
if (Grandpa!= null || !Parent.ProcessName.ToLower().Contains("explorer"))
                    Environment.Exit(0);//直接退出
            

效果:在dnspy调试时直接退出!

如果传入null参数,则调试时抛异常

Environment.Exit(null);//抛异常

原文地址:https://www.cnblogs.com/Zdelta/p/14122323.html