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);
哪里pResult
是 Read()
的输出缓冲区方法和dwSize
是要复制到新变量的字节数。
接下来我刚刚开始迭代pResultBytes
变量逐字节并进行相对转换以生成十六进制字符串并最终读取它。
哎呀几乎不得不提,我还初始化了pResult
到 new UCHAR[dwSize];
同样,它最终也拥有 memcpy
所需的适当空间。 .
就是这样!
干杯!
关于c++ - 使用 Blackbone 读取进程内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40320099/