zoukankan      html  css  js  c++  java
  • int 3断点检测 和调试

    感谢师叔的科普。

    下面代码来源于52pojie。不想自己写,我是懒人。

    #include <windows.h>
       
    BOOL DetectFuncBreakpoints();
       
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
    {
       
        if (DetectFuncBreakpoints())
        {
            MessageBox(NULL, "检测到int3断点", "结果", MB_OK);
            return 0;
        }
        else
        {
            MessageBox(NULL, "没有检测到int3断点", "结果", MB_OK);
        }
       
        return 0;
    }
       
    BOOL DetectFuncBreakpoints()
    {
        BOOL bFoundOD;
        bFoundOD=FALSE;
        DWORD dwAddr;
        dwAddr = (DWORD)GetProcAddress(LoadLibrary("user32.dll"),"MessageBoxA"); //将FARPROC类型转换成DWORD
        __asm
        {
                cld               ;检测代码开始
                mov     edi,dwAddr
                mov     ecx,100  ;100bytes
                mov     al,0CCH ;字母前面必须有0
                repne   scasb
                jnz     ODNotFound
                mov bFoundOD,1
    ODNotFound:             
        }
        return bFoundOD;
    }
    c++

    跳过检测方法:
    1、修改检测时的跳转
    2、下 hr等强点的断点

    如果遇见这样的检测,可以先下一个自己需要int3 地址的断点,然后硬件读取一下。就可以了。

    另外当遇见硬断点 也找不到的时候,可能是 硬件断点也被清除了。hook SetThreadContext

    seh一样可以检测。c00000003

  • 相关阅读:
    php 延迟静态绑定: static关键字
    python分片
    用逗号分隔数字,神奇
    ubuntu 屏幕截图
    js 获取随机数
    netty : NioEventLoopGroup 源码分析
    LinkedList 源码分析
    面向对象
    JS
    网页
  • 原文地址:https://www.cnblogs.com/yueyue184/p/3123943.html
Copyright © 2011-2022 走看看