在努力学习更多 C++ 的过程中,我选择了——你知道——做一些有趣的事情,那就是写入随机应用程序的内存。我编写的代码似乎适用于所有应用程序,但我很难让它与 Google Chrome 选项卡一起使用。
我想要做的只是改变我在 Slope(在 y8.com 上)的分数,在作弊引擎的帮助下我有内存地址。问题似乎是检索选项卡的进程 ID。使用 Chrome 的任务管理器,我将选项卡的地址转换为十六进制,在作弊引擎中打开进程并找到分数地址。
问题来了。每当我使用GetWindowThreadProcessId(window, &processID); cout << processID
时,它都不会打印可以在 chrome 的任务管理器中看到的游戏选项卡的 ID。实际上,它会打印整个 chrome 的 ID(我知道这是因为在 chrome 的任务管理器中,“chrome”具有该 ID)。并且分数不能写入或读取 chrome 的 processID。如果我忽略这个问题,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;
}
代码有什么问题?