加载器 / 投放器分析(下载链 / 内存加载 / 模块拼接)
SkillDev tools加载器/投放器分析:多层下载、内存加载、模块拼接。 触发词:加载器、loader、dropper、投放器、内存加载、模块拼接
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the 加载器 / 投放器分析(下载链 / 内存加载 / 模块拼接) skill
What this skill tells your AI
The instructions your AI receives, as published by dslsdzc/rev-skills in .claude/skills/re-loader/SKILL.md and read by ahel’s review.
何时使用 / 何时不用
- 用:样本是"下载器/投放器"——体积小、动态获取后续载荷、运行时在内存里加载/拼接最终模块
- 用:多层载荷链(下载器 → 解压 → 内存加载 → 最终 RAT/勒索/挖矿)的逐层还原
- 用:反射式加载 / 进程空洞 / 模块拼接类投递技术分析
- 不用:样本本身就是完整载荷(静态可看到全部功能,走 [[re-triage]] / [[re-binary-core]])
- 不用:只做静态字符串提取(先 [[re-triage]] 初勘,下载器特征不明显时静态先行)
- 注意:动态分析强制前置([[re-sandbox]],[[re-analyze/platform-tips]] 最高原则)——下载器必须运行才能观察下载链;网络隔离下分析
工具准备
所有工具先验证再使用。本技能是动态分析为主——运行环境与监控工具直接复用下列技能(装法见各技能),本技能额外补两个提取用工具。
动态环境(复用,运行强制前置)
- [[re-sandbox]]:VM 快照 + 网络隔离(INetSim 是下载链喂料的关键——模拟 HTTP 接收下载请求并可回放录制响应,坑 1)
- [[re-tracing]]:strace / ltrace / ProcMon / APIMonitor——下载、解压、进程操作的调用级跟踪
- [[re-behavior]]:procmon / sysdig / bpftrace——进程树、注入检测(进程空洞/APC/反射式加载)
- [[re-memdump]]:gcore 默认转储——内存中载荷提取
- 验证: 沙箱快照就绪 +
strace -V+gcore --help可用
python3 + pefile —— 内存模块解析/拼接校验(可选但常用)
- python3 装法见 [[re-proto-rev]] 工具准备
pip install pefile- 验证:
python3 -c "import pefile; print(pefile.__version__)"
pe-sieve / hollows_hunter —— Windows 内存进程扫描(可选)
- 来源: GitHub hasherezade/pe-sieve releases 与 hasherezade/hollows_hunter releases,解压即用(Windows)
- 用途: 扫描进程内存,提取反射式加载/进程空洞的 PE 模块(步骤 3 的自动化帮手)
- 验证:
pe-sieve.exe /?输出用法
载荷脱壳(复用)
- [[re-anti-analysis]]([[re-packer-id]] / [[re-unpack-simple]] / [[re-unpack-advanced]]):载荷落地后常加壳,脱壳产物回沙箱复跑验证
操作步骤
按顺序执行,每步记录证据(路径 + sha256,见 [[re-triage]]);每层载荷的"来源"(URL/路径/内存偏移)与 sha256 是报告核心([[re-ioc]])。
-
初始样本识别(下载器 vs 完整载荷):
file loader.bin && sha256sum loader.bin ls -la loader.bin # 下载器通常小(几 KB~几百 KB) strings -n 6 loader.bin | grep -iE 'http|url|download|temp|\.exe|\.dll' | head -30- 下载器特征:体积小、strings 含 URL/路径、导入表网络与解压 API 多(WinINet/WinHTTP/URLDownloadToFile、CryptAPI、RtlDecompressBuffer);完整载荷反之(功能全在自身)
- 哈希先查 VT/社区([[re-ti]])确认家族与已有结论,别从零开始
- 判定为下载器 → 步骤 2;已经是完整载荷 → 转 [[re-binary-core]] 静态或 [[re-malware]] 行为
-
下载/解压链跟踪:
# Linux 沙箱内 strace -ff -o out -e trace=network,file,process ./loader.bin grep -E 'connect|sendto|openat|execve' out.* | head -50 # Windows 沙箱内: ProcMon 过滤 网络操作/文件写入/进程创建 三个类别- 网络: INetSim 记录样本请求的 URL 与参数(下载目标、User-Agent、分片参数);断网拿不到后续层 → 把录制响应回放喂料(坑 1)
- 解压: 观察 RtlDecompressBuffer / 7z / Expand 类调用与临时文件写入路径(%TEMP% 常见);每层产物
sha256sum存档 - 链不触发 → 反沙箱延迟/交互检测(坑 3),回 [[re-sandbox]] 环境伪装
-
内存加载分析(反射式加载 / 进程空洞):
- 反射式加载: VirtualAlloc(RWX) + 手工解析 PE + 手工重定位(无 LoadLibrary/NtMapViewOfSection 调用,全手动);特征: 大块分配 + 写入 + 执行,无进程创建
- 进程空洞: NtUnmapViewOfSection(抹掉目标进程镜像)→ NtWriteVirtualMemory(写入恶意镜像)→ SetThreadContext + ResumeThread(从挂起进程切换执行)
- 观察: [[re-behavior]] 进程树/注入(sysdig
proc.name=loader或 ProcMon 进程操作 + 内存写入);[[re-memdump]] 在窗口期gcore -o out <pid>提取(时机见坑 2) - Windows 自动化: pe-sieve /hollows_hunter 扫描进程提取内存 PE(可选)
-
模块拼接(多文件合成 / 多段写入):
# 拼接后校验: 内存切片/下载片段重组出的模块 python3 - <<'EOF' import pefile pe = pefile.PE('mem_module.bin') # 解析重组产物 print(pe.FILE_HEADER.Machine, len(pe.sections), pe.OPTIONAL_HEADER.AddressOfEntryPoint) EOF- 多文件合成: 下载日志里的分片参数(range/分块 URL)记录顺序 → 按序拼接;配置与载荷分离存储时先拼配置再拼代码
- 内存模块落盘: 按转储中的内存布局与节对齐切片重组;pefile 校验失败 → 对齐/偏移修正(RWX 节区映射、重定位表修复)
- 拼接/修复完成 → 回到步骤 1 初勘(file/hash/熵),继续下一层
-
提取最终载荷分析:
- file/hash/熵([[re-triage]])确认最终载荷类型:仍是加载器 → 迭代回步骤 2;是 RAT/勒索/挖矿/间谍 → 转 [[re-malware]](行为/C2/报告全流程)
- 加壳 → [[re-anti-analysis]] 脱壳,脱壳产物回沙箱复跑验证([[re-sandbox]])再继续
- 每层 sha256 + 来源(URL/路径/内存偏移)整理进报告([[re-ioc]] 结构),形成完整投递链
跨域联合
- [[re-sandbox]] / [[re-behavior]]:动态环境(强制前置,[[re-analyze/platform-tips]] 最高原则)与注入/进程树检测——本技能由 [[re-malware]] 网关引用,沙箱是工作流第 1 步
- [[re-tracing]]:下载/解压链跟踪(strace / ProcMon),步骤 2
- [[re-memdump]]:内存载荷提取(默认转储优先,[[re-analyze/platform-tips]] 关键经验: 等 OEP 解密后转储),步骤 3
- [[re-anti-analysis]]:载荷加壳处理与反沙箱绕过([[re-packer-id]] / [[re-unpack-*]]),步骤 5
- [[re-protocol]]:下载协议/C2 交互分析(netcap / proto-rev / crypto-*)
- [[re-ioc]]:每层 hash / URL / 文件路径出 IOC 与报告
- [[re-malware]]:最终载荷行为分析、勒索场景转 [[re-ransomware]]
- [[re-analyze/platform-tips]] 相关分支:默认沙箱、静态优先、直读 vs 转储(OEP 后转储)、Linux/Windows 平台分支(strace vs ProcMon)
常见坑与陷阱
- 多层网络下载(断网导致拿不到后续):现象——严格断网跑下载器,只见第 1 层行为,后续载荷永远拿不到,链分析中断;原因——载荷全在远程,下载失败使链断在第 1 层;对策——两阶段:先在受控环境(INetSim/fake DNS)识别下载 URL,再把录制字节作为模拟响应回放喂料,逐层获取;每层响应字节与 sha256 存档(步骤 2)
- 内存载荷转储时机:现象——
gcore转储太早(载荷未解密/未映射到可执行状态)或太晚(已执行完毕被清理),提取出的模块残缺/全零;原因——内存载荷只在落地窗口期完整存在;对策——按跟踪日志定位落地点(网络接收 → 写入内存 → 创建线程),在反射入口/线程创建前转储([[re-analyze/platform-tips]] 关键经验: 等 OEP 解密后 dump);配合断点暂停进程再转储;多转几次对比 - 反沙箱延迟下载:现象——样本检测到沙箱特征后 sleep 数十秒~数小时,或等待鼠标/键盘交互才触发下载,短观察窗口只看到"没动静";原因——反沙箱延迟与交互检测(ATT&CK T1497.003 时间逃逸 / T1497.002 用户活动检测,见 [[re-sandbox]] 时间/交互检测坑);对策——[[re-sandbox]] 环境伪装(真实时钟、交互模拟、资源充足)+ [[re-behavior]] 拉长观察窗口;必要时 patch 检测点([[re-anti-analysis]] 域)
- 加密载荷需先解密:现象——下载到的"载荷"熵 >7.0 全是随机字节,静态分析无从下手;原因——传输/落地时加密(XOR/自定义),loader 运行时才在内存解密;对策——[[re-crypto-id]] / [[re-crypto-keys]] 从 loader 静态还原算法与密钥,或直接 [[re-memdump]] 提取内存中的解密后形态(跳过磁盘形态),而不是对着密文硬分析
- 伪装后缀的自解压加载器:现象——readelf 报错无法解析;原因——PHDR 被故意填充损坏(干扰解析);对策——忽略损坏的 PHDR 只看有效 LOAD 段;识别标准模式:入口 → 解压函数 → mmap(RW) → 解压 → mprotect(RX) → 跳转
- 位操作密集代码反编译差:现象——Hex-Rays 输出不可读;原因——ARM64 位操作密集;对策——切反汇编视图手动分析(位流读取/移位/条件分支场景反编译器不如直接看汇编)
- 自写解压器 bug(carry 语义):现象——Python 重写解压器输出错误;原因——refill 路径返回值/进位语义误判;对策——仔细对照汇编核对 carry 语义,用已知明文加断言对比
- 入口偏移不确定:现象——payload 入口字段含义不明;原因——数据表字段无文档;对策——跟踪 loader 实际跳转目标(
br mmap_base + offset)确认入口 - 后缀不可信:现象——按后缀选工具链出错;原因——自解压样本伪装扩展名;对策——
file永远是第一步;解析器选容错实现(可处理损坏头) (来源:reverse-skill field-journal,MIT)
Signals
- GitHub stars
- 57
- Forks
- 8
- Last commit
- Sep 2026
ahel review
K1binfo
installs-packages
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Catalog kind
- skill
- Gateway key
re-loader- Source
- github.com/dslsdzc/rev-skills