如何访问另一个进程的内存并调用其函数?

kre*_*rej 6 c++ windows

我想学习如何读取其他进程内存并让我的程序调用其他进程函数,而不是我自己的参数和东西.我用谷歌搜索它,似乎你需要使用像ReadProcessMemory这样的东西,但我找不到任何好的教程来解释如何使用它们.谁能指出我正确的方向来学习这样的事情?我希望在Windows上使用C++(或者如果可能的话)使用Java(如果重要的话,可以使用7和64位).

另外,我知道这听起来很主观,可以用于恶意目的,但我保证不会因为任何有害的原因而使用从中获得的任何知识.我纯粹想要学习这个以获得乐趣并自学一些新东西.

wj3*_*j32 7

您无法直接调用其他进程中的函数,因为您的进程和其他进程具有不同的地址空间.解决此问题的一种方法是在进程中创建一个远程线程(使用CreateRemoteThread或RtlCreateUserThread),但这只允许您将一个参数传递给该函数.您可以尝试创建远程线程,将参数写入其堆栈并使用SetThreadContext更改其寄存器.另一种方法是注入自己的DLL来调用该函数.

另一个问题是找到要调用的函数.您可能需要为不导出所需功能的EXE或DLL加载符号.

有关Windows内部的一般问题,请尝试询问Sysinternals论坛.

编辑:在事先不知道图像文件中的指令和数据布局的情况下,在程序中很难做到你所说的(读取进程检查用户输入的字符串).例如,如果你有一个crackme程序,你可以使用像IDA Pro这样的静态分析工具,也可以在调试器下运行程序.无论哪种方式,这些东西通常需要人为输入,并且很难自动完成.