Blackbone位于:
现在我想要尝试实现的是使用上述库来读取进程内存。
我已经使用了模式扫描方法来获取内存中的一个地址,我稍后会在读取过程中使用该地址,但是我是否会因为如何读取存储在输出缓冲区中的数据而感到困惑read方法正在使用。
Read方法的结构如下:
https://github.com/DarthTon/Blackbone/blob/master/src/BlackBone/Process/ProcessMemory.h#L57
我在以下提供的模式扫描示例中采用了完全相同的方法:
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,我怎样才能成功读取它,具体来说,我想把它作为一个字节数组来读。
感谢您提供给我的任何进一步帮助,我们将非常感谢!
答案 0 :(得分:2)
好吧,伙计们,这就是它,相当简单!我让自己变得复杂了。
我所做的是创建另一个名为BYTE (unsigned char byte)
的变量类型pResultBytes
,然后使用memcpy(&pResultBytes, pResult, dwSize);
,其中pResult
是Read()
方法的输出缓冲区, dwSize
是要复制到新变量的字节数。
接下来,我开始逐字节地迭代pResultBytes
变量并进行相对转换以生成十六进制字符串并最终读取它。
Woops几乎要提及,我也将pResult
初始化为new UCHAR[dwSize];
,因此它最终具有memcpy
所需的适当空间。
那就是它!
干杯!