将恶意DLL注入exe文件并运行它的方法

信息安全 视窗 恶意软件 。网 注射
2021-08-23 22:11:38

我正在尝试查找给定系统中的所有漏洞。

假设恶意用户拥有.exe我的 .NET 应用程序 (C#)的可执行文件(文件),以及他或她创建的恶意 DLL。可以将 DLL 注入我的可执行文件以运行 DLL 中包含的代码吗?

2个回答

关于 Dll 注入的维基百科文章很好地总结了不同的技术。

总结一下:

  • 您可以在下面列出一个 dll HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs,它将被加载到链接到 user32.dll 的每个(新)进程中(即几乎每个用户模式进程)
  • 利用函数中的弱点,错误地按路径加载库(通常,将目标进程加载的 dll 放置在搜索路径的较高位置)或简单地用您自己的库替换现有库。
  • 通过CreateRemoteThreadCreateRemoteThreadEx这有点复杂(也很有趣),但可以让您对现有流程执行此操作。
  • 通过SetWindowsHookEx对于正在运行的进程 IMNSHO,这是最简单的方法。
  • 暂停线程并将其上下文切换到您自己的代码。
  • 垫片

是的,有几种可能性可以做到这一点,并且很大一部分攻击是基于 DLL 挂钩的。

这也是为什么越来越新的 Windows 版本通常包含越来越严格的有关 dll 处理的政策的原因。

主要目标是构建一个dll,它只将一些 API 调用包装在其原始 dll 中,并且还做一些其他事情。在这种情况下,攻击者的目标是让要破解的应用程序加载伪造的 dll,而不是其原始版本。

此解决方案的替代方案是,当原始 dll 获得某种类型的二进制 hack 时。这更难。

挂钩 dll 的内部工作如下:

  • 在打开时:它还通过dllopen()调用打开原始的、未修改的 dll ,并在其中找到 api 调用的地址
  • 它还包含虚假版本的钩子 api 调用

你怎么能把钩子的dll注入应用程序?

最常见的解决方案是仅将其放在要挂钩的 exe 所在的同一目录中。在启动可执行文件时,Windows 总是首先在同一目录中查找其 dll。这是大多数软件复制保护/激活破解所做的。

第二种可能性是将包装器 dll 放在 PATH 中的某个位置,但在C:\windows\.... 在 PATH 中查找 dll 以及可执行文件。

第三种可能性是使用调试器,或者最初用于调试的 windows api。有了它,您可以操纵正在运行的 exe 的 dll 打开代码。它也很难,尽管它也非常有用。