这个问题可能没有(有用的)答案,但无论如何。
我想通过DLL代码注入将代码注入到应用程序中。
计划是:
在目标进程中查找LoadLibrary函数的地址。
使用目标进程地址空间中的WriteProcessMemory()编写一个字符串,其中包含要加载的DLL的名称/文件路径。
使用CreateRemoteThread()启动远程线程,地址为LoadLibrary(),指针指向包含要加载的DLL的名称/文件路径的字符串,作为LoadLibrary()函数的参数。
问题出在2号。
在目标进程地址空间中的何处存储字符串(而不会损坏某些内容)?
如果这个问题以前有人问过,请随意指点我。
非常感谢你的帮助。
最佳答案
VirtualAllocEx
允许您指定分配内存的进程。你可以用这个来分配一块内存。请注意,不能直接写入返回的地址——它处于不同的进程中。您可以通过WriteProcessMemory
写入DLL名称。
如果您打算将代码放入DllMain
,则不应该。Windows在执行DllMain
时持有一个内部锁,这会增加死锁的风险,具体取决于您打算在钩子代码中执行什么。您可以获取DLL中函数的地址,并在加载DLL后再次使用CreateRemoteThread
在单独的线程上运行该函数。
与其自己实现所有这些,我建议您使用某人已经编写的库,比如支持托管和非托管注入的EasyHook。
关于c - 带有远程线程的DLL代码注入(inject):在目标进程地址空间中的哪里存储DLL文件名/位置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51050381/