我想不要让我的程序调试.我有第二个线程反复检查调试器是否附加:
while(1){
BOOL isDebugged = IsDebuggerPresent();
if(isDebugged){
//exit from my app
}
//and then check CheckRemoteDebuggerPresent()
}
Run Code Online (Sandbox Code Playgroud)
我想知道这种方法是否安全?即使有这种保护,有人可以调试我的应用吗?还有更好的方法吗?
编辑:
其实我有一个硬件安全令牌.我想保护我的应用不被复制.但我听说通过调试应用程序可以打破使用令牌的简单真/假检查
Sco*_*ain 12
总是有办法解决你所采取的任何保护措施,你唯一能做的就是让任何攻击者都感到非常沮丧,并宣称不值得花时间试图反击你的软件.这只是需要多少时间/金钱来让你让一个额外的人不去尝试.
如果只是检查IsDebuggerPresent
安全回答?我已经绕过,准确的安全措施在软件我已经通过反编译的代码进行逆向工程OllyDbg中找到任何进口的IsDebuggerPresent
功能和修补的exe刚刚返回false相反,我花了15分钟左右,以绕过保护.在逆向工程中"经验丰富"的人可能会在5年内完成.
您唯一能做的就是"提高标准"以防止您的程序被逆向工程化,这里有一些建议:
其中一些解决方案(如检测调试器是否正在运行)可能会惹恼那些将调试器用于其他软件但又不想在您的软件上使用它的合法用户,因此您需要权衡成本.
Han*_*ant 11
任何人都可以看到你使用这个功能,从Dumpbin.exe/imports中可以看到它.一个简单的api钩子消除了它.所以,不,这完全不值得麻烦.唯一会被它放慢速度的是你,当你需要在某天附加调试器来解决问题时,被你自己的反措施打败了.
如果您真的关心这一点,那么就把钱花在反逆向工程软件产品上.像犰狳这样的东西,有很多.他们使用多种方法来检查调试器,技术当然是一个交易秘密.他们也将击败反汇编企图.
并且不要忽视这个的实际成本.我个人不得不在我每天工作的产品中处理这种软件.媒体编解码器的许可执行方案和视频点播下载的DRM.称他们为PITA与我们不得不处理它们所经历的痛苦和痛苦并不完全相符.特别是反调试技术很痛苦,在尝试调试应用程序时会抛出无法捕获的异常.所以这些东西不会被调试,并且是一个永无止境的错误和破坏的来源.我们得到的第一次机会刚刚消除了更具侵略性的东西,每个人都有机会做出贡献,完全打败了意图.DRM软件中的一个崩溃错误由我完全诊断并提供了修复它的具体建议,需要一年半的时间来实际修复.DRM特别无效,我最近计算出维护它的成本可以通过给每个下载电影的人免费赠送五美元礼券来摊销.这不行.
归档时间: |
|
查看次数: |
5082 次 |
最近记录: |