diff --git a/dbfp.py b/dbfp.py index 853d2b4..9a71173 100644 --- a/dbfp.py +++ b/dbfp.py @@ -6,9 +6,9 @@ import argparse import logging from subprocess import Popen, PIPE, check_call # our libs -from libs import fingerprint from libs import android from libs.toolbox import ToolBox +from libs.fingerprint import FingerprintDB from libs.fingerprint_index import FingerprintIndex BASE_DIR = "data" @@ -20,22 +20,16 @@ def main(): logging.basicConfig(level=logging.DEBUG) parseArgs() -# -def compareFingerprintDir(filein, fpdir): - db = fingerprint.FingerprintDB() - fp = FingerprintIndex() - fp.openIndex() - # def compareFingerprint(filein, filejson): - db = fingerprint.FingerprintDB() + db = FingerprintDB() db.scanDBFile(filein) percent = db.compareDB(filejson) print "Percent match: {}".format(str(percent)) # def createFingerprint(filein, verbose, app_name, app_ver, notes): - db = fingerprint.FingerprintDB() + db = FingerprintDB() retVal = db.scanDBFile(filein) if (retVal > 0): if verbose: @@ -50,6 +44,18 @@ def createFingerprint(filein, verbose, app_name, app_ver, notes): else: print db.getErrorString(retVal) +# +def indexFingerprints(fp_dir): + logging.info("fp_dir=={}".format(fp_dir)) + db = FingerprintDB() + fp = FingerprintIndex() + fp.openIndex(fp_dir) + +# +def compareFingerprintDir(file_in, fp_dir): + db = FingerprintDB() + fp = FingerprintIndex() + # def androidPull(): ap = android.AndroidAppPull() @@ -133,10 +139,11 @@ def parseArgs(): parser.add_argument('-fd', '--fpdir', required=False, help="path to directory of fingerprint files") parser.add_argument('-fp', '--fingerprint', required=False, help="fingerprint file to use in comparison") parser.add_argument('-dd', '--data_dir', required=False, help="path to a directory with sqlite files") + parser.add_argument('-idx', '--index_fingerprints', required=False, help="path to a directory with sqlite files") parser.add_argument('-an', '--app_name', required=False) parser.add_argument('-av', '--app_version', required=False) parser.add_argument('-n', '--notes', required=False) - parser.add_argument('-pull', '--pull', required=False, action='store_true', help="automated physical ") + parser.add_argument('-pull', required=False, action='store_true', help="automated pull of applications from a physical android phone") parser.add_argument('-v', '--verbose', action='store_true') # parser.add_argument('-t', '--title', required=False) args = parser.parse_args() @@ -147,6 +154,8 @@ def parseArgs(): compareFingerprintDir(args.file, args.fpdir) elif (args.data_dir): androidData(args.data_dir) + elif (args.index_fingerprints): + indexFingerprints(args.index_fingerprints) elif (args.pull): androidPull() elif (args.file): diff --git a/libs/android.py b/libs/android.py index 6726015..9e65fe5 100644 --- a/libs/android.py +++ b/libs/android.py @@ -47,7 +47,7 @@ class AndroidAppPull: stdout, stderr = process.communicate() return stdout, stderr - + # def isADBRoot(self): retval = False process = Popen(["adb", "root"], stdout=PIPE, stderr=PIPE) diff --git a/libs/fingerprint_index.py b/libs/fingerprint_index.py index 3a2db0c..bfb5fd5 100644 --- a/libs/fingerprint_index.py +++ b/libs/fingerprint_index.py @@ -7,6 +7,7 @@ import os import sys import logging import sqlite3 as sql +from libs.exceptions import FingerprintIndexWrite from libs.fingerprint import FingerprintDB # prefixed with "_" so that it will be listed first and visible @@ -23,20 +24,25 @@ class FingerprintIndex: self.db_conn = None return - def openIndex(self, fpdir): - fq_fpidx = fpdir + os.path.sep + INDEX_FILENAME + # + def openIndex(self, fp_dir): + fq_fpidx = fp_dir + os.path.sep + INDEX_FILENAME try: if (os.path.isfile(fq_fpidx)): self.db_conn = sql.connect(fq_fpidx) + logging.info("DB Open SUCCESSFUL") except: self.db_conn = None logging.info("No index file found, creating index now...") - # create the Index file, also populate it with entrieds from the fingerprint - self.creatIndex(fpdir) + try: + # create the Index file, also populate it with entrieds from the fingerprint + self.createIndex(fp_dir) + except: + logging.info("ERROR: issue creating the index file") # - def createIndex(self, fpdir): - fq_fpidx = fpdir + os.path.sep + INDEX_FILENAME + def createIndex(self, fp_dir): + fq_fpidx = fp_dir + os.path.sep + INDEX_FILENAME try: self.db_conn = sql.connect(fq_fpidx) self.db_conn.execute(''' @@ -46,28 +52,26 @@ class FingerprintIndex: file_name TEXT); ''') logging.info("Successfully created index table") - except: - logging.error("Error creating index table") finally: if self.db_conn: self.db_conn.close() self.db_conn = None raise FingerprintIndexWrite("Error creating an index file") - self.__populateIndex(fpdir) + self.__populateIndex(fp_dir) - def __populateIndex(self, fpdir): + def __populateIndex(self, fp_dir): # # read each file, pull md5, add row to database failCount = 0 finCount = 0 try: db = FingerprintDB() - files = os.listdir(fpdir) + files = os.listdir(fp_dir) for file in Files: try: - fq_file = fpdir + os.path.sep + file + fq_file = fp_dir + os.path.sep + file dbht = db.importJsonIndex(fq_file) md5_all = __createMD5Index(dbht)