Compare commits
No commits in common. "master" and "fpsave" have entirely different histories.
|
@ -1,7 +1,3 @@
|
||||||
# project excludes
|
|
||||||
tests/
|
|
||||||
var/
|
|
||||||
|
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.py[cod]
|
||||||
|
@ -20,6 +16,7 @@ lib/
|
||||||
lib64/
|
lib64/
|
||||||
parts/
|
parts/
|
||||||
sdist/
|
sdist/
|
||||||
|
var/
|
||||||
*.egg-info/
|
*.egg-info/
|
||||||
.installed.cfg
|
.installed.cfg
|
||||||
*.egg
|
*.egg
|
||||||
|
|
110
README.rst
110
README.rst
|
@ -1,110 +0,0 @@
|
||||||
==============
|
|
||||||
DB Fingerprint
|
|
||||||
==============
|
|
||||||
|
|
||||||
|
|
||||||
-------------
|
|
||||||
INTRO
|
|
||||||
-------------
|
|
||||||
::
|
|
||||||
|
|
||||||
[D]ata[B]ase [F]inger[P]rint
|
|
||||||
|
|
||||||
dbfp is a tool that will scan a sqlite database and generate a fingerprint.
|
|
||||||
The fingerprint will uniquely identify the database.
|
|
||||||
The fingerprint consists of the database schema, the sql table create statements,
|
|
||||||
md5 calculations, and file meta-data.
|
|
||||||
The fingerprint is stored to disk in JSON format.
|
|
||||||
|
|
||||||
The fingerprint can be used to identify unknown databases from random paths or recovered from deleted space.
|
|
||||||
The fingerprint can be used for historical comparisons to see what has changed in a new version of an application.
|
|
||||||
|
|
||||||
|
|
||||||
-------------
|
|
||||||
FEATURES
|
|
||||||
-------------
|
|
||||||
* Generate a fingerprint in JSON format.
|
|
||||||
* Compare a sqlite database with a fingerprint.
|
|
||||||
* Rip all apps from an Android phone and create fingerprints for all SQLite databases
|
|
||||||
* Lightning fast fingerprint comparison
|
|
||||||
- creates an index of fingerprints
|
|
||||||
- query the index for quick fingerprint comparison
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
USAGE
|
|
||||||
-----
|
|
||||||
::
|
|
||||||
|
|
||||||
Create fingerprings from given path
|
|
||||||
find <db_files_path> -exec python dbfp.py -db {} \;
|
|
||||||
|
|
||||||
Attempt to fingerprint all files with *.db
|
|
||||||
find . -type f -name "*.db" -exec python dbfp.py -db {} \;
|
|
||||||
|
|
||||||
Attempt to fingerprint all files, recursively, from this path (no error if file not database)
|
|
||||||
find . -type f -exec python dbfp.py -db {} \;
|
|
||||||
|
|
||||||
|
|
||||||
***** ***** ***** *****
|
|
||||||
DB Fingerprint
|
|
||||||
***** ***** ***** *****
|
|
||||||
|
|
||||||
Create fingerprint:
|
|
||||||
dbfp.py -db <database_file>
|
|
||||||
|
|
||||||
Create fingerprint index:
|
|
||||||
dbfp.py -fd <fingerprint_dir> -idx
|
|
||||||
|
|
||||||
Add fingerprint to index:
|
|
||||||
dbfp.py -fp <fingerprint_file> -idx (-db <database_file> | -fp <fingerprint_file>)
|
|
||||||
|
|
||||||
Compare fingerprint to a database file:
|
|
||||||
dbfp.py -fp <fingerprint_file> -db <database_file>
|
|
||||||
|
|
||||||
Lookup fingerprint from index:
|
|
||||||
dbfp.py -fd <fingerprint_dir> -fp <fingerprint_file>)
|
|
||||||
|
|
||||||
Lookup database from index:
|
|
||||||
dbfp.py -fd <fingerprint_dir> -db <database_file>
|
|
||||||
|
|
||||||
Lookup MD5 hash from index:
|
|
||||||
dbfp.py -fd <fingerprint_dir> -md5 <md5_hash_string>
|
|
||||||
|
|
||||||
Android App pull and fingerprint:
|
|
||||||
dbfp.py -android_pull
|
|
||||||
|
|
||||||
***** ***** ***** *****
|
|
||||||
|
|
||||||
usage: dbfp.py [-h] [-db DATABASE] [-fd FPDIR] [-fp FINGERPRINT]
|
|
||||||
[-ad ANDROID_DIR] [-dd DATA_DIR] [-an APP_NAME]
|
|
||||||
[-av APP_VERSION] [-n NOTES] [-idx] [-md5 MD5] [-android_pull]
|
|
||||||
[-v] [-vv] [-l]
|
|
||||||
|
|
||||||
Fingerprint a sqlite database based on its schema
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-db DATABASE, --database DATABASE
|
|
||||||
path to file to be fingerprinted
|
|
||||||
-fd FPDIR, --fpdir FPDIR
|
|
||||||
path to directory of fingerprint files, compare each
|
|
||||||
file
|
|
||||||
-fp FINGERPRINT, --fingerprint FINGERPRINT
|
|
||||||
fingerprint file to use in comparison
|
|
||||||
-ad ANDROID_DIR, --android_dir ANDROID_DIR
|
|
||||||
path to a directory with android folder structure
|
|
||||||
sqlite files
|
|
||||||
-dd DATA_DIR, --data_dir DATA_DIR
|
|
||||||
path to a directory to search for sqlite files
|
|
||||||
-an APP_NAME, --app_name APP_NAME
|
|
||||||
-av APP_VERSION, --app_version APP_VERSION
|
|
||||||
-n NOTES, --notes NOTES
|
|
||||||
-idx add a fingerprint to the index
|
|
||||||
-md5 MD5 md5 hash to query the index`
|
|
||||||
-android_pull automated pull of applications from a physical android
|
|
||||||
phone
|
|
||||||
-v, --verbose will set logging level to INFO
|
|
||||||
-vv, --vverbose will set logging level to DEBUG
|
|
||||||
-l, --logging will supercede the -v option and send all logging to a
|
|
||||||
file, logging.DEBUG
|
|
63
dbfp.py
63
dbfp.py
|
@ -60,19 +60,18 @@ def indexFingerprints(fp_dir):
|
||||||
print ex
|
print ex
|
||||||
|
|
||||||
#
|
#
|
||||||
def compareFPIndex(fp_dir, db_in, json_in):
|
def compareFingerprintDir(file_in, fp_dir):
|
||||||
try:
|
try:
|
||||||
db = FingerprintDB()
|
db = FingerprintDB()
|
||||||
if (db_in):
|
db.scanDBFile(file_in)
|
||||||
db.scanDBFile(db_in)
|
|
||||||
else:
|
logging.info("MD5 DB == {}".format(db.getMD5DB()))
|
||||||
db.importJson(json_in)
|
logging.info("MD5 TB == {}".format(db.getMD5Tables()))
|
||||||
|
|
||||||
fp = FingerprintIndex()
|
fp = FingerprintIndex()
|
||||||
fp.openIndex(fp_dir)
|
fp.openIndex(fp_dir)
|
||||||
|
|
||||||
# search for fingerprints with exact database match
|
# search for fingerprints with exact database match
|
||||||
logging.info("Searching for MD5 DB: {}".format(db.getMD5DB()))
|
|
||||||
fp_ret = fp.findFP(db.getMD5DB())
|
fp_ret = fp.findFP(db.getMD5DB())
|
||||||
if (fp_ret):
|
if (fp_ret):
|
||||||
print "Database matche(s) found"
|
print "Database matche(s) found"
|
||||||
|
@ -82,16 +81,21 @@ def compareFPIndex(fp_dir, db_in, json_in):
|
||||||
print fp
|
print fp
|
||||||
# search for fingerprints with similar tables
|
# search for fingerprints with similar tables
|
||||||
else:
|
else:
|
||||||
print "[ Table percent match: ]"
|
|
||||||
logging.info("Searching for md5 tables: {}".format(db.getMD5Tables()))
|
logging.info("Searching for md5 tables: {}".format(db.getMD5Tables()))
|
||||||
fp_list = fp.findFPTables(db.getMD5Tables().values())
|
fp_list = fp.findFPTables(db.getMD5Tables())
|
||||||
|
results = []
|
||||||
for fp in fp_list:
|
for fp in fp_list:
|
||||||
fq_fp = fp_dir + os.path.sep + fp[0]
|
fq_fp = fp_dir + os.path.sep + fp
|
||||||
logging.info("Comparing fingerprint: {}".format(fq_fp))
|
print "[ OPEN fingerprint ] [ {} ]".format(fq_fp)
|
||||||
percent = db.compareDB(fq_fp)
|
percent = db.compareDB(fq_fp)
|
||||||
print "{:2.2f}%: {}".format(percent, fp[0])
|
results.append(percent)
|
||||||
|
|
||||||
|
print "Table matche(s) found"
|
||||||
|
print "RESULTS: {}".format(results)
|
||||||
|
results.sort()
|
||||||
|
print "RESULTS: {}".format(results)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print "ERROR: error occured while comparing fingerprint"
|
print "Error comparing fingerprint"
|
||||||
print ex
|
print ex
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -150,7 +154,7 @@ def queryMD5(fp_dir, md5_db):
|
||||||
try:
|
try:
|
||||||
fp = FingerprintIndex()
|
fp = FingerprintIndex()
|
||||||
fp.openIndex(fp_dir)
|
fp.openIndex(fp_dir)
|
||||||
results = fp.queryAppDetails(md5_db)
|
results = fp.queryMetadata(md5_db)
|
||||||
for row in results:
|
for row in results:
|
||||||
print "[{}]\nDB: {}\nFP: {}\nDate: {}\n".format(row[0], row[2], row[3], row[4])
|
print "[{}]\nDB: {}\nFP: {}\nDate: {}\n".format(row[0], row[2], row[3], row[4])
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
|
@ -225,12 +229,12 @@ def parseArgs():
|
||||||
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('-ad', '--android_dir', required=False, help="path to a directory with android folder structure sqlite files")
|
parser.add_argument('-ad', '--android_dir', required=False, help="path to a directory with android folder structure sqlite files")
|
||||||
parser.add_argument('-dd', '--data_dir', required=False, help="path to a directory to search for sqlite files")
|
parser.add_argument('-dd', '--data_dir', required=False, help="path to a directory to search for sqlite files")
|
||||||
# parser.add_argument('-idx', '--index_fingerprints', required=False, help="path to a directory with sqlite files, index fingerprints if no other args given")
|
parser.add_argument('-idx', '--index_fingerprints', required=False, help="path to a directory with sqlite files, index fingerprints if no other args given")
|
||||||
|
parser.add_argument('-md5', required=False, help="md5 hash to query the index`")
|
||||||
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('-idx', action='store_true', help="add a fingerprint to the index")
|
parser.add_argument('-idxf', action='store_true', help="add a fingerprint to the index")
|
||||||
parser.add_argument('-md5', required=False, help="md5 hash to query the index`")
|
|
||||||
parser.add_argument('-android_pull', action='store_true', help="automated pull of applications from a physical android phone")
|
parser.add_argument('-android_pull', action='store_true', help="automated pull of applications from a physical android phone")
|
||||||
parser.add_argument('-v', '--verbose', action='store_true', help="will set logging level to INFO")
|
parser.add_argument('-v', '--verbose', action='store_true', help="will set logging level to INFO")
|
||||||
parser.add_argument('-vv', '--vverbose', action='store_true', help="will set logging level to DEBUG")
|
parser.add_argument('-vv', '--vverbose', action='store_true', help="will set logging level to DEBUG")
|
||||||
|
@ -248,40 +252,23 @@ def parseArgs():
|
||||||
else:
|
else:
|
||||||
logging.basicConfig(level=logging.CRITICAL)
|
logging.basicConfig(level=logging.CRITICAL)
|
||||||
|
|
||||||
if args.fpdir and args.idx and (args.database or args.fingerprint):
|
if args.idxf and args.fpdir and (args.database or args.fingerprint):
|
||||||
insertFP(args.database, args.fingerprint, args.fpdir)
|
insertFP(args.database, args.fingerprint, args.fpdir)
|
||||||
elif args.fpdir and args.idx:
|
|
||||||
indexFingerprints(args.fpdir)
|
|
||||||
elif (args.database and args.fingerprint):
|
elif (args.database and args.fingerprint):
|
||||||
compareFingerprint(args.database, args.fingerprint)
|
compareFingerprint(args.database, args.fingerprint)
|
||||||
elif (args.fpdir and (args.database or args.fingerprint)):
|
elif (args.database and args.fpdir):
|
||||||
compareFPIndex(args.fpdir, args.database, args.fingerprint)
|
compareFingerprintDir(args.database, args.fpdir)
|
||||||
elif (args.fpdir and args.md5):
|
elif (args.fpdir and args.md5):
|
||||||
queryMD5(args.fpdir, args.md5)
|
queryMD5(args.fpdir, args.md5)
|
||||||
elif (args.android_dir):
|
elif (args.android_dir):
|
||||||
androidData(args.android_dir)
|
androidData(args.android_dir)
|
||||||
|
elif (args.index_fingerprints):
|
||||||
|
indexFingerprints(args.index_fingerprints)
|
||||||
elif (args.android_pull):
|
elif (args.android_pull):
|
||||||
androidPull()
|
androidPull()
|
||||||
elif (args.database):
|
elif (args.database):
|
||||||
createFingerprint(args.database, args.app_name, args.app_version, args.notes)
|
createFingerprint(args.database, args.app_name, args.app_version, args.notes)
|
||||||
else:
|
else:
|
||||||
print 'Create fingerprint:'
|
|
||||||
print ' dbfp.py -db <database_file>\n'
|
|
||||||
print 'Create fingerprint index:'
|
|
||||||
print ' dbfp.py -fd <fingerprint_dir> -idx\n'
|
|
||||||
print 'Add fingerprint to index:'
|
|
||||||
print ' dbfp.py -fp <fingerprint_file> -idx (-db <database_file> | -fp <fingerprint_file>)\n'
|
|
||||||
print 'Compare fingerprint to a database file:'
|
|
||||||
print ' dbfp.py -fp <fingerprint_file> -db <database_file>\n'
|
|
||||||
print 'Lookup fingerprint from index:'
|
|
||||||
print ' dbfp.py -fd <fingerprint_dir> -fp <fingerprint_file>)\n'
|
|
||||||
print 'Lookup database from index:'
|
|
||||||
print ' dbfp.py -fd <fingerprint_dir> -db <database_file>\n'
|
|
||||||
print 'Lookup MD5 hash from index:'
|
|
||||||
print ' dbfp.py -fd <fingerprint_dir> -md5 <md5_hash_string>\n'
|
|
||||||
print 'Android App pull and fingerprint:'
|
|
||||||
print ' dbfp.py -android_pull'
|
|
||||||
print '\n***** ***** ***** *****\n'
|
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
|
||||||
|
JSON Fingerprint Format Design
|
||||||
|
|
||||||
|
|
||||||
|
Fingerprint Naming Convention
|
||||||
|
Fully Qualified Domain App Name + "__" + database name + "__" + "dbfp.json"
|
||||||
|
|
||||||
|
|
||||||
|
JSON File Format:
|
||||||
|
|
||||||
|
1. "_file-metadata": has information regarding how this fingerprint was created
|
||||||
|
|
||||||
|
2. "db-metadata": contains the sql create statements for each table in the database
|
||||||
|
|
||||||
|
3. "db-metadata-hashes": contains the md5 hashes of each create statement (for quicker comparisons of fingerprints)
|
||||||
|
|
||||||
|
4. "table": is the database schema in a hash format to be loaded into the fingerprint program
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
==================
|
||||||
|
DB Fingerprint
|
||||||
|
==================
|
||||||
|
|
||||||
|
|
||||||
|
-------------
|
||||||
|
INTRO
|
||||||
|
-------------
|
||||||
|
[D]ata[B]ase [F]inger[P]rint
|
||||||
|
|
||||||
|
dbfp is a tool that will scan a sqlite database and generate a fingerprint.
|
||||||
|
The fingerprint will uniquely identify the database.
|
||||||
|
The fingerprint consists of the database schema, the sql table create statements,
|
||||||
|
md5 calculations, and file meta-data.
|
||||||
|
The fingerprint is stored to disk in JSON format.
|
||||||
|
|
||||||
|
The fingerprint can be used to identify unknown databases from random paths or recovered from deleted space.
|
||||||
|
The fingerprint can be used for historical comparisons to see what has changed in a new version of an application.
|
||||||
|
|
||||||
|
|
||||||
|
-------------
|
||||||
|
FEATURES
|
||||||
|
-------------
|
||||||
|
1. Generate a fingerprint in JSON format.
|
||||||
|
2. Compare a sqlite database with a fingerprint.
|
||||||
|
3. Rip all apps from an Android phone and create fingerprints for all SQLite databases
|
||||||
|
4. Lightning fast fingerprint comparison
|
||||||
|
a. creates an index of fingerprints
|
||||||
|
b. query the index for quick fingerprint comparison
|
||||||
|
|
||||||
|
|
||||||
|
-------------
|
||||||
|
USAGE
|
||||||
|
-------------
|
||||||
|
|
||||||
|
***** ***** ***** *****
|
||||||
|
DB Fingerprint
|
||||||
|
***** ***** ***** *****
|
||||||
|
|
||||||
|
usage: dbfp.py [-h] [-db DATABASE] [-fd FPDIR] [-fp FINGERPRINT]
|
||||||
|
[-ad ANDROID_DIR] [-dd DATA_DIR] [-idx INDEX_FINGERPRINTS]
|
||||||
|
[-md5 MD5] [-an APP_NAME] [-av APP_VERSION] [-n NOTES] [-idxf]
|
||||||
|
[-android_pull] [-v] [-vv] [-l]
|
||||||
|
|
||||||
|
Fingerprint a sqlite database based on its schema
|
||||||
|
|
||||||
|
optional arguments:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-db DATABASE, --database DATABASE
|
||||||
|
path to file to be fingerprinted
|
||||||
|
-fd FPDIR, --fpdir FPDIR
|
||||||
|
path to directory of fingerprint files
|
||||||
|
-fp FINGERPRINT, --fingerprint FINGERPRINT
|
||||||
|
fingerprint file to use in comparison
|
||||||
|
-ad ANDROID_DIR, --android_dir ANDROID_DIR
|
||||||
|
path to a directory with android folder structure
|
||||||
|
sqlite files
|
||||||
|
-dd DATA_DIR, --data_dir DATA_DIR
|
||||||
|
path to a directory to search for sqlite files
|
||||||
|
-idx INDEX_FINGERPRINTS, --index_fingerprints INDEX_FINGERPRINTS
|
||||||
|
path to a directory with sqlite files
|
||||||
|
-md5 MD5 md5 hash to query the index`
|
||||||
|
-an APP_NAME, --app_name APP_NAME
|
||||||
|
-av APP_VERSION, --app_version APP_VERSION
|
||||||
|
-n NOTES, --notes NOTES
|
||||||
|
-idxf add a fingerprint to the index
|
||||||
|
-android_pull automated pull of applications from a physical android
|
||||||
|
phone
|
||||||
|
-v, --verbose will set logging level to INFO
|
||||||
|
-vv, --vverbose will set logging level to DEBUG
|
||||||
|
-l, --logging will supercede the -v option and send all logging to a
|
||||||
|
file, logging.DEBUG
|
|
@ -0,0 +1,30 @@
|
||||||
|
=====================
|
||||||
|
Fingerprint Index
|
||||||
|
=====================
|
||||||
|
|
||||||
|
-------------
|
||||||
|
INTRO
|
||||||
|
-------------
|
||||||
|
Why:
|
||||||
|
The purpose of the database fingerprint index is for speed and quick statistics. The
|
||||||
|
current number of fingerprints that I have created is ~ 180. In the future it likely
|
||||||
|
that our fingerprints will be > 1000. The index is designed for the future.
|
||||||
|
|
||||||
|
Where:
|
||||||
|
A sqlite database (_index_dbfp.db) is populated with index data. The current design
|
||||||
|
expects the index file to be located in the same directory as all the fingerprints.
|
||||||
|
|
||||||
|
How:
|
||||||
|
To create the index each fingerprint is read and unique hash values are inserted
|
||||||
|
into the index database along with the fingerprint file name. The current design
|
||||||
|
expects all fingerprint files to be in one dirctory. The fingerprint names are
|
||||||
|
created uniquely and should never have a collision.
|
||||||
|
|
||||||
|
|
||||||
|
-------------------
|
||||||
|
INDEX DB SCHEMA
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
The
|
||||||
|
|
||||||
|
|
|
@ -1,110 +0,0 @@
|
||||||
=========================
|
|
||||||
Fingerprint Design Doc
|
|
||||||
==========================
|
|
||||||
|
|
||||||
|
|
||||||
-----------------------
|
|
||||||
FINGERPRINT DESIGN
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
Fingerprint Naming Convention
|
|
||||||
Fully Qualified Domain App Name + "__" + database name + "__" + "dbfp.json"
|
|
||||||
|
|
||||||
|
|
||||||
--------------------------
|
|
||||||
JSON FINGERPRINT FORMAT
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
[ _file-details ]
|
|
||||||
contains information regarding how and where this fingerprint was created:
|
|
||||||
|
|
||||||
"app-name": name of the application, usually reverse dns is best identifier
|
|
||||||
"app-ver": version of the application at the time of this scan
|
|
||||||
"db-name": name of the database
|
|
||||||
"format-ver": fingerprint format version, this is helpful for major revisions
|
|
||||||
"notes": any notes to be included with this fingerprint
|
|
||||||
"scan-date": time stamp of the database scan and fingerprint creation
|
|
||||||
"scanner-name": name of the fingerprint scanner tool (to be future proof)
|
|
||||||
"scanner-ver": version of the fingerprint scanner tool used to create this fingerprint
|
|
||||||
|
|
||||||
|
|
||||||
[ db-metadata ]
|
|
||||||
contains the exact create table strings, most create table strings are unique
|
|
||||||
|
|
||||||
[ db-metadata-hashes ]
|
|
||||||
contains hashing of the create table stings
|
|
||||||
|
|
||||||
[ tables ]
|
|
||||||
each table schema in a normalized (hash table) data type
|
|
||||||
|
|
||||||
|
|
||||||
-------------
|
|
||||||
EXAMPLE
|
|
||||||
-------------
|
|
||||||
|
|
||||||
{
|
|
||||||
"_file-details": {
|
|
||||||
"app-name": "cm.confide.android",
|
|
||||||
"app-ver": "",
|
|
||||||
"db-name": "confide.db",
|
|
||||||
"format-ver": "0.92",
|
|
||||||
"notes": "",
|
|
||||||
"scan-date": "2016-02-29_161058",
|
|
||||||
"scanner-name": "dbfp",
|
|
||||||
"scanner-ver": "1.00b"
|
|
||||||
},
|
|
||||||
"db-metadata": {
|
|
||||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
|
||||||
"contacts": "CREATE TABLE contacts ( _id INTEGER PRIMARY KEY AUTOINCREMENT, userId INTEGER, firstName TEXT, lastName TEXT, signupDate DATETIME, verified BOOLEAN, email TEXT, phone TEXT )",
|
|
||||||
"sqlite_sequence": "CREATE TABLE sqlite_sequence(name,seq)"
|
|
||||||
},
|
|
||||||
"db-metadata-hashes": {
|
|
||||||
"android_metadata": "ba739eb03730e563915f2f76b26ced51",
|
|
||||||
"contacts": "3aaf8eb3bc00f3cf562b368341d4b84f",
|
|
||||||
"sqlite_sequence": "079355c84d8b3b1511a504e08aab7fd2"
|
|
||||||
},
|
|
||||||
"db-metadata-md5": "6ae62dd33c30775996db15fb90d2f99f",
|
|
||||||
"tables": {
|
|
||||||
"android_metadata": {
|
|
||||||
"locale": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"contacts": {
|
|
||||||
"_id": {
|
|
||||||
"autoincrement": true,
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"email": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"firstName": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"lastName": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"phone": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"signupDate": {
|
|
||||||
"datatype": "DATETIME"
|
|
||||||
},
|
|
||||||
"userId": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"verified": {
|
|
||||||
"datatype": "BOOLEAN"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sqlite_sequence": {
|
|
||||||
"name": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"seq": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,60 +0,0 @@
|
||||||
=====================
|
|
||||||
Fingerprint Index
|
|
||||||
=====================
|
|
||||||
|
|
||||||
-------------
|
|
||||||
INTRO
|
|
||||||
-------------
|
|
||||||
Why:
|
|
||||||
The purpose of the database fingerprint index is for speed and quick statistics. The
|
|
||||||
current number of fingerprints that I have created is ~ 180. In the future it likely
|
|
||||||
that our fingerprints will be > 1000. The index is designed for the future.
|
|
||||||
|
|
||||||
Where:
|
|
||||||
A sqlite database (_index_dbfp.db) is populated with index data. The current design
|
|
||||||
expects the index file to be located in the same directory as all the fingerprints.
|
|
||||||
The fingerprint names are created uniquely and should never have a collision.
|
|
||||||
|
|
||||||
How:
|
|
||||||
To create the index each fingerprint is read and the unique hash values are inserted
|
|
||||||
into the index database along with the fingerprint file name. Each fingerprint has
|
|
||||||
an md5 hash that represent the entire database along with a md5 hash that represents
|
|
||||||
each table in the database. These md5 hashes are used as unique keys that can be
|
|
||||||
queried in the fingerprint index.
|
|
||||||
|
|
||||||
|
|
||||||
----------
|
|
||||||
DESIGN
|
|
||||||
----------
|
|
||||||
Each create statement can be unique because of the various styles allowed, syntax
|
|
||||||
The result from the create statements are the same...
|
|
||||||
The create statments are md5 hashed, those md5 hashes are hashed for db_md5
|
|
||||||
|
|
||||||
|
|
||||||
-------------
|
|
||||||
DB SCHEMA
|
|
||||||
-------------
|
|
||||||
|
|
||||||
[ Table: md5_all ]
|
|
||||||
md5_db TEXT PRIMARY KEY, (hash value of the database schema)
|
|
||||||
md5_list TEXT, (CSV list of md5 hash of tables within the database)
|
|
||||||
fp_list TEXT, (CSV list of fingerprint file names)
|
|
||||||
fp_count INTEGER); (count of the fingerprints)
|
|
||||||
|
|
||||||
|
|
||||||
[ Table: md5_table ]
|
|
||||||
md5_table TEXT PRIMARY KEY, (hash value of the table schema)
|
|
||||||
fp_list TEXT, (CVS list of fingerprint file names)
|
|
||||||
fp_count INTEGER); (count of the fingerprints)
|
|
||||||
|
|
||||||
*
|
|
||||||
* The md5_db is not a primary key, is not unique because it is for each app info
|
|
||||||
*
|
|
||||||
[ Table: metadata ]
|
|
||||||
md5_db TEXT, (hash value of the database schema)
|
|
||||||
app_name TEXT, (name of the app)
|
|
||||||
app_ver TEXT, (version of the app)
|
|
||||||
db_file TEXT, (file name of the database scanned)
|
|
||||||
fp_file TEXT, (file name of the fingerprint)
|
|
||||||
scan_date TEXT); (date the db was scanned)
|
|
||||||
|
|
|
@ -9,16 +9,6 @@
|
||||||
History
|
History
|
||||||
------------
|
------------
|
||||||
|
|
||||||
version 1.00b
|
|
||||||
-NEW: added a new table in the index database that has app details (metadata)
|
|
||||||
-NEW: added documentation for the index database schema
|
|
||||||
-NEW: added documentation for the fingerprint format
|
|
||||||
-NEW: added new functions to query the metadata table
|
|
||||||
-MOD: improved the scanning of the database to be fingerprinted
|
|
||||||
-MOD: improved the compareFingerprintDir, split find fingerprint functions
|
|
||||||
-MOD: improved index creation with commit() and rollback()
|
|
||||||
-FIX: bug fix for the path parsing of the database file
|
|
||||||
|
|
||||||
version 0.98
|
version 0.98
|
||||||
-new feature: query for md5 hash
|
-new feature: query for md5 hash
|
||||||
-command switch "-md5 <hash_string>"
|
-command switch "-md5 <hash_string>"
|
||||||
|
|
|
@ -3,28 +3,12 @@
|
||||||
|
|
||||||
Action Items from the code review:
|
Action Items from the code review:
|
||||||
|
|
||||||
xx1) Change table name from "metadata" to "app_details"
|
|
||||||
|
|
||||||
xx1) Regression Testing of all Features
|
|
||||||
|
|
||||||
2) Unit Tests
|
|
||||||
a) create modified fingerprints for testing
|
|
||||||
b) select databases for testing
|
|
||||||
|
|
||||||
3) Documentation
|
|
||||||
|
|
||||||
4) Look at SQL statements parsing errors
|
|
||||||
|
|
||||||
xx5) Fingerprint compare feature
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
xx-Add function to query the index for a specific MD5 table (database schema)
|
xx-Add function to query the index for a specific MD5 table (database schema)
|
||||||
|
|
||||||
xx-Add a feature to add a fingerprint to the existing index (it currently recreates an index)
|
xx-Add a feature to add a fingerprint to the existing index (it currently recreates an index)
|
||||||
|
|
||||||
xx-Add a table to the Index to list all the applications that have a fingerprint (include the app version)
|
-Add a table to the Index to list all the applications that have a fingerprint (include the app version)
|
||||||
xx-more functionality can result from this information in the index
|
-more functionality can result from this information in the index
|
||||||
|
|
||||||
-Create a document describing the index file and include an example
|
-Create a document describing the index file and include an example
|
||||||
-Create an example of the FingerprintDB class usage with a standalone tool
|
-Create an example of the FingerprintDB class usage with a standalone tool
|
||||||
|
@ -34,6 +18,17 @@ Get App Version
|
||||||
http://stackoverflow.com/questions/11942762/get-application-version-name-using-adb
|
http://stackoverflow.com/questions/11942762/get-application-version-name-using-adb
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
com.google.android.gms__node.db
|
||||||
|
0b48447805d645966439e1b4042d2625
|
||||||
|
|
||||||
|
"sqlite_sequence": "079355c84d8b3b1511a504e08aab7fd2"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
more testing
|
||||||
|
|
||||||
|
|
||||||
[ Regression Testing ]
|
[ Regression Testing ]
|
||||||
android pull, data dir, comparison
|
android pull, data dir, comparison
|
||||||
|
|
||||||
|
|
|
@ -1,91 +0,0 @@
|
||||||
import argparse
|
|
||||||
import os
|
|
||||||
import sqlite3
|
|
||||||
|
|
||||||
from libs.fingerprint import FingerprintDB
|
|
||||||
from libs.fingerprint_index import FingerprintIndex
|
|
||||||
|
|
||||||
class FingerPrintCompare:
|
|
||||||
def __init__(self, db=None, fingerprint=None, fingerprint_dir=None, fingerprint_index=None, percent_match=85.0):
|
|
||||||
self.db = db
|
|
||||||
self.fingerprint = fingerprint
|
|
||||||
self.fingerprint_dir = fingerprint_dir
|
|
||||||
self.fingerprint_index = fingerprint_index
|
|
||||||
self.percent_match = float(percent_match)
|
|
||||||
|
|
||||||
def do_comparison(self):
|
|
||||||
|
|
||||||
status = 'fail'
|
|
||||||
|
|
||||||
if self.fingerprint:
|
|
||||||
status = self.compare_fingerprint(self.fingerprint)
|
|
||||||
elif self.fingerprint_dir:
|
|
||||||
for subdir, dirs, finger_print_files in os.walk(self.fingerprint_dir):
|
|
||||||
for finger_print_file in finger_print_files:
|
|
||||||
fingerprint = subdir + os.sep + finger_print_file
|
|
||||||
if fingerprint.endswith('.json'):
|
|
||||||
status = self.compare_fingerprint(fingerprint)
|
|
||||||
if status == 'success':
|
|
||||||
return status
|
|
||||||
elif self.fingerprint_index:
|
|
||||||
status = self.check_fingerprint_index(self.fingerprint_index)
|
|
||||||
|
|
||||||
return status
|
|
||||||
|
|
||||||
def compare_fingerprint(self, fingerprint):
|
|
||||||
|
|
||||||
db = FingerprintDB()
|
|
||||||
db.scanDBFile(self.db)
|
|
||||||
percent = db.compareDB(fingerprint)
|
|
||||||
print "Percent match: {}".format(str(percent))
|
|
||||||
if percent >= self.percent_match:
|
|
||||||
return 'success'
|
|
||||||
else:
|
|
||||||
return 'fail'
|
|
||||||
|
|
||||||
def check_fingerprint_index(self, fingerprint_index):
|
|
||||||
"""
|
|
||||||
Check if the database is in the index if it is not compare it against all fingerprints in the index
|
|
||||||
"""
|
|
||||||
db = FingerprintDB()
|
|
||||||
db.scanDBFile(self.db)
|
|
||||||
md5_db = db.getMD5DB()
|
|
||||||
conn = sqlite3.connect(fingerprint_index)
|
|
||||||
c = conn.cursor()
|
|
||||||
status = c.execute('SELECT EXISTS(SELECT 1 FROM md5_all WHERE md5_db = ' + '"{}" '.format(md5_db) + 'LIMIT 1)').fetchone()
|
|
||||||
if status == (1,):
|
|
||||||
return 'success'
|
|
||||||
else:
|
|
||||||
return self.compare_finger_print_index(db, fingerprint_index)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def compare_finger_print_index(db, fingerprint_index):
|
|
||||||
|
|
||||||
fp_index = FingerprintIndex()
|
|
||||||
fp_index.openIndex(fingerprint_index)
|
|
||||||
md5_db = db.getMD5DB()
|
|
||||||
md5_tables = db.getMD5Tables()
|
|
||||||
fp_list = fp_index.findFP(md5_db, md5_tables)
|
|
||||||
# for fp_index in fp_list:
|
|
||||||
# fq_fp = fp_dir + os.path.sep + fp_index
|
|
||||||
# print "[ OPEN fingerprint ] [ {} ]".format(fq_fp)
|
|
||||||
# percent = db.compareDB(fq_fp)
|
|
||||||
# print "Percent: {}".format(str(percent))
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
parser = argparse.ArgumentParser(description="Fingerprint a sqlite database based on its schema")
|
|
||||||
parser.add_argument('-db', '--database', default = None, help="path to file to be fingerprinted")
|
|
||||||
parser.add_argument('-fp', '--fingerprint', default = None, help="fingerprint file to use in comparison")
|
|
||||||
parser.add_argument('-fd', '--fpdir', default = None, help="path to directory of fingerprint files")
|
|
||||||
parser.add_argument('-idx', '--fingerprint_index', default = None, help="path to a fingerprint index")
|
|
||||||
parser.add_argument('-pm', '--percent_match', default = 85.0, help="acceptable percent match for passing condition")
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
if not (args.database and (args.fingerprint or args.fpdir or args.fingerprint_index)):
|
|
||||||
parser.error("Please provide a database to compare and some form of fingerprint."
|
|
||||||
"This tool accepts a fingerprint file, a directory of fingerprint files, or"
|
|
||||||
"a fingerprint index file")
|
|
||||||
|
|
||||||
fpc = FingerPrintCompare(args.database, args.fingerprint, args.fpdir, args.fingerprint_index, float(args.percent_match))
|
|
||||||
result = fpc.do_comparison()
|
|
||||||
print result
|
|
|
@ -36,7 +36,7 @@ class FingerprintDB:
|
||||||
|
|
||||||
sqlmaster = "SELECT name, sql FROM sqlite_master WHERE type='table'"
|
sqlmaster = "SELECT name, sql FROM sqlite_master WHERE type='table'"
|
||||||
# version of the scanner used to create the fingerprint
|
# version of the scanner used to create the fingerprint
|
||||||
scanner_ver = "1.00b"
|
scanner_ver = "0.98"
|
||||||
# version of the json file format, this # is inserted in the json fingerprint file and can be used to determine what is supported at the time of that version
|
# version of the json file format, this # is inserted in the json fingerprint file and can be used to determine what is supported at the time of that version
|
||||||
format_ver = "0.92"
|
format_ver = "0.92"
|
||||||
|
|
||||||
|
@ -50,13 +50,18 @@ class FingerprintDB:
|
||||||
self.table_hashes = None
|
self.table_hashes = None
|
||||||
self.filein = ""
|
self.filein = ""
|
||||||
self.init = False
|
self.init = False
|
||||||
# db file details
|
# fingerprint metadata
|
||||||
self.file_details = {}
|
self.metadata = {}
|
||||||
self.file_details['db-name'] = ""
|
self.metadata['db-name'] = ""
|
||||||
self.file_details['app-name'] = ""
|
self.metadata['app-name'] = ""
|
||||||
self.file_details['app-ver'] = ""
|
self.metadata['app-ver'] = ""
|
||||||
self.file_details['notes'] = ""
|
self.metadata['notes'] = ""
|
||||||
self.file_details['scan-date'] = ""
|
self.metadata['scan-date'] = ""
|
||||||
|
# self.db_name = ""
|
||||||
|
# self.app_name = ""
|
||||||
|
# self.app_ver = ""
|
||||||
|
# self.notes = ""
|
||||||
|
# self.scan_date = ""
|
||||||
|
|
||||||
#
|
#
|
||||||
def scanDBFile(self, filein):
|
def scanDBFile(self, filein):
|
||||||
|
@ -64,20 +69,22 @@ class FingerprintDB:
|
||||||
try:
|
try:
|
||||||
(self.conn, self.cur) = self.__openDB(filein)
|
(self.conn, self.cur) = self.__openDB(filein)
|
||||||
except Exception, ex:
|
except Exception, ex:
|
||||||
|
logging.info(ex)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# extract file name from path+filename
|
# extract file name from path+filename
|
||||||
self.file_details['db-name'] = os.path.basename(filein)
|
self.metadata['db-name'] = os.path.basename(filein)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
logging.warn(ex)
|
logging.error(ex)
|
||||||
self.file_details['db-name'] = filein
|
self.metadata['db-name'] = filein
|
||||||
try:
|
try:
|
||||||
# read database schema, parse the schema
|
# read database schema, parse the schema
|
||||||
self.__readDatabase()
|
self.__readDatabase()
|
||||||
# concat all the table create statements, then md5
|
# concat all the table create statements, then md5
|
||||||
self.__createMD5DB()
|
self.__createMD5DB()
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
|
logging.error(ex)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
# create and index of table hashes
|
# create and index of table hashes
|
||||||
|
@ -142,6 +149,7 @@ class FingerprintDB:
|
||||||
fp = FingerprintDB();
|
fp = FingerprintDB();
|
||||||
fp.__importJsonDBSchema(filejson)
|
fp.__importJsonDBSchema(filejson)
|
||||||
result = self.__DBSchemaCompare(fp)
|
result = self.__DBSchemaCompare(fp)
|
||||||
|
print "[ Percetage == %f]".format(result)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -163,7 +171,7 @@ class FingerprintDB:
|
||||||
dbmt = jsonData['db-metadata']
|
dbmt = jsonData['db-metadata']
|
||||||
dbht = jsonData['db-metadata-hashes']
|
dbht = jsonData['db-metadata-hashes']
|
||||||
dbmd5 = jsonData['db-metadata-md5']
|
dbmd5 = jsonData['db-metadata-md5']
|
||||||
metadata = jsonData['_file-details']
|
metadata = jsonData['_file-metadata']
|
||||||
|
|
||||||
all_tables = tb.keys()
|
all_tables = tb.keys()
|
||||||
for table_name in all_tables:
|
for table_name in all_tables:
|
||||||
|
@ -175,8 +183,7 @@ class FingerprintDB:
|
||||||
self.tables = tables
|
self.tables = tables
|
||||||
self.db_hash = dbmd5
|
self.db_hash = dbmd5
|
||||||
self.table_hashes = dbht
|
self.table_hashes = dbht
|
||||||
self.file_details = metadata
|
self.metadata = metadata
|
||||||
self.init = True
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
logging.error("ERROR: problem loading json file: \n{}\n{}".format(file_json, ex))
|
logging.error("ERROR: problem loading json file: \n{}\n{}".format(file_json, ex))
|
||||||
|
|
||||||
|
@ -191,35 +198,36 @@ class FingerprintDB:
|
||||||
# if exists, compare each field
|
# if exists, compare each field
|
||||||
# else, add to unknown tables...or do a fuzzy compare (look at number of fields, field names)
|
# else, add to unknown tables...or do a fuzzy compare (look at number of fields, field names)
|
||||||
diff_num = 0
|
diff_num = 0
|
||||||
diff_total = 0 # total number of different properties (from within a table)
|
diff_total = 0
|
||||||
all_total = 0 # total number of properties (from the entire database comparison)
|
all_total = 0
|
||||||
for tableName in fp.tables.keys():
|
for tableName in fp.tables.keys():
|
||||||
try:
|
try:
|
||||||
|
logging.info("[[ Comparing Table: " + tableName + " ]]")
|
||||||
table = self.tables[tableName]
|
table = self.tables[tableName]
|
||||||
if (table):
|
if (table):
|
||||||
logging.info("__DBMD5Compare:: hash1=={}, hash2=={}".format(fp.tables[tableName].hash(), table.hash()))
|
|
||||||
if not (fp.tables[tableName].hash() == table.hash()):
|
if not (fp.tables[tableName].hash() == table.hash()):
|
||||||
|
logging.info("*** Hash difference 1:{}!={}".format(fp.tables[tableName].hash(), table.hash()))
|
||||||
(total, diff_num) = self.__CompareTable(fp.tables[tableName], table)
|
(total, diff_num) = self.__CompareTable(fp.tables[tableName], table)
|
||||||
all_total += total
|
all_total += total
|
||||||
diff_total += diff_num
|
diff_total += diff_num
|
||||||
else:
|
else:
|
||||||
all_total += 10 # increment the total tables compared
|
all_total += 10
|
||||||
logging.info("__DBMD5Compare:: tableName=={} IDENTICAL".format(tableName))
|
logging.info("Table {} is IDENTICAL (to json fingerprint)".format(tableName))
|
||||||
# table found in only one database (fingerprint)
|
else:
|
||||||
|
self.__FuzzyTable()
|
||||||
except KeyError as ex:
|
except KeyError as ex:
|
||||||
# get the number of fields from the other table to add to the diff_total
|
# get the number of fields from the other table to add to the diff_total
|
||||||
logging.info("__DBMD5Compare:: tableName=={} NOT FOUND".format(tableName))
|
all_total += 10
|
||||||
diff_total += 10 # increment the total of different properties
|
diff_total += 10
|
||||||
all_total += 10 # increment the total tables compared
|
logging.info("Table {} not EXISTS (to json fingerprint)".format(tableName))
|
||||||
self.__FuzzyTable() # TODO: try to detect table name changes, look for same properties
|
|
||||||
|
|
||||||
logging.info("__DBMD5Compare:: all_total=={}, diff_total=={}".format(all_total, diff_total))
|
logging.info("diff_total=={}, all_total=={}".format(diff_total, all_total))
|
||||||
|
|
||||||
if (diff_total > 0):
|
if (diff_total > 0):
|
||||||
if (diff_total == all_total):
|
if (diff_total == all_total):
|
||||||
percentage = 0
|
percentage = 0
|
||||||
else:
|
else:
|
||||||
percentage = 100 * float(all_total-diff_total) / float(all_total)
|
percentage = float(diff_total / all_total)
|
||||||
else:
|
else:
|
||||||
percentage = 100
|
percentage = 100
|
||||||
return percentage
|
return percentage
|
||||||
|
@ -252,12 +260,10 @@ class FingerprintDB:
|
||||||
|
|
||||||
totals = prop_total_count + fields_total_count
|
totals = prop_total_count + fields_total_count
|
||||||
diff_total = prop_error_count + fields_diff_count
|
diff_total = prop_error_count + fields_diff_count
|
||||||
logging.info("__CompareTable:: prop_total_count=={}, fields_total_count=={}, totals=={}".format(prop_total_count, fields_total_count, totals))
|
|
||||||
logging.info("__CompareTable:: prop_error_count=={}, fields_diff_count=={}, diff_total=={}".format(prop_error_count, fields_diff_count, diff_total))
|
|
||||||
return (totals, diff_total)
|
return (totals, diff_total)
|
||||||
|
|
||||||
# look at un-identified tables and try to match fields by their properties
|
# look at un-identified tables and try to match fields by their properties
|
||||||
def __FuzzyTable(self):
|
def __FuzzyTable():
|
||||||
return
|
return
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -304,7 +310,7 @@ class FingerprintDB:
|
||||||
dmhash = {}
|
dmhash = {}
|
||||||
shash = {}
|
shash = {}
|
||||||
mhash = {}
|
mhash = {}
|
||||||
ahash['_file-details'] = mhash
|
ahash['_file-metadata'] = mhash
|
||||||
ahash['db-metadata'] = dmhash
|
ahash['db-metadata'] = dmhash
|
||||||
ahash['db-metadata-hashes'] = shash
|
ahash['db-metadata-hashes'] = shash
|
||||||
ahash['db-metadata-md5'] = None
|
ahash['db-metadata-md5'] = None
|
||||||
|
@ -319,10 +325,10 @@ class FingerprintDB:
|
||||||
mhash['format-ver'] = self.format_ver
|
mhash['format-ver'] = self.format_ver
|
||||||
mhash['scanner-ver'] = self.scanner_ver
|
mhash['scanner-ver'] = self.scanner_ver
|
||||||
mhash['scanner-name'] = 'dbfp'
|
mhash['scanner-name'] = 'dbfp'
|
||||||
mhash['db-name'] = self.file_details['db-name']
|
mhash['db-name'] = self.metadata['db-name']
|
||||||
mhash['app-name'] = self.file_details['app-name']
|
mhash['app-name'] = self.metadata['app-name']
|
||||||
mhash['app-ver'] = self.file_details['app-ver']
|
mhash['app-ver'] = self.metadata['app-ver']
|
||||||
mhash['notes'] = self.file_details['notes']
|
mhash['notes'] = self.metadata['notes']
|
||||||
|
|
||||||
# tables
|
# tables
|
||||||
tables = self.tables.keys()
|
tables = self.tables.keys()
|
||||||
|
@ -355,15 +361,15 @@ class FingerprintDB:
|
||||||
|
|
||||||
#
|
#
|
||||||
def setAppName(self, name):
|
def setAppName(self, name):
|
||||||
self.file_details['app-name'] = name
|
self.metadata['app-name'] = name
|
||||||
|
|
||||||
#
|
#
|
||||||
def setAppVer(self, version):
|
def setAppVer(self, version):
|
||||||
self.file_details['app-ver'] = version
|
self.metadata['app-ver'] = version
|
||||||
|
|
||||||
#
|
#
|
||||||
def setNotes(self, notes):
|
def setNotes(self, notes):
|
||||||
self.file_details['notes'] = notes
|
self.metadata['notes'] = notes
|
||||||
|
|
||||||
#
|
#
|
||||||
def getErrorString(self, errorCode):
|
def getErrorString(self, errorCode):
|
||||||
|
|
|
@ -8,7 +8,6 @@ import os
|
||||||
import sys
|
import sys
|
||||||
import logging
|
import logging
|
||||||
import sqlite3 as sql
|
import sqlite3 as sql
|
||||||
from operator import itemgetter
|
|
||||||
from libs.exceptions import FingerprintIndexWrite
|
from libs.exceptions import FingerprintIndexWrite
|
||||||
from libs.exceptions import FingerprintIndexOpen
|
from libs.exceptions import FingerprintIndexOpen
|
||||||
from libs.fingerprint import FingerprintDB
|
from libs.fingerprint import FingerprintDB
|
||||||
|
@ -81,25 +80,17 @@ class FingerprintIndex:
|
||||||
return rows
|
return rows
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# return an a sort array with the most likely fingerprints ordered first
|
# return an a list of json fingerprint files to open
|
||||||
def findFPTables(self, md5_tables):
|
def findFPTables(self, md5_tables):
|
||||||
retval = {}
|
retval = {}
|
||||||
for md5_table in md5_tables:
|
for md5_table in md5_tables:
|
||||||
logging.debug("findFPTables::md5_table=={}".format(md5_table))
|
|
||||||
rows = self.__qTableMD5(md5_table)
|
rows = self.__qTableMD5(md5_table)
|
||||||
for row in rows:
|
for row in rows:
|
||||||
logging.debug("findFPTables::row=={}\n".format(row[0]))
|
|
||||||
fp_list = row[0]
|
fp_list = row[0]
|
||||||
fps = fp_list.split(',')
|
fps = fp_list.split(',')
|
||||||
for fp in fps:
|
for fp in fps:
|
||||||
if (retval.has_key(fp)):
|
retval[fp] = 1
|
||||||
retval[fp] = retval[fp] + 1
|
return retval.keys()
|
||||||
else:
|
|
||||||
retval[fp] = 1
|
|
||||||
# logging.debug("findFPTables::retval=={}\n".format(retval))
|
|
||||||
retval_sorted = sorted(retval.items(), key=itemgetter(1), reverse=True)
|
|
||||||
# logging.debug("findFPTables::retval_sorted=={}\n".format(retval_sorted))
|
|
||||||
return retval_sorted
|
|
||||||
|
|
||||||
#
|
#
|
||||||
def findDB(self, md5_db):
|
def findDB(self, md5_db):
|
||||||
|
@ -107,8 +98,8 @@ class FingerprintIndex:
|
||||||
return rows
|
return rows
|
||||||
|
|
||||||
#
|
#
|
||||||
def queryAppDetails(self, md5_db):
|
def queryMetadata(self, md5_db):
|
||||||
rows = self.__qAppDetails(md5_db)
|
rows = self.__qMetadata(md5_db)
|
||||||
return rows
|
return rows
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -150,11 +141,11 @@ class FingerprintIndex:
|
||||||
logging.error(ex)
|
logging.error(ex)
|
||||||
|
|
||||||
#
|
#
|
||||||
def __qAppDetails(self, md5_db):
|
def __qMetadata(self, md5_db):
|
||||||
try:
|
try:
|
||||||
rows = self.cur.execute('''
|
rows = self.cur.execute('''
|
||||||
SELECT app_name, app_ver, db_file, fp_file, scan_date
|
SELECT app_name, app_ver, db_file, fp_file, scan_date
|
||||||
FROM file_details
|
FROM metadata
|
||||||
WHERE md5_db=?
|
WHERE md5_db=?
|
||||||
''', [md5_db])
|
''', [md5_db])
|
||||||
|
|
||||||
|
@ -184,7 +175,7 @@ class FingerprintIndex:
|
||||||
fp_count INTEGER);
|
fp_count INTEGER);
|
||||||
''')
|
''')
|
||||||
self.db_conn.execute('''
|
self.db_conn.execute('''
|
||||||
CREATE TABLE file_details (
|
CREATE TABLE metadata (
|
||||||
md5_db TEXT,
|
md5_db TEXT,
|
||||||
app_name TEXT,
|
app_name TEXT,
|
||||||
app_ver TEXT,
|
app_ver TEXT,
|
||||||
|
@ -216,7 +207,7 @@ class FingerprintIndex:
|
||||||
db.importJson(fq_file)
|
db.importJson(fq_file)
|
||||||
self.__insertMod_md5_all(db.db_hash, db.table_hashes.values(), file)
|
self.__insertMod_md5_all(db.db_hash, db.table_hashes.values(), file)
|
||||||
self.__insertMod_md5_tables(db.table_hashes.values(), file)
|
self.__insertMod_md5_tables(db.table_hashes.values(), file)
|
||||||
self.__insertMod_file_details(db, file)
|
self.__insertMod_metadata(db, file)
|
||||||
finCount = finCount+1
|
finCount = finCount+1
|
||||||
self.db_conn.commit()
|
self.db_conn.commit()
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
|
@ -233,6 +224,7 @@ class FingerprintIndex:
|
||||||
#
|
#
|
||||||
def __insertMod_md5_all(self, md5_db, md5_list, filename):
|
def __insertMod_md5_all(self, md5_db, md5_list, filename):
|
||||||
try:
|
try:
|
||||||
|
#logging.info("INSERT INTO md5_all VALUES({}, {}, {}, 1)".format(md5_db, ','.join(md5_list), filename))
|
||||||
self.db_conn.execute(
|
self.db_conn.execute(
|
||||||
'''
|
'''
|
||||||
INSERT INTO md5_all VALUES(?, ?, ?, ?)
|
INSERT INTO md5_all VALUES(?, ?, ?, ?)
|
||||||
|
@ -242,6 +234,7 @@ class FingerprintIndex:
|
||||||
(fp_list, fp_count) = self.__selectFileList(md5_db)
|
(fp_list, fp_count) = self.__selectFileList(md5_db)
|
||||||
fp_list += ","+filename
|
fp_list += ","+filename
|
||||||
fp_count += 1
|
fp_count += 1
|
||||||
|
#logging.info("fp_list=={}".format(fp_list))
|
||||||
self.db_conn.execute(
|
self.db_conn.execute(
|
||||||
'''
|
'''
|
||||||
UPDATE md5_all SET fp_list=?, fp_count=? WHERE md5_db=?
|
UPDATE md5_all SET fp_list=?, fp_count=? WHERE md5_db=?
|
||||||
|
@ -275,12 +268,18 @@ class FingerprintIndex:
|
||||||
raise FingerprintIndexWrite("Error inserting a row\n{}".format(ex))
|
raise FingerprintIndexWrite("Error inserting a row\n{}".format(ex))
|
||||||
|
|
||||||
#
|
#
|
||||||
def __insertMod_file_details(self, db, filename):
|
def __insertMod_metadata(self, db, filename):
|
||||||
|
# insert the md5 of the table schemas
|
||||||
|
# print "*****"
|
||||||
|
# print "***** {}".format(db.metadata)
|
||||||
|
# print "***** {}".format(db.metadata['fart'])
|
||||||
|
# print "***** {}".format(db.metadata['app_name'])
|
||||||
try:
|
try:
|
||||||
self.db_conn.execute(
|
self.db_conn.execute(
|
||||||
'''
|
'''
|
||||||
INSERT INTO file_details VALUES(?, ?, ?, ?, ?, ?)
|
INSERT INTO metadata VALUES(?, ?, ?, ?, ?, ?)
|
||||||
''', [db.db_hash, db.file_details['app-name'], db.file_details['app-ver'], db.file_details['db-name'], filename, db.file_details['scan-date']])
|
''', [db.db_hash, db.metadata['app-name'], db.metadata['app-ver'], db.metadata['db-name'], filename, db.metadata['scan-date']])
|
||||||
|
# ''', ["abc", "efg", "hij", "klm", "nop", "qrs"])
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print ex
|
print ex
|
||||||
raise
|
raise
|
||||||
|
|
|
@ -1,306 +0,0 @@
|
||||||
{
|
|
||||||
"_file-details": {
|
|
||||||
"app-name": "",
|
|
||||||
"app-ver": "",
|
|
||||||
"db-name": "cache4 4-15-2014 - Copy.db",
|
|
||||||
"format-ver": "0.92",
|
|
||||||
"notes": "",
|
|
||||||
"scan-date": "2016-03-03_225317",
|
|
||||||
"scanner-name": "dbfp",
|
|
||||||
"scanner-ver": "1.00b"
|
|
||||||
},
|
|
||||||
"db-metadata": {
|
|
||||||
"chat_settings": "CREATE TABLE chat_settings(uid INTEGER PRIMARY KEY, participants BLOB)",
|
|
||||||
"chats": "CREATE TABLE chats(uid INTEGER PRIMARY KEY, name TEXT, data BLOB)",
|
|
||||||
"contacts": "CREATE TABLE contacts(uid INTEGER PRIMARY KEY, mutual INTEGER)",
|
|
||||||
"dialogs": "CREATE TABLE dialogs(did INTEGER PRIMARY KEY, date INTEGER, unread_count INTEGER, last_mid INTEGER)",
|
|
||||||
"enc_chats": "CREATE TABLE enc_chats(uid INTEGER PRIMARY KEY, user INTEGER, name TEXT, data BLOB, g BLOB, authkey BLOB, ttl INTEGER)",
|
|
||||||
"enc_tasks": "CREATE TABLE enc_tasks(date INTEGER, data BLOB)",
|
|
||||||
"media": "CREATE TABLE media(mid INTEGER PRIMARY KEY, uid INTEGER, date INTEGER, data BLOB)",
|
|
||||||
"media_counts": "CREATE TABLE media_counts(uid INTEGER PRIMARY KEY, count INTEGER)",
|
|
||||||
"messages": "CREATE TABLE messages(mid INTEGER PRIMARY KEY, uid INTEGER, read_state INTEGER, send_state INTEGER, date INTEGER, data BLOB, out INTEGER, ttl INTEGER)",
|
|
||||||
"params": "CREATE TABLE params(id INTEGER PRIMARY KEY, seq INTEGER, pts INTEGER, date INTEGER, qts INTEGER, lsv INTEGER, sg INTEGER, pbytes BLOB)",
|
|
||||||
"pending_read": "CREATE TABLE pending_read(uid INTEGER PRIMARY KEY, max_id INTEGER)",
|
|
||||||
"randoms": "CREATE TABLE randoms(random_id INTEGER PRIMARY KEY, mid INTEGER)",
|
|
||||||
"sent_files_v2": "CREATE TABLE sent_files_v2(uid TEXT, type INTEGER, data BLOB, PRIMARY KEY (uid, type))",
|
|
||||||
"user_contacts_v6": "CREATE TABLE user_contacts_v6(uid INTEGER PRIMARY KEY, fname TEXT, sname TEXT)",
|
|
||||||
"user_phones_v6": "CREATE TABLE user_phones_v6(uid INTEGER, phone TEXT, sphone TEXT, deleted INTEGER, PRIMARY KEY (uid, phone))",
|
|
||||||
"user_photos": "CREATE TABLE user_photos(uid INTEGER, id INTEGER, data BLOB, PRIMARY KEY (uid, id))",
|
|
||||||
"users": "CREATE TABLE users(uid INTEGER PRIMARY KEY, name TEXT, status INTEGER, data BLOB)",
|
|
||||||
"wallpapers": "CREATE TABLE wallpapers(uid INTEGER PRIMARY KEY, data BLOB)"
|
|
||||||
},
|
|
||||||
"db-metadata-hashes": {
|
|
||||||
"chat_settings": "7a06efa405c182ff1b91f7ecfa6baa3f",
|
|
||||||
"chats": "973a2d73d3395c4f5c9a44b8f80e6fd7",
|
|
||||||
"contacts": "dee7f55491f7743e6f735a28dd3d8d82",
|
|
||||||
"dialogs": "cd6d2749823e43f8e1dfd9766001ed8b",
|
|
||||||
"enc_chats": "3daf43bca94440242cc1450282a099e1",
|
|
||||||
"enc_tasks": "400f26f5657ba7d3e5b8ece14668e57c",
|
|
||||||
"media": "f272c955f894ac315b53f7ba2abd127a",
|
|
||||||
"media_counts": "4a641bddf7b412de06f78346afc3b653",
|
|
||||||
"messages": "e3741a72250b0f2bc46d1f7b43ec479b",
|
|
||||||
"params": "abeb45d4f4193387f0babb4e8940b349",
|
|
||||||
"pending_read": "80e89b8b3999d59635a89c6358b7e573",
|
|
||||||
"randoms": "0ed8162b27e007aafd66437c87df8ee5",
|
|
||||||
"sent_files_v2": "e6989e78283ba2fb0659c88303e5ee4d",
|
|
||||||
"user_contacts_v6": "69f0f40d3ad4cf6211009041d0a0c457",
|
|
||||||
"user_phones_v6": "c1bc50abb1a1bc27022049e7a6ea71b2",
|
|
||||||
"user_photos": "5cb1903635267a308a71fd8a0b5414cd",
|
|
||||||
"users": "15dbec1dd2c53c11805648ea1ce0c6dd",
|
|
||||||
"wallpapers": "b499f19fedc6c34322ed4e0cf8b72420"
|
|
||||||
},
|
|
||||||
"db-metadata-md5": "73163c2836d81855d7207e76093c1ba5",
|
|
||||||
"tables": {
|
|
||||||
"chat_settings": {
|
|
||||||
"participants": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"chats": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"contacts": {
|
|
||||||
"mutual": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dialogs": {
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"did": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"last_mid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"unread_count": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enc_chats": {
|
|
||||||
"authkey": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"g": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"ttl": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"user": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enc_tasks": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media_counts": {
|
|
||||||
"count": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"messages": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"out": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"read_state": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"send_state": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"ttl": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"params": {
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"lsv": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"pbytes": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"pts": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"qts": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"seq": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"sg": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pending_read": {
|
|
||||||
"max_id": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"randoms": {
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"random_id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sent_files_v2": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_contacts_v6": {
|
|
||||||
"fname": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"sname": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_phones_v6": {
|
|
||||||
"deleted": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"phone": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"sphone": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_photos": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"users": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wallpapers": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,306 +0,0 @@
|
||||||
{
|
|
||||||
"_file-details": {
|
|
||||||
"app-name": "",
|
|
||||||
"app-ver": "",
|
|
||||||
"db-name": "cache4 4-15-2014.db",
|
|
||||||
"format-ver": "0.92",
|
|
||||||
"notes": "",
|
|
||||||
"scan-date": "2016-03-03_225317",
|
|
||||||
"scanner-name": "dbfp",
|
|
||||||
"scanner-ver": "1.00b"
|
|
||||||
},
|
|
||||||
"db-metadata": {
|
|
||||||
"chat_settings": "CREATE TABLE chat_settings(uid INTEGER PRIMARY KEY, participants BLOB)",
|
|
||||||
"chats": "CREATE TABLE chats(uid INTEGER PRIMARY KEY, name TEXT, data BLOB)",
|
|
||||||
"contacts": "CREATE TABLE contacts(uid INTEGER PRIMARY KEY, mutual INTEGER)",
|
|
||||||
"dialogs": "CREATE TABLE dialogs(did INTEGER PRIMARY KEY, date INTEGER, unread_count INTEGER, last_mid INTEGER)",
|
|
||||||
"enc_chats": "CREATE TABLE enc_chats(uid INTEGER PRIMARY KEY, user INTEGER, name TEXT, data BLOB, g BLOB, authkey BLOB, ttl INTEGER)",
|
|
||||||
"enc_tasks": "CREATE TABLE enc_tasks(date INTEGER, data BLOB)",
|
|
||||||
"media": "CREATE TABLE media(mid INTEGER PRIMARY KEY, uid INTEGER, date INTEGER, data BLOB)",
|
|
||||||
"media_counts": "CREATE TABLE media_counts(uid INTEGER PRIMARY KEY, count INTEGER)",
|
|
||||||
"messages": "CREATE TABLE messages(mid INTEGER PRIMARY KEY, uid INTEGER, read_state INTEGER, send_state INTEGER, date INTEGER, data BLOB, out INTEGER, ttl INTEGER)",
|
|
||||||
"params": "CREATE TABLE params(id INTEGER PRIMARY KEY, seq INTEGER, pts INTEGER, date INTEGER, qts INTEGER, lsv INTEGER, sg INTEGER, pbytes BLOB)",
|
|
||||||
"pending_read": "CREATE TABLE pending_read(uid INTEGER PRIMARY KEY, max_id INTEGER)",
|
|
||||||
"randoms": "CREATE TABLE randoms(random_id INTEGER PRIMARY KEY, mid INTEGER)",
|
|
||||||
"sent_files_v2": "CREATE TABLE sent_files_v2(uid TEXT, type INTEGER, data BLOB, PRIMARY KEY (uid, type))",
|
|
||||||
"user_contacts_v6": "CREATE TABLE user_contacts_v6(uid INTEGER PRIMARY KEY, fname TEXT, sname TEXT)",
|
|
||||||
"user_phones_v6": "CREATE TABLE user_phones_v6(uid INTEGER, phone TEXT, sphone TEXT, deleted INTEGER, PRIMARY KEY (uid, phone))",
|
|
||||||
"user_photos": "CREATE TABLE user_photos(uid INTEGER, id INTEGER, data BLOB, PRIMARY KEY (uid, id))",
|
|
||||||
"users": "CREATE TABLE users(uid INTEGER PRIMARY KEY, name TEXT, status INTEGER, data BLOB)",
|
|
||||||
"wallpapers": "CREATE TABLE wallpapers(uid INTEGER PRIMARY KEY, data BLOB)"
|
|
||||||
},
|
|
||||||
"db-metadata-hashes": {
|
|
||||||
"chat_settings": "7a06efa405c182ff1b91f7ecfa6baa3f",
|
|
||||||
"chats": "973a2d73d3395c4f5c9a44b8f80e6fd7",
|
|
||||||
"contacts": "dee7f55491f7743e6f735a28dd3d8d82",
|
|
||||||
"dialogs": "cd6d2749823e43f8e1dfd9766001ed8b",
|
|
||||||
"enc_chats": "3daf43bca94440242cc1450282a099e1",
|
|
||||||
"enc_tasks": "400f26f5657ba7d3e5b8ece14668e57c",
|
|
||||||
"media": "f272c955f894ac315b53f7ba2abd127a",
|
|
||||||
"media_counts": "4a641bddf7b412de06f78346afc3b653",
|
|
||||||
"messages": "e3741a72250b0f2bc46d1f7b43ec479b",
|
|
||||||
"params": "abeb45d4f4193387f0babb4e8940b349",
|
|
||||||
"pending_read": "80e89b8b3999d59635a89c6358b7e573",
|
|
||||||
"randoms": "0ed8162b27e007aafd66437c87df8ee5",
|
|
||||||
"sent_files_v2": "e6989e78283ba2fb0659c88303e5ee4d",
|
|
||||||
"user_contacts_v6": "69f0f40d3ad4cf6211009041d0a0c457",
|
|
||||||
"user_phones_v6": "c1bc50abb1a1bc27022049e7a6ea71b2",
|
|
||||||
"user_photos": "5cb1903635267a308a71fd8a0b5414cd",
|
|
||||||
"users": "15dbec1dd2c53c11805648ea1ce0c6dd",
|
|
||||||
"wallpapers": "b499f19fedc6c34322ed4e0cf8b72420"
|
|
||||||
},
|
|
||||||
"db-metadata-md5": "73163c2836d81855d7207e76093c1ba5",
|
|
||||||
"tables": {
|
|
||||||
"chat_settings": {
|
|
||||||
"participants": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"chats": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"contacts": {
|
|
||||||
"mutual": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dialogs": {
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"did": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"last_mid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"unread_count": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enc_chats": {
|
|
||||||
"authkey": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"g": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"ttl": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"user": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enc_tasks": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media_counts": {
|
|
||||||
"count": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"messages": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"out": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"read_state": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"send_state": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"ttl": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"params": {
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"lsv": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"pbytes": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"pts": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"qts": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"seq": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"sg": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pending_read": {
|
|
||||||
"max_id": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"randoms": {
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"random_id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sent_files_v2": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_contacts_v6": {
|
|
||||||
"fname": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"sname": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_phones_v6": {
|
|
||||||
"deleted": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"phone": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"sphone": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_photos": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"users": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wallpapers": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,306 +0,0 @@
|
||||||
{
|
|
||||||
"_file-details": {
|
|
||||||
"app-name": "",
|
|
||||||
"app-ver": "",
|
|
||||||
"db-name": "cache4 blue phone day 1.db",
|
|
||||||
"format-ver": "0.92",
|
|
||||||
"notes": "",
|
|
||||||
"scan-date": "2016-03-03_225317",
|
|
||||||
"scanner-name": "dbfp",
|
|
||||||
"scanner-ver": "1.00b"
|
|
||||||
},
|
|
||||||
"db-metadata": {
|
|
||||||
"chat_settings": "CREATE TABLE chat_settings(uid INTEGER PRIMARY KEY, participants BLOB)",
|
|
||||||
"chats": "CREATE TABLE chats(uid INTEGER PRIMARY KEY, name TEXT, data BLOB)",
|
|
||||||
"contacts": "CREATE TABLE contacts(uid INTEGER PRIMARY KEY, mutual INTEGER)",
|
|
||||||
"dialogs": "CREATE TABLE dialogs(did INTEGER PRIMARY KEY, date INTEGER, unread_count INTEGER, last_mid INTEGER)",
|
|
||||||
"enc_chats": "CREATE TABLE enc_chats(uid INTEGER PRIMARY KEY, user INTEGER, name TEXT, data BLOB, g BLOB, authkey BLOB, ttl INTEGER)",
|
|
||||||
"enc_tasks": "CREATE TABLE enc_tasks(date INTEGER, data BLOB)",
|
|
||||||
"media": "CREATE TABLE media(mid INTEGER PRIMARY KEY, uid INTEGER, date INTEGER, data BLOB)",
|
|
||||||
"media_counts": "CREATE TABLE media_counts(uid INTEGER PRIMARY KEY, count INTEGER)",
|
|
||||||
"messages": "CREATE TABLE messages(mid INTEGER PRIMARY KEY, uid INTEGER, read_state INTEGER, send_state INTEGER, date INTEGER, data BLOB, out INTEGER, ttl INTEGER)",
|
|
||||||
"params": "CREATE TABLE params(id INTEGER PRIMARY KEY, seq INTEGER, pts INTEGER, date INTEGER, qts INTEGER, lsv INTEGER, sg INTEGER, pbytes BLOB)",
|
|
||||||
"pending_read": "CREATE TABLE pending_read(uid INTEGER PRIMARY KEY, max_id INTEGER)",
|
|
||||||
"randoms": "CREATE TABLE randoms(random_id INTEGER PRIMARY KEY, mid INTEGER)",
|
|
||||||
"sent_files_v2": "CREATE TABLE sent_files_v2(uid TEXT, type INTEGER, data BLOB, PRIMARY KEY (uid, type))",
|
|
||||||
"user_contacts_v6": "CREATE TABLE user_contacts_v6(uid INTEGER PRIMARY KEY, fname TEXT, sname TEXT)",
|
|
||||||
"user_phones_v6": "CREATE TABLE user_phones_v6(uid INTEGER, phone TEXT, sphone TEXT, deleted INTEGER, PRIMARY KEY (uid, phone))",
|
|
||||||
"user_photos": "CREATE TABLE user_photos(uid INTEGER, id INTEGER, data BLOB, PRIMARY KEY (uid, id))",
|
|
||||||
"users": "CREATE TABLE users(uid INTEGER PRIMARY KEY, name TEXT, status INTEGER, data BLOB)",
|
|
||||||
"wallpapers": "CREATE TABLE wallpapers(uid INTEGER PRIMARY KEY, data BLOB)"
|
|
||||||
},
|
|
||||||
"db-metadata-hashes": {
|
|
||||||
"chat_settings": "7a06efa405c182ff1b91f7ecfa6baa3f",
|
|
||||||
"chats": "973a2d73d3395c4f5c9a44b8f80e6fd7",
|
|
||||||
"contacts": "dee7f55491f7743e6f735a28dd3d8d82",
|
|
||||||
"dialogs": "cd6d2749823e43f8e1dfd9766001ed8b",
|
|
||||||
"enc_chats": "3daf43bca94440242cc1450282a099e1",
|
|
||||||
"enc_tasks": "400f26f5657ba7d3e5b8ece14668e57c",
|
|
||||||
"media": "f272c955f894ac315b53f7ba2abd127a",
|
|
||||||
"media_counts": "4a641bddf7b412de06f78346afc3b653",
|
|
||||||
"messages": "e3741a72250b0f2bc46d1f7b43ec479b",
|
|
||||||
"params": "abeb45d4f4193387f0babb4e8940b349",
|
|
||||||
"pending_read": "80e89b8b3999d59635a89c6358b7e573",
|
|
||||||
"randoms": "0ed8162b27e007aafd66437c87df8ee5",
|
|
||||||
"sent_files_v2": "e6989e78283ba2fb0659c88303e5ee4d",
|
|
||||||
"user_contacts_v6": "69f0f40d3ad4cf6211009041d0a0c457",
|
|
||||||
"user_phones_v6": "c1bc50abb1a1bc27022049e7a6ea71b2",
|
|
||||||
"user_photos": "5cb1903635267a308a71fd8a0b5414cd",
|
|
||||||
"users": "15dbec1dd2c53c11805648ea1ce0c6dd",
|
|
||||||
"wallpapers": "b499f19fedc6c34322ed4e0cf8b72420"
|
|
||||||
},
|
|
||||||
"db-metadata-md5": "73163c2836d81855d7207e76093c1ba5",
|
|
||||||
"tables": {
|
|
||||||
"chat_settings": {
|
|
||||||
"participants": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"chats": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"contacts": {
|
|
||||||
"mutual": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dialogs": {
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"did": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"last_mid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"unread_count": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enc_chats": {
|
|
||||||
"authkey": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"g": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"ttl": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"user": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enc_tasks": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media_counts": {
|
|
||||||
"count": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"messages": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"out": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"read_state": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"send_state": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"ttl": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"params": {
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"lsv": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"pbytes": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"pts": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"qts": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"seq": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"sg": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pending_read": {
|
|
||||||
"max_id": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"randoms": {
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"random_id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sent_files_v2": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_contacts_v6": {
|
|
||||||
"fname": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"sname": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_phones_v6": {
|
|
||||||
"deleted": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"phone": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"sphone": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_photos": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"users": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wallpapers": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,306 +0,0 @@
|
||||||
{
|
|
||||||
"_file-details": {
|
|
||||||
"app-name": "",
|
|
||||||
"app-ver": "",
|
|
||||||
"db-name": "cache4.db",
|
|
||||||
"format-ver": "0.92",
|
|
||||||
"notes": "",
|
|
||||||
"scan-date": "2016-03-03_225317",
|
|
||||||
"scanner-name": "dbfp",
|
|
||||||
"scanner-ver": "1.00b"
|
|
||||||
},
|
|
||||||
"db-metadata": {
|
|
||||||
"chat_settings": "CREATE TABLE chat_settings(uid INTEGER PRIMARY KEY, participants BLOB)",
|
|
||||||
"chats": "CREATE TABLE chats(uid INTEGER PRIMARY KEY, name TEXT, data BLOB)",
|
|
||||||
"contacts": "CREATE TABLE contacts(uid INTEGER PRIMARY KEY, mutual INTEGER)",
|
|
||||||
"dialogs": "CREATE TABLE dialogs(did INTEGER PRIMARY KEY, date INTEGER, unread_count INTEGER, last_mid INTEGER)",
|
|
||||||
"enc_chats": "CREATE TABLE enc_chats(uid INTEGER PRIMARY KEY, user INTEGER, name TEXT, data BLOB, g BLOB, authkey BLOB, ttl INTEGER)",
|
|
||||||
"enc_tasks": "CREATE TABLE enc_tasks(date INTEGER, data BLOB)",
|
|
||||||
"media": "CREATE TABLE media(mid INTEGER PRIMARY KEY, uid INTEGER, date INTEGER, data BLOB)",
|
|
||||||
"media_counts": "CREATE TABLE media_counts(uid INTEGER PRIMARY KEY, count INTEGER)",
|
|
||||||
"messages": "CREATE TABLE messages(mid INTEGER PRIMARY KEY, uid INTEGER, read_state INTEGER, send_state INTEGER, date INTEGER, data BLOB, out INTEGER, ttl INTEGER)",
|
|
||||||
"params": "CREATE TABLE params(id INTEGER PRIMARY KEY, seq INTEGER, pts INTEGER, date INTEGER, qts INTEGER, lsv INTEGER, sg INTEGER, pbytes BLOB)",
|
|
||||||
"pending_read": "CREATE TABLE pending_read(uid INTEGER PRIMARY KEY, max_id INTEGER)",
|
|
||||||
"randoms": "CREATE TABLE randoms(random_id INTEGER PRIMARY KEY, mid INTEGER)",
|
|
||||||
"sent_files_v2": "CREATE TABLE sent_files_v2(uid TEXT, type INTEGER, data BLOB, PRIMARY KEY (uid, type))",
|
|
||||||
"user_contacts_v6": "CREATE TABLE user_contacts_v6(uid INTEGER PRIMARY KEY, fname TEXT, sname TEXT)",
|
|
||||||
"user_phones_v6": "CREATE TABLE user_phones_v6(uid INTEGER, phone TEXT, sphone TEXT, deleted INTEGER, PRIMARY KEY (uid, phone))",
|
|
||||||
"user_photos": "CREATE TABLE user_photos(uid INTEGER, id INTEGER, data BLOB, PRIMARY KEY (uid, id))",
|
|
||||||
"users": "CREATE TABLE users(uid INTEGER PRIMARY KEY, name TEXT, status INTEGER, data BLOB)",
|
|
||||||
"wallpapers": "CREATE TABLE wallpapers(uid INTEGER PRIMARY KEY, data BLOB)"
|
|
||||||
},
|
|
||||||
"db-metadata-hashes": {
|
|
||||||
"chat_settings": "7a06efa405c182ff1b91f7ecfa6baa3f",
|
|
||||||
"chats": "973a2d73d3395c4f5c9a44b8f80e6fd7",
|
|
||||||
"contacts": "dee7f55491f7743e6f735a28dd3d8d82",
|
|
||||||
"dialogs": "cd6d2749823e43f8e1dfd9766001ed8b",
|
|
||||||
"enc_chats": "3daf43bca94440242cc1450282a099e1",
|
|
||||||
"enc_tasks": "400f26f5657ba7d3e5b8ece14668e57c",
|
|
||||||
"media": "f272c955f894ac315b53f7ba2abd127a",
|
|
||||||
"media_counts": "4a641bddf7b412de06f78346afc3b653",
|
|
||||||
"messages": "e3741a72250b0f2bc46d1f7b43ec479b",
|
|
||||||
"params": "abeb45d4f4193387f0babb4e8940b349",
|
|
||||||
"pending_read": "80e89b8b3999d59635a89c6358b7e573",
|
|
||||||
"randoms": "0ed8162b27e007aafd66437c87df8ee5",
|
|
||||||
"sent_files_v2": "e6989e78283ba2fb0659c88303e5ee4d",
|
|
||||||
"user_contacts_v6": "69f0f40d3ad4cf6211009041d0a0c457",
|
|
||||||
"user_phones_v6": "c1bc50abb1a1bc27022049e7a6ea71b2",
|
|
||||||
"user_photos": "5cb1903635267a308a71fd8a0b5414cd",
|
|
||||||
"users": "15dbec1dd2c53c11805648ea1ce0c6dd",
|
|
||||||
"wallpapers": "b499f19fedc6c34322ed4e0cf8b72420"
|
|
||||||
},
|
|
||||||
"db-metadata-md5": "73163c2836d81855d7207e76093c1ba5",
|
|
||||||
"tables": {
|
|
||||||
"chat_settings": {
|
|
||||||
"participants": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"chats": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"contacts": {
|
|
||||||
"mutual": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dialogs": {
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"did": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"last_mid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"unread_count": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enc_chats": {
|
|
||||||
"authkey": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"g": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"ttl": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"user": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enc_tasks": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media_counts": {
|
|
||||||
"count": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"messages": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"out": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"read_state": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"send_state": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"ttl": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"params": {
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"lsv": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"pbytes": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"pts": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"qts": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"seq": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"sg": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pending_read": {
|
|
||||||
"max_id": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"randoms": {
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"random_id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sent_files_v2": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_contacts_v6": {
|
|
||||||
"fname": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"sname": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_phones_v6": {
|
|
||||||
"deleted": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"phone": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"sphone": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_photos": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"users": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wallpapers": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"_file-details": {
|
"_file-metadata": {
|
||||||
"app-name": "com.android.providers.contacts",
|
"app-name": "com.android.providers.contacts",
|
||||||
"app-ver": "",
|
"app-ver": "",
|
||||||
"db-name": "contacts2.db",
|
"dn-name": "contacts2.db",
|
||||||
"format-ver": "0.92",
|
"format-ver": "0.91",
|
||||||
"notes": "",
|
"notes": "",
|
||||||
"scan-date": "2016-02-29_172209",
|
"scan-date": "2016-01-08_110349",
|
||||||
"scanner-name": "dbfp",
|
"scanner-name": "dbfp",
|
||||||
"scanner-ver": "1.00b"
|
"scanner-ver": "0.95"
|
||||||
},
|
},
|
||||||
"db-metadata": {
|
"db-metadata": {
|
||||||
"_sync_state": "CREATE TABLE _sync_state (_id INTEGER PRIMARY KEY,account_name TEXT NOT NULL,account_type TEXT NOT NULL,data TEXT,UNIQUE(account_name, account_type))",
|
"_sync_state": "CREATE TABLE _sync_state (_id INTEGER PRIMARY KEY,account_name TEXT NOT NULL,account_type TEXT NOT NULL,data TEXT,UNIQUE(account_name, account_type))",
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"_file-details": {
|
"_file-metadata": {
|
||||||
"app-name": "com.android.providers.contacts",
|
"app-name": "com.android.providers.contacts",
|
||||||
"app-ver": "",
|
"app-ver": "",
|
||||||
"db-name": "profile.db",
|
"dn-name": "profile.db",
|
||||||
"format-ver": "0.92",
|
"format-ver": "0.91",
|
||||||
"notes": "",
|
"notes": "",
|
||||||
"scan-date": "2016-02-29_172209",
|
"scan-date": "2016-01-08_110349",
|
||||||
"scanner-name": "dbfp",
|
"scanner-name": "dbfp",
|
||||||
"scanner-ver": "1.00b"
|
"scanner-ver": "0.95"
|
||||||
},
|
},
|
||||||
"db-metadata": {
|
"db-metadata": {
|
||||||
"_sync_state": "CREATE TABLE _sync_state (_id INTEGER PRIMARY KEY,account_name TEXT NOT NULL,account_type TEXT NOT NULL,data TEXT,UNIQUE(account_name, account_type))",
|
"_sync_state": "CREATE TABLE _sync_state (_id INTEGER PRIMARY KEY,account_name TEXT NOT NULL,account_type TEXT NOT NULL,data TEXT,UNIQUE(account_name, account_type))",
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"_file-details": {
|
"_file-metadata": {
|
||||||
"app-name": "com.google.android.gms",
|
"app-name": "com.google.android.gms",
|
||||||
"app-ver": "",
|
"app-ver": "",
|
||||||
"db-name": "fitness.db.username_gmail.com",
|
"dn-name": "fitness.db.username_gmail.com",
|
||||||
"format-ver": "0.92",
|
"format-ver": "0.91",
|
||||||
"notes": "",
|
"notes": "",
|
||||||
"scan-date": "2016-02-29_172210",
|
"scan-date": "2016-01-08_110349",
|
||||||
"scanner-name": "dbfp",
|
"scanner-name": "dbfp",
|
||||||
"scanner-ver": "1.00b"
|
"scanner-ver": "0.95"
|
||||||
},
|
},
|
||||||
"db-metadata": {
|
"db-metadata": {
|
||||||
"Applications": "CREATE TABLE Applications(_id INTEGER PRIMARY KEY AUTOINCREMENT, package TEXT NOT NULL, version TEXT, details_url TEXT, name TEXT, console_ids TEXT)",
|
"Applications": "CREATE TABLE Applications(_id INTEGER PRIMARY KEY AUTOINCREMENT, package TEXT NOT NULL, version TEXT, details_url TEXT, name TEXT, console_ids TEXT)",
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"_file-details": {
|
"_file-metadata": {
|
||||||
"app-name": "com.google.android.gms",
|
"app-name": "com.google.android.gms",
|
||||||
"app-ver": "",
|
"app-ver": "",
|
||||||
"db-name": "keys.db",
|
"dn-name": "keys.db",
|
||||||
"format-ver": "0.92",
|
"format-ver": "0.91",
|
||||||
"notes": "",
|
"notes": "",
|
||||||
"scan-date": "2016-02-29_172210",
|
"scan-date": "2016-01-08_110349",
|
||||||
"scanner-name": "dbfp",
|
"scanner-name": "dbfp",
|
||||||
"scanner-ver": "1.00b"
|
"scanner-ver": "0.95"
|
||||||
},
|
},
|
||||||
"db-metadata": {
|
"db-metadata": {
|
||||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"_file-details": {
|
"_file-metadata": {
|
||||||
"app-name": "com.google.android.gms",
|
"app-name": "com.google.android.gms",
|
||||||
"app-ver": "",
|
"app-ver": "",
|
||||||
"db-name": "node.db",
|
"dn-name": "node.db",
|
||||||
"format-ver": "0.92",
|
"format-ver": "0.91",
|
||||||
"notes": "",
|
"notes": "",
|
||||||
"scan-date": "2016-02-29_172210",
|
"scan-date": "2016-01-08_110349",
|
||||||
"scanner-name": "dbfp",
|
"scanner-name": "dbfp",
|
||||||
"scanner-ver": "1.00b"
|
"scanner-ver": "0.95"
|
||||||
},
|
},
|
||||||
"db-metadata": {
|
"db-metadata": {
|
||||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"_file-details": {
|
"_file-metadata": {
|
||||||
"app-name": "com.google.android.gms",
|
"app-name": "com.google.android.gms",
|
||||||
"app-ver": "",
|
"app-ver": "",
|
||||||
"db-name": "ns.db",
|
"dn-name": "ns.db",
|
||||||
"format-ver": "0.92",
|
"format-ver": "0.91",
|
||||||
"notes": "",
|
"notes": "",
|
||||||
"scan-date": "2016-02-29_172210",
|
"scan-date": "2016-01-08_110349",
|
||||||
"scanner-name": "dbfp",
|
"scanner-name": "dbfp",
|
||||||
"scanner-ver": "1.00b"
|
"scanner-ver": "0.95"
|
||||||
},
|
},
|
||||||
"db-metadata": {
|
"db-metadata": {
|
||||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"_file-details": {
|
"_file-metadata": {
|
||||||
"app-name": "com.google.android.gms",
|
"app-name": "com.google.android.gms",
|
||||||
"app-ver": "",
|
"app-ver": "",
|
||||||
"db-name": "plus.db",
|
"dn-name": "plus.db",
|
||||||
"format-ver": "0.92",
|
"format-ver": "0.91",
|
||||||
"notes": "",
|
"notes": "",
|
||||||
"scan-date": "2016-02-29_172210",
|
"scan-date": "2016-01-08_110349",
|
||||||
"scanner-name": "dbfp",
|
"scanner-name": "dbfp",
|
||||||
"scanner-ver": "1.00b"
|
"scanner-ver": "0.95"
|
||||||
},
|
},
|
||||||
"db-metadata": {
|
"db-metadata": {
|
||||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"_file-details": {
|
"_file-metadata": {
|
||||||
"app-name": "com.google.android.talk",
|
"app-name": "com.google.android.talk",
|
||||||
"app-ver": "",
|
"app-ver": "",
|
||||||
"db-name": "google_analytics_v4.db",
|
"dn-name": "google_analytics_v4.db",
|
||||||
"format-ver": "0.92",
|
"format-ver": "0.91",
|
||||||
"notes": "",
|
"notes": "",
|
||||||
"scan-date": "2016-02-29_172210",
|
"scan-date": "2016-01-08_110349",
|
||||||
"scanner-name": "dbfp",
|
"scanner-name": "dbfp",
|
||||||
"scanner-ver": "1.00b"
|
"scanner-ver": "0.95"
|
||||||
},
|
},
|
||||||
"db-metadata": {
|
"db-metadata": {
|
||||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"_file-details": {
|
"_file-metadata": {
|
||||||
"app-name": "com.google.android.youtube",
|
"app-name": "com.google.android.youtube",
|
||||||
"app-ver": "",
|
"app-ver": "",
|
||||||
"db-name": "identity.db",
|
"dn-name": "identity.db",
|
||||||
"format-ver": "0.92",
|
"format-ver": "0.91",
|
||||||
"notes": "",
|
"notes": "",
|
||||||
"scan-date": "2016-02-29_172210",
|
"scan-date": "2016-01-08_110349",
|
||||||
"scanner-name": "dbfp",
|
"scanner-name": "dbfp",
|
||||||
"scanner-ver": "1.00b"
|
"scanner-ver": "0.95"
|
||||||
},
|
},
|
||||||
"db-metadata": {
|
"db-metadata": {
|
||||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"_file-details": {
|
"_file-metadata": {
|
||||||
"app-name": "com.viber.voip",
|
"app-name": "com.viber.voip",
|
||||||
"app-ver": "",
|
"app-ver": "",
|
||||||
"db-name": "viber_messages",
|
"dn-name": "com.viber.voip/databases/viber_messages",
|
||||||
"format-ver": "0.92",
|
"format-ver": "0.91",
|
||||||
"notes": "",
|
"notes": "",
|
||||||
"scan-date": "2016-02-29_172210",
|
"scan-date": "2016-01-08_110349",
|
||||||
"scanner-name": "dbfp",
|
"scanner-name": "dbfp",
|
||||||
"scanner-ver": "1.00b"
|
"scanner-ver": "0.95"
|
||||||
},
|
},
|
||||||
"db-metadata": {
|
"db-metadata": {
|
||||||
"adx": "CREATE TABLE adx ( _id INTEGER PRIMARY KEY NOT NULL, event_name TEXT, last_tracked INTEGER NOT NULL )",
|
"adx": "CREATE TABLE adx ( _id INTEGER PRIMARY KEY NOT NULL, event_name TEXT, last_tracked INTEGER NOT NULL )",
|
||||||
|
@ -23,8 +23,7 @@
|
||||||
"messages_likes": "CREATE TABLE messages_likes (_id INTEGER PRIMARY KEY AUTOINCREMENT,message_token LONG NOT NULL,like_token LONG DEFAULT 0,seq INTEGER DEFAULT 0,participant_number TEXT NOT NULL,date LONG DEFAULT 0,read INTEGER DEFAULT 0,sync_read INTEGER DEFAULT 0,status INTEGER DEFAULT 0)",
|
"messages_likes": "CREATE TABLE messages_likes (_id INTEGER PRIMARY KEY AUTOINCREMENT,message_token LONG NOT NULL,like_token LONG DEFAULT 0,seq INTEGER DEFAULT 0,participant_number TEXT NOT NULL,date LONG DEFAULT 0,read INTEGER DEFAULT 0,sync_read INTEGER DEFAULT 0,status INTEGER DEFAULT 0)",
|
||||||
"participants": "CREATE TABLE participants (_id INTEGER PRIMARY KEY autoincrement,conversation_id INTEGER DEFAULT 0,participant_info_id INTEGER DEFAULT 0,last_message_id INTEGER DEFAULT 0,active INTEGER DEFAULT TRUE, group_role INTEGER DEFAULT 1 )",
|
"participants": "CREATE TABLE participants (_id INTEGER PRIMARY KEY autoincrement,conversation_id INTEGER DEFAULT 0,participant_info_id INTEGER DEFAULT 0,last_message_id INTEGER DEFAULT 0,active INTEGER DEFAULT TRUE, group_role INTEGER DEFAULT 1 )",
|
||||||
"participants_info": "CREATE TABLE participants_info (_id INTEGER PRIMARY KEY autoincrement,number TEXT,encrypted_number TEXT,display_name TEXT,contact_name TEXT,contact_id INTEGER DEFAULT 0,native_contact_id INTEGER DEFAULT 0,viber_name TEXT,viber_image TEXT,location_lat LONG DEFAULT 0,location_lng LONG DEFAULT 0,location_date LONG DEFAULT 0,participant_type INTEGER DEFAULT 1, has_contact_name INTEGER DEFAULT 0, native_photo_id LONG DEFAULT 0, has_photo INTEGER DEFAULT 0, sync_date INTEGER DEFAULT 0 )",
|
"participants_info": "CREATE TABLE participants_info (_id INTEGER PRIMARY KEY autoincrement,number TEXT,encrypted_number TEXT,display_name TEXT,contact_name TEXT,contact_id INTEGER DEFAULT 0,native_contact_id INTEGER DEFAULT 0,viber_name TEXT,viber_image TEXT,location_lat LONG DEFAULT 0,location_lng LONG DEFAULT 0,location_date LONG DEFAULT 0,participant_type INTEGER DEFAULT 1, has_contact_name INTEGER DEFAULT 0, native_photo_id LONG DEFAULT 0, has_photo INTEGER DEFAULT 0, sync_date INTEGER DEFAULT 0 )",
|
||||||
"purchase": "CREATE TABLE purchase ( order_id TEXT PRIMARY KEY NOT NULL, category INTEGER, type TEXT, package_name TEXT, product_id TEXT, purchase_time LONG DEFAULT 0, purchase_state INTEGER DEFAULT 0, dev_payload TEXT, token TEXT, json TEXT, signature TEXT,verified INTEGER DEFAULT 0, consumed INTEGER DEFAULT 0, pending INTEGER DEFAULT 0, productjson TEXT)",
|
"purchase": "CREATE TABLE purchase ( order_id TEXT PRIMARY KEY NOT NULL, category INTEGER, type TEXT, package_name TEXT, product_id TEXT, purchase_time LONG DEFAULT 0, purchase_state INTEGER DEFAULT 0, dev_payload TEXT, token TEXT, json TEXT, signature TEXT,verified INTEGER DEFAULT 0, consumed INTEGER DEFAULT 0, pending INTEGER DEFAULT 0)",
|
||||||
"remote_banners": "CREATE TABLE remote_banners (_id INTEGER PRIMARY KEY AUTOINCREMENT, token LONG NOT NULL, type TEXT NOT NULL, position TEXT, end_time LONG DEFAULT 0, meta TEXT, tag TEXT, location TEXT)",
|
|
||||||
"sqlite_sequence": "CREATE TABLE sqlite_sequence(name,seq)",
|
"sqlite_sequence": "CREATE TABLE sqlite_sequence(name,seq)",
|
||||||
"stickers": "CREATE TABLE stickers ( _id INTEGER PRIMARY KEY NOT NULL, package_id INTEGER DEFAULT 0, generic_col_pos INTEGER DEFAULT 0, generic_row_pos INTEGER DEFAULT 0, column_span INTEGER DEFAULT 0, row_span INTEGER DEFAULT 0, flags INTEGER DEFAULT 0 )",
|
"stickers": "CREATE TABLE stickers ( _id INTEGER PRIMARY KEY NOT NULL, package_id INTEGER DEFAULT 0, generic_col_pos INTEGER DEFAULT 0, generic_row_pos INTEGER DEFAULT 0, column_span INTEGER DEFAULT 0, row_span INTEGER DEFAULT 0, flags INTEGER DEFAULT 0 )",
|
||||||
"stickers_packages": "CREATE TABLE stickers_packages ( _id INTEGER PRIMARY KEY NOT NULL, package_name TEXT, flags INTEGER DEFAULT 0, thumb_axis_shrink_factor FLOAT DEFAULT 0, visibility INTEGER DEFAULT 0, menu_position INTEGER DEFAULT 0, version FLOAT DEFAULT 1.0)"
|
"stickers_packages": "CREATE TABLE stickers_packages ( _id INTEGER PRIMARY KEY NOT NULL, package_name TEXT, flags INTEGER DEFAULT 0, thumb_axis_shrink_factor FLOAT DEFAULT 0, visibility INTEGER DEFAULT 0, menu_position INTEGER DEFAULT 0, version FLOAT DEFAULT 1.0)"
|
||||||
|
@ -43,13 +42,12 @@
|
||||||
"messages_likes": "a748d1fc1750add16eebf23f06c11345",
|
"messages_likes": "a748d1fc1750add16eebf23f06c11345",
|
||||||
"participants": "ad08c9b89dbeefce73587a510408cece",
|
"participants": "ad08c9b89dbeefce73587a510408cece",
|
||||||
"participants_info": "6e12a7afe73aeb45cc67e95c2ef678c4",
|
"participants_info": "6e12a7afe73aeb45cc67e95c2ef678c4",
|
||||||
"purchase": "0f45d800764d4c423b02460c2e6849f7",
|
"purchase": "f027c710c661e4cd5b813af6fb9017c1",
|
||||||
"remote_banners": "13201c72b6dc3cab93ea47da9308ec93",
|
|
||||||
"sqlite_sequence": "079355c84d8b3b1511a504e08aab7fd2",
|
"sqlite_sequence": "079355c84d8b3b1511a504e08aab7fd2",
|
||||||
"stickers": "23df16b8e627fb62b45caf431d130b45",
|
"stickers": "23df16b8e627fb62b45caf431d130b45",
|
||||||
"stickers_packages": "36f863f03838cb4dd1c2c98c30afde16"
|
"stickers_packages": "36f863f03838cb4dd1c2c98c30afde16"
|
||||||
},
|
},
|
||||||
"db-metadata-md5": "17ddf92e37140f761769e34312600342",
|
"db-metadata-md5": "2c32c000dfe232d9ec62b1fa8156c294",
|
||||||
"tables": {
|
"tables": {
|
||||||
"adx": {
|
"adx": {
|
||||||
"_id": {
|
"_id": {
|
||||||
|
@ -691,9 +689,6 @@
|
||||||
"product_id": {
|
"product_id": {
|
||||||
"datatype": "TEXT"
|
"datatype": "TEXT"
|
||||||
},
|
},
|
||||||
"productjson": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"purchase_state": {
|
"purchase_state": {
|
||||||
"datatype": "INTEGER",
|
"datatype": "INTEGER",
|
||||||
"default": "0"
|
"default": "0"
|
||||||
|
@ -716,37 +711,6 @@
|
||||||
"default": "0"
|
"default": "0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"remote_banners": {
|
|
||||||
"_id": {
|
|
||||||
"autoincrement": true,
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"end_time": {
|
|
||||||
"datatype": "LONG",
|
|
||||||
"default": "0"
|
|
||||||
},
|
|
||||||
"location": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"meta": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"position": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"tag": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"token": {
|
|
||||||
"datatype": "LONG",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sqlite_sequence": {
|
"sqlite_sequence": {
|
||||||
"name": {
|
"name": {
|
||||||
"datatype": "INTEGER"
|
"datatype": "INTEGER"
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,52 +0,0 @@
|
||||||
{
|
|
||||||
"_file-details": {
|
|
||||||
"app-name": "",
|
|
||||||
"app-ver": "",
|
|
||||||
"db-name": "database.db",
|
|
||||||
"format-ver": "0.92",
|
|
||||||
"notes": "",
|
|
||||||
"scan-date": "2016-03-03_225317",
|
|
||||||
"scanner-name": "dbfp",
|
|
||||||
"scanner-ver": "1.00b"
|
|
||||||
},
|
|
||||||
"db-metadata": {
|
|
||||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
|
||||||
"retained_secrets": "CREATE TABLE retained_secrets (_id integer PRIMARY KEY, number TEXT, zid TEXT, expires INTEGER, rs1 TEXT, rs2 TEXT, verified INTEGER)"
|
|
||||||
},
|
|
||||||
"db-metadata-hashes": {
|
|
||||||
"android_metadata": "ba739eb03730e563915f2f76b26ced51",
|
|
||||||
"retained_secrets": "36451fd02d349b100b7e6bbefbcc2939"
|
|
||||||
},
|
|
||||||
"db-metadata-md5": "0dfe91aa2db1b818f8089b89b66eca3c",
|
|
||||||
"tables": {
|
|
||||||
"android_metadata": {
|
|
||||||
"locale": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"retained_secrets": {
|
|
||||||
"_id": {
|
|
||||||
"datatype": "integer",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"expires": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"number": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"rs1": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"rs2": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"verified": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"zid": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,178 +0,0 @@
|
||||||
{
|
|
||||||
"_file-details": {
|
|
||||||
"app-name": "",
|
|
||||||
"app-ver": "",
|
|
||||||
"db-name": "profilecache.db",
|
|
||||||
"format-ver": "0.92",
|
|
||||||
"notes": "",
|
|
||||||
"scan-date": "2016-03-03_225317",
|
|
||||||
"scanner-name": "dbfp",
|
|
||||||
"scanner-ver": "1.00b"
|
|
||||||
},
|
|
||||||
"db-metadata": {
|
|
||||||
"profiles": "CREATE TABLE `profiles` (`key` TEXT PRIMARY KEY, `value` TEXT)",
|
|
||||||
"profiletable": "CREATE TABLE `profiletable` (`itemUserId` TEXT PRIMARY KEY, `itemFirstName` TEXT NOT NULL, `itemLastName` TEXT NOT NULL, `itemBirthday` TEXT NOT NULL, `itemGender` TEXT NOT NULL, `itemStatus` TEXT NOT NULL, `itemLongitude` DOUBLE NOT NULL, `itemLatitude` DOUBLE NOT NULL, `itemDistance` DOUBLE NOT NULL, `itemAvatarUrl` TEXT NOT NULL, `itemThumbnailUrl` TEXT NOT NULL, `itemVideoUrl` TEXT NOT NULL, `itemVideoThumbnailUrl` TEXT NOT NULL, `itemBackgroundUrl` TEXT NOT NULL, `itemPrivacy` INTEGER NOT NULL, `itemIsLocationOn` INTEGER NOT NULL, `itemIsFriend` INTEGER NOT NULL, `itemIsBlocked` INTEGER NOT NULL, `itemFriendRequestType` TEXT NOT NULL, `itemReverseRelationships` TEXT NOT NULL, `itemFeedCount` INTEGER NOT NULL, `itemRefereneCount` INTEGER NOT NULL, `itemLevel1DataSyncTime` BIGINT NOT NULL, `itemLevel2DataSyncTime` BIGINT NOT NULL, `itemLevel3DataSyncTime` BIGINT NOT NULL, `itemLevel4DataSyncTime` BIGINT NOT NULL, `itemLevel5DataSyncTime` BIGINT NOT NULL, `itemLastLocalAccessTime` BIGINT NOT NULL, `itemLastServerModifyTime` BIGINT NOT NULL, `itemLastLocationServerModifyTime` BIGINT NOT NULL, `itemLastStatusServerModifyTime` BIGINT NOT NULL, `itemFriendRequestId` TEXT NOT NULL, `itemFriendRequestMessage` TEXT NOT NULL, `itemFriendRequestTime` BIGINT NOT NULL, `itemIsNewFriendRequest` INTEGER NOT NULL, `itemFriendRequestTCMessageId` INTEGER NOT NULL)"
|
|
||||||
},
|
|
||||||
"db-metadata-hashes": {
|
|
||||||
"profiles": "f25cd242fb0d91d383afdf62ea361a40",
|
|
||||||
"profiletable": "f50355a48ba41e1ec127242589a34c28"
|
|
||||||
},
|
|
||||||
"db-metadata-md5": "76718e910b850406f3471b2cb61fea38",
|
|
||||||
"tables": {
|
|
||||||
"profiles": {
|
|
||||||
"key": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"value": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"profiletable": {
|
|
||||||
"itemAvatarUrl": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemBackgroundUrl": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemBirthday": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemDistance": {
|
|
||||||
"datatype": "DOUBLE",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemFeedCount": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemFirstName": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemFriendRequestId": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemFriendRequestMessage": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemFriendRequestTCMessageId": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemFriendRequestTime": {
|
|
||||||
"datatype": "BIGINT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemFriendRequestType": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemGender": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemIsBlocked": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemIsFriend": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemIsLocationOn": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemIsNewFriendRequest": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemLastLocalAccessTime": {
|
|
||||||
"datatype": "BIGINT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemLastLocationServerModifyTime": {
|
|
||||||
"datatype": "BIGINT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemLastName": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemLastServerModifyTime": {
|
|
||||||
"datatype": "BIGINT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemLastStatusServerModifyTime": {
|
|
||||||
"datatype": "BIGINT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemLatitude": {
|
|
||||||
"datatype": "DOUBLE",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemLevel1DataSyncTime": {
|
|
||||||
"datatype": "BIGINT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemLevel2DataSyncTime": {
|
|
||||||
"datatype": "BIGINT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemLevel3DataSyncTime": {
|
|
||||||
"datatype": "BIGINT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemLevel4DataSyncTime": {
|
|
||||||
"datatype": "BIGINT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemLevel5DataSyncTime": {
|
|
||||||
"datatype": "BIGINT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemLongitude": {
|
|
||||||
"datatype": "DOUBLE",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemPrivacy": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemRefereneCount": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemReverseRelationships": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemStatus": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemThumbnailUrl": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemUserId": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"itemVideoThumbnailUrl": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
},
|
|
||||||
"itemVideoUrl": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"notnull": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,140 +0,0 @@
|
||||||
{
|
|
||||||
"_file-details": {
|
|
||||||
"app-name": "",
|
|
||||||
"app-ver": "",
|
|
||||||
"db-name": "tc.db",
|
|
||||||
"format-ver": "0.92",
|
|
||||||
"notes": "",
|
|
||||||
"scan-date": "2016-03-03_225317",
|
|
||||||
"scanner-name": "dbfp",
|
|
||||||
"scanner-ver": "1.00b"
|
|
||||||
},
|
|
||||||
"db-metadata": {
|
|
||||||
"conversations": "CREATE TABLE `conversations` (`conv_id` TEXT PRIMARY KEY, `payload` BLOB, `last_msg_id` INTEGER, `unread_count` INTEGER, `last_read_sent_msg_id` INTEGER, `conv_type` INTEGER DEFAULT 0, `conv_del_status` INTEGER DEFAULT 0, `deleting_ts` BIGINT DEFAULT 0)",
|
|
||||||
"messages": "CREATE TABLE `messages` (`msg_id` INTEGER PRIMARY KEY, `conv_id` TEXT, `type` INTEGER, `media_id` TEXT, `share_id` TEXT, `create_time` BIGINT, `send_time` BIGINT, `direction` INTEGER, `status` INTEGER, `payload` BLOB, `del_status` INTEGER)",
|
|
||||||
"profiles": "CREATE TABLE `profiles` (`key` TEXT PRIMARY KEY, `value` TEXT)",
|
|
||||||
"receipts": "CREATE TABLE `receipts` (`conv_id` TEXT PRIMARY KEY, `msg_id` INTEGER, `sender_msg_id` INTEGER, `type` INTEGER, `create_time` BIGINT, `status` INTEGER, `payload` BLOB)",
|
|
||||||
"sms": "CREATE TABLE `sms` (`msg_id` INTEGER PRIMARY KEY, `phonenumber` TEXT, `text` TEXT)"
|
|
||||||
},
|
|
||||||
"db-metadata-hashes": {
|
|
||||||
"conversations": "01e299a5222e6ebc1e6787ae01365abc",
|
|
||||||
"messages": "489c6ca8ce6c91e4e701ea105c3a67af",
|
|
||||||
"profiles": "f25cd242fb0d91d383afdf62ea361a40",
|
|
||||||
"receipts": "eb6abeb3cbfbed30f1a3efe1f9f6e00d",
|
|
||||||
"sms": "0b57e910a559a03aabe451f41a35e28b"
|
|
||||||
},
|
|
||||||
"db-metadata-md5": "ec6718bafca2cbe044c7de62ee53d7fa",
|
|
||||||
"tables": {
|
|
||||||
"conversations": {
|
|
||||||
"conv_del_status": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"default": "0"
|
|
||||||
},
|
|
||||||
"conv_id": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"conv_type": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"default": "0"
|
|
||||||
},
|
|
||||||
"deleting_ts": {
|
|
||||||
"datatype": "BIGINT",
|
|
||||||
"default": "0"
|
|
||||||
},
|
|
||||||
"last_msg_id": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"last_read_sent_msg_id": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"payload": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"unread_count": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"messages": {
|
|
||||||
"conv_id": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"create_time": {
|
|
||||||
"datatype": "BIGINT"
|
|
||||||
},
|
|
||||||
"del_status": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"direction": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"media_id": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"msg_id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"payload": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"send_time": {
|
|
||||||
"datatype": "BIGINT"
|
|
||||||
},
|
|
||||||
"share_id": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"profiles": {
|
|
||||||
"key": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"value": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"receipts": {
|
|
||||||
"conv_id": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"create_time": {
|
|
||||||
"datatype": "BIGINT"
|
|
||||||
},
|
|
||||||
"msg_id": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"payload": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"sender_msg_id": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sms": {
|
|
||||||
"msg_id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"phonenumber": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"text": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,306 +0,0 @@
|
||||||
{
|
|
||||||
"_file-details": {
|
|
||||||
"app-name": "",
|
|
||||||
"app-ver": "",
|
|
||||||
"db-name": "test1.db",
|
|
||||||
"format-ver": "0.92",
|
|
||||||
"notes": "",
|
|
||||||
"scan-date": "2016-03-03_225317",
|
|
||||||
"scanner-name": "dbfp",
|
|
||||||
"scanner-ver": "1.00b"
|
|
||||||
},
|
|
||||||
"db-metadata": {
|
|
||||||
"chat_settings": "CREATE TABLE chat_settings(uid INTEGER PRIMARY KEY, participants BLOB)",
|
|
||||||
"chats": "CREATE TABLE chats(uid INTEGER PRIMARY KEY, name TEXT, data BLOB)",
|
|
||||||
"contacts": "CREATE TABLE contacts(uid INTEGER PRIMARY KEY, mutual INTEGER)",
|
|
||||||
"dialogs": "CREATE TABLE dialogs(did INTEGER PRIMARY KEY, date INTEGER, unread_count INTEGER, last_mid INTEGER)",
|
|
||||||
"enc_chats": "CREATE TABLE enc_chats(uid INTEGER PRIMARY KEY, user INTEGER, name TEXT, data BLOB, g BLOB, authkey BLOB, ttl INTEGER)",
|
|
||||||
"enc_tasks": "CREATE TABLE enc_tasks(date INTEGER, data BLOB)",
|
|
||||||
"media": "CREATE TABLE media(mid INTEGER PRIMARY KEY, uid INTEGER, date INTEGER, data BLOB)",
|
|
||||||
"media_counts": "CREATE TABLE media_counts(uid INTEGER PRIMARY KEY, count INTEGER)",
|
|
||||||
"messages": "CREATE TABLE messages(mid INTEGER PRIMARY KEY, uid INTEGER, read_state INTEGER, send_state INTEGER, date INTEGER, data BLOB, out INTEGER, ttl INTEGER)",
|
|
||||||
"params": "CREATE TABLE params(id INTEGER PRIMARY KEY, seq INTEGER, pts INTEGER, date INTEGER, qts INTEGER, lsv INTEGER, sg INTEGER, pbytes BLOB)",
|
|
||||||
"pending_read": "CREATE TABLE pending_read(uid INTEGER PRIMARY KEY, max_id INTEGER)",
|
|
||||||
"randoms": "CREATE TABLE randoms(random_id INTEGER PRIMARY KEY, mid INTEGER)",
|
|
||||||
"sent_files_v2": "CREATE TABLE sent_files_v2(uid TEXT, type INTEGER, data BLOB, PRIMARY KEY (uid, type))",
|
|
||||||
"user_contacts_v6": "CREATE TABLE user_contacts_v6(uid INTEGER PRIMARY KEY, fname TEXT, sname TEXT)",
|
|
||||||
"user_phones_v6": "CREATE TABLE user_phones_v6(uid INTEGER, phone TEXT, sphone TEXT, deleted INTEGER, PRIMARY KEY (uid, phone))",
|
|
||||||
"user_photos": "CREATE TABLE user_photos(uid INTEGER, id INTEGER, data BLOB, PRIMARY KEY (uid, id))",
|
|
||||||
"users": "CREATE TABLE users(uid INTEGER PRIMARY KEY, name TEXT, status INTEGER, data BLOB)",
|
|
||||||
"wallpapers": "CREATE TABLE wallpapers(uid INTEGER PRIMARY KEY, data BLOB)"
|
|
||||||
},
|
|
||||||
"db-metadata-hashes": {
|
|
||||||
"chat_settings": "7a06efa405c182ff1b91f7ecfa6baa3f",
|
|
||||||
"chats": "973a2d73d3395c4f5c9a44b8f80e6fd7",
|
|
||||||
"contacts": "dee7f55491f7743e6f735a28dd3d8d82",
|
|
||||||
"dialogs": "cd6d2749823e43f8e1dfd9766001ed8b",
|
|
||||||
"enc_chats": "3daf43bca94440242cc1450282a099e1",
|
|
||||||
"enc_tasks": "400f26f5657ba7d3e5b8ece14668e57c",
|
|
||||||
"media": "f272c955f894ac315b53f7ba2abd127a",
|
|
||||||
"media_counts": "4a641bddf7b412de06f78346afc3b653",
|
|
||||||
"messages": "e3741a72250b0f2bc46d1f7b43ec479b",
|
|
||||||
"params": "abeb45d4f4193387f0babb4e8940b349",
|
|
||||||
"pending_read": "80e89b8b3999d59635a89c6358b7e573",
|
|
||||||
"randoms": "0ed8162b27e007aafd66437c87df8ee5",
|
|
||||||
"sent_files_v2": "e6989e78283ba2fb0659c88303e5ee4d",
|
|
||||||
"user_contacts_v6": "69f0f40d3ad4cf6211009041d0a0c457",
|
|
||||||
"user_phones_v6": "c1bc50abb1a1bc27022049e7a6ea71b2",
|
|
||||||
"user_photos": "5cb1903635267a308a71fd8a0b5414cd",
|
|
||||||
"users": "15dbec1dd2c53c11805648ea1ce0c6dd",
|
|
||||||
"wallpapers": "b499f19fedc6c34322ed4e0cf8b72420"
|
|
||||||
},
|
|
||||||
"db-metadata-md5": "73163c2836d81855d7207e76093c1ba5",
|
|
||||||
"tables": {
|
|
||||||
"chat_settings": {
|
|
||||||
"participants": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"chats": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"contacts": {
|
|
||||||
"mutual": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dialogs": {
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"did": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"last_mid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"unread_count": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enc_chats": {
|
|
||||||
"authkey": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"g": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"ttl": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"user": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enc_tasks": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media_counts": {
|
|
||||||
"count": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"messages": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"out": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"read_state": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"send_state": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"ttl": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"params": {
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"lsv": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"pbytes": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"pts": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"qts": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"seq": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"sg": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pending_read": {
|
|
||||||
"max_id": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"randoms": {
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"random_id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sent_files_v2": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_contacts_v6": {
|
|
||||||
"fname": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"sname": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_phones_v6": {
|
|
||||||
"deleted": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"phone": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"sphone": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_photos": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"users": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wallpapers": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,306 +0,0 @@
|
||||||
{
|
|
||||||
"_file-details": {
|
|
||||||
"app-name": "",
|
|
||||||
"app-ver": "",
|
|
||||||
"db-name": "test2.db",
|
|
||||||
"format-ver": "0.92",
|
|
||||||
"notes": "",
|
|
||||||
"scan-date": "2016-03-03_225317",
|
|
||||||
"scanner-name": "dbfp",
|
|
||||||
"scanner-ver": "1.00b"
|
|
||||||
},
|
|
||||||
"db-metadata": {
|
|
||||||
"chat_settings": "CREATE TABLE chat_settings(uid INTEGER PRIMARY KEY, participants BLOB)",
|
|
||||||
"chats": "CREATE TABLE chats(uid INTEGER PRIMARY KEY, name TEXT, data BLOB)",
|
|
||||||
"contacts": "CREATE TABLE contacts(uid INTEGER PRIMARY KEY, mutual INTEGER)",
|
|
||||||
"dialogs": "CREATE TABLE dialogs(did INTEGER PRIMARY KEY, date INTEGER, unread_count INTEGER, last_mid INTEGER)",
|
|
||||||
"enc_chats": "CREATE TABLE enc_chats(uid INTEGER PRIMARY KEY, user INTEGER, name TEXT, data BLOB, g BLOB, authkey BLOB, ttl INTEGER)",
|
|
||||||
"enc_tasks": "CREATE TABLE enc_tasks(date INTEGER, data BLOB)",
|
|
||||||
"media": "CREATE TABLE media(mid INTEGER PRIMARY KEY, uid INTEGER, date INTEGER, data BLOB)",
|
|
||||||
"media_counts": "CREATE TABLE media_counts(uid INTEGER PRIMARY KEY, count INTEGER)",
|
|
||||||
"messages": "CREATE TABLE messages(mid INTEGER PRIMARY KEY, uid INTEGER, read_state INTEGER, send_state INTEGER, date INTEGER, data BLOB, out INTEGER, ttl INTEGER)",
|
|
||||||
"params": "CREATE TABLE params(id INTEGER PRIMARY KEY, seq INTEGER, pts INTEGER, date INTEGER, qts INTEGER, lsv INTEGER, sg INTEGER, pbytes BLOB)",
|
|
||||||
"pending_read": "CREATE TABLE pending_read(uid INTEGER PRIMARY KEY, max_id INTEGER)",
|
|
||||||
"randoms": "CREATE TABLE randoms(random_id INTEGER PRIMARY KEY, mid INTEGER)",
|
|
||||||
"sent_files_v2": "CREATE TABLE sent_files_v2(uid TEXT, type INTEGER, data BLOB, PRIMARY KEY (uid, type))",
|
|
||||||
"user_contacts_v6": "CREATE TABLE user_contacts_v6(uid INTEGER PRIMARY KEY, fname TEXT, sname TEXT)",
|
|
||||||
"user_phones_v6": "CREATE TABLE user_phones_v6(uid INTEGER, phone TEXT, sphone TEXT, deleted INTEGER, PRIMARY KEY (uid, phone))",
|
|
||||||
"user_photos": "CREATE TABLE user_photos(uid INTEGER, id INTEGER, data BLOB, PRIMARY KEY (uid, id))",
|
|
||||||
"users": "CREATE TABLE users(uid INTEGER PRIMARY KEY, name TEXT, status INTEGER, data BLOB)",
|
|
||||||
"wallpapers": "CREATE TABLE wallpapers(uid INTEGER PRIMARY KEY, data BLOB)"
|
|
||||||
},
|
|
||||||
"db-metadata-hashes": {
|
|
||||||
"chat_settings": "7a06efa405c182ff1b91f7ecfa6baa3f",
|
|
||||||
"chats": "973a2d73d3395c4f5c9a44b8f80e6fd7",
|
|
||||||
"contacts": "dee7f55491f7743e6f735a28dd3d8d82",
|
|
||||||
"dialogs": "cd6d2749823e43f8e1dfd9766001ed8b",
|
|
||||||
"enc_chats": "3daf43bca94440242cc1450282a099e1",
|
|
||||||
"enc_tasks": "400f26f5657ba7d3e5b8ece14668e57c",
|
|
||||||
"media": "f272c955f894ac315b53f7ba2abd127a",
|
|
||||||
"media_counts": "4a641bddf7b412de06f78346afc3b653",
|
|
||||||
"messages": "e3741a72250b0f2bc46d1f7b43ec479b",
|
|
||||||
"params": "abeb45d4f4193387f0babb4e8940b349",
|
|
||||||
"pending_read": "80e89b8b3999d59635a89c6358b7e573",
|
|
||||||
"randoms": "0ed8162b27e007aafd66437c87df8ee5",
|
|
||||||
"sent_files_v2": "e6989e78283ba2fb0659c88303e5ee4d",
|
|
||||||
"user_contacts_v6": "69f0f40d3ad4cf6211009041d0a0c457",
|
|
||||||
"user_phones_v6": "c1bc50abb1a1bc27022049e7a6ea71b2",
|
|
||||||
"user_photos": "5cb1903635267a308a71fd8a0b5414cd",
|
|
||||||
"users": "15dbec1dd2c53c11805648ea1ce0c6dd",
|
|
||||||
"wallpapers": "b499f19fedc6c34322ed4e0cf8b72420"
|
|
||||||
},
|
|
||||||
"db-metadata-md5": "73163c2836d81855d7207e76093c1ba5",
|
|
||||||
"tables": {
|
|
||||||
"chat_settings": {
|
|
||||||
"participants": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"chats": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"contacts": {
|
|
||||||
"mutual": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dialogs": {
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"did": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"last_mid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"unread_count": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enc_chats": {
|
|
||||||
"authkey": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"g": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"ttl": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"user": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enc_tasks": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media_counts": {
|
|
||||||
"count": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"messages": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"out": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"read_state": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"send_state": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"ttl": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"params": {
|
|
||||||
"date": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"lsv": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"pbytes": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"pts": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"qts": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"seq": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"sg": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pending_read": {
|
|
||||||
"max_id": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"randoms": {
|
|
||||||
"mid": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"random_id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sent_files_v2": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_contacts_v6": {
|
|
||||||
"fname": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"sname": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_phones_v6": {
|
|
||||||
"deleted": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"phone": {
|
|
||||||
"datatype": "TEXT",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"sphone": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"user_photos": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"users": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"datatype": "TEXT"
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"datatype": "INTEGER"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wallpapers": {
|
|
||||||
"data": {
|
|
||||||
"datatype": "BLOB"
|
|
||||||
},
|
|
||||||
"uid": {
|
|
||||||
"datatype": "INTEGER",
|
|
||||||
"primarykey": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"_file-details": {
|
"_file-metadata": {
|
||||||
"app-name": "tv.periscope.android",
|
"app-name": "tv.periscope.android",
|
||||||
"app-ver": "",
|
"app-ver": "",
|
||||||
"db-name": "com.localytics.android.c685a165210ff465709ae8d359bef6c90f17a12f344206db16d6f2f7f129e34f.profile.sqlite",
|
"dn-name": "com.localytics.android.c685a165210ff465709ae8d359bef6c90f17a12f344206db16d6f2f7f129e34f.profile.sqlite",
|
||||||
"format-ver": "0.92",
|
"format-ver": "0.91",
|
||||||
"notes": "",
|
"notes": "",
|
||||||
"scan-date": "2016-02-29_172210",
|
"scan-date": "2016-01-08_110349",
|
||||||
"scanner-name": "dbfp",
|
"scanner-name": "dbfp",
|
||||||
"scanner-ver": "1.00b"
|
"scanner-ver": "0.95"
|
||||||
},
|
},
|
||||||
"db-metadata": {
|
"db-metadata": {
|
||||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
import unittest
|
|
||||||
from libs.fingerprint import FingerprintDB
|
|
||||||
|
|
||||||
|
|
||||||
class FingerprintTestCase(unittest.TestCase):
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
self.db = FingerprintDB()
|
|
||||||
|
|
||||||
def testOpenFingerprint(self, in_json):
|
|
||||||
self.assertTrue(self.db.scanDBFile(file_in))
|
|
||||||
#self.failUnless(True)
|
|
||||||
|
|
||||||
def testWriteFingerprint(self, filename):
|
|
||||||
|
|
||||||
self.failIf(True)
|
|
||||||
|
|
||||||
def testWriteFingerprintFile(self, filename):
|
|
||||||
self.failIf(True)
|
|
||||||
|
|
||||||
def main():
|
|
||||||
unittest.main()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,21 +0,0 @@
|
||||||
import unittest
|
|
||||||
from libs.fingerprint import FingerprintDB
|
|
||||||
|
|
||||||
|
|
||||||
class TestFingerprintCompare(unittest.TestCase):
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
# open fingerprint
|
|
||||||
pass
|
|
||||||
|
|
||||||
def testCompareFP(self, fp_dir):
|
|
||||||
self.failUnless(True)
|
|
||||||
|
|
||||||
def testCompareDB(self):
|
|
||||||
self.failIf(True)
|
|
||||||
|
|
||||||
def main():
|
|
||||||
unittest.main()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,23 +0,0 @@
|
||||||
import unittest
|
|
||||||
from libs.fingerprint import FingerprintDB
|
|
||||||
|
|
||||||
|
|
||||||
class TestFingerprintIndex(unittest.TestCase):
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def testOpenFPIndex(self, fp_dir):
|
|
||||||
self.failUnless(True)
|
|
||||||
|
|
||||||
def testCreateIndex(self):
|
|
||||||
self.failIf(True)
|
|
||||||
|
|
||||||
def testFindFP(self, md5_db):
|
|
||||||
self.failIf(True)
|
|
||||||
|
|
||||||
def main():
|
|
||||||
unittest.main()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
Loading…
Reference in New Issue