Compare commits
18 Commits
Author | SHA1 | Date |
---|---|---|
![]() |
9b275deac7 | |
![]() |
86bd0ea928 | |
![]() |
a8124def2c | |
![]() |
a3fe2d7ee9 | |
![]() |
97f13f6350 | |
![]() |
9f8b791bca | |
![]() |
5b683cb108 | |
![]() |
ff1d7ab9ac | |
![]() |
76a9dd1f8b | |
![]() |
8cca9ed317 | |
![]() |
40d10614a9 | |
![]() |
8c1366d8cd | |
![]() |
44bd8a54dd | |
![]() |
a141b51529 | |
![]() |
eaf415e7f0 | |
![]() |
f2d7bbf9ae | |
![]() |
8ad6864f7b | |
![]() |
422eb86be2 |
|
@ -1,3 +1,7 @@
|
|||
# project excludes
|
||||
tests/
|
||||
var/
|
||||
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
|
@ -16,7 +20,6 @@ lib/
|
|||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
==============
|
||||
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,18 +60,19 @@ def indexFingerprints(fp_dir):
|
|||
print ex
|
||||
|
||||
#
|
||||
def compareFingerprintDir(file_in, fp_dir):
|
||||
def compareFPIndex(fp_dir, db_in, json_in):
|
||||
try:
|
||||
db = FingerprintDB()
|
||||
db.scanDBFile(file_in)
|
||||
|
||||
logging.info("MD5 DB == {}".format(db.getMD5DB()))
|
||||
logging.info("MD5 TB == {}".format(db.getMD5Tables()))
|
||||
if (db_in):
|
||||
db.scanDBFile(db_in)
|
||||
else:
|
||||
db.importJson(json_in)
|
||||
|
||||
fp = FingerprintIndex()
|
||||
fp.openIndex(fp_dir)
|
||||
|
||||
# search for fingerprints with exact database match
|
||||
logging.info("Searching for MD5 DB: {}".format(db.getMD5DB()))
|
||||
fp_ret = fp.findFP(db.getMD5DB())
|
||||
if (fp_ret):
|
||||
print "Database matche(s) found"
|
||||
|
@ -81,21 +82,16 @@ def compareFingerprintDir(file_in, fp_dir):
|
|||
print fp
|
||||
# search for fingerprints with similar tables
|
||||
else:
|
||||
print "[ Table percent match: ]"
|
||||
logging.info("Searching for md5 tables: {}".format(db.getMD5Tables()))
|
||||
fp_list = fp.findFPTables(db.getMD5Tables())
|
||||
results = []
|
||||
fp_list = fp.findFPTables(db.getMD5Tables().values())
|
||||
for fp in fp_list:
|
||||
fq_fp = fp_dir + os.path.sep + fp
|
||||
print "[ OPEN fingerprint ] [ {} ]".format(fq_fp)
|
||||
fq_fp = fp_dir + os.path.sep + fp[0]
|
||||
logging.info("Comparing fingerprint: {}".format(fq_fp))
|
||||
percent = db.compareDB(fq_fp)
|
||||
results.append(percent)
|
||||
|
||||
print "Table matche(s) found"
|
||||
print "RESULTS: {}".format(results)
|
||||
results.sort()
|
||||
print "RESULTS: {}".format(results)
|
||||
print "{:2.2f}%: {}".format(percent, fp[0])
|
||||
except Exception as ex:
|
||||
print "Error comparing fingerprint"
|
||||
print "ERROR: error occured while comparing fingerprint"
|
||||
print ex
|
||||
|
||||
#
|
||||
|
@ -154,7 +150,7 @@ def queryMD5(fp_dir, md5_db):
|
|||
try:
|
||||
fp = FingerprintIndex()
|
||||
fp.openIndex(fp_dir)
|
||||
results = fp.queryMetadata(md5_db)
|
||||
results = fp.queryAppDetails(md5_db)
|
||||
for row in results:
|
||||
print "[{}]\nDB: {}\nFP: {}\nDate: {}\n".format(row[0], row[2], row[3], row[4])
|
||||
except Exception as ex:
|
||||
|
@ -229,12 +225,12 @@ def parseArgs():
|
|||
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('-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('-md5', required=False, help="md5 hash to query the index`")
|
||||
# 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('-an', '--app_name', required=False)
|
||||
parser.add_argument('-av', '--app_version', required=False)
|
||||
parser.add_argument('-n', '--notes', required=False)
|
||||
parser.add_argument('-idxf', action='store_true', help="add a fingerprint to the index")
|
||||
parser.add_argument('-idx', 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('-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")
|
||||
|
@ -252,23 +248,40 @@ def parseArgs():
|
|||
else:
|
||||
logging.basicConfig(level=logging.CRITICAL)
|
||||
|
||||
if args.idxf and args.fpdir and (args.database or args.fingerprint):
|
||||
if args.fpdir and args.idx and (args.database or args.fingerprint):
|
||||
insertFP(args.database, args.fingerprint, args.fpdir)
|
||||
elif args.fpdir and args.idx:
|
||||
indexFingerprints(args.fpdir)
|
||||
elif (args.database and args.fingerprint):
|
||||
compareFingerprint(args.database, args.fingerprint)
|
||||
elif (args.database and args.fpdir):
|
||||
compareFingerprintDir(args.database, args.fpdir)
|
||||
elif (args.fpdir and (args.database or args.fingerprint)):
|
||||
compareFPIndex(args.fpdir, args.database, args.fingerprint)
|
||||
elif (args.fpdir and args.md5):
|
||||
queryMD5(args.fpdir, args.md5)
|
||||
elif (args.android_dir):
|
||||
androidData(args.android_dir)
|
||||
elif (args.index_fingerprints):
|
||||
indexFingerprints(args.index_fingerprints)
|
||||
elif (args.android_pull):
|
||||
androidPull()
|
||||
elif (args.database):
|
||||
createFingerprint(args.database, args.app_name, args.app_version, args.notes)
|
||||
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()
|
||||
|
||||
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
|
||||
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
|
||||
|
72
docs/README
72
docs/README
|
@ -1,72 +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
|
||||
-------------
|
||||
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
|
|
@ -1,30 +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.
|
||||
|
||||
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
|
||||
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
=========================
|
||||
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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
=====================
|
||||
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,6 +9,16 @@
|
|||
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
|
||||
-new feature: query for md5 hash
|
||||
-command switch "-md5 <hash_string>"
|
||||
|
|
|
@ -3,12 +3,28 @@
|
|||
|
||||
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 a feature to add a fingerprint to the existing index (it currently recreates an index)
|
||||
|
||||
-Add a table to the Index to list all the applications that have a fingerprint (include the app version)
|
||||
-more functionality can result from this information in the index
|
||||
xx-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
|
||||
|
||||
-Create a document describing the index file and include an example
|
||||
-Create an example of the FingerprintDB class usage with a standalone tool
|
||||
|
@ -18,17 +34,6 @@ Get App Version
|
|||
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 ]
|
||||
android pull, data dir, comparison
|
||||
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
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'"
|
||||
# version of the scanner used to create the fingerprint
|
||||
scanner_ver = "0.98"
|
||||
scanner_ver = "1.00b"
|
||||
# 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"
|
||||
|
||||
|
@ -50,18 +50,13 @@ class FingerprintDB:
|
|||
self.table_hashes = None
|
||||
self.filein = ""
|
||||
self.init = False
|
||||
# fingerprint metadata
|
||||
self.metadata = {}
|
||||
self.metadata['db-name'] = ""
|
||||
self.metadata['app-name'] = ""
|
||||
self.metadata['app-ver'] = ""
|
||||
self.metadata['notes'] = ""
|
||||
self.metadata['scan-date'] = ""
|
||||
# self.db_name = ""
|
||||
# self.app_name = ""
|
||||
# self.app_ver = ""
|
||||
# self.notes = ""
|
||||
# self.scan_date = ""
|
||||
# db file details
|
||||
self.file_details = {}
|
||||
self.file_details['db-name'] = ""
|
||||
self.file_details['app-name'] = ""
|
||||
self.file_details['app-ver'] = ""
|
||||
self.file_details['notes'] = ""
|
||||
self.file_details['scan-date'] = ""
|
||||
|
||||
#
|
||||
def scanDBFile(self, filein):
|
||||
|
@ -69,22 +64,20 @@ class FingerprintDB:
|
|||
try:
|
||||
(self.conn, self.cur) = self.__openDB(filein)
|
||||
except Exception, ex:
|
||||
logging.info(ex)
|
||||
raise
|
||||
|
||||
try:
|
||||
# extract file name from path+filename
|
||||
self.metadata['db-name'] = os.path.basename(filein)
|
||||
self.file_details['db-name'] = os.path.basename(filein)
|
||||
except Exception as ex:
|
||||
logging.error(ex)
|
||||
self.metadata['db-name'] = filein
|
||||
logging.warn(ex)
|
||||
self.file_details['db-name'] = filein
|
||||
try:
|
||||
# read database schema, parse the schema
|
||||
self.__readDatabase()
|
||||
# concat all the table create statements, then md5
|
||||
self.__createMD5DB()
|
||||
except Exception as ex:
|
||||
logging.error(ex)
|
||||
raise
|
||||
|
||||
# create and index of table hashes
|
||||
|
@ -149,7 +142,6 @@ class FingerprintDB:
|
|||
fp = FingerprintDB();
|
||||
fp.__importJsonDBSchema(filejson)
|
||||
result = self.__DBSchemaCompare(fp)
|
||||
print "[ Percetage == %f]".format(result)
|
||||
return result
|
||||
|
||||
#
|
||||
|
@ -171,7 +163,7 @@ class FingerprintDB:
|
|||
dbmt = jsonData['db-metadata']
|
||||
dbht = jsonData['db-metadata-hashes']
|
||||
dbmd5 = jsonData['db-metadata-md5']
|
||||
metadata = jsonData['_file-metadata']
|
||||
metadata = jsonData['_file-details']
|
||||
|
||||
all_tables = tb.keys()
|
||||
for table_name in all_tables:
|
||||
|
@ -183,7 +175,8 @@ class FingerprintDB:
|
|||
self.tables = tables
|
||||
self.db_hash = dbmd5
|
||||
self.table_hashes = dbht
|
||||
self.metadata = metadata
|
||||
self.file_details = metadata
|
||||
self.init = True
|
||||
except Exception as ex:
|
||||
logging.error("ERROR: problem loading json file: \n{}\n{}".format(file_json, ex))
|
||||
|
||||
|
@ -198,36 +191,35 @@ class FingerprintDB:
|
|||
# if exists, compare each field
|
||||
# else, add to unknown tables...or do a fuzzy compare (look at number of fields, field names)
|
||||
diff_num = 0
|
||||
diff_total = 0
|
||||
all_total = 0
|
||||
diff_total = 0 # total number of different properties (from within a table)
|
||||
all_total = 0 # total number of properties (from the entire database comparison)
|
||||
for tableName in fp.tables.keys():
|
||||
try:
|
||||
logging.info("[[ Comparing Table: " + tableName + " ]]")
|
||||
table = self.tables[tableName]
|
||||
if (table):
|
||||
logging.info("__DBMD5Compare:: hash1=={}, hash2=={}".format(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)
|
||||
all_total += total
|
||||
diff_total += diff_num
|
||||
else:
|
||||
all_total += 10
|
||||
logging.info("Table {} is IDENTICAL (to json fingerprint)".format(tableName))
|
||||
else:
|
||||
self.__FuzzyTable()
|
||||
all_total += 10 # increment the total tables compared
|
||||
logging.info("__DBMD5Compare:: tableName=={} IDENTICAL".format(tableName))
|
||||
# table found in only one database (fingerprint)
|
||||
except KeyError as ex:
|
||||
# get the number of fields from the other table to add to the diff_total
|
||||
all_total += 10
|
||||
diff_total += 10
|
||||
logging.info("Table {} not EXISTS (to json fingerprint)".format(tableName))
|
||||
logging.info("__DBMD5Compare:: tableName=={} NOT FOUND".format(tableName))
|
||||
diff_total += 10 # increment the total of different properties
|
||||
all_total += 10 # increment the total tables compared
|
||||
self.__FuzzyTable() # TODO: try to detect table name changes, look for same properties
|
||||
|
||||
logging.info("diff_total=={}, all_total=={}".format(diff_total, all_total))
|
||||
logging.info("__DBMD5Compare:: all_total=={}, diff_total=={}".format(all_total, diff_total))
|
||||
|
||||
if (diff_total > 0):
|
||||
if (diff_total == all_total):
|
||||
percentage = 0
|
||||
else:
|
||||
percentage = float(diff_total / all_total)
|
||||
percentage = 100 * float(all_total-diff_total) / float(all_total)
|
||||
else:
|
||||
percentage = 100
|
||||
return percentage
|
||||
|
@ -260,10 +252,12 @@ class FingerprintDB:
|
|||
|
||||
totals = prop_total_count + fields_total_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)
|
||||
|
||||
# look at un-identified tables and try to match fields by their properties
|
||||
def __FuzzyTable():
|
||||
def __FuzzyTable(self):
|
||||
return
|
||||
|
||||
#
|
||||
|
@ -310,7 +304,7 @@ class FingerprintDB:
|
|||
dmhash = {}
|
||||
shash = {}
|
||||
mhash = {}
|
||||
ahash['_file-metadata'] = mhash
|
||||
ahash['_file-details'] = mhash
|
||||
ahash['db-metadata'] = dmhash
|
||||
ahash['db-metadata-hashes'] = shash
|
||||
ahash['db-metadata-md5'] = None
|
||||
|
@ -325,10 +319,10 @@ class FingerprintDB:
|
|||
mhash['format-ver'] = self.format_ver
|
||||
mhash['scanner-ver'] = self.scanner_ver
|
||||
mhash['scanner-name'] = 'dbfp'
|
||||
mhash['db-name'] = self.metadata['db-name']
|
||||
mhash['app-name'] = self.metadata['app-name']
|
||||
mhash['app-ver'] = self.metadata['app-ver']
|
||||
mhash['notes'] = self.metadata['notes']
|
||||
mhash['db-name'] = self.file_details['db-name']
|
||||
mhash['app-name'] = self.file_details['app-name']
|
||||
mhash['app-ver'] = self.file_details['app-ver']
|
||||
mhash['notes'] = self.file_details['notes']
|
||||
|
||||
# tables
|
||||
tables = self.tables.keys()
|
||||
|
@ -361,15 +355,15 @@ class FingerprintDB:
|
|||
|
||||
#
|
||||
def setAppName(self, name):
|
||||
self.metadata['app-name'] = name
|
||||
self.file_details['app-name'] = name
|
||||
|
||||
#
|
||||
def setAppVer(self, version):
|
||||
self.metadata['app-ver'] = version
|
||||
self.file_details['app-ver'] = version
|
||||
|
||||
#
|
||||
def setNotes(self, notes):
|
||||
self.metadata['notes'] = notes
|
||||
self.file_details['notes'] = notes
|
||||
|
||||
#
|
||||
def getErrorString(self, errorCode):
|
||||
|
|
|
@ -8,6 +8,7 @@ import os
|
|||
import sys
|
||||
import logging
|
||||
import sqlite3 as sql
|
||||
from operator import itemgetter
|
||||
from libs.exceptions import FingerprintIndexWrite
|
||||
from libs.exceptions import FingerprintIndexOpen
|
||||
from libs.fingerprint import FingerprintDB
|
||||
|
@ -80,17 +81,25 @@ class FingerprintIndex:
|
|||
return rows
|
||||
return None
|
||||
|
||||
# return an a list of json fingerprint files to open
|
||||
# return an a sort array with the most likely fingerprints ordered first
|
||||
def findFPTables(self, md5_tables):
|
||||
retval = {}
|
||||
for md5_table in md5_tables:
|
||||
logging.debug("findFPTables::md5_table=={}".format(md5_table))
|
||||
rows = self.__qTableMD5(md5_table)
|
||||
for row in rows:
|
||||
logging.debug("findFPTables::row=={}\n".format(row[0]))
|
||||
fp_list = row[0]
|
||||
fps = fp_list.split(',')
|
||||
for fp in fps:
|
||||
if (retval.has_key(fp)):
|
||||
retval[fp] = retval[fp] + 1
|
||||
else:
|
||||
retval[fp] = 1
|
||||
return retval.keys()
|
||||
# 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):
|
||||
|
@ -98,8 +107,8 @@ class FingerprintIndex:
|
|||
return rows
|
||||
|
||||
#
|
||||
def queryMetadata(self, md5_db):
|
||||
rows = self.__qMetadata(md5_db)
|
||||
def queryAppDetails(self, md5_db):
|
||||
rows = self.__qAppDetails(md5_db)
|
||||
return rows
|
||||
|
||||
#
|
||||
|
@ -141,11 +150,11 @@ class FingerprintIndex:
|
|||
logging.error(ex)
|
||||
|
||||
#
|
||||
def __qMetadata(self, md5_db):
|
||||
def __qAppDetails(self, md5_db):
|
||||
try:
|
||||
rows = self.cur.execute('''
|
||||
SELECT app_name, app_ver, db_file, fp_file, scan_date
|
||||
FROM metadata
|
||||
FROM file_details
|
||||
WHERE md5_db=?
|
||||
''', [md5_db])
|
||||
|
||||
|
@ -175,7 +184,7 @@ class FingerprintIndex:
|
|||
fp_count INTEGER);
|
||||
''')
|
||||
self.db_conn.execute('''
|
||||
CREATE TABLE metadata (
|
||||
CREATE TABLE file_details (
|
||||
md5_db TEXT,
|
||||
app_name TEXT,
|
||||
app_ver TEXT,
|
||||
|
@ -207,7 +216,7 @@ class FingerprintIndex:
|
|||
db.importJson(fq_file)
|
||||
self.__insertMod_md5_all(db.db_hash, db.table_hashes.values(), file)
|
||||
self.__insertMod_md5_tables(db.table_hashes.values(), file)
|
||||
self.__insertMod_metadata(db, file)
|
||||
self.__insertMod_file_details(db, file)
|
||||
finCount = finCount+1
|
||||
self.db_conn.commit()
|
||||
except Exception as ex:
|
||||
|
@ -224,7 +233,6 @@ class FingerprintIndex:
|
|||
#
|
||||
def __insertMod_md5_all(self, md5_db, md5_list, filename):
|
||||
try:
|
||||
#logging.info("INSERT INTO md5_all VALUES({}, {}, {}, 1)".format(md5_db, ','.join(md5_list), filename))
|
||||
self.db_conn.execute(
|
||||
'''
|
||||
INSERT INTO md5_all VALUES(?, ?, ?, ?)
|
||||
|
@ -234,7 +242,6 @@ class FingerprintIndex:
|
|||
(fp_list, fp_count) = self.__selectFileList(md5_db)
|
||||
fp_list += ","+filename
|
||||
fp_count += 1
|
||||
#logging.info("fp_list=={}".format(fp_list))
|
||||
self.db_conn.execute(
|
||||
'''
|
||||
UPDATE md5_all SET fp_list=?, fp_count=? WHERE md5_db=?
|
||||
|
@ -268,18 +275,12 @@ class FingerprintIndex:
|
|||
raise FingerprintIndexWrite("Error inserting a row\n{}".format(ex))
|
||||
|
||||
#
|
||||
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'])
|
||||
def __insertMod_file_details(self, db, filename):
|
||||
try:
|
||||
self.db_conn.execute(
|
||||
'''
|
||||
INSERT INTO metadata VALUES(?, ?, ?, ?, ?, ?)
|
||||
''', [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"])
|
||||
INSERT INTO file_details 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']])
|
||||
except Exception as ex:
|
||||
print ex
|
||||
raise
|
||||
|
|
|
@ -0,0 +1,306 @@
|
|||
{
|
||||
"_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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,306 @@
|
|||
{
|
||||
"_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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,306 @@
|
|||
{
|
||||
"_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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,306 @@
|
|||
{
|
||||
"_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-metadata": {
|
||||
"_file-details": {
|
||||
"app-name": "com.android.providers.contacts",
|
||||
"app-ver": "",
|
||||
"dn-name": "contacts2.db",
|
||||
"format-ver": "0.91",
|
||||
"db-name": "contacts2.db",
|
||||
"format-ver": "0.92",
|
||||
"notes": "",
|
||||
"scan-date": "2016-01-08_110349",
|
||||
"scan-date": "2016-02-29_172209",
|
||||
"scanner-name": "dbfp",
|
||||
"scanner-ver": "0.95"
|
||||
"scanner-ver": "1.00b"
|
||||
},
|
||||
"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))",
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"_file-metadata": {
|
||||
"_file-details": {
|
||||
"app-name": "com.android.providers.contacts",
|
||||
"app-ver": "",
|
||||
"dn-name": "profile.db",
|
||||
"format-ver": "0.91",
|
||||
"db-name": "profile.db",
|
||||
"format-ver": "0.92",
|
||||
"notes": "",
|
||||
"scan-date": "2016-01-08_110349",
|
||||
"scan-date": "2016-02-29_172209",
|
||||
"scanner-name": "dbfp",
|
||||
"scanner-ver": "0.95"
|
||||
"scanner-ver": "1.00b"
|
||||
},
|
||||
"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))",
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"_file-metadata": {
|
||||
"_file-details": {
|
||||
"app-name": "com.google.android.gms",
|
||||
"app-ver": "",
|
||||
"dn-name": "fitness.db.username_gmail.com",
|
||||
"format-ver": "0.91",
|
||||
"db-name": "fitness.db.username_gmail.com",
|
||||
"format-ver": "0.92",
|
||||
"notes": "",
|
||||
"scan-date": "2016-01-08_110349",
|
||||
"scan-date": "2016-02-29_172210",
|
||||
"scanner-name": "dbfp",
|
||||
"scanner-ver": "0.95"
|
||||
"scanner-ver": "1.00b"
|
||||
},
|
||||
"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)",
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"_file-metadata": {
|
||||
"_file-details": {
|
||||
"app-name": "com.google.android.gms",
|
||||
"app-ver": "",
|
||||
"dn-name": "keys.db",
|
||||
"format-ver": "0.91",
|
||||
"db-name": "keys.db",
|
||||
"format-ver": "0.92",
|
||||
"notes": "",
|
||||
"scan-date": "2016-01-08_110349",
|
||||
"scan-date": "2016-02-29_172210",
|
||||
"scanner-name": "dbfp",
|
||||
"scanner-ver": "0.95"
|
||||
"scanner-ver": "1.00b"
|
||||
},
|
||||
"db-metadata": {
|
||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"_file-metadata": {
|
||||
"_file-details": {
|
||||
"app-name": "com.google.android.gms",
|
||||
"app-ver": "",
|
||||
"dn-name": "node.db",
|
||||
"format-ver": "0.91",
|
||||
"db-name": "node.db",
|
||||
"format-ver": "0.92",
|
||||
"notes": "",
|
||||
"scan-date": "2016-01-08_110349",
|
||||
"scan-date": "2016-02-29_172210",
|
||||
"scanner-name": "dbfp",
|
||||
"scanner-ver": "0.95"
|
||||
"scanner-ver": "1.00b"
|
||||
},
|
||||
"db-metadata": {
|
||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"_file-metadata": {
|
||||
"_file-details": {
|
||||
"app-name": "com.google.android.gms",
|
||||
"app-ver": "",
|
||||
"dn-name": "ns.db",
|
||||
"format-ver": "0.91",
|
||||
"db-name": "ns.db",
|
||||
"format-ver": "0.92",
|
||||
"notes": "",
|
||||
"scan-date": "2016-01-08_110349",
|
||||
"scan-date": "2016-02-29_172210",
|
||||
"scanner-name": "dbfp",
|
||||
"scanner-ver": "0.95"
|
||||
"scanner-ver": "1.00b"
|
||||
},
|
||||
"db-metadata": {
|
||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"_file-metadata": {
|
||||
"_file-details": {
|
||||
"app-name": "com.google.android.gms",
|
||||
"app-ver": "",
|
||||
"dn-name": "plus.db",
|
||||
"format-ver": "0.91",
|
||||
"db-name": "plus.db",
|
||||
"format-ver": "0.92",
|
||||
"notes": "",
|
||||
"scan-date": "2016-01-08_110349",
|
||||
"scan-date": "2016-02-29_172210",
|
||||
"scanner-name": "dbfp",
|
||||
"scanner-ver": "0.95"
|
||||
"scanner-ver": "1.00b"
|
||||
},
|
||||
"db-metadata": {
|
||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"_file-metadata": {
|
||||
"_file-details": {
|
||||
"app-name": "com.google.android.talk",
|
||||
"app-ver": "",
|
||||
"dn-name": "google_analytics_v4.db",
|
||||
"format-ver": "0.91",
|
||||
"db-name": "google_analytics_v4.db",
|
||||
"format-ver": "0.92",
|
||||
"notes": "",
|
||||
"scan-date": "2016-01-08_110349",
|
||||
"scan-date": "2016-02-29_172210",
|
||||
"scanner-name": "dbfp",
|
||||
"scanner-ver": "0.95"
|
||||
"scanner-ver": "1.00b"
|
||||
},
|
||||
"db-metadata": {
|
||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"_file-metadata": {
|
||||
"_file-details": {
|
||||
"app-name": "com.google.android.youtube",
|
||||
"app-ver": "",
|
||||
"dn-name": "identity.db",
|
||||
"format-ver": "0.91",
|
||||
"db-name": "identity.db",
|
||||
"format-ver": "0.92",
|
||||
"notes": "",
|
||||
"scan-date": "2016-01-08_110349",
|
||||
"scan-date": "2016-02-29_172210",
|
||||
"scanner-name": "dbfp",
|
||||
"scanner-ver": "0.95"
|
||||
"scanner-ver": "1.00b"
|
||||
},
|
||||
"db-metadata": {
|
||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"_file-metadata": {
|
||||
"_file-details": {
|
||||
"app-name": "com.viber.voip",
|
||||
"app-ver": "",
|
||||
"dn-name": "com.viber.voip/databases/viber_messages",
|
||||
"format-ver": "0.91",
|
||||
"db-name": "viber_messages",
|
||||
"format-ver": "0.92",
|
||||
"notes": "",
|
||||
"scan-date": "2016-01-08_110349",
|
||||
"scan-date": "2016-02-29_172210",
|
||||
"scanner-name": "dbfp",
|
||||
"scanner-ver": "0.95"
|
||||
"scanner-ver": "1.00b"
|
||||
},
|
||||
"db-metadata": {
|
||||
"adx": "CREATE TABLE adx ( _id INTEGER PRIMARY KEY NOT NULL, event_name TEXT, last_tracked INTEGER NOT NULL )",
|
||||
|
@ -23,7 +23,8 @@
|
|||
"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_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)",
|
||||
"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)",
|
||||
"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)",
|
||||
"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)"
|
||||
|
@ -42,12 +43,13 @@
|
|||
"messages_likes": "a748d1fc1750add16eebf23f06c11345",
|
||||
"participants": "ad08c9b89dbeefce73587a510408cece",
|
||||
"participants_info": "6e12a7afe73aeb45cc67e95c2ef678c4",
|
||||
"purchase": "f027c710c661e4cd5b813af6fb9017c1",
|
||||
"purchase": "0f45d800764d4c423b02460c2e6849f7",
|
||||
"remote_banners": "13201c72b6dc3cab93ea47da9308ec93",
|
||||
"sqlite_sequence": "079355c84d8b3b1511a504e08aab7fd2",
|
||||
"stickers": "23df16b8e627fb62b45caf431d130b45",
|
||||
"stickers_packages": "36f863f03838cb4dd1c2c98c30afde16"
|
||||
},
|
||||
"db-metadata-md5": "2c32c000dfe232d9ec62b1fa8156c294",
|
||||
"db-metadata-md5": "17ddf92e37140f761769e34312600342",
|
||||
"tables": {
|
||||
"adx": {
|
||||
"_id": {
|
||||
|
@ -689,6 +691,9 @@
|
|||
"product_id": {
|
||||
"datatype": "TEXT"
|
||||
},
|
||||
"productjson": {
|
||||
"datatype": "TEXT"
|
||||
},
|
||||
"purchase_state": {
|
||||
"datatype": "INTEGER",
|
||||
"default": "0"
|
||||
|
@ -711,6 +716,37 @@
|
|||
"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": {
|
||||
"name": {
|
||||
"datatype": "INTEGER"
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"_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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,178 @@
|
|||
{
|
||||
"_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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,140 @@
|
|||
{
|
||||
"_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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,306 @@
|
|||
{
|
||||
"_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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,306 @@
|
|||
{
|
||||
"_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-metadata": {
|
||||
"_file-details": {
|
||||
"app-name": "tv.periscope.android",
|
||||
"app-ver": "",
|
||||
"dn-name": "com.localytics.android.c685a165210ff465709ae8d359bef6c90f17a12f344206db16d6f2f7f129e34f.profile.sqlite",
|
||||
"format-ver": "0.91",
|
||||
"db-name": "com.localytics.android.c685a165210ff465709ae8d359bef6c90f17a12f344206db16d6f2f7f129e34f.profile.sqlite",
|
||||
"format-ver": "0.92",
|
||||
"notes": "",
|
||||
"scan-date": "2016-01-08_110349",
|
||||
"scan-date": "2016-02-29_172210",
|
||||
"scanner-name": "dbfp",
|
||||
"scanner-ver": "0.95"
|
||||
"scanner-ver": "1.00b"
|
||||
},
|
||||
"db-metadata": {
|
||||
"android_metadata": "CREATE TABLE android_metadata (locale TEXT)",
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
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()
|
|
@ -0,0 +1,21 @@
|
|||
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()
|
|
@ -0,0 +1,23 @@
|
|||
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