Aller au contenu

Vinetto

Vinetto is a specialized digital forensics tool designed to extract and analyze thumbnail data from Windows Thumbs.db files. When Windows creates thumbnails for image browsing, it caches this data in Thumbs.db files which can persist even after the original images are deleted. Forensic investigators use Vinetto to recover deleted image thumbnails, extract metadata, and reconstruct browsing history. The tool is valuable for digital investigations, evidence recovery, and determining user activity on compromised systems.

Note: Use only in authorized forensic investigations. Unauthorized data recovery may violate privacy and computer abuse laws.

# Debian/Ubuntu
sudo apt-get update
sudo apt-get install vinetto

# Kali Linux (pre-installed)
vinetto --version

# Install from source
git clone https://github.com/marcocustureri/vinetto
cd vinetto
chmod +x vinetto.py
# Install Python dependencies
sudo apt-get install python3 python3-pip

# Required modules
pip3 install pillow

# Clone and setup
git clone https://github.com/marcocustureri/vinetto.git
cd vinetto
chmod +x vinetto.py

# Run with Python
python3 vinetto.py --help
# Homebrew
brew install vinetto

# From source
git clone https://github.com/marcocustureri/vinetto
cd vinetto
chmod +x vinetto.py
python3 vinetto.py
CommandDescription
vinetto Thumbs.dbExtract thumbnails from Thumbs.db
vinetto -o output/ Thumbs.dbOutput to specific directory
vinetto -p prefix Thumbs.dbAdd prefix to extracted images
vinetto --helpDisplay help information
# Extract thumbnails from Thumbs.db
vinetto Thumbs.db

# Output files created:
# thumbs_*.jpg (extracted thumbnail images)
# thumbs_*.html (index with metadata)
# thumbs_*.txt (text metadata)
# Specify output directory
vinetto -o ./extracted/ Thumbs.db

# Create output directory if needed
mkdir -p forensic_output
vinetto -o forensic_output/ Thumbs.db

# Verify extraction
ls -la forensic_output/
file forensic_output/thumbs_*
# Add custom prefix to output files
vinetto -p "evidence" Thumbs.db
# Output: evidence_*.jpg, evidence_*.html, evidence_*.txt

# Date-stamped prefix for case management
CASE_ID=$(date +%Y%m%d_%H%M%S)
vinetto -p "case_${CASE_ID}" Thumbs.db
# Extract with detailed metadata
vinetto -o output/ Thumbs.db

# Generated files contain:
# - Original file paths
# - File modification dates
# - Image dimensions
# - Thumbnail creation times
# - Hash values
# Review extracted metadata
cat output/thumbs_*.txt | head -50

# Search for specific filenames
grep -i "photo\|image\|document" output/thumbs_*.txt

# Find by date
grep "2024" output/thumbs_*.txt | head -20
# Vinetto generates HTML report
vinetto -o forensic_output/ Thumbs.db

# Open HTML report in browser
firefox forensic_output/thumbs_*.html
# or
open forensic_output/thumbs_*.html  # macOS

# Report contains clickable thumbnails with metadata
# Mount Windows drive (read-only recommended)
sudo mount -o ro /dev/sdX1 /mnt/windows

# Locate Thumbs.db files
find /mnt/windows -name "Thumbs.db" -type f

# Preserve evidence integrity
cp /mnt/windows/path/Thumbs.db ./evidence/Thumbs.db.bak
sha256sum /mnt/windows/path/Thumbs.db > Thumbs.db.sha256
#!/bin/bash
# Extract thumbnails from all Thumbs.db files

THUMBS_FILES=$(find /mnt/windows -name "Thumbs.db" -type f)
CASE_DIR="./forensic_case_$(date +%Y%m%d)"

mkdir -p "$CASE_DIR"

for thumbs_file in $THUMBS_FILES; do
  DIR_PATH=$(dirname "$thumbs_file")
  SAFE_PATH=$(echo "$DIR_PATH" | tr '/' '_')
  
  echo "Processing: $thumbs_file"
  vinetto -o "$CASE_DIR/$SAFE_PATH" "$thumbs_file"
done

echo "Extraction complete: $CASE_DIR"
# Create timeline from extracted metadata
vinetto -o output/ Thumbs.db

# Extract timestamps
grep -h "^Date:\|^Modified:" output/thumbs_*.txt | sort

# Correlate with access logs
cat output/thumbs_*.txt | grep -oE "[0-9]{4}-[0-9]{2}-[0-9]{2}" | sort | uniq -c

# Generate investigative timeline
grep "^Path:" output/thumbs_*.txt | sort
# Extract original file paths from thumbnails
vinetto -o output/ Thumbs.db

# Review file paths
grep "^Path:" output/thumbs_*.txt

# Identify user documents
grep "Documents\|Desktop\|Downloads" output/thumbs_*.txt

# Check hidden directories
grep "AppData\|ProgramData\|\$Recycle" output/thumbs_*.txt
# Thumbs.db can contain deleted image thumbnails
vinetto Thumbs.db

# Cross-reference with file system
ls -la /mnt/windows/path/

# Deleted files still have thumbnails
# But original files are gone
# Indicates user image deletion
# Extract all timestamps
vinetto -o output/ Thumbs.db

# Analyze timeline
grep "^Date:\|^Modified:\|^Created:" output/thumbs_*.txt | \
  sort -k2,2 | \
  sed 's/^[^:]*: //' > timeline.txt

# Detect timeline gaps or anomalies
cat timeline.txt
#!/bin/bash
# Batch extract multiple Thumbs.db files

CASE_NUMBER="2024-001"
CASE_DIR="case_${CASE_NUMBER}_thumbs"

mkdir -p "$CASE_DIR"

# Find all Thumbs.db in mounted evidence drive
for db_file in $(find /evidence -name "Thumbs.db" 2>/dev/null); do
  # Create unique output directory per source
  relative_path=$(dirname "$db_file" | sed 's/.*evidence\///')
  output_dir="$CASE_DIR/$(echo $relative_path | tr '/' '_')"
  
  mkdir -p "$output_dir"
  
  echo "Processing: $db_file"
  vinetto -o "$output_dir" "$db_file"
  
  # Verify extraction
  if [ -f "$output_dir/thumbs_*.jpg" ]; then
    echo "SUCCESS: $db_file extracted"
  else
    echo "FAILED: $db_file extraction"
  fi
done

# Summary
echo "Total Thumbs.db processed: $(find "$CASE_DIR" -name "*.html" | wc -l)"
#!/bin/bash
# Archive forensic extraction results

CASE_DIR="case_2024-001_thumbs"
ARCHIVE_DATE=$(date +%Y%m%d_%H%M%S)

# Create evidence archive
tar -czf "${CASE_DIR}_${ARCHIVE_DATE}.tar.gz" "$CASE_DIR"

# Generate hash for integrity
sha256sum "${CASE_DIR}_${ARCHIVE_DATE}.tar.gz" > "${CASE_DIR}_${ARCHIVE_DATE}.sha256"

# Create case summary
cat > "${CASE_DIR}_summary.txt" <<EOF
Case: $CASE_DIR
Date: $(date)
Archive: ${CASE_DIR}_${ARCHIVE_DATE}.tar.gz
Hash: $(cat ${CASE_DIR}_${ARCHIVE_DATE}.sha256)
Thumbnails Extracted: $(find $CASE_DIR -name "*.jpg" | wc -l)
EOF

echo "Archive complete"
# Open HTML report with thumbnails
vinetto -o output/ evidence/Thumbs.db

# Review in web browser
firefox output/thumbs_*.html

# Allows for:
# - Visual identification of images
# - Metadata correlation
# - Timeline reconstruction
# - User activity assessment
# Search extracted metadata for keywords
vinetto -o output/ Thumbs.db

# Search for specific paths
grep -i "confidential\|secret\|private" output/thumbs_*.txt

# Find by file type
grep -i "\.doc\|\.xls\|\.pdf" output/thumbs_*.txt

# Timeline queries
grep "2024-03" output/thumbs_*.txt
# Examine extracted thumbnail images
vinetto -o output/ Thumbs.db

# List all extracted images
ls -lah output/thumbs_*.jpg

# View thumbnail characteristics
file output/thumbs_*.jpg

# Get image dimensions
identify output/thumbs_*.jpg

# Compare thumbnails for similarity
compare output/thumbs_1.jpg output/thumbs_2.jpg output/diff.jpg
# Read-only mount of evidence
sudo mount -o ro /dev/sdX1 /mnt/evidence

# Hash original Thumbs.db
sha256sum /mnt/evidence/Thumbs.db > Thumbs.db.sha256

# Create forensic copy
dd if=/mnt/evidence/Thumbs.db of=./Thumbs.db.forensic bs=4M

# Verify copy integrity
sha256sum -c Thumbs.db.sha256
# Create forensic case log
cat > case_log.txt <<EOF
Case Number: 2024-001
Examiner: [Name]
Date: $(date)
Equipment: $(uname -a)

Evidence Item: Thumbs.db
Source Path: /mnt/windows/Users/Username/AppData/Local/Microsoft/Windows/Explorer
Original Hash: $(sha256sum /mnt/windows/path/Thumbs.db | awk '{print $1}')
Copy Hash: $(sha256sum ./Thumbs.db | awk '{print $1}')

Extraction Method: Vinetto
Output Location: ./forensic_output/
Extraction Date: $(date)

Total Thumbnails: $(find forensic_output -name "*.jpg" | wc -l)
Date Range: [earliest to latest]
Significant Findings:
- [Finding 1]
- [Finding 2]

Authentication:
Examiner: [Signature]
Date: $(date)
EOF

cat case_log.txt
# Extract evidence for import into EnCase/FTK
vinetto -o evidence_export/ Thumbs.db

# Create case files
tar -czf case_evidence.tar evidence_export/

# Generate MD5 hash for validation
md5sum case_evidence.tar > case_evidence.md5

# Import into forensic workstation
# Use EnCase: Add evidence -> Import external format
# Generate SuperTimeline format
vinetto -o output/ Thumbs.db

# Extract timeline data
cat output/thumbs_*.txt | \
  grep "^Date:\|^Path:" | \
  awk '{print NR, $0}' > timeline_data.txt

# Process for timeline analysis tool
# mactime, Autopsy, or SANS timeline formats
# Check Python dependencies
python3 -c "import PIL; print('PIL available')"

# Verify Thumbs.db file
file Thumbs.db

# Check file permissions
ls -la Thumbs.db

# Try explicit output directory
mkdir -p output
vinetto -o output/ Thumbs.db
# Monitor disk space for large Thumbs.db
du -sh Thumbs.db
df -h

# Process with verbose output
python3 vinetto.py -o output/ Thumbs.db

# Check for partial extraction
find output/ -name "*.jpg" | wc -l
# Handle non-ASCII filenames
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

# Extract with encoding handling
vinetto Thumbs.db

# Review metadata with encoding
file output/thumbs_*.txt
hexdump -C output/thumbs_*.txt | head -20
# Write blockers for forensic imaging
sudo dcfldd if=/dev/sdX of=evidence.img

# Verify integrity
sha256sum evidence.img > evidence.img.sha256

# Document chain of custody
echo "Evidence acquired: $(date)" >> case.log
echo "Hash: $(cat evidence.img.sha256)" >> case.log
# Comprehensive case file structure
case_2024_001/
├── evidence/
   ├── Thumbs.db.original
   ├── Thumbs.db.original.sha256
   └── forensic_copy/
├── extraction/
   ├── output/
   └── thumbs_*.{jpg,html,txt}
├── analysis/
   ├── timeline.txt
   ├── findings.txt
   └── report.md
└── documentation/
    ├── case_log.txt
    ├── chain_of_custody.txt
    └── examiner_notes.txt
# Generate forensic examination report
cat > forensic_report.md <<EOF
# Forensic Examination Report
## Case: 2024-001
## Examiner: [Name]
## Date: $(date)

### Evidence Summary
- Source: Windows Thumbs.db
- Location: [original path]
- Original Hash: [SHA256]
- Copy Verified: Yes

### Findings
- Total Thumbnails Extracted: [number]
- Date Range: [earliest - latest]
- User Activity Indicators: [summary]
- Deleted File Evidence: [summary]

### Timeline
[Key events extracted from thumbnail dates]

### Conclusion
[Forensic findings and significance]

### Chain of Custody
[Complete documentation]
EOF

cat forensic_report.md

Vinetto is legitimate for:

  • Court-authorized forensic investigations
  • Corporate incident response
  • Law enforcement digital forensics
  • Authorized security assessments
  • Compliance investigations

Always ensure:

  • Proper legal authorization
  • Documented chain of custody
  • Examiner qualifications
  • Case documentation
  • Professional standards compliance
  • Privacy law compliance

Use only in authorized forensic investigations with proper documentation and legal authority.