**郑重声明:**本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。
🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论| 保持连接💬
🌌 立即前往 👉晖度丨安全视界🚀
▶ 信息收集
▶ 漏洞检测 ➢ 防病毒软件概述 ➢ 内存中的逃避技术🔥🔥🔥▶ 初始立足点
▶ 权限提升
▶ 横向移动
▶ 报告/分析
▶ 教训/修复
目录
[1.2 绕过杀毒软件检测技术](#1.2 绕过杀毒软件检测技术)
[1.2.2 内存中的逃避技术](#1.2.2 内存中的逃避技术)
[1.2.2.2 反射式DLL注入技术](#1.2.2.2 反射式DLL注入技术)
[1.常规DLL注入 vs 反射式DLL注入](#1.常规DLL注入 vs 反射式DLL注入)
1.防病毒软件规避
1.2 绕过杀毒软件检测技术
现代恶意软件为逃避防病毒软件的检测,通常采用两类主要技术:
①磁盘上的逃避: 侧重于修改物理存储在磁盘上的恶意文件,以逃避检测;
②内存中的逃避: 由于现代防病毒软件的文件扫描引擎日趋成熟,更多恶意软件转向完全避免落地磁盘 ,直接在内存中执行恶意操作,从而大幅降低被检测概率。
💡 关键点:内存逃避技术属于"无文件攻击"范畴,恶意代码常通过合法进程注入、脚本加载等方式在内存中运行,不留下传统文件痕迹。
前文介绍了第一种内存逃避技术-----远程进程内存注入,本文接前文介绍反射式DLL注入技术。
1.2.2 内存中的逃避技术
1.2.2.2 反射式DLL注入技术
1.常规DLL注入 vs 反射式DLL注入
| 对比维度 | 常规DLL注入 | 反射式DLL注入 |
|---|---|---|
| 加载源头 | 从磁盘文件 (.dll)加载到目标进程的内存 | 从内存的某个位置 (二进制流)加载.dll |
| 依赖机制 | 操作系统API (LoadLibrary/LoadLibraryEx) | 自定义加载器 (手动实现加载逻辑) |
| 必经路径 | 标准模块加载流程 | 绕过标准加载流程 |
| 磁盘痕迹 | 必然存在 (恶意DLL需物理存储) | 可以做到完全无文件 |
| 关键动作 | 调用API,由系统完成后续所有加载步骤 | 在目标进程内存中"手动组装"DLL并初始化 |
| 隐蔽性 | 较低 (API调用易被监控,文件易被扫描) | 极高 (无文件、无标准API调用) |
| 技术本质 | 利用系统提供的合法功能 | 模拟 系统功能,并绕过其限制 |
🎯 核心差异一句话
常规注入是 "请求系统帮忙加载一个文件" ;反射式注入是 "在内存中亲手组装并启动一个DLL"。
🍽️ 形象比喻:
①常规DLL注入 → "外卖点餐"
你(攻击者)想让目标吃特定的食物(恶意DLL)。
-
食物存在哪里? → 在饭店的厨房里(磁盘上的DLL文件)。
-
如何送达? → 你通过外卖平台 (
LoadLibraryAPI)下单。 -
发生了什么? → 平台接到订单,派骑手去饭店取餐,然后配送到目标地址(目标进程)。整个过程公开、可追踪。(因此,被可以防御系统发现。)
-
特点 :依赖饭店和平台 ,留下订单记录 (日志),食物有实体包装(磁盘文件)。
②反射式DLL注入 → "进入私厨"
你同样想让目标吃特定的食物(恶意DLL)。
-
食物存在哪里? → 在你脑海中的菜谱 (网络或内存中的二进制数据流)。
-
如何送达? → 你亲自潜入 目标家中(注入代码到目标进程),凭借记忆 (自定义加载器)当场将食材变出并烹饪好。
-
发生了什么? → 食物自行烹饪后出现在目标的餐桌上。没有外卖订单,没有饭店记录,没有包装袋。
-
特点 :不依赖外部平台 (绕过API),无实体痕迹(无文件),过程如同魔法。
2.反射式DLL注入完整流程

1️⃣ 获取目标进程句柄
-
使用
OpenProcess函数 获取目标进程的操作权限 -
🔑 关键:需要足够的权限(如
PROCESS_ALL_ACCESS)
2️⃣ 分配内存空间
-
使用**
VirtualAllocEx函数**在目标进程中分配内存空间 -
🎯 用途:存储++DLL的二进制内容++ 或++加载器代码++
3️⃣ 写入DLL内容
-
使用**
WriteProcessMemory函数**将数据写入目标进程 -
⚡ 两种方式:
-
路径注入(写入DLL路径)
-
代码注入 (直接写入DLL二进制数据)→ 反射式注入采用此方式
-
4️⃣ 手动加载DLL(核心步骤)
标准流程被绕过 → 自定义加载器接管
-
加载器代码 :将DLL的加载代码(反射加载代码)作为一个小型加载器嵌入目标进程中。该加载器不依赖于Windows API(模拟Windows加载器功能),而是通过编写自定义的加载代码将DLL的内容加载到目标进程的内存空间。
-
手动调用DllMain :加载器代码将DLL内容加载到内存后,手动触发DLL的入口函数DllMain,并传入适当的参数。
5️⃣ 执行DLL代码
-
DLL的入口**函数
DllMain**被执行 -
🚀 恶意DLL功能在目标进程内生效
6️⃣ 清理资源
-
使用**
VirtualFreeEx函数**释放分配的内存 -
🧹 消除注入痕迹,提高隐蔽性
3.反射式DLL注入的挑战
| 挑战 | 说明 | 攻击者解决方案 |
|---|---|---|
| API限制 | Windows的标准API(如LoadLibrary)只能从++磁盘加载DLL文件++ ,而不直接支持++从内存加载DLL++。因此,攻击者不能直接使用这些标准API来进行反射式DLL注入。 | 编写自定义加载器 |
| 无公开API | Windows未提供现成的API来直接从内存中加载DLL。攻击者要绕过这些限制,需自己编写代码来模拟和实现加载DLL的过程。 | 逆向工程系统加载机制 |
| PE结构复杂 | DLL需要正确解析和重定位 | 手动实现PE加载逻辑 |
4.攻击者关键做法
-
🚫 绕过标准API :不依赖
LoadLibrary,避免触发监控 -
💾 全内存操作:DLL不落地,减少被AV/EDR检测机会
-
🔧 自实现加载器:包含以下功能:
-
内存分配与权限设置
-
PE头部解析与节区映射
-
导入表解析与函数地址解析
-
重定位处理
-
TLS回调执行(如存在)
-
DllMain调用
-
5.LoadLibrary介绍
Windows操作系统的标准模块加载器 ,用于将++磁盘上的DLL文件++动态加载到进程内存中。
🔧 核心功能
- 加载动态链接库:LoadLibrary可以加载指定路径的DLL文件,之后就可以使用该DLL中定义的函数、数据或其他资源。
- 返回模块句柄:成功加载DLL后,LoadLibrary会返回一个模块句柄(HMODULE),这个句柄代表着已加载的DLL。可以用它来访问DLL中的函数、资源等。
- 调用DLL中的函数:加载DLL后,可以使用GetProcAddress来获取DLL中函数的地址,然后通过这个地址调用DLL中的特定函数。
| 功能 | 说明 |
|---|---|
| 📂 文件加载 | 从硬盘读取DLL文件到内存 |
| 🔗 地址映射 | 建立DLL与进程地址空间的关联 |
| 🆔 句柄返回 | 返回模块句柄(HMODULE)作为访问标识 |
| 🔍 函数定位 | 为后续GetProcAddress调用提供基础 |
📝 函数原型详解
cs
HMODULE LoadLibrary(
LPCTSTR lpFileName
);
-
参数 :
lpFileName- DLL文件路径- 这个路径可以是:相对路径、绝对路径或系统目录中的文件名
-
返回值:
-
✅ 成功 →
HMODULE(模块句柄) -
❌ 失败 →
NULL(需用GetLastError()获取错误码)
-
🔄 典型使用流程

✅ 优势特点
-
标准化: Windows官方API,稳定可靠
-
自动化: 自动处理DLL初始化(调用DllMain)
-
集成化: 自动解析依赖、处理重定位等复杂工作
-
兼容性: 支持不同路径格式和系统目录查找
⚠️ 限制与注意
-
📍 仅限磁盘文件 : 只能从文件系统加载,不支持纯内存加载
-
📝 路径要求: 路径错误或文件不存在会导致失败
-
🛡️ 安全限制: 受UAC、权限控制等安全机制约束
-
🔍 可监控: 安全软件可轻松监控此API调用
🆚 LoadLibrary vs 手动加载
| 对比项 | LoadLibrary | 反射式手动加载 |
|---|---|---|
| 来源 | 必须来自磁盘文件 | 可来自内存数据 |
| 复杂度 | 简单调用即可 | 需实现完整加载逻辑 |
| 隐蔽性 | 低(易被监控) | 高(绕过标准API) |
| 依赖 | 完全依赖系统机制 | 独立实现,不依赖系统API |
🛠️ 实用示例
cs
// 基本使用模式
HMODULE hModule = LoadLibrary("MyLibrary.dll");
if (hModule != NULL) {
// 获取函数地址
MyFuncType myFunc = (MyFuncType)GetProcAddress(hModule, "MyFunction");
if (myFunc != NULL) {
// 调用函数
myFunc();
}
// 使用完毕后可卸载
FreeLibrary(hModule);
} else {
DWORD error = GetLastError();
printf("加载失败,错误码: %d\n", error);
}
🔍 安全视角
-
红队用途: 常用于常规DLL注入,但易被检测
-
蓝队监控: 关键监控点,异常LoadLibrary调用可能是攻击迹象
-
绕过技巧: 高级攻击者会避免使用LoadLibrary,改用反射式注入
💎 一句话总结
LoadLibrary是Windows系统提供的"官方搬运工",只能从磁盘搬货(DLL)到内存,全程可监控、有记录。
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
每一份支持,都是我持续输出的光。
