-1

在努力学习更多 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;
}

代码有什么问题?

4

1 回答 1

0

现代浏览器使用多个进程,并且没有规则说浏览器选项卡 HWND 必须由网页“运行”的进程拥有。

某些浏览器实现可能有一个主进程来托管 UI,包括所有选项卡,但实际网页内容可能会呈现到另一个进程中的共享位图/内存,在该进程中运行脚本等是安全的。

Chrome 是开源的,因此您可以查看是否有办法通过查看子进程命令行参数来找出哪个渲染进程渲染某个选项卡。

于 2018-03-20T20:00:07.717 回答