访问和编辑内存中的多个地址

时间:2017-07-08 08:26:39

标签: c++ memory memory-address

我想访问和编辑内存中的多个地址。 如果它含糊不清,问题是:如果我使用内存扫描仪并且结果是地址列表,我将如何能够访问和编辑它们? 我已经被告知尝试将所有地址放入一个数组中,我该怎么做?

到目前为止,这是代码:

//

#include "stdafx.h"
#include "iostream"
#include "Windows.h"
#include <cstdint>
#include <stdint.h>

using namespace std;
int main()
{
    int newValue = 0;
    int* p;
    p = (int*)0x4F6DCFE3DC; // now p points to address 0x220202

    HWND hwnd = FindWindowA(NULL, "Call of Duty®: Modern Warfare® 3 Multiplayer");// Finds Window
    if (hwnd == NULL) {// Tests for success
        cout << "The window is not open" << endl;
        Sleep(3000);
        exit(-1);
    }
    else {
        cout << "It's open boss!";
    }
    else {// If Successful Begins the following
        DWORD procID;
        GetWindowThreadProcessId(hwnd, &procID);
        HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);//Gets handle on process
        if (procID == NULL) {
            cout << "Cannot obtain process." << endl;
            Sleep(3000);
            exit(-1);
        }
        else {//Begins writing to memory
            while (newValue == 0) {
                 /*This Writes*/WriteProcessMemory(handle, (LPVOID)0x04F6DCFE3DC, &newValue, sizeof(newValue), 0);
                 cout << p;
                 Sleep(3000);

            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这很容易。只需使用std::vector<std::pair<int*,int>>包含您要修改的所有这些地址以及它们应该实现的值:

std::vector<std::pair<int*,int>> changeMap = {
    { (int*)0x4F6DCFE3DC , 0 }
    // more address value pairs ...
};

然后你可以循环处理它们:

for(auto it = std::begin(changeMap); it != std::end(changeMap); ++it)
{
    WriteProcessMemory(handle, (LPVOID)it->first, &(it->second),
                       sizeof(it->second), 0);
}

无论你想用 1 实现什么目标。

  

我已经被告知尝试将所有地址放入数组中,我该怎么做?

如果您想将所有地址内容设置为0,您可以使用更简单的构造:

int newValue = 0;
std::vector<int*> changeAddrList = {
    (int*)0x4F6DCFE3DC ,
    // more addresses to change ...
};

// ...

for(auto addr : changeAddrList)
{
    WriteProcessMemory(handle, (LPVOID)addr , &newValue ,
                       sizeof(newValue), 0);
}

1 摆弄另一个进程内存容易出错,可能会导致各种意外行为!
您的代码可能会在该程序的较新版本中失败,您尝试应用您的作弊码。