首页
社区
课程
招聘
[求助]关于IsDebuggerPresent函数
发表于: 2009-1-9 10:29 4859

[求助]关于IsDebuggerPresent函数

2009-1-9 10:29
4859

这是一个系统定义的函数,为什么我用的时候感觉不大对。

请各位指教一下

void CTestODDlg::IsHaveOD()
{
        if (IsDebuggerPresent() )
        {
                AfxMessageBox("There is OD!");
        }
        else
        {
                AfxMessageBox("There is not.");
        }
}

void CTestODDlg::OnButton1()
{
        // TODO: Add your control notification handler code here

         IsHaveOD();
}

这个是我自己写的代码。但是我没有启动OD,它为什么提示有呢。仅仅有一次是成功的,那就是我第一次运行的时候没有开OD,提示我没有。然而当我开过一次OD后,他永远提示我存在OD。我将OD关闭后,即使是删了DEBUG文件或者重启仍然不行。

然后将看雪兄的代码放上去也是这个问题

/*--------------------------------------------------------------  
   IsDebuggerPresent.cpp -- 检测用户模式调试器(如OllyDbg)  
                           (c) www.pediy.com code by 段钢, 2003.11  
  --------------------------------------------------------------*/   
#include <WINDOWS.H>   
BOOL IsInDebugger();   
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)   
{      
         
    if( IsInDebugger() )   
        MessageBox(NULL,TEXT ("u are debugging me !"),TEXT ("OK"),MB_ICONEXCLAMATION);   
    else   
        MessageBox(NULL,TEXT ("not debugged!"),TEXT ("OK"),MB_ICONEXCLAMATION);   
    return 0;   
}   
   
//////////////////////////////////////////////////////////////////////   
   
BOOL IsInDebugger()   
{   
  HINSTANCE hInst = LoadLibrary("kernel32.dll");   
   
  if (hInst != NULL)   
  {   
   FARPROC pIsDebuggerPresent = GetProcAddress(hInst, "IsDebuggerPresent");   
   
    if (pIsDebuggerPresent != NULL)   
    return pIsDebuggerPresent();   
  }   
  return FALSE;   
   
}   

求助。。。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
跪求指导。。
2009-1-9 17:34
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
3
你是在explorer下双击exe,还是在编译器下执行的?
编译器下执行的话实际还是调试方式
2009-1-9 18:08
0
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我在Debug与Release模式下调试证明是没问题的。。
但是如果将它编译成EXE文件甚至用OD加载都无法找到调试器。。为什么呢
2009-1-9 19:10
0
雪    币: 2943
活跃值: (1788)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
5
用原版OD就会看到效果的。
这个函数检测调试器,并不局限于OD的。
各种修改版,避开了这种检测。
2009-1-9 19:14
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
6
这种反调试技术已经过时了.....嚯嚯...
2009-1-9 19:21
0
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
搞定了。原来是OD插件的问题,谢谢
2009-1-9 19:24
0
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
从低级入手,俺是新手,要弄清楚才好,谢谢大家
2009-1-9 19:25
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
原版OD插入
2009-1-10 01:53
0
游客
登录 | 注册 方可回帖
返回
//