问题标签 [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 投票
0 回答
1249 浏览

python - Python 64 位,Ctypes ReadProcessMemory ERROR_PARTIAL_COPY,Windows 7 64 位

我的示例基于“Gray Hat Python”一书(http://expect-us.net/files/Gray%20Hat%20Python%20=rwt911=.pdf

有一个小的示例应用程序 printf_loop:

现在我正在尝试获取此应用程序中使用的 printf 的地址。但是我的 ReadProcessMemory 调用总是返回 ERROR_PARTIAL_COPY。

我在以下函数中获取地址,其中 dll='msvcrt.dll' 和 function='printf':

为什么我无法读取内存,您有什么建议吗?

0 投票
1 回答
500 浏览

delphi - DelphiXE2 使用 Assembly x64 从内存中读取任何位置

如何访问 inDelphiXE2中的任何内存地址Windows7 64bit?我尝试使用该ReadProcessMemory功能,但它不起作用。但是,我想避免使用内核驱动程序来执行此操作。

对不起,我的英语不好。

0 投票
1 回答
1481 浏览

c++ - 如何读取另一个进程内存中的每个字节?

我们如何读取进程内存中的每个字节?读完之后,我们如何对进程进行“十六进制”转储?

例如:

进程A.exe:

扫描:

将 A.exe 转储到 A.txt:

我的编译器是visual c++ 2010,我打算编写一个win32应用程序,它将使用这个函数。我将使用的操作系统是 Window 8。但是,我的应用程序应该适用于 Windows 8 并且至少适用于 Window XP。

到目前为止,这就是我所拥有的......

0 投票
2 回答
1081 浏览

c# - C# 指针偏移 > 255 - ProcessMemoryReader

我知道有很多教程向您展示如何使用“ProcessMemoryReader”功能。但这个问题似乎是独一无二的或尚未解决。

很长一段时间以来,我一直在研究其他人的代码以找到一种使用多个偏移量的方法。而且我认为使用多个偏移量对我来说是个问题,但我认为这是一个问题,因为我的偏移量值大于 255。

我试图从中获取内存值的游戏称为“突击魔方”。因为我不确定我是否得到了正确的偏移值,所以我用谷歌搜索了其他人的结果。它们似乎完全相同: http ://cheatengine.org/tables/moreinfo.php?tid= 1142(如果您没有安装作弊引擎,您可以使用记事本查看 .ct 文件。)

这是我的代码,使用ProcessMemoryReader.cs.

尽管使用单个指针,该过程可以正常工作,例如:

这样就可以了,这里发生的事情非常简单,但是我不知道如何读取具有多个偏移量的弹药代码。

0 投票
1 回答
1606 浏览

c# - C# 在进程内存中搜索字节数组

我正在为特定应用程序开发一个小内存扫描仪。当我选择要扫描的进程时,我要做的第一件事是验证该进程是否是特定应用程序的实例……为此,我必须找到一个可以在其内存中任何位置的签名。

这是我的代码:

第一个问题是这个方法永远不会完成,它看起来像是在无限循环(昨天我让它运行了一个多小时以进行调试而没有到达终点)。在我的循环中检查 Marshal.GetLastWin32Error() 我注意到有时我ERROR_PARTIAL_COPY (0x0000012B)在调用后得到一个ReadProcessMemory得到一个......这是可能的原因吗?

然后我也有一些问题:

OpenProcess1)在继续扫描循环之前我应该​​打电话吗?我不这么认为,对吧?

2) 我想让我的应用程序同时兼容 x32 和 x64。我应该在我的代码中进行哪些更改以确保它可以在两个系统中正常工作(address限制、值类型address、强制转换RegionSize……)?

3)在扫描进程内存以找到我的目标字节数组时,我是否应该检查 currentMEMORY_BASIC_INFORMATION的属性(AllocationProtectStateProtect/或lType)以查看我是否可以跳过ReadProcessMemory当前区域,因为它不是必需的或者它不能被阅读?

4)我还能做些什么来优化这个方法的速度,这很重要吗?

0 投票
1 回答
82 浏览

arrays - 如何将创建新数组的 2 个数组与更改进行比较?

我正在使用我想监视事件的 readprocessmemory 从应用程序中读取 CHAT。

如果应用程序刚刚启动,并且所有行都没有填满,则无需循环所有 150 行。

聊天框最多 150 行,当达到 150 时,所有聊天都被推上去,所以第 150 行现在是最新的聊天文本行。

我当前的代码将读取聊天框中的所有聊天内容。

我能想到的检测更改的唯一方法是将其全部读取两次,然后比较结果并循环,直到它在数组中找到不同的行 - 这些将是“更新”的行。根据聊天的活跃程度,可能会更新不止一行,因此需要另一个数组包含上次聊天检索后的所有行更改。

但是,当我开始做这件事时,我不知道从哪里开始,因为这似乎很令人困惑,在这件事上有更多逻辑的人能否指出我正确的方向,或者解释最好(最快)的方法来做到这一点?

非常感谢您花时间阅读本文,我希望它不会太混乱。

0 投票
1 回答
1316 浏览

c++ - 可以挂钩 ReadProcessMemory() 的事件吗?

是否可以在 win32 API 中挂钩对 ReadProcessMemory() 的调用?我想用 C 或 C++ 来做。

我的意思是,每当另一个进程使用该函数时,它都会在某个时候使用所有信息绕过我的回调。

0 投票
1 回答
371 浏览

c# - 内存在 Windows 中是如何工作的?

因此,我一直在与外部进程内存读取问题(读取我无权访问的进程的内存)作斗争。我对几件事的理解发生了变化,但有一件事我根本无法理解大约。

win32api 函数 ReadProcessMemory() 接受几个参数,如下所示:

我正在传递这样的论点:

直到最近,我才明白这里列出的地址是唯一对读取内存非常重要的东西,这就是我在内存中找到正确值的原因。不幸的是,这似乎是一个负担,而且似乎实际上句柄控制着我正在与之交互的窗口。例如:

我正在运行进程“Notepad.exe”的 2 个版本。

进程的每个实例中都有一个整数,第一个包含数字 12345,第二个包含 54321。

我正在寻找读取该整数,并且假设(虽然我还没有确认这一点,所以它可能是不真实的)该程序内存空间内的内存地址是 0x1000。

例如,如果我运行:

这将在添加到该偏移量的基地址处使用该句柄读取进程。但是,此代码将读取完全相同的值:

请注意,NP2 应该是第二个记事本窗口,而 NP 是第一个。在上述之上,这将读取一个不同的值(尽管我们正在读取的地址与第一个示例相同):

当然,这意味着句柄控制的是读取内存的位置,而不是地址,实际上地址与我实际尝试做的事情完全无关?谁能向我解释为什么会这样?

抱歉,如果这个问题过于具体,但这个问题已经让我绞尽脑汁很长时间了,虽然我每天都与众多程序员交谈,但他们都没有能力(或者也许更多的是他们没有) t 愿意)帮助我。

我完全知道这仅适用于同一 exe 的 2 个正在运行的实例,因此如果您要阅读 Firefox 和记事本(我认为),它将无法正常工作。我只是想知道为什么是句柄进行了这种更改,而不是地址。

谢谢

0 投票
0 回答
1645 浏览

c - VirtualQueryEx 返回具有区域大小 -1 的 MEMORY_BASIC_INFORMATION

我正在写一个内存扫描仪。我首先使用调用将VirtualQueryEx内存基地址和区域大小放入 a 中struct MEMORY_BASIC_INFORMATION,然后使用调用ReadProcessMemory来读取内存。

我面临的问题是VirtualQueryEx充满MEMORY_BASIC_INFORMATION.Region Size-1.

为什么这样做?这是什么意思-1

0 投票
1 回答
4486 浏览

c# - C# 程序员在 C++ 中的 ReadProcessMemory,始终失败

我对 C++ 的了解很模糊,但我在 C# 方面有一些丰富的经验,尽管在这种情况下它不是那么有用。我在 C# 中有一些代码,它工作得很好。我有我认为在 C++ 中非常相似的代码,我似乎无法让它工作或调试它。因此,这是我编写并经过彻底测试的 C# 代码:

因此,该函数 ReadInt32 获取一个地址,将其添加到我在初始化 Util 类时存储的基地址中,并使用在初始化时再次获取的句柄读取最多 4 个字节的内存。如果我正确设置了值,我 100% 知道这是可行的。

这段代码有点长,请原谅我的无知,但我不想把这些留给想象,我不能开始暗示可能不正确的地方,因为我在 C++ 世界中没有受过很好的训练。

我试图读取的内存地址是 0x3BE1E0,但我已将基地址 (0x20C8) 添加到此以获得 0x3C02A8。我将假设本网站上的读者知道句柄以及不知道的内容...

感谢您的时间。请注意,我希望能解释我做错了什么而不是答案,所以如果你有空的话,请记住这一点。一个答案就可以了,因为无论如何我很可能会研究结果。

输出是这样的: