• 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

  • 相关阅读:
    Django Form组件实例:登录界面[Form表单提交,Ajax提交]
    开张啦!
    CART剪枝
    TensorFlow全新的数据读取方式:Dataset API入门教程
    关于神经网络中的padding
    cs231n(一)
    协方差与pearson相关系数
    Auto Encoder
    markdown公式编辑参考
    Python使用日常
  • 原文地址:https://www.cnblogs.com/yueyue184/p/3123943.html
Copyright © 2020-2023  润新知