2012-06-24 32 views
-3

我正在开发一个安全应用程序,应该阻止某些进程的地址空间中的dll注入。 假设我们是一个暂停状态的进程(尚未被启动),是否有可能访问进程将要加载的DLL列表?我已经尝试了EnumProcessModules函数,但它似乎不工作(我认为这很明显,因为进程仍然处于挂起状态,并且尚未加载DLL)。 此外,我想改变DLL加载的东西,例如让我们说这个过程将加载X.dll,Y.dll和Z.dll,是否有可能避免加载Y.dll?进程DLL加载

在此先感谢=)

+1

在解释您打算用来干扰它的确切机制之前,无法解答此问题。注入代码?从另一个进程偷看和戳的API? – bmargulies

+0

我正在开发一个安全应用程序,我想防止在我的过程中注入一些DLL! – Ananas

+1

请编辑你的问题来澄清。你忙于积累不会帮助你的答案。 “ – bmargulies

回答

0

如果要加载程序的控制下的dll那么不要尝试使用动态连接器会自动加载它们。你正在反对编译器的设计。

只是不要链接到Dll,而只是包含它们的头文件,并用“LoadLibrary”手动加载Dll,然后使用“GetProcAddress”获取每个函数。

0

要检索将要加载的库的列表(包括延迟加载),您需要遍历用于该进程的二进制文件的pe,这与windows加载程序的方式相同。

避免加载某些链接库变得更加复杂,因为您需要以某种方式修复对从库中加载的符号的引用,这涉及到更改IAT,擦除链接,然后删除dll链接从pe,然后调整任何引用现在删除的IAT条目。

这与离线工具,如LordPE更容易一些,但它的成功和复杂性最终取决于你为什么需要停止的dll加载...

的另一种方法是使用Windows调试API暂停在DLL负载,强制卸载,如果它不应该被加载(但这也是充满了问题,并可能会导致系统锁和Bsods)

0

如果根据您的评论,你正试图生产防篡改程序... 不能使其完全防篡改。如果某人能够登录到具有足够访问权限的计算机来设置代码注入,他们迟早可以做任何他们喜欢的事情。注入的代码当然可能会混淆加载器并替换dll或阻止dll。它可以做任何事情。

+0

我完全知道这一点,但它不是一个商业应用或类似的东西,我只是为了研究Windows Loader的内部工作而编写代码。你有什么提示如何做到这一点? – Ananas