From 7520248b0b53d16e7125d2639a26a93704f1dba3 Mon Sep 17 00:00:00 2001 From: Haalloobim Date: Mon, 8 Dec 2025 22:01:20 +0700 Subject: [PATCH 1/3] fix: fixing parsedCache database column not found --- scripts/artifacts/parsecdCache.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/scripts/artifacts/parsecdCache.py b/scripts/artifacts/parsecdCache.py index 81f9fcb4c..54ffd444a 100644 --- a/scripts/artifacts/parsecdCache.py +++ b/scripts/artifacts/parsecdCache.py @@ -29,19 +29,24 @@ def get_parseCDCache(files_found, report_folder, seeker, wrap_text, timezone_off report_file = file_found db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - cursor.execute(''' - select - datetime(engagement_date + 978307200,'unixepoch') as engagement_date, - input, - completion, - transformed, - score - FROM completion_cache_engagement - ''') - - all_rows = cursor.fetchall() - + # Bug-Fix: give this exception handling in case db is malformed or columns are missing + try: + cursor = db.cursor() + cursor.execute(''' + select + datetime(engagement_date + 978307200,'unixepoch') as engagement_date, + input, + completion, + transformed, + score + FROM completion_cache_engagement + ''') + + all_rows = cursor.fetchall() + except Exception as e: + all_rows = [] + print(f'Error reading ParseCD Cache database: {e}') + for row in all_rows: timestamp = row[0] timestamp = convert_ts_human_to_utc(timestamp) From b2ca37fd76f33c3e2af746df0866c8c64d1a0447 Mon Sep 17 00:00:00 2001 From: Haalloobim Date: Mon, 8 Dec 2025 22:23:52 +0700 Subject: [PATCH 2/3] fix: fixing no such table: ZASSET database column not found --- scripts/artifacts/photosDbexif.py | 34 ++++++++++++++++++------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/scripts/artifacts/photosDbexif.py b/scripts/artifacts/photosDbexif.py index f857f873c..225168a4a 100755 --- a/scripts/artifacts/photosDbexif.py +++ b/scripts/artifacts/photosDbexif.py @@ -65,21 +65,27 @@ def get_photosDbexif(files_found, report_folder, seeker, wrap_text, timezone_off data_list =[] #sqlite portion db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - cursor.execute(''' - SELECT - DATETIME(ZASSET.ZDATECREATED+978307200,'UNIXEPOCH') AS DATECREATED, - DATETIME(ZASSET.ZMODIFICATIONDATE+978307200,'UNIXEPOCH') AS MODIFICATIONDATE, - ZASSET.ZDIRECTORY, - ZASSET.ZFILENAME, - ZASSET.ZLATITUDE, - ZASSET.ZLONGITUDE, - ZADDITIONALASSETATTRIBUTES.ZCREATORBUNDLEID - FROM ZASSET - INNER JOIN ZADDITIONALASSETATTRIBUTES ON ZASSET.Z_PK = ZADDITIONALASSETATTRIBUTES.Z_PK - ''') - all_rows = cursor.fetchall() + # Bug-Fix: give this exception handling in case db is malformed or columns are missing + try: + cursor = db.cursor() + cursor.execute(''' + SELECT + DATETIME(ZASSET.ZDATECREATED+978307200,'UNIXEPOCH') AS DATECREATED, + DATETIME(ZASSET.ZMODIFICATIONDATE+978307200,'UNIXEPOCH') AS MODIFICATIONDATE, + ZASSET.ZDIRECTORY, + ZASSET.ZFILENAME, + ZASSET.ZLATITUDE, + ZASSET.ZLONGITUDE, + ZADDITIONALASSETATTRIBUTES.ZCREATORBUNDLEID + FROM ZASSET + INNER JOIN ZADDITIONALASSETATTRIBUTES ON ZASSET.Z_PK = ZADDITIONALASSETATTRIBUTES.Z_PK + ''') + + all_rows = cursor.fetchall() + except Exception as e: + all_rows = [] + print(f'Error reading photos database: {e}') usageentries = len(all_rows) From 8715a247f4d478a85a89855e20b589022270d2a9 Mon Sep 17 00:00:00 2001 From: Haalloobim Date: Mon, 8 Dec 2025 22:35:40 +0700 Subject: [PATCH 3/3] fix: fixing no such table: ZSECUREBACKUPMETADATATIMESTAMP on ios 13.4.1 [trustedPeers Artifact] --- scripts/artifacts/trustedPeers.py | 41 ++++++++++++++++++------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/scripts/artifacts/trustedPeers.py b/scripts/artifacts/trustedPeers.py index c8d7221cc..837c303fe 100644 --- a/scripts/artifacts/trustedPeers.py +++ b/scripts/artifacts/trustedPeers.py @@ -32,24 +32,31 @@ def get_trustedPeers(files_found, report_folder, seeker, wrap_text, timezone_off break db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - cursor.execute(''' - SELECT - DISTINCT datetime(client.ZSECUREBACKUPMETADATATIMESTAMP + 978307200, 'unixepoch') AS "Timestamp", - client.ZDEVICEMODEL AS "Model", - client.ZDEVICEMODELVERSION AS "Model Version", - client.ZDEVICENAME AS "Device Name", - metadata.ZSERIAL AS "Serial Number", - client.ZSECUREBACKUPNUMERICPASSPHRASELENGTH AS "Passcode Length" - FROM - ZESCROWCLIENTMETADATA AS client - LEFT JOIN - ZESCROWMETADATA AS metadata - ON - client.ZESCROWMETADATA = metadata.Z_PK; - ''') + + # Bug-Fix: give this exception handling in case db is malformed or no such table exists + try: + cursor = db.cursor() + cursor.execute(''' + SELECT + DISTINCT datetime(client.ZSECUREBACKUPMETADATATIMESTAMP + 978307200, 'unixepoch') AS "Timestamp", + client.ZDEVICEMODEL AS "Model", + client.ZDEVICEMODELVERSION AS "Model Version", + client.ZDEVICENAME AS "Device Name", + metadata.ZSERIAL AS "Serial Number", + client.ZSECUREBACKUPNUMERICPASSPHRASELENGTH AS "Passcode Length" + FROM + ZESCROWCLIENTMETADATA AS client + LEFT JOIN + ZESCROWMETADATA AS metadata + ON + client.ZESCROWMETADATA = metadata.Z_PK; + ''') - all_rows = cursor.fetchall() + all_rows = cursor.fetchall() + except Exception as e: + all_rows = [] + print(f'Error reading trusted peers database: {e}') + usageentries = len(all_rows) data_list = []