NEW: added new command line switch "-idx" for the index

This commit is contained in:
JohnE 2015-12-03 11:06:37 -08:00
parent c91a0f74dd
commit 0465d31781
3 changed files with 36 additions and 23 deletions

29
dbfp.py
View File

@ -6,9 +6,9 @@ import argparse
import logging import logging
from subprocess import Popen, PIPE, check_call from subprocess import Popen, PIPE, check_call
# our libs # our libs
from libs import fingerprint
from libs import android from libs import android
from libs.toolbox import ToolBox from libs.toolbox import ToolBox
from libs.fingerprint import FingerprintDB
from libs.fingerprint_index import FingerprintIndex from libs.fingerprint_index import FingerprintIndex
BASE_DIR = "data" BASE_DIR = "data"
@ -20,22 +20,16 @@ def main():
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
parseArgs() parseArgs()
#
def compareFingerprintDir(filein, fpdir):
db = fingerprint.FingerprintDB()
fp = FingerprintIndex()
fp.openIndex()
# #
def compareFingerprint(filein, filejson): def compareFingerprint(filein, filejson):
db = fingerprint.FingerprintDB() db = FingerprintDB()
db.scanDBFile(filein) db.scanDBFile(filein)
percent = db.compareDB(filejson) percent = db.compareDB(filejson)
print "Percent match: {}".format(str(percent)) print "Percent match: {}".format(str(percent))
# #
def createFingerprint(filein, verbose, app_name, app_ver, notes): def createFingerprint(filein, verbose, app_name, app_ver, notes):
db = fingerprint.FingerprintDB() db = FingerprintDB()
retVal = db.scanDBFile(filein) retVal = db.scanDBFile(filein)
if (retVal > 0): if (retVal > 0):
if verbose: if verbose:
@ -50,6 +44,18 @@ def createFingerprint(filein, verbose, app_name, app_ver, notes):
else: else:
print db.getErrorString(retVal) 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(): def androidPull():
ap = android.AndroidAppPull() 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('-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('-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('-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('-an', '--app_name', required=False)
parser.add_argument('-av', '--app_version', required=False) parser.add_argument('-av', '--app_version', required=False)
parser.add_argument('-n', '--notes', 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('-v', '--verbose', action='store_true')
# parser.add_argument('-t', '--title', required=False) # parser.add_argument('-t', '--title', required=False)
args = parser.parse_args() args = parser.parse_args()
@ -147,6 +154,8 @@ def parseArgs():
compareFingerprintDir(args.file, args.fpdir) compareFingerprintDir(args.file, args.fpdir)
elif (args.data_dir): elif (args.data_dir):
androidData(args.data_dir) androidData(args.data_dir)
elif (args.index_fingerprints):
indexFingerprints(args.index_fingerprints)
elif (args.pull): elif (args.pull):
androidPull() androidPull()
elif (args.file): elif (args.file):

View File

@ -47,7 +47,7 @@ class AndroidAppPull:
stdout, stderr = process.communicate() stdout, stderr = process.communicate()
return stdout, stderr return stdout, stderr
#
def isADBRoot(self): def isADBRoot(self):
retval = False retval = False
process = Popen(["adb", "root"], stdout=PIPE, stderr=PIPE) process = Popen(["adb", "root"], stdout=PIPE, stderr=PIPE)

View File

@ -7,6 +7,7 @@ import os
import sys import sys
import logging import logging
import sqlite3 as sql import sqlite3 as sql
from libs.exceptions import FingerprintIndexWrite
from libs.fingerprint import FingerprintDB from libs.fingerprint import FingerprintDB
# prefixed with "_" so that it will be listed first and visible # prefixed with "_" so that it will be listed first and visible
@ -23,20 +24,25 @@ class FingerprintIndex:
self.db_conn = None self.db_conn = None
return 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: try:
if (os.path.isfile(fq_fpidx)): if (os.path.isfile(fq_fpidx)):
self.db_conn = sql.connect(fq_fpidx) self.db_conn = sql.connect(fq_fpidx)
logging.info("DB Open SUCCESSFUL")
except: except:
self.db_conn = None self.db_conn = None
logging.info("No index file found, creating index now...") logging.info("No index file found, creating index now...")
# create the Index file, also populate it with entrieds from the fingerprint try:
self.creatIndex(fpdir) # 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): def createIndex(self, fp_dir):
fq_fpidx = fpdir + os.path.sep + INDEX_FILENAME fq_fpidx = fp_dir + os.path.sep + INDEX_FILENAME
try: try:
self.db_conn = sql.connect(fq_fpidx) self.db_conn = sql.connect(fq_fpidx)
self.db_conn.execute(''' self.db_conn.execute('''
@ -46,28 +52,26 @@ class FingerprintIndex:
file_name TEXT); file_name TEXT);
''') ''')
logging.info("Successfully created index table") logging.info("Successfully created index table")
except:
logging.error("Error creating index table")
finally: finally:
if self.db_conn: if self.db_conn:
self.db_conn.close() self.db_conn.close()
self.db_conn = None self.db_conn = None
raise FingerprintIndexWrite("Error creating an index file") 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 # read each file, pull md5, add row to database
failCount = 0 failCount = 0
finCount = 0 finCount = 0
try: try:
db = FingerprintDB() db = FingerprintDB()
files = os.listdir(fpdir) files = os.listdir(fp_dir)
for file in Files: for file in Files:
try: try:
fq_file = fpdir + os.path.sep + file fq_file = fp_dir + os.path.sep + file
dbht = db.importJsonIndex(fq_file) dbht = db.importJsonIndex(fq_file)
md5_all = __createMD5Index(dbht) md5_all = __createMD5Index(dbht)