c++ - 使用 Blackbone 读取进程内存?

标签 c++ memory process

Blackbone 位于此处:

https://github.com/DarthTon/Blackbone

现在我想尝试实现的是使用上述库读取进程内存。

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

Read 方法的结构如下:

https://github.com/DarthTon/Blackbone/blob/master/src/BlackBone/Process/ProcessMemory.h#L57

我正在遵循与以下位置提供的patternscan示例完全相同的方法:

https://github.com/DarthTon/Blackbone/blob/master/src/TestApp/PatternTest.cpp

只是有一点点不同:

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";
}

我的问题来自于无法读取 pResult,我如何才能成功读取它,具体来说,我想将它作为字节数组读取。

预先感谢你们为我提供的任何进一步帮助,我们将不胜感激!

最佳答案

好了,伙计们,这就是它,相当简单!我把自己搞得太复杂了。

我所做的是创建另一个变量类型 BYTE (unsigned char byte)命名pResultBytes然后使用 memcpy(&pResultBytes, pResult, dwSize);哪里pResultRead() 的输出缓冲区方法和dwSize是要复制到新变量的字节数。

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

哎呀几乎不得不提,我还初始化了pResultnew UCHAR[dwSize];同样,它最终也拥有 memcpy 所需的适当空间。 .

就是这样!

干杯!

关于c++ - 使用 Blackbone 读取进程内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40320099/

相关文章:

c++ - GCC 内联汇编 : constraints

c++ - CGAL 仿射变换的语法错误

c - 运算符 [] 的正确输入数据类型是什么?

windows - 帮助了解 Windows 内存 - "Working Set"

c# - 当父 NT 服务被终止/崩溃时终止子进程

c++ - 无法从程序执行 ping

c++ - std::shared_ptr use_count() 值

c++ - 为什么 std::algorithms 不是 constexpr 可能是?

memory - 虚拟内存是无限的吗?

c - 父进程退出后如何让子进程终止?