如何从Windows应用程序内存中读取一些数据?

Kir*_*tev 1 memory windows debugging data-extraction

我有一个应用程序,它显示了一些数据.我需要附加到这个应用程序的进程,在内存中找到我需要的数据(实际上是一个数字),并将其保存在某个地方.这个应用程序似乎没有使用标准的Windows控件,所以事情不会像使用AutoIt或类似的东西读取控件数据那么简单.

目前我是一个自学数据库的人,对Windows应用程序调试知之甚少.甚至不确定我是否正确地问了我的问题.

那么,你能否给我一些入门指南,比如说,我应该先阅读什么,以及我应该做的一般指示?

谢谢.

Ole*_*leg 7

要读取其他应用程序的内存,您需要打开至少具有访问权限的OpenProcess进程,PROCESS_VM_READ然后使用ReadProcessMemory从进程中读取任何内存地址.如果您是管理员或具有调试权限,则可以打开具有最大访问权限的任何进程,您只需要SeDebugPrivilege在之前启用(请参阅http://support.microsoft.com/kb/131065).

如果您对目标进程的内存知之甚少,则可以枚举与VirtualQueryEx相关的内存块(请参阅如何使用VirtualAllocEx为代码洞穴腾出空间?作为我检查程序代码的示例.你可以用同样的方式检查程序数据).

我看到的最实际的问题是你以过于笼统的方式提问.如果你解释更多你正在寻找的数据类型,我可能会建议你一个更好的方法.例如,如果您可以在某处看到数据,则可以检查与Spy ++(Visual Studio Tools的一部分)相关的窗口和控件.最重要的是窗口(或控件)类以及在显示最有趣窗口时将发送的消息.您还可以使用Process Monitor在显示包含有趣信息的窗口时跟踪所有文件和注册表访问.至少在开始时,您应该使用ReadProcessMemory检查进程的内存 在您正在寻找的数据显示在窗口上的那一刻.

如果您的调查没有成功,我建议您在问题中插入更多信息.


Pon*_*gge 5

我的主要建议是:尝试找到除此之外的任何其他集成方法.即使您成功了,您也将受到目标进程中任何类型更改的攻击,并且可能在Windows O/S中.您所描述的是大多数病毒扫描程序应该标记和阻碍的行为:如果不是现在,那么将来.

也就是说,你可以看看DLL注入.但是,听起来好像你将不得不在反汇编级别调试目标进程:否则,你将如何知道要读取的内存地址?

  • 事实上,这不是一份永远会得到支持的工作。事实上,这根本不是一份工作。这只是对我的好奇心和对不同编程事物的渴望的致敬,与我的“现实生活”项目绝对无关。没有人永远不会支持它,因为没有人永远不会看到它,因为它永远不会离开我的个人家庭桌面。冷静下来 ;) (2认同)