码迷,mamicode.com
首页 > 其他好文 > 详细

06 内存断点

时间:2019-12-01 00:43:37      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:mamicode   ted   逆向   cst   protected   过程   属性   size   cstring   

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

 

问题:

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     

 

06 内存断点

标签:mamicode   ted   逆向   cst   protected   过程   属性   size   cstring   

原文地址:https://www.cnblogs.com/onetrainee/p/11964512.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!