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