ReadProcessMemory 使目标应用程序崩溃

问题描述

我的目标是从目标应用中读取大量可执行内存。

ReadProcessMemory() 有时会失败,但没关系,我仍然可以检查我感兴趣的其余读取字节。

我不会修改目标应用程序中的任何内容,例如值。

我的问题是,目标应用在一分钟左右后崩溃,或者在其中发生某些重新分配时崩溃。

为了不修改所述内存区域的安全属性,我采取了极端的做法,比如在没有 VirtualProtectEx() 的情况下阅读。

我很好奇什么会导致目标应用程序在从其内存读取后崩溃,而不修改值或访问权限。 (?)

旁注:目标应用程序和我的应用程序可能同时访问所述内存。 (从目标应用的角度来看,它正在被读取、执行和写入。)

你可以在这里查看我的代码:

  UINT64 pageNum = 0;
  BYTE page[4096];
    
  for (UINT64 i = start; i < end; i+=0x1000)
  {
    ReadProcessMemory(qtHandle,(void*)i,&page,sizeof(page),&bytesRead);
    foundCode = findCode(page,pageNum);
    if (foundCode != 0) 
    {
      foundCode += start - 11;
      break;
    }
    pageNum++;
  }

  cout << hex<< foundCode << endl;
  CloseHandle(qtHandle);
  return 0;
}

UINT64 findCode(BYTE* pg,UINT64 pageNum)
{
  for (size_t i = 0; i < 4096; i++)
  {
    if (findPattern(asm2,pg,i)) { //asm2 is an array of bytes
      return (pageNum * 4096 + i);
    }
  }
  return 0;
}

bool findPattern(BYTE* pattern,BYTE* page,size_t index)
{
  for (size_t i = 0; i < sizeof(pattern); i++)
  {
    if (page[index + i] != pattern[i])
    {
      return false;
    }
  }
  return true;
}

解决方法

ReadProcessMemory() 不会导致目标程序崩溃。

Anticheat/antidebug 可能正在检测您并终止应用程序

如果您使用 VirtualProtectEx() 更改权限,肯定会导致崩溃

我们需要查看更多代码才能告诉您问题所在

,

导致问题的是 VirtualProtectEx() 的使用。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...