Readprocessmemory в C++ не читает

Я кодирую уже несколько лет, но в 2016 году взял пару лет перерыва. Теперь я решил вернуться, поэтому я хотел поэкспериментировать с реверс-инжинирингом. Я играл в игру под названием Black Ops 1: Zombies. Я нашел адреса памяти, затем перешел на C++, чтобы закодировать простой чит для неограниченного количества боеприпасов (это не в сети), но это не сработало, поэтому попробовал использовать ReadProcessMemory вместо этого, чтобы посмотреть, дает ли он правильные боеприпасы. Консоль начала выводить «0». Я подумал, что с кодом может быть что-то, поэтому я просмотрел часть моего старого исходного кода, и код был таким же, попытался вместо этого установить VS 2015 на случай, если компилятор является проблемой, все еще ничего, попробовал компилятор GNCC, все еще ничего. Пытался использовать его на своем втором компьютере, и это сработало. Я попытался отключить антивирус и защитник Windows, но все равно ничего. Вот исходный код, если он что-то значит:

#include <iostream>
#include <Windows.h>
using namespace std;

DWORD Address = 0x180A6C8;
DWORD pID;

int points;

int main()
{
    while (true)
    {


        HWND hWnd = FindWindowA(0, ("Call of Duty®: BlackOps"));
        GetWindowThreadProcessId(hWnd, &pID);
        HANDLE pHandle = OpenProcess(PROCESS_VM_READ, FALSE, pID);
        ReadProcessMemory(pHandle, (LPVOID)Address, &points, sizeof(points), 0);
        cout << points << endl;
        Sleep(100);
    }
}

Вы не обрабатываете ошибки. FindWindow() находит действующий HWND? Если да, то возвращает ли OpenProcess() действительный HANDLE? Если да, возвращает ли ReadProcessMemory() ИСТИНА? Если какой-либо из них выйдет из строя, что GetLastError() считает причиной? Вы уверены, что у вас вообще правильный адрес памяти? Убедитесь, что Рандомизация разметки адресного пространства (ASLR) не влияет на вас. Вы должны использовать смещение относительно базового адреса процесса, из которого вы читаете.

Remy Lebeau 21.03.2018 18:07

Протестировал все сейчас, и все равно ничего, он работает на моем втором компьютере, поэтому с адресом или кодом все в порядке, и ASLR не влияет на меня.

Pasta Dealer 21.03.2018 21:31

Вы явно что-то делаете не так. То, что я описал, будет нормально работать на всех компьютерах, если вы правильно его используете, выполните адекватную обработку ошибок и получите соответствующие разрешения для доступа к целевому процессу.

Remy Lebeau 21.03.2018 21:58

GetLastError возвращает 0, для него есть строковая функция, также null, я попытался отключить безопасность, антивирус, брандмауэр, защитник Windows и т. д. И, запустив в режиме администратора, все равно возвращает 0. Я попытался использовать другую игру, которая использует модули, но это вернул что-то вроде -66756576 Я не знаю, какое еще разрешение требуется, чем администратор + отключение блокировки возможных факторов

Pasta Dealer 21.03.2018 23:29

Я также пробовал отключить UAC, но все равно ничего

Pasta Dealer 21.03.2018 23:46

Я не вносил изменений в код или компьютер, и сегодня он снова волшебным образом заработал. смешно, но странно: /

Pasta Dealer 25.03.2018 16:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
1 130
1

Ответы 1

A.) Можете ли вы прочитать адрес в Cheat Engine и т. д.

Б.) Требуется ли базовый адрес (например, client.dll)? Если да, то получите базовый адрес требуемого модуля.

Не знаете, что вы имеете в виду? Есть теги, и вопрос довольно прост: почему он не читает из памяти на одном компьютере, а на другом.

Pasta Dealer 21.03.2018 17:25

Другие вопросы по теме