我正在尝试查找给定系统中的所有漏洞。
假设恶意用户拥有.exe我的 .NET 应用程序 (C#)的可执行文件(文件),以及他或她创建的恶意 DLL。可以将 DLL 注入我的可执行文件以运行 DLL 中包含的代码吗?
我正在尝试查找给定系统中的所有漏洞。
假设恶意用户拥有.exe我的 .NET 应用程序 (C#)的可执行文件(文件),以及他或她创建的恶意 DLL。可以将 DLL 注入我的可执行文件以运行 DLL 中包含的代码吗?
关于 Dll 注入的维基百科文章很好地总结了不同的技术。
总结一下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs,它将被加载到链接到 user32.dll 的每个(新)进程中(即几乎每个用户模式进程)是的,有几种可能性可以做到这一点,并且很大一部分攻击是基于 DLL 挂钩的。
这也是为什么越来越新的 Windows 版本通常包含越来越严格的有关 dll 处理的政策的原因。
主要目标是构建一个假dll,它只将一些 API 调用包装在其原始 dll 中,并且还做一些其他事情。在这种情况下,攻击者的目标是让要破解的应用程序加载伪造的 dll,而不是其原始版本。
此解决方案的替代方案是,当原始 dll 获得某种类型的二进制 hack 时。这更难。
挂钩 dll 的内部工作如下:
dllopen()调用打开原始的、未修改的 dll ,并在其中找到 api 调用的地址你怎么能把钩子的dll注入应用程序?
最常见的解决方案是仅将其放在要挂钩的 exe 所在的同一目录中。在启动可执行文件时,Windows 总是首先在同一目录中查找其 dll。这是大多数软件复制保护/激活破解所做的。
第二种可能性是将包装器 dll 放在 PATH 中的某个位置,但在C:\windows\.... 在 PATH 中查找 dll 以及可执行文件。
第三种可能性是使用调试器,或者最初用于调试的 windows api。有了它,您可以操纵正在运行的 exe 的 dll 打开代码。它也很难,尽管它也非常有用。