DLL延迟加载"

admin 2026-10-20 23:08:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

DLL延迟加载

原创

R0x7e
R0x7e

剑外思归客

2026年1月3日 13:55
江苏

在小说阅读器读本章

去阅读

DLL延迟加载(Delay Load)是Windows程序开发中的一种技术,它允许程序在运行时而不是启动时加载所需的DLL(动态链接库)。这种技术通过修改PE(可执行文件)结构中的延迟加载表来实现。

技术原理

  1. 延迟加载机制:编译器(如MSVC)提供/DELAYLOAD选项,在链接时生成特殊的延迟加载表
  2. 运行时行为:当代码首次调用延迟加载DLL中的函数时,系统才会加载该DLL并解析函数地址

恶意代码开发中的意义和作用

1. 规避静态分析

  • 隐藏依赖关系:延迟加载的DLL不会出现在静态导入表(IAT)中,增加了分析难度
  • 规避杀毒软件检测:许多杀毒软件会检查导入表,延迟加载可以绕过这种检查

2. 动态行为控制

  • 条件加载:恶意代码可以根据环境条件决定是否加载某些功能模块
  • 减少内存痕迹:只在需要时才加载恶意模块,减少内存中同时存在的可疑内容

3. 规避沙箱检测

  • 延迟触发恶意行为:在沙箱超时后才加载恶意DLL,规避自动化分析
  • 环境感知:先加载无害DLL检测环境,确认安全后再加载恶意模块

4. 模块化恶意代码

  • 插件式架构:核心模块保持简洁,通过延迟加载实现功能扩展
  • 动态更新:可以从C2服务器下载并延迟加载新模块,实现功能更新

具体实现过程

通过vs 编译器实现

在vs中项目属性 → 链接器 → 输入 → 延迟加载的DLL->添加对于的DLL名称``在\"附加依赖项\"中添加你的DLL对应的.lib文件

在代码中添加函数声名,该函数为dll中的函数

extern \"C\" __declspec(dllimport) void Runcalc();

完整代码为:

#include <iostream>

extern \"C\" __declspec(dllimport) void Runcalc();

int main()
{
    Runcalc();  // 调用DLL函数
    std::cout << \"Hello World!\
\";
}

然后编译即可,在运行时,需确保该exe程序和DLL文件在同一目录中

通过代码实现

在代码中添加链接器指令

#pragma comment(linker, \"/DELAYLOAD:Dll1.dll\")
#pragma comment(lib, \"Dll1.lib\")

声名延迟加载的函数

extern \"C\" __declspec(dllimport) void Runcalc();

完整代码如下

#include <iostream>
/*
 * 链接器指令:指定要延迟加载的DLL
 *
 * /DELAYLOAD:Dll1.dll 表示Dll1.dll将采用延迟加载方式
 * 这个DLL不会在程序启动时加载,而是在首次调用其函数时加载
 */
#pragma comment(linker, \"/DELAYLOAD:Dll1.dll\")
 /*
  * 链接器指令:链接延迟加载支持库
  *
  * delayimp.lib 提供了延迟加载的运行时支持
  * 包含__delayLoadHelper2等实现延迟加载机制的辅助函数
  */
#pragma comment(lib, \"Dll1.lib\")

// 正确声明延迟加载的函数
/*
 * 声明要从DLL中延迟加载的函数
 *
 * extern \"C\" - 使用C语言链接约定,防止C++的名称修饰(name mangling)
 * __declspec(dllimport) - 告诉编译器这个函数将从DLL中导入
 * void Runcalc() - 函数原型,必须与DLL中的定义完全一致
 */
extern \"C\" __declspec(dllimport) void Runcalc();

int main()
{
    Runcalc();  // 调用DLL函数
    std::cout << \"Hello World!\
\";
}

PS

DLL延迟加载虽然能够隐藏IAT导入表,但是延迟加载的DLL信息存储会在 IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT(数据目录项的第13项,索引值为13)中,其结构为 ImgDelayDescr(延迟导入描述符)。 通过vs提供的工具dumpbin可以查看pe的文件结构 直接查看所有导入的 DLL 和函数

dumpbin /IMPORTS your.exe

查看pe头

dumpbin /HEADERS your.exe

通过命令dumpbin /IMPORTS DelayLoadDll.exe,查看得到Dll1.dll是延迟加载的

By:R0x7e,《剑外思归客》公众号


DLL延迟加载" 网络安全文章

DLL延迟加载"

DLL延迟加载是Windows程序开发中的一种技术,允许程序在运行时而非启动时加载所需DLL,通过修改PE结构中的延迟加载表实现。该技术在恶意代码开发中具有重要价值,可规避静态分析、控制动态行为、绕过沙箱检测并实现模块化架构。文档详细介绍了通过VS编译器选项和代码指令两种实现方式,并指出延迟加载信息仍会存储在PE文件的延迟导入目录中,可通过dumpbin工具检测。
纯享笔记:20/Langchain与Langgraph及安全领域应用" 网络安全文章

纯享笔记:20/Langchain与Langgraph及安全领域应用"

本文详细介绍了LangChain与LangGraph框架的核心架构、功能模块及其在安全领域的应用。LangChain作为LLM应用开发框架,通过模块化设计实现了模型调用、数据处理、工具集成等核心能力,2025年更新强化了国产模型集成与安全工具适配。LangGraph基于有向图支持复杂工作流编排,特别适用于智能体的迭代式开发。文档还提供了安全领域专用Agent(如CrakenAgent)的实现案例,展示了漏洞应急响应等场景的自动化解决方案。
网络强国翻车现场!以色列被伊朗APT组织Handala按头“薅羊毛”,专捏医院、摄像头这些软柿子" 网络安全文章

网络强国翻车现场!以色列被伊朗APT组织Handala按头“薅羊毛”,专捏医院、摄像头这些软柿子"

本文分析了伊朗APT组织Handala对以色列发起的网络攻击,指出以色列因选择性防御策略导致医院、前总理隐私及监控摄像头等非核心目标被轻易攻破。文章揭示了网络强国在监管框架与技术能力间的鸿沟,并给出避免选择性防御、及时修复已知漏洞、防范低技术攻击等建议。
2026年:让Linux成为你的操作系统吧" 网络安全文章

2026年:让Linux成为你的操作系统吧"

该文档以2026年为时间点,论证Linux已成为可行桌面操作系统替代方案。核心论据包括Windows11的强制广告、隐私问题引发用户反感;Linux在安装便捷性、桌面环境成熟度及软件生态(Flatpak/Proton)方面取得显著进步;Steam数据显示Linux游戏份额持续增长,Proton兼容层使多数游戏流畅运行。建议用户通过LiveUSB试用或双系统方式体验推荐发行版(如Bazzite、LinuxMint)。
评论:0   参与:  0