使用Blackbone读取进程内存
Read Process Memory using Blackbone?
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, abortingnn";
}
我的问题来自于未能读取pResult,我如何能够成功地从中读取,具体来说,我想将其作为字节数组读取。
提前感谢你们为我提供的任何进一步的帮助,我将不胜感激!
好了,伙计们,就是这样,相当简单!我把自己复杂化了。
我所做的是创建另一个名为pResultBytes
的变量类型BYTE (unsigned char byte)
,然后使用memcpy(&pResultBytes, pResult, dwSize);
,其中pResult
是Read()
方法的输出缓冲区,dwSize
是要复制到新变量的字节数。
接下来,我开始逐个字节地迭代pResultBytes
变量,并进行相对转换以生成十六进制字符串并最终读取它。
哎呀,不得不提一下,我也将pResult
初始化为new UCHAR[dwSize];
,所以它最终有memcpy
所需的适当空间。
就是这样!
干杯!
相关文章:
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 可以读入进程内存的最大块大小是多少?
- 如何读取特定地址的进程内存?
- 如何删除列出的"QGraphicsPathItem"对象以控制进程内存使用情况?
- 如何使用带有矢量的 winapi 读取进程内存从另一个进程读取缓冲区?
- 进程间通信堆内存
- Directx 12 :在两个进程之间共享图形内存
- 子进程更新共享 mmap 内存,但父进程没有更改
- 读取进程内存多级指针(DLL 注入)
- 读取进程内存作弊引擎值
- 检测到由于操作系统内存不足而导致子进程终止
- 提升进程间共享内存open_or_create每次都会引发异常
- 使用互斥锁和条件变量增强跨内存的进程间共享向量
- C++如何使用读取进程内存查找进程内存中使用的最后一个(偏移量 - 地址)
- 内存中进程的实际起始地址/W32调试API
- 提升没有共享内存的进程间字符串
- Linux:来自内存密集型进程的system(),无需分叉
- Boost::asio,共享内存和进程间通信
- 使用调试权限和读/写内存打开进程
- 内存是进程安全的