如何更改另一个进程的内存空间中的值

Posted

技术标签:

【中文标题】如何更改另一个进程的内存空间中的值【英文标题】:How to change a value in memory space of another process 【发布时间】:2010-10-31 21:29:51 【问题描述】:

如果你能帮助我解决这个难题。现在,我知道 C\C++,我知道 asm,我知道 dll 注入,我知道虚拟内存寻址,但我就是不知道怎么做 像 CheatEngine 和其他软件,设法在另一个进程中更改变量的值。

对于那些不知道的人,第 3 方作弊引擎工具可以扫描程序内存空间中的值,并识别具有给定值的变量的位置并进行更改。

我的问题是,他们是怎么做到的?

给定一个地址,如果我要编写 C 代码,我怎样才能在不出现无效寻址错误的情况下更改属于另一个进程的该地址的值?

谢谢。

【问题讨论】:

【参考方案1】:

我相当肯定这些程序是在伪装成调试器。在 Windows 上,我会从 DebugActiveProcess() 开始,然后从那里开始。

哦,还有看起来非常有用的 ReadProcessMemory() 函数(和 WriteProcessMemory())。

【讨论】:

谢谢,这是我一直在寻找的,效果很好。 (对于阅读此解决方案的其他人,请务必在完成后使用 DebugActiveProcessStop) 如果您不希望正在调试的进程在完成调试后终止,请务必调用 DebugSetProcessKillOnExit()。【参考方案2】:

在 unix 上:ptrace()

【讨论】:

ptrace也能修改其他进程的内存吗? 相对于哪个进程?【参考方案3】:

您不能使用标准 C 或 C++ 执行此操作 - 您必须使用操作系统特定的功能。所以你需要告诉我们你对哪个操作系统感兴趣。

【讨论】:

对不起,我没有具体说明,我对 Windows 感兴趣,但 Linux 会很棒,我也很想在那里尝试一下【参考方案4】:

您可能也对Detours感兴趣:

为绕过 Win32 和应用程序 API 而打包的软件。

【讨论】:

感谢阅读关于绕行codingthewheel.com/archives/…。有趣的实验ASCII\涂鸦炸弹。太糟糕了,它不是免费的\很容易用于 64 位

以上是关于如何更改另一个进程的内存空间中的值的主要内容,如果未能解决你的问题,请参考以下文章

进程地址空间中的共享内存?

进程的内存空间布局

Linux进程概念——下验证进程地址空间的基本排布 | 理解进程地址空间 | 进程地址空间如何映射至物理内存(页表的引出) | 为什么要存在进程地址空间 | Linux2.6内核进程调度队列

Linux进程概念——下验证进程地址空间的基本排布 | 理解进程地址空间 | 进程地址空间如何映射至物理内存(页表的引出) | 为什么要存在进程地址空间 | Linux2.6内核进程调度队列

Linux进程概念——下验证进程地址空间的基本排布 | 理解进程地址空间 | 进程地址空间如何映射至物理内存(页表的引出) | 为什么要存在进程地址空间 | Linux2.6内核进程调度队列

Linux进程内存如何管理?