OD内存断点初步分析

本文深入探讨了内存断点的工作原理,通过IDA静态分析了解内存断点的实现,接着使用OD动态调试分析了_setmembreakpoint函数的流程,揭示了内存断点信息在内存中的存储方式,包括地址、长度、属性等关键信息。

内存断点原理:

       内存断点原理,通过将内存断点所在内存页的属性修改为内存断点属性(non-access or non-writable),程序执行时,对目标内存页中所有数据的访问或写,都会抛出异常,OD通过截获此异常,然后对比,存储在某一内存的内存断点信息表的地址,判断是否匹配内存断点地址范围,匹配则中断程序执行,否则,继续执行。

IDA静态分析:

本例利用IDA和OD动静结合,分析OD内存断点基本流程,以及内存断点存储在哪儿段内存地址。

首先将OD丢进IDA中,在程序函数列表中搜索breakpoint字符串,如图:


我们仅分析内存断点,通过function name 可知:_setmembreakpoint是我们需要分析的函数。跳到该函数分析,入口点部分截图:



可知,该函数有3个参数,通过F5(hexray),其反编译伪代码:

signed int __cdecl Setmembreakpoint(__int16 a1, unsigned int a2, int a3)
{
  _DWORD *v3; // eax@3
  signed int result; // eax@5

  if ( !dword_4D8138 && VersionInformation.dwPlatformId != 2 )
  {
    v3 = Findmemory(a2);
    if ( a2 < 0x80000000 )     //判断内存断点地址是否在用户内存中(0x800000~0xffffffff属于系统内核内存区域)
    {
      if ( v3 && *((_BYTE *)v3 + 11) & 1 )   //判断内存断点是否在资源内存区域
      {
        if ( MessageBoxA(
               hWnd,
               "You are going to set memory breakpoint on resource. This breakpoint, when hit within system DLL, may freeze Windows or cause system crash. Do you really want to set this breakpoint?",
               "Mem
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值