C#/ C:启动一个应用程序并处理它对系统的I / O调用
我需要启动其他应用程序并处理它的I / O操作.因此,当它尝试读/写文件时,我需要捕获它并更改路径.
它应该是可能的,因为有些程序可以做这样的事情(比如ModOrganizer). 问题是我不想使用文件系统过滤器驱动程序.我不想让我的应用程序的用户安装这样的东西. 正如我所看到的,ModOrganizer通过几种方式完成这项工作,包括proxy.dll,hooks e.t.c.不知何故,它实现了几乎任何程序都可以从它启动的目标,ModOrganizer将处理对特定目录的请求. github上有源代码,但我真的不明白.这就是为什么我在这里问这个. 同样,ModOrganizer实现了这一点,而无需反编译每个可能的程序,以了解注入的位置.它不使用系统过滤器. (请解释你的弊端.否则我将来如何改进我的问题?) 解决方法
您需要的是修改进程中每个模块的导入表.
看起来你提到的程序使用类似于这里描述的技术:https://www.codeproject.com/Articles/2082/API-hooking-revealed在“使用CreateRemoteThread()API函数注入DLL”部分.但是它不是使用远程线程,而是强制主程序线程完成它的工作(参见函数injectDLL): https://github.com/TanninOne/modorganizer/blob/4a582e524dd012ed9d5fdb4f9c97aab22c8dac85/src/spawn.cpp 请注意,有一个标志CREATE_SUSPENDED传递给CreateProcess函数 – 这有助于它在主线程能够执行任何操作之前存根所有函数. 它不是修补导入表,而是插入用汇编编写的存根(参见函数injectDLL): https://github.com/TanninOne/modorganizer/blob/4a582e524dd012ed9d5fdb4f9c97aab22c8dac85/src/shared/inject.cpp Jeffrey Richter在他的“Windows via C/C++”一书中有一个关于如何修补导入表的好例子.您可以尝试查找和阅读完整的书籍,也可以在此查看代码:https://github.com/lattesir/WindowsViaCPP/blob/master/22-LastMsgBoxInfoLib/APIHook.cpp 但是你的程序可能看起来像任何反病毒软件的病毒. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |