domenica 2 gennaio 2011

sfdumper e iterazioni multiple

sfdumper è un ottimo programma scritto interamente come script shell per il recupero selettivo di file da una immagine (anche raw) di un disco o di una partizione, e fa parte della toolbox per l'analisi forense dei sistemi digitali. Durante il suo utilizzo ho notato che, nel caso di iterazioni ripetute sulla stessa immagine, i file eliminati non sono relativi al tipo della ricerca in corso, ma contengono l'intera lista dei file già trovati nei passaggi precedenti. Sembra quasi che i file eliminati siano tenuti in una lista in solo append. Per evitare il problema, il seguente semplice script shell lanciato con un solo parametro che è la directory contenitore dei dati recuperati permette di eliminare i file cancellati ed erroneamenti recuperati multiple volte dentro a directory che dovrebbe contenere file di altro tipo.

#!/bin/bash

# controllo parametri
if [ $# -le 0 ]
then
    echo "Usage: $0 "
    exit 1
fi

# si entra nella directory di partenza per il recupero
cd $1

ERASED=0

for d in *
do

    # salto tutto cio' che non e' una directory
    if [ ! -d "$d" ]
 then
 echo "Salto la non directory $d"
 continue
    fi

    DIR_NAME="$d"

    # salto le directory speciali TMP e report
    if [ "$DIR_NAME" == "tmp" -o "$DIR_NAME" == "report" ]
 then
 echo "Salto le directory speciali ($DIR_NAME)"
 continue
    fi

    FILE_TYPE=`echo $DIR_NAME | awk -F '_' '{print $2;}' `
    echo "Entro in $DIR_NAME per eliminare i file che non sono $FILE_TYPE"
    cd "$DIR_NAME"

    for d2 in *
    do
 if [ -d "$d2" ]
 then
     cd $d2

     for f in *
     do
  if [ -f $f ] 
  then
      
      case $f in
   *${FILE_TYPE}) ;;
   *)  echo "Cancellazione di $f da $DIR_NAME"
       rm $f
       ERASED=$(( ERASED + 1 ))
       ;;
      esac
  fi
     done
     
     cd ..
 fi
    done
    cd ..

done

echo "File eliminati $ERASED"

Nessun commento: