C ++ / Cheat Engine,在Google Chrome中写入内存 - WriteProcessMemory& ReadProcessMemory

时间:2018-03-20 16:53:42

标签: c++ google-chrome winapi memory cheat-engine

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

代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

现代浏览器使用多个流程,并且没有规则表明浏览器选项卡HWND必须由网页运行的流程所拥有&#34;。

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

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