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

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

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

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

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

谢谢。

【问题讨论】:

    标签: c++ c windows linux memory-management


    【解决方案1】:

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

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

    【讨论】:

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

    在 unix 上:ptrace()

    【讨论】:

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

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

    【讨论】:

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

    您可能也对Detours感兴趣:

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

    【讨论】:

    猜你喜欢
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多