gpt4 book ai didi

c++ - IsDebuggerPresent() 函数是停止调试进程的安全方法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:04:14 24 4
gpt4 key购买 nike

我不想让我的程序被调试。我有第二个线程反复检查是否附加了调试器:

while(1){
BOOL isDebugged = IsDebuggerPresent();
if(isDebugged){
//exit from my app
}
//and then check CheckRemoteDebuggerPresent()
}

我想知道这种方法是否安全?即使有这种保护,有人可以调试我的应用程序吗?有更好的方法吗?

编辑:
实际上我有一个硬件安全 token 。我想保护我的应用程序不被复制。但我听说调试应用程序会破坏使用 token 的简单真/假检查

最佳答案

总会有办法绕过您设置的任何保护措施,您唯一能做的就是让它变得足够困难,以至于任何攻击者都会感到非常沮丧,并宣称不值得他花时间来尝试反向工程您的软件。这只是为了阻止那个额外的人尝试花费多少时间/金钱的问题。

要回答仅检查 IsDebuggerPresent 是否安全?我已经绕过了软件中的确切安全措施,我不得不通过使用 OllyDbg 反编译代码来进行逆向工程。找到对 IsDebuggerPresent 函数的任何导入并将 exe 修补为只返回 false,我花了大约 15 分钟来绕过保护。在逆向工程方面“有经验”的人可能会在 5 天内完成。

您唯一能做的就是“提高标准”以防止您的程序被逆向工程,这里有一些建议:

  • 混淆你的代码
  • 检测当前是否正在运行常用调试软件(Visual Studio、OllyDbg、IDA 等...)
  • 请专家顾问检查您的代码,并让没有源代码的人更难调试。

其中一些解决方案(如检测调试器是否正在运行)可能会激怒那些将调试器用于其他软件但不想在您的软件上使用它的合法用户,因此您需要权衡成本。

关于c++ - IsDebuggerPresent() 函数是停止调试进程的安全方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18286011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com