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

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

目前我是一个自学者数据库的家伙,并有相当的Windows应用程序debugging知识浅。 甚至不知道我是否正确地问了我的问题。

那么,你能否给我一些关于我应该先读什么的启动指南,以及我应该处理的大方向?

谢谢。

Solutions Collecting From Web of "如何从Windows应用程序内存读取一些数据?"

我的主要建议是:尝试找到比这个任何其他方法的集成。 即使你成功了,你也将成为目标进程中任何类型的变更的人质,甚至可能是Windows O / S。 你所描述的是大多数病毒扫描程序应该标记和阻碍的行为:如果不是现在,那么将来。

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

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

如果你不太了解目标进程的内存,那么你可以枚举VirtualQueryEx方面的内存块(请参阅如何使用VirtualAllocEx为代码洞洞腾出空间?作为一个例子,我检查程序代码。您可以用相同的方式检查程序数据)。

我所看到的最实际的问题是你用一般的方式提出你的问题。 如果你更多地解释你正在寻找什么样的数据,我可能会建议你一个更好的方法。 例如,如果您可以在某处查看数据,则可以使用Spy ++(Visual Studio Tools的一部分)来检查相应的窗口和控件。 最重要的是窗口(或控件)的类和当显示最有趣的窗口时将发送的消息。 您还可以使用进程监视器跟踪所有文件和注册表访问的时间,当有窗口的有趣的信息将被显示。 至少在一开始,您应该在您正在查找的数据显示在窗口上的那一刻,使用ReadProcessMemory检查进程的内存。

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

我曾经知道Windows调试API,但它是长时间的内存丢失。 如何使用ollydbg:

http://www.ollydbg.de/

并控制与ollydbg脚本和自动?

听起来很有趣…但非常困难。 既然你说这是“一次性”,那么这样的事情呢?

  • 截取这个应用程序的截图。
  • 通过OCR程序运行截图
  • 如果你能够以可预见的方式阅读你正在寻找的文本,那么你已经到了一半了!

所以,现在如果你可以阅读你的应用程序的OCR屏幕截图,编写一个程序可以做到以下几点:

  • 脚本的步骤来获取屏幕上的数据
  • 创建相关数据的屏幕截图
  • 通过OCR程序(如Microsoft Office Document Imaging)运行它
  • 提取相关文本,并用它做任何事情。

我之前做过这样的事情,结果相当不错,但我会说这是一个脆弱的解决方案。 如果应用程序更改,则停止工作。 如果OCR无法读取文本,则停止工作。 如果OCR阅读错误的文字,可能会比停止工作做得更糟

正如其他海报所说,深入记忆和提取数据是一个相当先进的话题…如果你能找到一个方法来做到这一点,对你的赞赏!

我知道这可能不是一个受欢迎的答案,由于这个软件的用途,但是像CheatEngine和ArtMoney这样的程序允许你搜索一个给定值的进程保留的所有内存,然后将结果细化到你找到你正在寻找的值的地址。

在开始学习如何更好地保护我的游戏时,我最初学到了这一点,但碰巧找到其中一个培训师,但是在调试时偶尔发现了这种技术。

以下是使用上述技术的示例: https : //www.youtube.com/watch?v=Nv04gYx2jMw&t=265