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

winapi - 当进程读取我的进程的内存时如何调用函数 - Win32 API

最近我一直在研究挂钩函数和创建回调函数。虽然我并不完全理解整个技术,但似乎我应该能够做一些事情,比如挂钩 Windows API 的 ReadProcessMemory() 函数,并让我的进程在读取它的内存时调用一个函数。虽然我只是出于好奇才想这样做,但连接到 Windows 功能似乎对于防止在线游戏中的黑客攻击非常有用。

不幸的是,关于这个主题的教程、文章等非常缺乏。我查看了很多注入代码,但缺乏理解使我退缩了。我想做的事有可能吗,有人能指出我正确的方向吗?

我应该提一下,这是我第一次自愿跳出 OO 编程,所以如果这没有意义,我深表歉意。

0 投票
1 回答
5679 浏览

c# - 使用 DLL 基地址读取内存

我正在尝试float在进程(游戏)中读取 a 。

在 Cheat Engine 中查找我需要的地址,但它位于wow64cpu.dll + 4720,偏移量为 34。

因此,我尝试在该过程中找到 wow64cpu.dll 的基地址,但这是我感到困惑的地方。

我不明白现在如何使用这个地址,因为我所有的尝试似乎都已经失败了。

我的问题是我在使用 DLL 的基地址时哪里出错了,或者可能在其他地方,我不确定如何使用它来查找我的地址?

我还在 x64 中编译了该程序,否则它将找不到 wow64cpu.dll。

谢谢

0 投票
1 回答
2465 浏览

c# - 时间:2019-04-10 标签:c#readprocessmemory with Cheat Engine

我正在尝试从使用作弊引擎找到的地址中获取字符串值。例如,我找到了 0x01742A38,这是我的程序的主要部分(常规 Windows 窗体应用程序):

0 投票
1 回答
319 浏览

c# - 内存扫描程序找不到结果

我正在编写一个小型内存扫描仪应用程序来查找内存中的指针。
但我似乎没有得到预期的结果。

我有以下代码:

如果我这样调用方法:

我知道我正在读取的进程有一个值为 1234 的整数,但我没有得到任何结果。如果我扫描其他值,我有时会得到结果。

baseAddressprocess.MainModule.BaseAddress

lastAddressbaseAddress + process.MainModule.ModuleMemorySize

我在这里错过了什么吗?

0 投票
1 回答
1230 浏览

c# - C#流线型多指针的内存读取

我制作了一个方法,通过提供所需的偏移量 + 起始地址来读取多指针。(下面的代码)。总而言之,我试图简化这种方法,下面我将解释我的问题。

我一直在为转换而苦苦挣扎。参数是IntPtr,读取地址的输出是字节数组,我的第一个想法是:“将字节数组转换为IntPtr,重新处理,最后将最后读取的地址转换为int32(因为最后的地址不是指针它永远不会被读取,所以在这里转换为 Int32 应该没问题)",

然而,这并没有给出一个好的结果。所以目前我坚持将字节数组转换为 Int32,然后将 Int32 转换为 IntPtr 的解决方案。人们确实说位转换器是一种不好的方法,因为它可能会在 64 位平台上引起问题,而且我也相信有一种方法可以提供更好的性能(因为我将对象转换了 2 次)。

最后,如果有人认为可以在 C++ 中创建一个类似的函数,然后在 C# 中 P/Invoke 它(我想那样会更有效?)请告诉我。(我正在尝试调整我的编程知识。并且发现语言组合非常有趣)

任何简化此方法的想法将不胜感激!提前感谢!

0 投票
1 回答
1090 浏览

c++ - C++ ReadProcessMemory 变成 char * 替代

我有一个进程在外部使用,现在是内部的,这个程序使用 ReadProcessMemory 将数据从内存复制到 Char *. 下面是代码。

我现在在程序中执行此操作,我的目标是在不使用 RPM 的情况下将该信息读入同一个数组。

我尝试过 memcpy,尽管这似乎会使程序崩溃,因为我正在阅读大量内存,所以很难发现为什么会发生这种情况。

这个使用 RPM 的程序的替代方案没有任何问题,并且允许准确地扫描数据,所以我只能假设 memcpy 不正确。

编辑:新代码在进程中作为 DLL 加载,这应该允许在内部读取值。

编辑更新代码。

0 投票
1 回答
812 浏览

c++ - C++:ReadProcessMemory() 导致崩溃

ReadProcessMemory() 似乎在读取未定义(?)内存时使我的程序崩溃。
那么我的问题是,在我使用 ReadProcessMemory 避免崩溃之前,如何检查地址是否未定义或其他?

顺便说一句错误消息:

Program.exe 中 0x00ce1c70 处的未处理异常:0xC0000005:访问冲突写入位置 0x00e3f000。

0 投票
2 回答
1730 浏览

c++ - c++ 指针操作等价于 ReadProcessMemory

我需要从不同的应用程序中读取程序的内存。我有整个过程和应用程序的“连接”。

我有一个函数可以在打开的进程的内存中搜索模式,并且由于签名返回了我感兴趣的函数的有效入口点。

问题是,引导我获取数据的汇编指令(我无法通过偏移量或签名找到)如下:

我四处搜寻,发现这可能符合我的目的:

但问题是,如果使用“注入”,上面的行会起作用,而我正在使用 ReadProcessMemory,因为我不允许这样做。

那么,有人可以帮助“翻译”

考虑到汇编指令,指针操作进入 ReadProcessMemory 调用?鉴于我是从另一个应用程序打开的,如果没有使用 ReadProcessMemory(我可以定期调用它以进行其他操作),我将无法访问 H5Calc 内存区域。

任何帮助表示赞赏。

谢谢。

0 投票
2 回答
2811 浏览

python - Python - Converting byte address (from ReadProcessMemory) to string?

Update 1:

I've tried the solution given below using buffer.value.decode(). This resulted in getting back just (#, which is a step in the right direction, but I want to get this to 9000. When I use Cheat Engine to change the address value to 2000, this same method runs into the error UnicodeDecodeError: 'utf-8' can't decode byte 0xd0 in position 0: invalid continuation byte. So I'm guessing I have the wrong encoding. Any suggestion on what I should do with that?

Original Question:

I'm trying to use ReadProcessMemory from ctypes to get the value from an address in a process. I seem to acquiring the byte data without a problem, but I'm running into difficult converting it into the appropriate form. I'm using Cheat Engine to inspect the data via a third party method, and using it to change the data in the address I'm sure I have the correct address output from my script. The value I'm expecting to have returned is 9000. The complete code I'm using is below, but I'm reading the memory into a buffer of the type c_char_p (from ctypes). I've tried a couple ways of converting the value to a string and printing it. using just str(buffer), as expected I get back the byte representation as c_char_p(b'(#'). When I try to convert the data using str(int.from_bytes(buffer, sys.byteorder)) I get back 43586512. I have seen elsewhere the ability to convert from bytes using buffer.decode() but it appears this is not for the ctypes version as c_char_p has no decode method (which might suggest I should be taking a different approach to get the process address value other than ctypes?). Can anyone point out what I need to do to correctly get the value of this address in the form I'm looking for? Thank you much!

Code:

0 投票
2 回答
7481 浏览

c++ - 64 位进程上的 ReadProcessMemory 总是返回错误 299

我在使用 ReadProcessMemory 时遇到问题 我的代码是 64 位的,我可以读取任何 32 位进程的内存,但 ReadProcessMemory 总是失败,错误代码 299(部分读取)返回读取的 0 字节。

完成了我的研究,大多数答案都与权限有关,但我启用了调试令牌并以管理员身份运行,我在 PE 可选标头中读取 ImageBase 的地址

我尝试使用 VirtualQueryEx 检查页面状态并拒绝访问!

注意:代码可以在任何 32 位进程上完美运行。

任何想法可能是什么原因造成的?