**郑重声明:**本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。
🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论| 保持连接💬
🌌 立即前往 👉晖度丨安全视界🚀
▶ 信息收集
▶ 漏洞检测 ➢ 防病毒软件概述 ➢ 内存中的逃避技术🔥🔥🔥▶ 初始立足点
▶ 权限提升
▶ 横向移动
▶ 报告/分析
▶ 教训/修复
目录
[1.2 绕过杀毒软件检测技术](#1.2 绕过杀毒软件检测技术)
[1.2.2 内存中的逃避技术](#1.2.2 内存中的逃避技术)
[1.2.2.3 进程空洞化技术](#1.2.2.3 进程空洞化技术)
[1.2.2.4 内联挂钩技术](#1.2.2.4 内联挂钩技术)
[欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论](#欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论)
1.防病毒软件规避
1.2 绕过杀毒软件检测技术
现代恶意软件为逃避防病毒软件的检测,通常采用两类主要技术:
①磁盘上的逃避: 侧重于修改物理存储在磁盘上的恶意文件,以逃避检测;
②内存中的逃避: 由于现代防病毒软件的文件扫描引擎日趋成熟,更多恶意软件转向完全避免落地磁盘 ,直接在内存中执行恶意操作,从而大幅降低被检测概率。
💡 关键点:内存逃避技术属于"无文件攻击"范畴,恶意代码常通过合法进程注入、脚本加载等方式在内存中运行,不留下传统文件痕迹。
前文介绍了第二种内存逃避技术-----反射式DLL注入技术,接前文介绍其他:进程空洞化、内联挂钩。
1.2.2 内存中的逃避技术
1.2.2.3 进程空洞化技术
🎯 技术本质:借壳上市
核心思想 :创建一个合法进程的空壳 ,挖空其内容,注入恶意代码,实现完美伪装。
1.攻击流程

2.攻击步骤详解
阶段一:寻找"替身"
| 操作 | 目的 | 技术实现 |
|---|---|---|
| 选择目标 | 挑选常见合法进程 | explorer.exe、svchost.exe等系统进程 |
| 创建进程 | 以挂起状态启动(suspended) | CreateProcess(..., CREATE_SUSPENDED, ...) |
| 关键特征 | **挂起状态:**意味着该进程的代码不会立即执行,操作系统不会让它运行。 | 内存框架就绪,代码未执行 |
阶段二:狸猫换太子
| 操作 | 目的 | 关键技术 |
|---|---|---|
| 清空原内容 | 移除合法代码映像 | NtUnmapViewOfSection / 内存覆盖 |
| 分配新空间 | 为恶意代码准备内存 | VirtualAllocEx |
| 写入恶意代码 | 植入恶意可执行文件(DLL或可执行文件) | WriteProcessMemory |
| 修复入口点 | 指向恶意代码起始处 | 修改线程上下文 |
阶段三:激活执行
| 操作 | 说明 | 结果 |
|---|---|---|
| 恢复进程 | 恢复(resume)这个进程,使其继续执行。ResumeThread() |
进程"复活" |
| 执行流程 | CPU从恶意入口点开始执行 | 恶意代码在合法外壳下运行 |
| 最终状态 | 系统看到的是合法进程,实际执行恶意功能 | 🎭 完美伪装 |
3.与传统注入技术对比
| 特性 | 常规DLL注入 | 反射式DLL注入 | 进程空洞化 |
|---|---|---|---|
| 目标进程 | 已有运行进程 | 已有运行进程 | 新建挂起进程 |
| 修改方式 | 添加DLL模块 | 内存加载DLL | 完全替换映像 |
| 进程完整性 | 保持原进程代码 | 保持原进程代码 | 完全替换代码 |
| 检测难度 | 较易 | 中等 | 极难 |
| 技术比喻 | 给房子加违建 | 在房子里变魔术 | 整栋房子换主人 |
4.生动比喻:特洛伊木马剧场版
第一步:租用正规剧场 ⏸️
攻击者租下一个知名剧院(合法进程),但要求"演出前保持静默"(挂起状态)
第二步:偷梁换柱 🎭
深夜潜入剧院,把原定剧本(合法代码)全部扔掉,换上自己的阴谋剧本(恶意代码)
但保留剧院招牌、海报、票务系统(进程信息不变)
第三步:公开演出 🚨
剧院"照常开业",观众(系统/安全软件)看到的是知名剧院
实际演出的却是完全不同的阴谋剧(恶意行为)
5.技术优势与检测挑战
✅ 攻击者优势
| 优势 | 说明 |
|---|---|
| 高隐蔽性 | 进程名、PID等信息完全合法 |
| 绕过白名单 | 利用受信任进程外壳 |
| 无模块加载 | 不调用LoadLibrary等敏感API |
| 内存特征少 | 单进程连续空间,无明显注入痕迹 |
🛡️ 防御挑战
| 挑战点 | 原因 | 检测思路 |
|---|---|---|
| 行为相似 | 与正常进程创建相似 | 监控挂起-恢复模式 |
| 内存异常 | 原映像被意外卸载 | 检查进程内存一致性 |
| 入口点异常 | 线程起点不在模块内 | 验证执行流合法性 |
| 签名不匹配 | 内存代码与文件签名不符 | 内存/文件比对 |
🔍 检测关键指标
-
⏸️ 进程创建即挂起(非常规行为模式)
-
🔄 内存映像剧烈变化(基址/大小突变)
-
🎯 入口点指向非常规地址
-
📝 进程内存与磁盘文件不一致
1.2.2.4 内联挂钩技术
🎯 技术本质:函数执行流劫持
核心思想 :在合法函数中插入隐秘"跳板" ,在执行原始功能前先暗中执行恶意代码。
1.攻击流程

2.攻击步骤详解
阶段一:侦查定位
| 操作 | 目的 | 实现方式 |
|---|---|---|
| 选择目标 | 找到关键拦截点 | API函数、认证函数、加密函数等 |
| 分析函数 | 了解函数结构和偏移 | 反汇编、调试器分析 |
| 确定位置 | 找到最佳插入点 | 通常选择函数开头5-7字节 |
阶段二:植入跳板
| 操作 | 技术细节 | 关键指令 |
|---|---|---|
| 备份原指令 | 保存被覆盖的字节 | memcpy()保存副本 |
| 写入跳转 | 插入重定向代码 | JMP <恶意代码地址> |
| 内存权限 | 修改页面保护属性 | VirtualProtect(PAGE_EXECUTE_READWRITE) |
| 典型修改 | 替换前5字节 | E9 xx xx xx xx(相对跳转) |
阶段三:恶意执行动作
| 恶意代码类型 | 常见目的 | 危险等级 |
|---|---|---|
| 📤 数据窃取 | 截获密码、密钥、敏感数据 | 🔴 高危 |
| 🔼 权限提升 | 绕过权限检查,获取更高权限 | 🔴 高危 |
| 🚪 后门创建 | 建立隐蔽通信通道 | 🟠 中危 |
| 👁️ 行为监控 | 记录用户操作、系统调用 | 🟡 低危 |
阶段四:完美隐身
| 恢复操作 | 实现方式 | 隐蔽效果 |
|---|---|---|
| 还原原指令 | 从备份恢复被覆盖字节 | 函数代码恢复原样 |
| 跳回原位置 | 执行完恶意代码后跳回 | 执行流无缝衔接 |
| 保持一致性 | 不修改函数返回值 | 调用者无法察觉异常 |
3.技术对比
| 特性 | 常规注入 | 内联挂钩 |
|---|---|---|
| 修改位置 | 添加新模块/线程 | 修改现有函数代码 |
| 触发时机 | 进程启动/特定事件 | 每次调用被挂钩函数 |
| 检测难度 | 较易(有新模块) | 极难(代码临时修改) |
| 恢复能力 | 需卸载DLL | 可动态卸载/恢复挂钩 |
| 技术比喻 | 给程序加新零件 | 在程序齿轮上临时加齿 |
| 对比维度 | 进程空洞化 | 内联挂钩 |
|---|---|---|
| 🎯 攻击目标 | 整个进程的代码映像 | 单个函数或API |
| 🔄 修改范围 | 替换整个进程的代码段 | 修改特定函数的前几条指令 |
| ⚡ 操作时机 | 进程创建时(挂起状态) | 进程运行时(动态修改) |
| 🔧 技术复杂度 | 较复杂 需暂停进程、卸载映像、重定位、修复入口点 | 较简单 只需修改内存权限、写入跳转指令 |
| 🎭 隐蔽性 | 较低 整个进程行为可能异常,内存映像不匹配 | 极高 只影响特定函数,进程整体看似正常 |
| 🔍 检测难度 | 较易检测 - 进程映像与磁盘文件不一致 - 内存区域异常 - 挂起-恢复模式可监控 | 极难检测 - 只修改少量字节 - 可动态恢复原状 - 无新模块加载 |
| 🕒 持久性 | 长期接管 恶意代码完全控制进程 | 临时劫持 仅在调用特定函数时生效 |
| 📁 文件依赖 | 需要完整的恶意可执行文件 | 只需要少量恶意代码片段 |
| 🎯 典型应用 | 恶意软件启动器、进程伪装 | Rootkit、API监控、数据窃取 |
| ⚖️ 系统影响 | 整个进程行为被改变 | 仅特定功能受影响 |
4.生动比喻:电视插播广告
正常观看流程:
观众打开电视 → 观看正片节目(合法函数) → 节目结束
被挂钩后的流程:
观众打开电视 → 电视突然跳转到广告(JMP跳转) →
播放恶意广告(恶意代码) → 自动跳回正片(恢复执行) →
观众以为广告是节目一部分,毫无察觉!
关键特征:
-
📺 电视本身没变(进程未新增模块)
-
⏱️ 插播时间极短(毫秒级完成跳转)
-
🔄 自动恢复节目(执行流无缝衔接)
-
🕵️ 观众难以察觉(表面完全正常)
5.技术优势与特点
✅ 攻击者优势
| 优势 | 说明 |
|---|---|
| 🎭 高度隐蔽 | 不添加新模块,只修改现有代码 |
| ⚡ 精准拦截 | 可针对特定函数进行拦截 |
| 🔄 动态灵活 | 可随时安装/卸载挂钩 |
| 🔍 难以检测 | 内存修改临时性,扫描难发现 |
🛡️ 检测挑战
| 挑战点 | 原因 | 检测思路 |
|---|---|---|
| 代码完整性 | 函数被临时修改后恢复 | 内存哈希校验 |
| 执行流异常 | JMP指令跳转到非模块区域 | 控制流完整性检查 |
| 时间开销 | 挂钩增加微小执行延迟 | 性能基准监控 |
| Rootkit关联 | 常与内核挂钩配合使用 | 驱动签名验证 |
6.常见应用场景
| 恶意软件类型 | 使用目的 | 典型目标函数 |
|---|---|---|
| 键盘记录器 | 截获按键输入 | GetAsyncKeyState |
| 凭证窃取器 | 获取登录信息 | CredRead |
| 通信监控 | 拦截网络数据 | send/recv |
| 反杀毒规避 | 绕过检测API | OpenProcess |
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
每一份支持,都是我持续输出的光。
