自动化与脚本
CTF 取证与信号分析:从磁盘/内存/日志/流量/隐写/硬件…
当面对 CTF 取证类题目(磁盘镜像、内存转储、事件日志、PCAP、加密货币交易、隐写、PDF、注册表、Volatility、Docker 镜像、coredump、侧信道功耗、DTMF 音频、包时序、CD 音频、删除文件与凭据恢复)时,按此清单逐项排查。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
CTF 取证与信号分析:从磁盘/内存/日通用
解决思路
- 安装基础工具链:pip install volatility3 Pillow numpy matplotlib;Linux 用 apt install binwalk foremost libimage-exiftool-perl tshark sleuthkit ffmpeg steghide testdisk john pcapfix;macOS 用 brew install binwalk exiftool wireshark sleuthkit ffmpeg testdisk john-jumbo;gem install zsteg。
- 文件初筛:file、exiftool(元数据)、binwalk(内嵌文件)、strings -n 8、hexdump -C 查看 magic bytes。
- 磁盘取证:sudo mount -o loop,ro image.dd /mnt/evidence;fls -r image.dd 列文件;photorec image.dd 雕刻删除文件。
- 内存取证(Volatility 3):vol -f memory.dmp windows.info / windows.pslist / windows.filescan;进一步用 windows.cmdline、windows.netscan、windows.dumpfiles --physaddr <addr>。
- 日志分析:grep -iE "(flag|part|piece|fragment)" server.log 找片段;grep "FLAGPART" server.log | sed 's/.*FLAGPART: //' | uniq | tr -d '\n' 重组;sort logfile.log | uniq -c | sort -rn | head 找异常。
- Windows 事件日志(.evtx):关注 1001 Bugcheck/reboot、1102 审计日志被清、4720 账户创建、4781 账户改名;RDP 会话 ID 21 登录成功、24 断开、1149 RDP 认证成功(含源 IP);用 python-evtx 遍历记录打印 XML。
- NTFS 备用数据流(ADS):用 fls -r image.dd | grep ":" 检测,用 icat 提取。
- 日志被清时的替代证据源:USN Journal($J)文件操作时间线、SAM 注册表键 last_modified 时间戳、PowerShell ConsoleHost_history.txt、Defender MPLog、Prefetch、用户 profile 目录创建时间。
- 隐写基础:steghide extract -sf image.jpg -p "";zsteg image.png;stegsolve 可视化分析。
- 隐写具体手法:二值边框按顺时针编码位;2D FFT 幅度谱隐藏数据(np.fft.fft2 可视化);DTMF 用 multimon-ng -a DTMF 解码;多层 PDF 检查隐藏注释、EOF 后数据、与关键词 XOR、ROT18 末层;SSTV+LSB 检查音频样本 2-bit LSB(stegolsb);SVG 动画 keyTimes/values 用填充色交替编码;修复 PNG chunk 顺序 IHDR→ancillary→IDAT→IEND;检查 IEND 后被覆盖 magic 的附加归档;APNG 用 apngdis 或解析 fdAT/fcTL 提取帧;修改 IHDR height 并暴力匹配 CRC 揭示隐藏行;像素坐标链(R=数据字节,G/B=下一像素坐标);AVI 相邻帧 XOR 差分。
- 高级隐写:自定义双音频率先 ffmpeg -i audio -lavfi showspectrumpic 生成频谱图再映射键盘;JPEG 未使用量化表(ID 2、3)的 LSB 用 Image.open().quantization 提取;多轨音频用 sox -m a0.wav "|sox a1.wav -p vol -1" diff.wav 相减后在 5-12 kHz 频谱找 flag;包间隔时序(如 10ms/100ms 两值)编码二进制。
- PDF 分析:exiftool document.pdf(元数据常藏 flag)、pdftotext document.pdf -、strings document.pdf | grep -i flag、binwalk document.pdf;高级手法含不可见文本分隔符、URI 注解转义花括号、模糊图像 Wiener 反卷积、矢量矩形 QR、压缩对象流(mutool clean -d)、文档元数据字段。
- 磁盘/VM/内存:sudo mount -o loop,ro image.dd /mnt/evidence;fls -r image.dd && photorec image.dd;OVA 用 tar -xvf machine.ova,VMDK 用 7z x disk.vmdk -oextracted "Windows/System32/config/SAM" -r;字符串雕刻 strings -a -n 6 memdump.bin | grep -E "FLAG|SSH_CLIENT|SESSION_KEY";coredump 用 gdb -c core.dump 后 info registers、x/100x $rsp、find "flag"。
- Windows 口令哈希:用 impacket secretsdump 从 SAM/SYSTEM 提取,hashcat -m 1000 破解。
- 比特币追踪:用 mempool.space API https://mempool.space/api/tx/<TXID>;peel chain 始终跟随较大输出,整数金额表示 peel。
- 识别罕见 magic:OggS(.ogg)、RIFF(.wav/.avi,查子格式)、%PDF(.pdf)、GCDE(PrusaSlicer 二进制 G-code)。
- 常见 flag 位置:PDF 元数据(Author/Title/Keywords)、图片 EXIF、回收站 $R 文件、注册表值、浏览器历史、日志片段、内存字符串。
- WMI 持久化分析:用 PyWMIPersistenceFinder.py OBJECTS.DATA,查找 FilterToConsumerBindings 与 CommandLineEventConsumer、Base64 PowerShell、系统事件触发的 event filter。
- 网络取证:TFTP netascii 用 data.replace(b'\r\n', b'\n').replace(b'\r\x00', b'\r') 修复;TLS 用 SSLKEYLOGFILE 或 RSA 私钥导入 Wireshark(Edit→Preferences→Protocols→TLS);TLS 弱 RSA 提取证书分解模数后用 rsatool 生成私钥;USB 音频用 tshark -e usb.iso.data 提取后按 raw PCM 导入 Audacity;从 NTLMSSP_AUTH 提取 server challenge + NTProofStr + blob 暴力破解 NTLMv2;WPA/WEP 用 aircrack-ng -w wordlist capture.pcap;PCAP 损坏用 pcapfix -d corrupted.pcap;USB HID 键盘取 8 字节报告(byte2=keycode,byte0=modifiers);dnscat2 解码 hex/base32 子域标签、去 9 字节头、去重后重组;USB 键盘 LED 通过 SET_REPORT 切换 Caps Lock 用时间编码摩斯。
- 浏览器取证:Chrome/Edge 用 DPAPI 主密钥 AES-GCM 解密 Login Data SQLite;Firefox 查询 places.sqlite 的 SELECT url FROM moz_places WHERE url LIKE '%flag%'。
- 其他技巧:Docker 镜像 config JSON 保留所有 RUN 命令(tar xf app.tar 后查 config blob);Linux 攻击链查 auth.log、.bash_history、近期二进制、PCAP;RAID 5 用两盘 XOR 恢复第三盘 bytes(a ^ b for a, b in zip(disk1, disk3));Volatility 失败时用 GIMP 以 raw RGB(约 1920 宽)打开 .dmp 找桌面截图;Kyoto Cabinet 用顺序探针键二分找哈希槽;PowerShell 勒索从 minidump 提取脚本找 AES 密钥解密 SMTP 附件;Linux 勒索用原始内存候选扫描 + magic 校验恢复 AES 密钥;删除分区用 testdisk 或 kpartx -av;ZFS 重建 label、Fletcher4 校验、PBKDF2 破解;BSON 用 bson 库重组;TrueCrypt 用 veracrypt --mount 或 cryptsetup open --type tcrypt;硬件信号(VGA/HDMI TMDS/DisplayPort、Voyager 音频、Saleae UART、Flipper Zero);视频中 Caps Lock LED 用 OpenCV 跟踪像素时长解摩斯;I2C 解码 SDA/SCL;IBM-29 打孔卡 OCR;USB HID 鼠标按绘制模式渲染位图(跳过抬笔、放大 5-8 倍);侧信道功耗按位置×猜测×轨迹×样本多维平均,找方差最大样本点选功率最大猜测;BMP 位平面 QR 用 NumPy 提取(常在 bit 1);图像拼图按边缘像素差贪心拼合;DeepSound 用 deepsound2john.py 提取哈希后 John 破解;曲面反射 QR 手动翻转去畸变并用已知明文前缀修正;音频 FFT 主频映射音名拼词;音频元数据八进制用 exiftool 注释下划线分隔八进制转 ASCII/base64;G-code 侧投影(XZ/YZ)显文字;Git 目录用 gitdumper.sh;KeePass v4 用 ivanmrsulja/keepass2john 或 keepass4brute,cewl 生成字典;跨通道多比特 LSB(R[0]、G[1]、B[2]);F5 JPEG 检测 ±1/±2 AC 系数比从 3:1 降到 1:1;PNG 未使用 PLTE 项红通道藏数据;键盘声学侧信道用 MFCC + KNN;TCP flag 隐蔽信道(6 位=0-63 编码 base64);Brotli 解压炸弹在 seam 处比对相邻块;Git reflog/fsck 用 git fsck --unreachable --no-reflogs 恢复 squash 孤儿对象;DNS 尾部字节(0x30/0x31)按 8 位 MSB 优先转 ASCII;假 TLS + mDNS 密钥 + 可打印字符合并;种子像素置换 + 多位平面 QR;BTRFS 快照用 mount -o subvol=@backup;JPEG XL TOC 置换按截断偏移测收敛顺序;Kitty 终端图形协议 ESC_G 去转义拼接解压;ANSI 转义序列隐写剥离转义与非 ASCII;自动立体图复制层差分混合水平位移约 100px;两层字节+行交错先偶奇字节再偶奇行;SMB RID 回收用 Guest + LSARPC LsaLookupSids 递增 RID;Timeroasting 用 MS-SNTP 提取 HMAC-MD5 后 hashcat -m 31300;Android 用 adb pull + apktool 查 shared_prefs 与 SQLite;Docker 容器用 docker save 分层查删除文件与 docker history --no-trunc;云存储用 list-object-versions 恢复删除对象;APFS 快照用 icat 不同 XID 读 inode;Windows KAPE 从 PowerShell 历史→Amcache→MFT→注册表 hive;WordPerfect 宏 XOR 公式 (a+b)-2*(a&b);TLS 主密钥从 coredump 中会话 ID 前 48 字节提取;损坏 git blob 逐字节暴力(256×文件大小)用 git hash-object 校验;PCAP 分卷归档按 Apache 目录时间戳排序拼接;视频帧累积(逐像素最大)显 QR;反转音频用 sox reverse;多流视频容器用 ffprobe 枚举、ffmpeg -map 0:1 提取;FAT16 空闲簇(FAT 项=0x0000)读数据区;FAT16 删除文件用 fls -r -d 与 icat;ext2 孤儿 inode 用 e2fsck -y 重连 /lost+found 或 debugfs lsdel;Linux input_event 24 字节结构过滤 type==1、value==1 映射 keycode;VBA 宏 CByte((val-78)/3) 转 ELF 字节(用 Python 重写勿运行宏);RGB 奇偶(R+G+B 偶=白奇=黑)渲染位图;PDF 未引用对象加入 /Kids 并递增 /Count 重渲染;Arnold's Cat Map 迭代至周期(整除 3*N);Python 内存源码用 pyrasite-shell 附加后 uncompyle6/pycdc 反编译并 dump globals();HFS+ 资源叉用 HFSExplorer + 010 Editor 模板提取 extent;WAV 中 UART 方波按波特率解析起始/停止位 LSB 优先;高分辨率 SSTV 用 arccos + 微分手动 FM 解调;损坏 ZIP 修复 Local File Header 偏移 26 与 Central Directory 偏移 28 的文件名长度,或暴力 raw deflate;SQLite diff 表重放 insert/remove 重建每个中间状态;MJPEG 在 FFD9 后附加字节按 FFD8 分割提取;USB MIDI Launchpad 按 key=row*16+col 映射 8x8 网格重建。
- SMB RID 回收(Midnight 2026):过滤 dcerpc.cn_bind_to_str contains lsarpc,分析 Guest 认证后 LSARPC LsaLookupSids 的递增 RID 枚举 AD 账户。
- Timeroasting(Midnight 2026):tshark -r capture.pcapng -Y "ntp && ip.src == <DC_IP>" -T fields -e udp.payload 提取 NTP 载荷,转 hashcat 格式后 hashcat -m 31300 -a 0 -O hashes.txt rockyou.txt --username 破解。
- HTTP 外传:tshark --export-objects http,/tmp/objects 直接导出上传文件,检查 multipart POST、异常 User-Agent、含 flag 文本的图片。
- 常见编码:echo "base64string" | base64 -d;echo "hexstring" | xxd -r -p;ROT13 用 tr 'A-Za-z' 'N-ZA-Mn-za-m';ROT18 = 字母 ROT13 + 数字 ROT5,常为多层取证末层。
- 当题目转向 RSA/AES/格密码时切到 /ctf-crypto;指向恶意软件暂存/beacon 配置/加壳样本切到 /ctf-malware;是 Web 应用备份或 API dump 且剩余为应用逻辑切到 /ctf-web;实为编码谜题/隐写/冷门格式切到 /ctf-misc;需溯源基础设施或公开记录切到 /ctf-osint;恢复物为需反汇编的二进制或固件切到 /ctf-reverse。
适用边界 · 注意事项
- 题目核心已变成纯密码学(RSA、AES、格)而非取证时应改用 /ctf-crypto。
- 证据实为恶意软件暂存、beacon 配置提取或加壳样本时应改用 /ctf-malware。
- 恢复物是需反汇编分析的编译二进制或固件时应改用 /ctf-reverse。