zoukankan      html  css  js  c++  java
  • 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     
  • 相关阅读:
    Huffman树与编码
    Python引用复制,参数传递,弱引用与垃圾回收
    Git使用说明
    numpy使用指南
    Python Socket
    温故知新之 数据库的事务、隔离级别、锁
    Oracle数据库的语句级读一致性
    VirtualBox NAT方式与主机互相通信
    Linux的定时任务
    Redis学习
  • 原文地址:https://www.cnblogs.com/onetrainee/p/11964512.html
Copyright © 2011-2022 走看看