.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);//拋異常