| name | sleuth-kit |
| description | Auth/lab ref: CLI file-system forensics toolkit for analyzing disk images (.dd/.img/.E01/.vmdk). |
| license | IPL-1.0 |
| compatibility | Linux/macOS/Windows; sleuthkit.org. |
| metadata | {"author":"AeonDave","version":"2.0"} |
The Sleuth Kit (TSK)
Scriptable CLI disk forensics — partitions, file systems, deleted file recovery, timeline generation.
Installation
sudo apt install sleuthkit
brew install sleuthkit
mmls --version
Core Commands Overview
| Command | Purpose |
|---|
mmls | List partitions / volume layout |
fsstat | File system metadata and geometry |
fls | List files and directories (including deleted) |
istat | Inode metadata for a specific file |
icat | Extract file content by inode number |
ils | List inodes |
blkcat | Dump raw data blocks |
blkls | List unallocated blocks |
blkstat | Stats on a specific block |
tsk_recover | Bulk recover deleted files |
tsk_gettimes | Extract MACB timestamps |
mactime | Build timeline from bodyfile |
img_stat | Image format info |
sigfind | Find block signatures (file carving assist) |
Step 1: Partition Layout
mmls disk.img
Sector size is usually 512 bytes. Offset in bytes = Start_sector × 512.
Step 2: File System Info
fsstat -o 2048 disk.img
Step 3: List Files (including deleted)
fls -r -o 2048 disk.img
fls -r -o 2048 disk.img | grep "^\*"
fls -r -o 2048 disk.img | grep -v "^\*"
fls -r -p -o 2048 disk.img
fls -r -o 2048 disk.img | grep -i "flag\|secret\|password\|\.txt\|\.docx"
fls -o 2048 disk.img 2
fls -o 2048 disk.img 5
Output format:
r/r 12: filename.txt (r = regular file, allocated)
r/r * 13: deleted.txt (* = deleted, may be recoverable)
d/d 14: dirname/ (d = directory)
Step 4: Extract Files by Inode
icat -o 2048 disk.img 12 > recovered_file.txt
icat -o 2048 disk.img 13 > deleted_recovered.txt
icat -o 2048 disk.img 12 | strings -n 6
icat -o 2048 disk.img 12 | file -
icat -o 2048 disk.img 12 | xxd | head -20
Step 5: Inode Metadata
istat -o 2048 disk.img 12
Step 6: Bulk File Recovery
tsk_recover -o 2048 disk.img recovered_files/
tsk_recover -a -o 2048 disk.img all_files/
tsk_recover -o 2048 -e disk.img recovered_files/
Step 7: Timeline Generation
fls -r -m / -o 2048 disk.img > bodyfile.txt
mactime -b bodyfile.txt > timeline.txt
mactime -b bodyfile.txt -d 2024-01-01 -D 2024-12-31 > timeline_2024.txt
sort -t'|' -k1 timeline.txt | head -50
grep "2024-03-15" timeline.txt
Bodyfile format (mactime compatible):
MD5|name|inode|mode_as_string|UID|GID|size|atime|mtime|ctime|crtime
NTFS-Specific Tricks
fls -o 2048 disk.img | grep "::"
icat -o 2048 disk.img <inode>:<stream_name>
icat -o 2048 disk.img 34:hidden > ads_content.bin
ils -o 2048 disk.img | head -20
icat -o 2048 disk.img 0 > MFT.raw
Searching Raw Blocks
blkls -o 2048 disk.img | strings | grep -i flag
blkls -a -o 2048 disk.img | strings | grep -i "password\|key\|flag"
sigfind -b 512 89504E47 disk.img
blkcat -o 2048 disk.img 1234 | xxd | head -30
Common Challenge Workflows
Find flag in disk image
mmls disk.img
fls -r -o 2048 disk.img | grep -i "flag\|\.txt\|secret"
icat -o 2048 disk.img <INODE> > flag.txt
cat flag.txt
Recover deleted file
fls -r -o 2048 disk.img | grep "^\* "
icat -o 2048 disk.img 42 > recovered.txt
tsk_recover -o 2048 disk.img recovered/
ls -la recovered/
Find hidden file in unallocated space
sigfind -b 512 FFD8FF disk.img
sigfind -b 512 89504E47 disk.img
sigfind -b 512 504B0304 disk.img
blkls -o 2048 disk.img | strings -n 8 | grep -iE "flag|CTF|secret|pass"
Build timeline and find anomalous activity
fls -r -m / -o 2048 disk.img > bodyfile.txt
mactime -b bodyfile.txt > timeline.txt
grep "interesting_date" timeline.txt
Multiple partition image
mmls disk.img
fsstat -o 2048 disk.img
fsstat -o 1026048 disk.img
fls -r -o 2048 disk.img
fls -r -o 1026048 disk.img
Integration
| Tool | Use case |
|---|
autopsy | GUI front-end over TSK for visual investigation |
volatility3 | Memory analysis after disk artifacts identified |
file / xxd | Identify and inspect extracted files |
binwalk | Carve embedded files from extracted binaries |
foremost / scalpel | File carving from raw image blocks |
strings | Quick scan of extracted file content |
Resources
| File | When to load |
|---|
references/ | Offset calculation guide, NTFS ADS tricks, carving recipes |