如何躲过IsDebuggerpresent 函数的检测,调用加过反调试保护的程序的?
我用winexec(),ShellExecute(),CreateProcess()打开加过反调试保护的程序时老出错。用生成一个批处理的文件方式,在用winexec()调用批处理文件来打来反调试保护的程序是来是出错。但我自己运行批处理文件却可以打开被反调试保护的程序。我看过一个OD(一种手工脱壳工具)的插件HideOD,可以帮助OD躲过IsDebuggerpresent 函数的检测。我不知道他是怎么做到,我在delphi区发贴无人能解。希望能在VC区有所收获,谢谢各位帮忙的大虾了。

解决方案 »

  1.   

    怎么会用这种反debug呢,你看看ollydbg有插件,点一下就过了,且该函数是一个ring3的对softice没反应啊,用它形同虚设,你看看fly该得那个.....又看了下你的文章,你要实现这个插件吗,就是一个内存补丁啊,修改掉调试器的符号,或hook掉可以让attach process的函数,绕来绕去就是,hook住IsDebuggerpresent ,就行了,还要记住,凡调试在虚拟机中进行,还有就是记住有专门的调试器设备~~~~~~~~~~应该打开你的思路了吧
      

  2.   

    看看这篇文章:
    不过用的也是CreateProcess
    http://developer.ccidnet.com/art/322/20030116/36811_1.html
      

  3.   

    1.修改掉调试器的符号
    2.hook IsDebuggerpresent!
    3.最简单...
    因为你已经可以自己运行bat文件载入他,只是还无法在程序中打开那个bat文件来顺利载入它对吧?那是因为他的防DEBUG模块检测到了你当前运行BAT文件的父进程具备某种DEBUG程序的特性,因此不让打开,你试试这样,用一个turbo c/c++或borland C/C++都可以,用汇编也可以,写一个最最简单的语句,就是运行调用你这个bat文件,因为简单可能就可通过检测,如果这样能成功,你再使用一些其它方法来接管这个程序.4.顺利说一下,反debug的技术有很多种,其中一种就是检测载入自身的进程是否存在"非法"特征,我之前成功的改过一个OD版本,使之逃过了一款暴强壳的检测,从而顺利将其载入进行动态跟踪。
      

  4.   

    楼主:
    我觉得你的问题不是IsDebuggerpresent 的问题应该是那个程序检查到他的父进程不是Explorer.exe造成的你把你的程序文件名改为Explorer.exe试试看吧我猜的如果不成功,你可把那个程序发给我,我可以帮你分析一下
      

  5.   

    我要写的是一个管理工具软件类的程序,该程序要调用多种不同工具软件,这些工具软件大部分都是加过壳的。这些加过壳程序用winexec(),ShellExecute(),CreateProcess()直接调用也无法打开。我估计都加了IsDebuggerpresent来检测。
    我估计目前只能用hook IsDebuggerpresent来解决问题了。但很多提出了可行的方法,却没有具体的方案,我估计大家也都不清楚该怎么做才好。
    http://www.pediy.com/tools/debuggers/ollydbg/plugin.htm 
    这里面有几个反IsDebuggerpresent 的程序 如hidedbg 0.1 (内含源码),SV_IsDebug14.zip,里面都是带源码的,但都是汇编代码。我头都晕了。希望能有大虾帮忙整理出有用的关键代码。感激不尽。
      

  6.   

    to:  xikug(xIkUg[CCG][RCT]) 
     晕,我用过这招新建了个Explorer.exe程序 再调用那个加过壳的程序还是弹出反调试窗口。我调用的不是1个程序,而是很多不同的工具程序。所用用加壳程序加过反调试保护的都没办法调用。您用ASProtect 把反调试保护选中然后 随便给个程序加壳然后调用都可以看到反调试保护窗口的。
      

  7.   

    ASProtect 自己可以 调用这种加过反调试保护的程序的,但别的程序不可以。当然系统的Explorer.exe 也是可以调用的。但自己写的Explorer.exe 还是不可以。
      

  8.   

    ASProtect加过壳的程序可以通过CreateProcess运行我做过Loader的可能是你要调用的程序特殊处理过吧是什么工具?可以发给我看看吗?xikug.xp [at] gmail.com
      

  9.   

    是个外挂程序 http://219.153.14.84:82/jdbz128.exe
      

  10.   

    如果只用ASProtect 加壳的话,是可以调用的,但ASProtect 有反调试保护功能,如果把这个功能选上的话,就无法调用了。
      

  11.   

    你是怎么调用的CreateProcess的时候只要不是传入的Debug标志,壳的IsDebuggerpresent是检测不出来的自己正在被调试的
      

  12.   

    CreateProcess(nil,  PChar(strPath),  nil,  nil,
    False,  IDLE_PRIORITY_CLASS,  nil,  nil,  StartUpInfo,
    ProcessInfo) 
    delphi代码,你是怎么调用的?怎么就可以不传入 debug 标志?
      

  13.   

    我也是用delphi的
    试试这个
    ZeroMemory(@StartUpInfo, sizeof(StartUpInfo));
    ZeroMemory(@ProcessInfo, sizeof(ProcessInfo));
    StartUpInfo.cb := sizeof(StartUpInfo);
    bCreate := CreateProcess(PChar(strPath), nil, nil, nil, False,
      CREATE_SUSPENDED, nil, nil, StartUpInfo, ProcessInfo);
    ResumeThread(ProcessInfo.hThread);