1# -*- coding: UTF-8 -*- 2""" 3module vinutils.py 4----------------------------------------------------------------------------- 5 6 Vinetto : a forensics tool to examine Thumbs.db files 7 Copyright (C) 2005, 2006 by Michel Roukine 8 9This file is part of Vinetto. 10 11 Vinetto is free software; you can redistribute it and/or 12 modify it under the terms of the GNU General Public License as published 13 by the Free Software Foundation; either version 2 of the License, or (at 14 your option) any later version. 15 16 Vinetto is distributed in the hope that it will be 17 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 General Public License for more details. 20 21 You should have received a copy of the GNU General Public License along 22 with the vinetto package; if not, write to the Free Software 23 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 24 25----------------------------------------------------------------------------- 26""" 27 28__revision__ = "$Revision: 47 $" 29__version__ = "0.01" 30__author__ = 'Michel Roukine' 31 32Catalog = {} 33catIndxOutOfSeqFlag = False 34iCatPrec = None 35 36TNStreams = {} 37tnStreamOutOfSeqFlag = False 38iTnsPrec = None 39 40 41def catIndxOutOfSeq(): 42 """Return catIndxOutOfSeqFlag value. """ 43 return catIndxOutOfSeqFlag 44 45 46def tnStreamOutOfSeq(): 47 """Return tnStreamOutOfSeqFlag value. """ 48 return tnStreamOutOfSeqFlag 49 50 51def addCatEntry (iCat, timestamp, TNname): 52 """Add a new Catalog entry. """ 53 global catIndxOutOfSeqFlag, iCatPrec 54 if iCatPrec != None: 55 if iCat != (iCatPrec + 1) : 56 catIndxOutOfSeqFlag = True 57 58 if Catalog.has_key(iCat): 59 Catalog[iCat].append((timestamp, TNname)) 60 else: 61 Catalog[iCat] = [(timestamp, TNname)] 62 63 iCatPrec = iCat 64 return 65 66 67def addTNStream (iTN, vType, filename): 68 """Add new thumbnail stream references. """ 69 global tnStreamOutOfSeqFlag, iTnsPrec 70 if iTnsPrec != None: 71 if iTN != (iTnsPrec + 1) : 72 tnStreamOutOfSeqFlag = True 73 74 if TNStreams.has_key(iTN): 75 TNStreams[iTN].append((vType, filename)) 76 else: 77 TNStreams[iTN] = [(vType, filename)] 78 79 iTnsPrec = iTN 80 return 81 82 83def nbCatEnt (): 84 """Return number of Catalog entry. """ 85 nb = 0 86 for k in Catalog: 87 nb += len(Catalog[k]) 88 return nb 89 90 91def nbTNstr (*vt): 92 """Return number of extracted/unextracted thumbnails. """ 93 nb = 0 94 if len(vt) == 0: 95 for k in TNStreams: 96 nb += len(TNStreams[k]) 97 return nb 98 else : 99 nb = 0 100 for k in TNStreams: 101 for (vType, filename) in TNStreams[k]: 102 if vt[0] == vType : 103 nb += 1 104 return nb 105 106 107def extractStats(outputdir): 108 """Return extraction statistics. """ 109 extr = {"1":0, "2":0} 110 unextr = {"1":0, "2":0} 111 statstring = "" 112 odstr = "" 113 if outputdir != None: 114 odstr = " to " + outputdir 115 116 for k in TNStreams: 117 for (vType, filename) in TNStreams[k]: 118 if filename == "" : 119 unextr[vType] += 1 120 else: 121 extr[vType] += 1 122 123 for vt in extr: 124 if extr[vt] > 0: 125 statstring += str(extr[vt]) + " Type " + vt + \ 126 " thumbnails extracted" + odstr + "\n" 127 128 for vt in unextr: 129 if unextr[vt] > 0: 130 statstring += str(unextr[vt]) + " Type " + vt + \ 131 " thumbnails unextracted" + odstr + "\n" 132 return statstring 133 134 135def getCatEntry(iCat): 136 """Return iCat Catalog entry. """ 137 if Catalog.has_key(iCat): 138 return Catalog[iCat] 139 return [] 140 141 142def fincrement (filename): 143 """ Compute next "valid" filename for a given SID. """ 144 if filename.find("_") < 0: 145 return filename + "_1" 146 else: 147 i = int(filename[filename.find('_') + 1:]) 148 return filename[:filename.find('_') + 1] + str(i + 1) 149 150 151def TNfname(SIDstr, vType): 152 """ Compute filenames for thumbnails. """ 153 computedfn = SIDstr 154 k = int(SIDstr) 155 if TNStreams.has_key(k): 156 # duplicate index numbers 157 for (vtyp, filename) in TNStreams[k]: 158 if computedfn == filename: 159 computedfn = fincrement (filename) 160 addTNStream(k, vType, computedfn) 161 return computedfn 162