ReadProcessMemory 使目标应用程序崩溃
ReadProcessMemory crashes target application
我的目标是从目标应用程序读取大块可执行内存。
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() 的使用导致了问题。
我的目标是从目标应用程序读取大块可执行内存。
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() 的使用导致了问题。