我正在开发一个安全应用程序,它应该阻止某些进程的地址空间中的dll注入。 假设我们处于挂起状态的进程(尚未初始化),是否可以访问进程将加载的DLL的“列表”?我已经尝试过EnumProcessModules函数,但它似乎不起作用(我认为这很明显,因为该进程仍然处于挂起状态并且还没有加载DLL)。 此外,我想在DLL加载中更改一些内容,例如假设该进程将加载X.dll,Y.dll和Z.dll,是否可以避免加载Y.dll?
提前致谢=)
答案 0 :(得分:0)
如果要在程序控制下加载Dll,请不要尝试使用动态链接器自动加载它们。你正在反对编译器的设计。
只是不要与Dll链接,而只是包含它们的标题,并使用“LoadLibrary”手动加载Dll,然后使用“GetProcAddress”获取每个函数。
答案 1 :(得分:0)
要检索要加载的库列表(包括延迟加载),您需要遍历用于进程的二进制文件的pe,就像Windows加载器一样。
避免加载某些链接库会变得复杂得多,因为您需要以某种方式修复对从库中加载的符号的任何引用,这涉及到更改IAT,删除链接,然后从中删除dll链接pe,然后调整引用现在删除的IAT条目的任何内容。
使用离线工具(例如LordPE)会更容易一些,但它的成功和复杂性最终取决于你为什么需要停止dll加载...
另一种方法是使用windows调试器api暂停dll加载,如果不应该加载则强制卸载(但这也充满了问题,可能会导致系统锁和bsods)
答案 2 :(得分:0)
如果根据您的评论,您正在尝试制作防篡改程序...... 不能完全防篡改。如果某些人有权登录计算机并具有足够的访问权限来设置代码注入,他们迟早会做任何他们喜欢的事情。注入的代码肯定会弄乱加载器并替换dll或块dll。它可以做任何事情。