C++ 在ProcessMemory中搜索字符串

C++ 在ProcessMemory中搜索字符串,c++,windows,string-search,readprocessmemory,C++,Windows,String Search,Readprocessmemory,下面是我拼凑的一些代码,它应该检索您输入的游戏/应用程序的processID。就我而言,是Minecraft。现在是否有一种方法可以使用ReadProcessMemory之类的东西在内存中搜索字符串?可能是一个字符串列表,如果它与某些内容匹配,它将返回类似“Found:(string)”的内容 #包括 #包括 使用名称空间std; 德沃德pID; int main() { HWND HWND=FindWindowA(空,“Minecraft 1.7.10”); 如果(!hwnd) { 系统(“c

下面是我拼凑的一些代码,它应该检索您输入的游戏/应用程序的processID。就我而言,是Minecraft。现在是否有一种方法可以使用ReadProcessMemory之类的东西在内存中搜索字符串?可能是一个字符串列表,如果它与某些内容匹配,它将返回类似“Found:(string)”的内容

#包括
#包括
使用名称空间std;
德沃德pID;
int main()
{
HWND HWND=FindWindowA(空,“Minecraft 1.7.10”);
如果(!hwnd)
{
系统(“cls”);

cerr要在内存中查找内容,您需要使用所谓的模式扫描功能。内部和外部的过程基本相同,但在外部项目中,您需要使用ReadProcessMemory()来制作目标进程内存区域的本地副本,然后扫描该缓冲区

使用VirtualQueryEx查找有效的内存区域,然后只扫描这些区域

以下是可以成功完成此操作的代码:

char*扫描内部(char*模式、char*掩码、char*开始、intptr\t大小)
{
字符*匹配{nullptr};
for(char*curr=begin;curr
可以这样称呼:

char*result=ScanEx(“模式”,“xxxxxxx”,“字符*)0,0xffffff,hProc);


这将扫描整个进程的内存中的单词模式,并返回包含它的第一个地址。这只是一个解释这个概念的示例,您需要通过查找字符串所在模块的基址和大小,将搜索范围缩小到模块的地址范围。

要在内存中查找内容,请使用被称为模式扫描函数。内部和外部基本上是相同的过程,但在外部项目中,您使用ReadProcessMemory()创建目标进程内存区域的本地副本,然后扫描该缓冲区

使用VirtualQueryEx查找有效的内存区域,然后只扫描这些区域

以下是可以成功完成此操作的代码:

char*扫描内部(char*模式、char*掩码、char*开始、intptr\t大小)
{
字符*匹配{nullptr};
for(char*curr=begin;curr
可以这样称呼:

char*result=ScanEx(“模式”,“xxxxxxx”,“字符*)0,0xffffff,hProc);


这将扫描整个进程的内存中的单词模式,并返回包含它的第一个地址。这只是一个解释概念的示例,您将希望通过查找字符串所在模块的基址和大小,将搜索范围缩小到模块的地址范围。

如果我认为您理解正确吗喜欢在“Minecraft”的内存中搜索类似“请输入密码”的内容吗?如果是,那么答案就不像看上去那么简单了…是的,这就是我的目标…你可以尝试的是读取整个进程的内存,而(1){ReadProcessMemory(phandle,(void*)address,&value,sizeof(string),0);你能用Spy++确认文本是文本吗?可能是图形,因为它们会
#include <iostream>
#include <Windows.h>
using namespace std;

DWORD pID;

int main()

{
    HWND hwnd = FindWindowA(NULL, "Minecraft 1.7.10");
    if (!hwnd)
    {
        system("cls");
        cerr << "[+] Please open Minecraft 1.7.10 [+]" << endl;
        Sleep(3000);
        exit(-1);
    }
    else
    {
        DWORD procID;
        GetWindowThreadProcessId(hwnd, &procID);
        HANDLE  pHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);
        if (!pHandle) cerr << "ERROR" << endl;
        cout << "[+] Found Minecraft with PID: #" << procID << "[+]\n\n"; 
        Sleep(1000);

        if (procID = NULL)
        {
             cerr << "[+] INTERNAL ERROR: Cannot obtain PID [+]" << endl;
            Sleep(2000);
            exit(-1);
        }
        system("pause");
    }