もっと C++ を学ぶために、何か楽しいことを選びました。それはランダムなアプリケーションのメモリへの書き込みです。私が書いたコードはすべてのアプリケーションで動作するようですが、Google Chrome タブで動作させるのに苦労しています。
私がやろうとしているのは、チート エンジンの助けを借りてメモリ アドレスを持っている Slope (y8.com) のスコアを変更することです。問題は、タブのプロセス ID を取得しているようです。Chrome のタスク マネージャーを使用して、タブのアドレスを 16 進数に変換し、チート エンジンでプロセスを開き、スコア アドレスを見つけました。
ここで問題が発生します。を使用するたびに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;
}
コードの何が問題になっていますか?