#c #memory #crash #access-rights #readprocessmemory
#c #память #сбой #права доступа #readprocessmemory
Вопрос:
Моя цель — считывать большие фрагменты исполняемой памяти из целевого приложения.
ReadProcessMemory()
иногда происходит сбой, но это нормально, я все еще могу просмотреть остальные интересующие меня прочитанные байты.
Я ничего не изменяю в целевом приложении, например, значения.
Моя проблема в том, что целевое приложение выходит из строя примерно через минуту или около того, или когда в нем происходят определенные перераспределения.
Я дошел до крайностей, таких как чтение без VirtualProtectEx()
, чтобы не изменять даже атрибуты безопасности указанных областей памяти.
Мне любопытно, что может привести к сбою целевого приложения после чтения из его памяти без изменения значений или прав доступа. (?)
Примечание: к указанной памяти, вероятно, одновременно обращается как целевое приложение, так и мое приложение. (С точки зрения целевого приложения оно считывается, выполняется и записывается.)
Вы можете взглянуть на мой код здесь:
UINT64 pageNum = 0;
BYTE page[4096];
for (UINT64 i = start; i < end; i =0x1000)
{
ReadProcessMemory(qtHandle, (void*)i, amp;page, sizeof(page), amp;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;
}
Ответ №1:
ReadProcessMemory() не может привести к сбою целевой программы.
Возможно, вас обнаруживает и завершает работу приложения Anticheat / antidebug
Если вы используете VirtualProtectEx() для изменения разрешений, это наверняка может привести к сбою
Нам нужно будет увидеть больше кода, чтобы рассказать вам, в чем проблема
Ответ №2:
Проблема возникла из-за использования VirtualProtectEx() .