问题标签 [readprocessmemory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3214 浏览

c# - 在 C# 的另一个进程内存中搜索特定字符串(或字节数组)的快速方法?

请发布一个工作源代码示例(或链接),说明如何在另一个进程内存中搜索字符串并在找到时获取匹配偏移量。类似的方式在游戏作弊工具中使用 ReadProcessMemory 搜索游戏内存中的值。

0 投票
3 回答
4241 浏览

vb.net - ReadProcessMemory 不断返回 0

我目前正在开发一个小爱好项目,通过 VB.NET 在我的 G15 键盘上的游戏中显示健康信息。

当我通过 API 调用使用 ReadProcessMemory 时,它一直返回零。MSDN 文档让我使用 Marshal.GetLastWin32Error() 调用来找出问题所在,它返回 1400:INVALID WINDOW HANDLE。

我现在对函数的第一个参数是否需要窗口句柄或进程 ID 感到困惑。无论如何,我都尝试过使用 FindWindow 并在应用程序运行时对进程 ID 进行硬编码(从任务管理器中获取)。

我尝试了三种不同的游戏,Urban Terror、Grand Theft Auto: SA 和 windows 的 3D pinball,从一个名为 Cheat Engine 的应用程序中获取内存地址;他们似乎都失败了。

这是我用来执行此操作的代码:

API调用:

方法:

有人可以向我解释为什么它不起作用吗?提前致谢。

0 投票
1 回答
2479 浏览

vb6 - 如何从 ReadProcessMemory 的输出中获取字符串

这是我的代码片段。

调用 WideCharToMultiByte 时出现“94 null”错误。但我确定字节不为空。

替代文字

这是将此输出转换为字符串的确切过程吗?

0 投票
6 回答
4494 浏览

python - 如何编写 Perl、Python 或 Ruby 程序来更改 Windows 上另一个进程的内存?

我想知道是否可以使用 Perl、Python 或 Ruby 编写程序,以便它在另一个进程的内存中查找 0x12345678(可能是堆,用于数据和代码数据),然后如果找到,请更改它到0x00000000?它类似于Cheat Engine,可以在 Windows 上执行类似的操作。

0 投票
2 回答
634 浏览

c - ReadProcessMemory 返回更大的缓冲区(C,windows)

我正在尝试使用以下代码读取进程内存:

现在,phandle 和 paddress 是已知的,因为我使用了 WriteProcessMemory。我有从那里的价值观。数据大小也是已知的。

该功能工作正常,除了以下内容。ReadProcessMemory() 返回 dataread = 41 (这是正确的,我将 41 传递给 datasize)但 buff 的实际长度是 49。当我打印 buff 时,我得到了我的字符串 + 一些垃圾。

我究竟做错了什么?

代码表示赞赏。

谢谢!

0 投票
1 回答
1781 浏览

java - 对于 JNI 专家,我将如何使用 JNI 调用 ReadProcessMemory?(从 Windows 应用程序读取内存)

我想知道是否有可能从 java 调用 C++ 方法。

我非常希望能够从 java 读取内存进程。

我知道 c++,但我想使用更高级别的 java,但仍然能够侵入进程内存。

有什么线索吗?

[]的

0 投票
5 回答
8397 浏览

python - Python Ctypes Read/WriteProcessMemory() - 错误 5/998 求助!

请不要害怕,但是下面的代码,如果你熟悉 ctypes 或 C 应该很容易阅读。

我一直试图让我的 ReadProcessMemory() 和 WriteProcessMemory() 函数工作这么久,并且尝试了几乎所有的可能性,但正确的一个。

它启动目标程序,返回它的 PID 并处理得很好。但我总是收到错误代码 5 - ERROR_ACCESS_DENIED。当我运行读取功能时(暂时忘记写入)。我正在启动这个程序,因为我认为它是一个带有 PROCESS_ALL_ACCESS 或 CREATE_PRESERVE_CODE_AUTHZ_LEVEL 的 CHILD 进程。

当我打开句柄时,我也尝试过 PROCESS_ALL_ACCESS 和 PROCESS_VM_READ。

我也可以说它是一个有效的内存位置,因为我可以使用 CheatEngine 在正在运行的程序中找到它。

至于 VirtualQuery() 我得到一个错误代码 998 - ERROR_NOACCESS 这进一步证实了我怀疑它是一些安全/特权问题。

任何帮助或想法将不胜感激,再次,这是我到目前为止的整个程序,不要让它吓到你 =P。

谢谢!

0 投票
1 回答
240 浏览

datagridview - 如何使 GridView 将其内存分配为 XML

TL;DR: 当使用 ManagedSpy 浏览程序的 DataGridView 控件的属性时,它会导致该程序将其 DataGridView 数据作为 XML 分配到其内存中。我怎样才能让我的程序发生同样的事情?(不完全是DataGridView,控件叫Infragistics.Win.UltraWinGrid.UltraGrid)

全文:

我正在使用 ManagedSpy ( http://msdn.microsoft.com/en-us/magazine/cc163617.aspx ) 来监视我们称为 DataProgram 的程序。有关 ManagedSpy 的屏幕截图,请参阅该页面上的图 2。

DataProgram 有一个 DataGridView-ish,里面充满了我需要的信息。它还可以选择将该信息导出到 Excel 文件。我宁愿选择将其导出为 CSV 到我的剪贴板。

当我在 ManagedSpy 的树视图上浏览 DataProgram 的控件时,我可以找到我需要从中获取信息的确切 DataGridView。我知道这是正确的,因为我可以右键单击它并选择“显示窗口”,它会在控件周围闪烁一个框。

这是奇怪的部分:当我左键单击它以在 ManagedSpy 窗口的右侧查看其属性时,神奇的事情发生了。整个表作为 XML 在 DataProgram 的内存中分配,因此在内存扫描仪的帮助下,我可以看到整个表就在我眼前……然后垃圾收集器将其带走。但是它在那里持续了大约 30 秒(当然它会有所不同,GC 是不确定的)。顺便说一句,控件类是 Infragistics.Win.UltraWinGrid.UltraGrid,它就像一个增强的 DataGridView(我想)。

这是我的问题:如您所见,我想在它分配了 XML 表的确切位置读取 DataProgram 的内存。我已经知道如何读取内存(使用 ReadProcessMemory)。我想了解如何触发 DataProgram 从我的程序中分配那个 XML 表,就像 ManagedSpy 一样。请注意,ManagedSpy 的源代码可从网站获得,但我无法调试它,因为它只能以管理员身份运行,并且由于某种原因我无法使其运行。我只需要知道如何从我的程序中激发 DataProgram 来创建 XML 信息,以便我可以从它的内存中读取它。

0 投票
2 回答
1986 浏览

ruby - 在 Ruby 中,如何从外部进程读取内存值?

所以我只想做一个 Ruby 程序,从另一个进程的虚拟内存中的已知内存地址读取一些值。通过我的研究和十六进制编辑内存中正在运行的进程的 x86 程序集的基本知识,我找到了我想要的内存值的基地址和偏移量。我不想改变它们;我只想读它们。我询问了内存编辑器的开发人员如何处理这种语言摘要并假设是 Windows 平台。他告诉我对 OpenProcess、CreateProcess、ReadProcessMemory 和 WriteProcessMemory 的 Win32API 调用是使用 C 或 C++ 的方式。我认为要走的路就是使用 Win32API 类并映射它的两个实例;一个用于 OpenProcess 或 CreateProcess,取决于用户是否已经运行了进程,另一个实例将映射到 ReadProcessMemory。我可能仍然需要找到用于获取正在运行的进程列表的函数,这样我就知道哪个正在运行的进程是我想要的,如果它已经在运行的话。

这需要一些工作才能将所有内容放在一起,但我认为编写代码并不会太糟糕。这对我来说只是一个新的编程领域,因为我从来没有从高级语言(嗯,比 C 更高的级别)工作过这个低级别。我只是想知道解决这个问题的方法。我可以只使用一堆或 Win32API 调用,但这意味着必须处理一堆字符串和数组包以及依赖于系统的解包我希望最终使这项工作跨平台,因为我正在读取的过程是从产生的具有多个平台构建的可执行文件,(我知道内存地址因系统而异。想法是拥有一个包含所有内存映射的平面文件,因此 Ruby 程序可以将当前平台环境与匹配的内存映射匹配。

据我所知,可能已经存在一个 Ruby gem 可以为我处理所有这些我只是没有找到的。我也可以尝试编辑每个构建的可执行文件,以便每当我想读取的内存值被进程写入时,它也会将新值的副本写入我以某种方式拥有的共享内存中的空间Ruby 创建一个类的实例,该实例是指向该共享内存地址的指针,并以某种方式向 Ruby 程序发出该值已更新并应重新加载的信号。基本上基于中断的系统会很好,但由于读取这些值的目的只是发送到从中央服务器广播的记分牌,我可以坚持使用基于轮询的系统,该系统以固定的时间间隔发送更新。我也可以完全放弃 Ruby,转而使用 C 或 C++,但我也不太了解这些。实际上,我比 C++ 了解更多 x86,而且我只了解与系统无关的 ANSI C 的 C,并且以前从未处理过共享系统库。

那么是否有可用的 gem 或鲜为人知的模块已经做到了这一点?如果没有,那么有关如何完成此操作的任何其他信息都会很好。我想,长话短说,我该怎么做?

提前致谢, Grg

PS:另外确认那些 Win32API 调用应该针对 kernel32.dll 库会很好。

0 投票
2 回答
856 浏览

delphi - delphi中其他进程的StackWalk?

你知道如何在 delphi 中读取另一个进程堆栈吗?