C ++ / Cheat Engine, запись в память в Google Chrome — WriteProcessMemory & amp; ReadProcessMemory

Стремясь выучить больше C ++, я выбрал — вы знаете — что-то интересное, и это — запись в память случайного приложения. Кажется, что написанный мной код работает во всех приложениях, но у меня возникают трудности с его настройкой для работы с вкладками Google Chrome.

То, что я пытаюсь сделать, — это просто изменить мой счет на Slope (на y8.com), для которого у меня есть адрес памяти, с помощью чит-движка. Кажется, проблема заключается в получении идентификатора процесса на вкладке. С помощью диспетчера задач Chrome я перевел адрес вкладки в шестнадцатеричный формат, открыл процесс в чит-движке и нашел адрес счета.

Здесь проблема приходит. Всякий раз, когда я использую GetWindowThreadProcessId(window, &processID); cout << processID, он не печатает идентификатор, который можно увидеть в диспетчере задач Chrome для вкладки игры. Фактически, он печатает идентификатор chrome в целом (что я знаю, потому что в менеджере задач chrome этот идентификатор есть у «chrome»). И результат не может быть записан или прочитан из идентификатора процесса Chrome. Если я проигнорирую эту проблему, buffer кажется, всегда печатать как 0 .. без изменений.

Я очень новичок в этом, и ожидаю, что сам не знаю, о чем говорю. Если вы сами протестируете игру, вам нужно будет найти адрес, который использует ваш Chrome. Но вот код (я закомментировал WriteProcessMemory и положи Read просто так у меня все заработало, прежде чем что-то писать)

#include <iostream>
#include <string>
#include <Windows.h>

using namespace std;

int main() {
int buffer = 0;

LPVOID address = (LPVOID)0x15E7E1B0FB8/*(0x000000000192DFA0 + 0x0000291D8FE04000 + 0x18)*/;

cout << "Begin playing the game and wait for the 0 score to appear" << endl;

HWND window = FindWindow(NULL, "Slope Game - Play online at Y8.com");

if (window) {
cout << "Game found running! You ready to hax?" << endl;
DWORD processID = 11180;
GetWindowThreadProcessId(window, &processID);
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, false, processID);

if (handle) {
/*string hackedScoreInput = "0";
cout << "Desired Score: " << flush;  getline(cin, hackedScoreInput);
int hackedScore = stoi(hackedScoreInput);

int suc = WriteProcessMemory(handle, address, &hackedScore, sizeof(hackedScore), NULL);
if (suc > 0) {
cout << "HAXED!" << endl;
CloseHandle(handle);
}
else {
cerr << GetLastError() << endl;
cerr << hackedScore << " of size: " << sizeof(hackedScore) << endl;
return 3;
}*/

while (true) {
ReadProcessMemory(handle, address, &buffer, sizeof(buffer), NULL);
cout << buffer << " at adress: " << processID << endl;
Sleep(100);
system("CLS");
}
}
else {
cerr << "Could not open the process" << endl;
return 2;
}
}
else {
cerr << "Error! Could not find window!" << endl;
Sleep(3000);
return 1;
}

return 0;
}

Что не так с кодом?

-1

Решение

Современные браузеры используют несколько процессов, и нет правила, согласно которому вкладка браузера HWND должна принадлежать процессу, в котором веб-страница «работает».

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

Chrome является открытым исходным кодом, поэтому вы можете посмотреть, есть ли способ узнать, какой процесс рендеринга отображает определенную вкладку, посмотрев аргументы командной строки дочерних процессов.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]