DLL注入

DLL注入（）是一种涉及计算机信息安全的特殊编程技术，它可以强行使一个进程加载某个动态链接库以在其私有地址空间内运行指定代码（往往是恶意代码）。DLL注入的常见手段是用外部DLL库覆盖一个程序原先的DLL库，目的是实现该程序的作者未预期的结果。比如，注入的代码可以挂钩（Hook）系统消息或系统调用，以达到读取密碼框的内容等危险目的，而一般编程手段无法达成这些目的。

能将任意代码注入任意进程的程序被称为DLL注入器（DLL injector）。

 实现方式 

 Windows平台 

 先利用恶意TSR程序调用恶意DLL，在恶意DLL初始化时，由TSR定位待注入目标程序并将其句柄传递至DLL中的注入函数，注入函数会绕过安全权限并向目标程序的私有地址空间申请一块预留空间，并在该空间内展开后续恶意操作

 Unix平台 

 在类Unix操作系统上，基于ld.so（在BSD上）和ld-linux.so（在Linux上）的动态链接器，可以通过在LD_PRELOAD环境变量中指定库的路径名，将任意库链接到新进程中，该变量可以全局设置或单独为某个进程设置。

例如，在Linux系统上，这条命令会在启动时将文件"test.so"中的共享库链接到命令"prog"中：LD_PRELOAD="./test.so" prog这样的库可以像其他共享对象一样创建。在GCC中，这涉及到使用-fpic或-fPIC选项编译包含要链接的新全局变量的源文件，并使用-shared选项进行链接。该库可以像其他库一样访问程序中声明的外部符号。

 在macOS上，以下命令会在启动时将文件"test.dylib"中的共享库链接到命令"prog"中：DYLD_INSERT_LIBRARIES="./test.dylib" DYLD_FORCE_FLAT_NAMESPACE=1 prog在类Unix系统上，也可以使用基于调试器的技术。

 参考资料 

:Category:计算机程序库
:Category:執行緒
:Category:Windows管理