Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 30 additions & 28 deletions scripts/artifacts/androidauto.py
Original file line number Diff line number Diff line change
@@ -1,49 +1,51 @@
__artifacts_v2__ = {
"extract_android_auto": {
"name": "Android Auto Connected Cars",
"name": "Android Auto - Connected Cars",
"description": "Android Auto connected cars",
"author": "its5Q",
"version": "0.0.1",
"date": "2025-07-28",
"creation_date": "2025-07-28",
"last_update_date": "2026-05-28",
"requirements": "none",
"category": "Android Auto",
"notes": "",
"paths": ('*/com.google.android.projection.gearhead/databases/carservicedata.db'),
"paths": ('*/com.google.android.projection.gearhead/databases/carservicedata.db*'),
"output_types": "standard",
"artifact_icon": "truck",
}
}

import json
from datetime import datetime, timezone
from collections import defaultdict
from scripts.artifact_report import ArtifactHtmlReport
from scripts.ilapfuncs import artifact_processor, logfunc, open_sqlite_db_readonly
from scripts.ilapfuncs import artifact_processor, get_file_path, get_sqlite_db_records, convert_unix_ts_to_utc

@artifact_processor
def extract_android_auto(files_found, report_folder, seeker, wrap_text):
def extract_android_auto(context):
data_list = []
files_found = context.get_files_found()
source_path = get_file_path(files_found, "carservicedata.db")

db_path = files_found[0]
db = open_sqlite_db_readonly(db_path)
cursor = db.cursor()
cursor.execute('''
SELECT connectiontime, manufacturer, model,
modelyear, bluetoothaddress, wifissid,
wifibssid, wifipassword
query = '''
SELECT
connectiontime,
manufacturer,
model,
modelyear,
bluetoothaddress,
wifissid,
wifibssid,
wifipassword,
headUnitMake,
headUnitModel,
headUnitSoftwareVersion,
vehicleidclient
FROM allowedcars;
''')
'''

rows = cursor.fetchall()
for row in rows:
row = list(row)
try:
row[0] = datetime.fromtimestamp(row[0] / 1000, timezone.utc)
except Exception as ex:
logfunc('Error processing timestamp: ', ex)
data_headers = (('Connection Time', 'datetime'), 'Manufacturer', 'Model', 'Year', 'Bluetooth MAC', 'Wi-Fi SSID', 'Wi-Fi BSSID', 'Wi-Fi Password', 'Head Unit Make', 'Head Unit Model', 'Head Unit Software Version', 'Vehicle Client ID')

data_list.append(row)
db_records = get_sqlite_db_records(source_path, query)

data_headers = (('Connection Time', 'datetime'), 'Manufacturer', 'Model', 'Year', 'Bluetooth MAC', 'Wi-Fi SSID', 'Wi-Fi BSSID', 'Wi-Fi Password')
for record in db_records:
connectiontime = convert_unix_ts_to_utc(record[0])

return data_headers, data_list, db_path
data_list.append((connectiontime, record[1], record[2], record[3], record[4], record[5], record[6], record[7], record[8], record[9], record[10], record[11]))

return data_headers, data_list, source_path
Loading