【发布时间】:2015-03-29 18:05:13
【问题描述】:
我的目的是从进程(间谍)中读取另一个进程(目标)的变量值。
我从目标进程中大小为 2 的 std::map 开始。
在间谍过程中,遵循以下步骤:
- 将 UAC 执行级别设置为“requireAdministrator (/level='requireAdministrator')”
- 启用 SE_DEBUG_NAME
- 打开了目标进程
- 已使用 ReadProcessMemory
并成功读取地图。我验证了读取地图的大小为 2。但是,无法评估地图的内容。在监视窗口中观察每个字符串键/值对以评估错误。
为了确认我的步骤是否正确,我尝试读取整数变量而不是地图。可以成功获取整数值。
任何有助于检索地图完整内容的建议?
【问题讨论】:
-
您的地图实现和目标二进制文件可能不匹配 - 更准确地说,如果您在 msvc 10 中编译应用程序,并且目标应用程序是使用 msvc 11 构建的,很可能您将无法直接阅读。
-
或任何其他实现,就此而言。有几种 STL 实现(RogueWave、STLPort、Dinkumware 等)。只有当您知道目标进程实际使用的 EXACT 实现,并且您知道该特定实现的
std::map类的节点的精确布局时,您尝试做的事情才会起作用。而且,您还必须考虑 32 位与 64 位的差异。因此,除非您同时控制目标和间谍可执行文件(或者您已经对目标进行了反向工程),否则您所要求的内容是不可行的。 -
@RemyLebeau,谢谢,是的,我现在正在这样做。
标签: c++ memory win32-process