我有一个应用程序,显示一些数据。 我需要附加到这个应用程序的进程,find我需要在内存中的数据(实际上是一个单一的数字),并保存在某个地方。 这个应用程序似乎不使用标准的Windows控件,所以事情不会像使用AutoIt或类似的东西读取控件数据那么简单。
目前我是一个自学者数据库的家伙,并有相当的Windows应用程序debugging知识浅。 甚至不知道我是否正确地问了我的问题。
那么,你能否给我一些关于我应该先读什么的启动指南,以及我应该处理的大方向?
谢谢。
我的主要建议是:尝试找到比这个任何其他方法的集成。 即使你成功了,你也将成为目标进程中任何类型的变更的人质,甚至可能是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检查进程的内存。
如果你在调查中没有成功,我建议你插入你的问题更多的信息。
听起来很有趣…但非常困难。 既然你说这是“一次性”,那么这样的事情呢?
所以,现在如果你可以阅读你的应用程序的OCR屏幕截图,编写一个程序可以做到以下几点:
我之前做过这样的事情,结果相当不错,但我会说这是一个脆弱的解决方案。 如果应用程序更改,则停止工作。 如果OCR无法读取文本,则停止工作。 如果OCR阅读错误的文字,可能会比停止工作做得更糟
正如其他海报所说,深入记忆和提取数据是一个相当先进的话题…如果你能找到一个方法来做到这一点,对你的赞赏!
我知道这可能不是一个受欢迎的答案,由于这个软件的用途,但是像CheatEngine和ArtMoney这样的程序允许你搜索一个给定值的进程保留的所有内存,然后将结果细化到你找到你正在寻找的值的地址。
在开始学习如何更好地保护我的游戏时,我最初学到了这一点,但碰巧找到其中一个培训师,但是在调试时偶尔发现了这种技术。
以下是使用上述技术的示例: https : //www.youtube.com/watch?v=Nv04gYx2jMw&t=265