Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用BlackOne读取进程内存?_C++_Memory_Process - Fatal编程技术网

C++ 使用BlackOne读取进程内存?

C++ 使用BlackOne读取进程内存?,c++,memory,process,C++,Memory,Process,BlackOne位于这里: 现在我想尝试实现的是使用前面提到的库读取进程内存 我已经使用模式扫描方法在内存中获取了一个地址,稍后我将在读取过程中使用该地址,但是我有点困惑于是否应该如何读取读取方法正在使用的输出缓冲区中存储的数据 读取方法的结构如下: 我遵循的方法与patternscan示例中所采用的方法完全相同: 只是稍微有点不同: void FindKeys() { Process p; std::vector<DWORD> procs; std::vector<pt

BlackOne位于这里:

现在我想尝试实现的是使用前面提到的库读取进程内存

我已经使用模式扫描方法在内存中获取了一个地址,稍后我将在读取过程中使用该地址,但是我有点困惑于是否应该如何读取读取方法正在使用的输出缓冲区中存储的数据

读取方法的结构如下:

我遵循的方法与patternscan示例中所采用的方法完全相同:

只是稍微有点不同:

void FindKeys()
{
Process p;
std::vector<DWORD> procs;
std::vector<ptr_t> results;

ptr_t   dwAddress;
size_t  dwSize;
PVOID   pResult;
bool    handleHoles = true;
Process::EnumByName(L"Notepad++.exe", procs);

if (!procs.empty())
{
    p.Attach(procs.front());
    auto pMainMod = p.modules().GetMainModule();

    // Initialize patterns
    PatternSearch ps1{ 0x33, 0xC5, 0x89 };

    // Scan all allocated process memory
    std::wcout << L"[+] Searching for Pattern Scan...\n";
    ps1.SearchRemoteWhole(p, false, 0, results);

    std::wcout << L"[+] Found at Address: [0x";
    std::wcout << std::hex << results[0];
    std::wcout << L"]!\n";

    dwAddress = results[0];
    dwSize = 0x10;

    p.memory().Read(dwAddress, dwSize, pResult, handleHoles);

    results.clear();
}
else
    std::wcout << L"Can't find Notepad++.exe, aborting\n\n";
}
void FindKeys()
{
过程p;
std::向量过程;
std::矢量结果;
地址;
尺寸t尺寸;
PVOID预压;
bool handleHoles=true;
进程::EnumByName(L“Notepad++.exe”,procs);
如果(!procs.empty())
{
p、 连接(过程前());
自动pMainMod=p.modules().GetMainModule();
//初始化模式
模式搜索ps1{0x33,0xC5,0x89};
//扫描所有分配的进程内存

好了,伙计们,就这样,相当简单!我把自己复杂化了

我所做的是创建另一个名为
presltbytes
的变量类型
BYTE(unsigned char BYTE)
,然后使用
memcpy(&presltbytes,pResult,dwSize);
其中
preslt
Read()的输出缓冲区
method和
dwSize
是要复制到新变量的字节数

接下来,我开始逐字节迭代
pResultBytes
变量,并进行相关转换,生成一个十六进制字符串并最终读取它

Woops几乎要提到,我还将
preslt
初始化为
new-UCHAR[dwSize];
,因此它最终拥有
memcpy
所需的适当空间

就这样


干杯!

你为什么在某些地方把
const-char*
传递给
std::wcout
而不是
const-wchar*
?@Brando修正了,因为我不习惯那种惯例。