2

Итак, я написал программу, которая может успешно считывать память из большинства процессов с помощью VirtualQueryEx. Однако я столкнулся с процессом, для которого эта функция не работает. Это не системный процесс, а просто игровой процесс. Без привилегий Debug я даже не мог открыть дескриптор процесса. С ними я могу получить дескриптор процесса, но все же получить доступ запрещен для VirtualQueryEx.Доступ запрещен при использовании VirtualQueryEx

Я не уверен, но, может быть, процесс является частным? Если это так, что я должен сделать, чтобы успешно использовать функцию VirtualQueryEx?

Я также где-то читал, что, возможно, мне придется приостановить потоки всего процесса перед запуском VirtualQueryEx, но пока мне это не понадобилось ... И когда я использовал функцию Thread32First, чтобы получить первый поток, это дало мне ошибку: ERROR_BAD_LENGTH ...

Я был бы очень признателен за любую помощь в этом вопросе!

+2

Очевидно, что программисты не хотели, чтобы вы возились с игрой. Что довольно нормально, пользователи, которые портили многопользовательские игры с помощью хаков, являются общим бедствием. Учитывая, что есть некоторые шансы, что я буду играть в ту же игру, которую вы хотите испортить, я бы сказал, что эту проблему не нужно решать. –

+1

Все, что я делаю, это только для образовательных целей. Я не собираюсь испортить игры. Моя цель - выяснить, какие трюки используются, чтобы узнать, как лучше защитить свои собственные игры. – Savail

+0

Это интересный вопрос, но ... Вероятно, было бы намного легче ответить, если бы вы включили некоторые дополнительные сведения о процессе вы не можете прочитать. Черт, даже название игры может помочь. – Shog9

ответ

2

Как вы открываете ручку процесса? От the doc:

The handle must have been opened with the PROCESS_QUERY_INFORMATION access right, which enables using the handle to read information from the process object.

Другая возможность заключается в том, что цель процесса и ваш процесс отличается разрядность (32 против 64). В этом случае вам нужно либо использовать MEMORY_BASIC_INFORMATION32, либо что-то вроде VirtualQueryEx64from wow64ext library.

+1

Спасибо за ваш ответ. В то время, когда я делал этот поток, я имел в виду, что я использую Windows 8 64 бит. Во всяком случае, я открываю процесс с PROCESS_ALL_ACCESS, поэтому я предполагаю, что PROCESS_QUERY_INFORMATION уже существует. Различная битость звучала как хорошая идея, поэтому я скомпилировал свою программу на Windows XP 32 бит. Я запускаю его, но, похоже, не смог добиться доступа к этому процессу. В Windows XP я не смог обработать дескриптор процесса даже с привилегиями отладки. – Savail

 Смежные вопросы

  • Нет связанных вопросов^_^