• 06 内存断点


    【太多事情要做了,这部分难度对我来说又很大,先写一下大体框架,到时候具体函数逆向分析过程给写出来】

    问题:

    1. 内存断点的实现思路是什么?

    2. 操作系统检测的流程是什么?

    3. 如何设置与恢复内存断点?

    1. 内存断点的设置

      内存断点分为两类:访问断点与写入断点。

      其本质是调用 VirtualProtected 来修改页(PTE)属性。

      1)访问断点,则将页的属性设置为 PAGE_NOACCESS。

      2)写入断点,PAGE_EXECUTE_READ。

    2. 内存断点的处理流程

    3. 设置与恢复内存断点:

      其本质就是调用 VirtualProtected,保存原来的页属性,改为新的页属性。

      当出现内存访问异常时,再将原来的属性恢复过来。

      注意:因为是修改页属性,你设置内存断点可能设置单个字节或字,因此这时当发生内存访问异常时,就需要判断是不是真正需要断下来的地址。

        如果是该页的其他地址,则放行;否则就断下。

     1     // 内存断点
     2     auto er = dbgEvent.u.Exception.ExceptionRecord;
     3     if (er.ExceptionInformation[0] == 0)
     4     {
     5         CString str;
     6         str.Format(L"���ϵ㱻����%X,er.ExceptionAddress = %X", er.ExceptionInformation[1], er.ExceptionAddress);
     7         setText(pdlg->m_edlog, str);
     8     }
     9 
    10     DWORD dwProtect =0;
    11     BOOLEAN isCommand = 0;
    12 
    13     isCommand = VirtualProtectEx(handle, (PVOID)er.ExceptionInformation[1], 1, oldProtote, &dwProtect);
    14     
  • 相关阅读:
    数据结构与算法总结
    Java基础总结
    Android基础之View的绘制原理
    安卓面经汇总
    Elasticsearch7.7.0搭建并集成IK分词器
    Linux&Nginx16_Linux安装软件2
    Linux15_Linux命令2
    Linux&Nginx16_Nginx安装3
    Linux&Nginx16_软件安装方式&上传下载1
    Linux15_Linux修改3
  • 原文地址:https://www.cnblogs.com/onetrainee/p/11964512.html
Copyright © 2020-2023  润新知