首先,我不想注入一个dll。我想使用WriteProcessMemory()注入代码(如果这甚至可能)。我已经使用ReadProcessMemory(),所以我认为写作不是什么大不了的事。
好吧,让我们说有在TargetProgram.exe + D78C612
的功能,让我们说,它可以被称为是这样的:C++:代码注入调用函数
push eax
push [esp+08]
push edx
push 00
push TargetProgram.exe+AF76235
push 04
call TargetProgram.exe+D78C612
我究竟将如何做到这一点用WriteProcessMemory的()?
我的意思是我在哪里可以找到一段可以注入我的代码而不会覆盖重要内容的部分。最重要的是,我将如何调用这个函数?
只需在活动例程中跳转到我的代码,之后跳回并删除它?但是,我如何找到这个例程呢?
这么多问题,我不知道如何开始......我希望你能帮助我。 :)
如果你有时间,我真的很想看到一个函数调用注入的示例代码。
我有一个类似的问题作为OP,但我没有得到你的第一WriteProcessMemory调用。作为local_address,我可以传递函数的地址,但我无法在下一个参数中传递它的长度。只是因为我不知道它有多大(因为编译器还没有编译它)。那么WriteProcessMemory是否适合从我的过程写入另一个函数/代码?编辑:或者是汇编程序中唯一的关键写入函数(我可以计算它)而不是C++? – Kra
@Kra在大多数情况下,您不能将C函数复制到另一个进程,因为跳转地址将被破坏。您必须修复relocs或编写可重定位的代码。在这两种情况下,你都必须使用汇编语言。为了回答你关于函数代码长度的问题,我认为你可以尝试禁用优化并写两个函数f1()和f2(),其中f2代码中的f1。然后你可以从f2的地址中减去f1的地址,[希望]得到f1的长度。但函数大小是你问题最少的地方。 – Max
明白了。谢谢。 – Kra