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
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):

View File

@ -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)

View File

@ -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...")
try:
# create the Index file, also populate it with entrieds from the fingerprint
self.creatIndex(fpdir)
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)