【问题标题】:Process Dll Loading进程DLL加载
【发布时间】:2012-06-24 17:31:56
【问题描述】:

我正在开发一个安全应用程序,它应该在某些进程的地址空间中阻止 dll 注入。 假设我们一个处于挂起状态的进程(尚未初始化),是否可以访问该进程将要加载的 DLL 的“列表”?我已经尝试过 EnumProcessModules 函数,但它似乎不起作用(我认为这很明显,因为该进程仍处于挂起状态并且尚未加载 DLL)。 另外,我想在DLL加载中做一些改变,比如假设进程要加载X.dll、Y.dll和Z.dll,是否可以避免加载Y.dll?

提前致谢 =)

【问题讨论】:

  • 在您解释您计划用来干预它的确切机制之前,无法回答这个问题。注入代码?从另一个进程偷看的 API?
  • 我正在开发一个安全应用程序,我想防止在我的进程中注入一些dll!
  • 请编辑您的问题以澄清。你正忙于积累对你没有帮助的答案。
  • "是否可以访问进程将要加载的 DLL 的“列表”?"你需要一个水晶球:)谁知道它将来会加载什么。

标签: winapi process


【解决方案1】:

如果您想在程序控制下加载 Dll,请不要尝试使用动态链接器自动加载它们。您正在与编译器的设计作斗争。

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

【讨论】:

    【解决方案2】:

    要检索将要加载的库列表(包括延迟加载),您需要遍历用于该进程的二进制文件的 pe,就像 Windows 加载器一样。

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

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

    另一种方法是使用windows debugger api暂停dll加载,如果不应该加载则强制卸载(但这也充满了问题,可能会导致系统锁定和bsods)

    【讨论】:

      【解决方案3】:

      如果根据您的评论,您正在尝试制作防篡改程序... 不能使其完全防篡改。如果某些人有权登录计算机并具有足够的访问权限来设置代码注入,那么他们迟早可以做任何他们喜欢的事情。注入的代码肯定会弄乱加载程序并替换 dll 或阻止 dll。它可以做任何事情。

      【讨论】:

      • 我完全知道这一点,但它不是商业应用程序或类似的东西,我编写它只是为了研究 Windows Loader 的内部工作原理。您对如何完成此操作有任何提示吗?
      猜你喜欢
      • 2012-08-10
      • 1970-01-01
      • 2011-08-12
      • 2016-11-05
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多