diff --git a/scripts/artifacts/siminfo.py b/scripts/artifacts/siminfo.py
old mode 100755
new mode 100644
index b5f86a3f..2670cfc5
--- a/scripts/artifacts/siminfo.py
+++ b/scripts/artifacts/siminfo.py
@@ -32,34 +32,49 @@ def process_siminfo(folder, uid, report_folder):
#Query to create report
try:
- cursor.execute('''
- SELECT
- number,
- imsi,
- display_name,
- carrier_name,
- iso_country_code,
- carrier_id,
- icc_id
- FROM
- siminfo
- ''')
+ # Find columns that available
+ columns_info = cursor.fetchall()
+ available_columns = [col[1] for col in columns_info]
except:
- cursor.execute('''
+ # If siminfo table don't exist
+ logfunc(f'Error getting table schema for SIM_info_{uid}')
+ db.close()
+ return
+
+ #Helper function
+ def get_col(col_name):
+ return col_name if col_name in available_columns else "''"
+
+ id_col = "''"
+ if 'imsi' in available_columns: id_col = 'imsi'
+ elif 'card_id' in available_columns: id_col = 'card_id'
+ elif 'sim_id' in available_columns: id_col = 'sim_id'
+
+ iso_col = "''"
+ if 'iso_country_code' in available_columns: iso_column = 'iso_country_code'
+ elif 'country_iso' in available_columns: iso_column = 'country_iso'
+
+ icc_col = get_col('icc_id')
+
+ query = f'''
SELECT
- number,
- card_id,
- display_name,
- carrier_name,
- carrier_name,
- carrier_name,
- icc_id
- FROM
- siminfo
- ''')
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ {get_col('number')},
+ {id_col} as sim_identifier,
+ {get_col('display_name')},
+ {get_col('carrier_name')},
+ {iso_col} as country_iso,
+ {get_col('carrier_id')},
+ {icc_col}
+ FROM siminfo
+ '''
+
+ try:
+ cursor.execute(query)
+ all_rows = cursor.fetchall()
+ usageentries = len(all_rows)
+ except Exception as e:
+ logfunc(f'Error executing query for SIM_info_{uid}: {str(e)}')
+ usageentries = 0
if usageentries > 0:
report = ArtifactHtmlReport('Device Info')
report.start_artifact_report(report_folder, f'SIM_info_{uid}')
@@ -68,17 +83,21 @@ def process_siminfo(folder, uid, report_folder):
data_list = []
for row in all_rows:
- if row[3] == row[4]:
- row1 = ''
- row4 = ''
- row5 = ''
- else:
- row1 = row[1]
- row4 = row[4]
- row5 = row[5]
- data_list.append((row[0], row1, row[2], row[3], row4, row5, row[6]))
- logdevinfo(f"SIM Number & IMSI: {row[0]} - {row1}")
- logdevinfo(f"SIM Display Name: {row[2]}")
+ # Collect data directly
+ number = str(row[0]) if row[0] is not None else ''
+ identifier = str(row[1]) if row[1] is not None else ''
+ display_name = str(row[2]) if row[2] is not None else ''
+ carrier = str(row[3]) if row[3] is not None else ''
+ iso = str(row[4]) if row[4] is not None else ''
+ carrier_id = str(row[5]) if row[5] is not None else ''
+ icc_id = str(row[6]) if row[6] is not None else ''
+
+ data_list.append((number, identifier, display_name, carrier, iso, carrier_id, icc_id))
+
+ logdevinfo(f"SIM Number: {number}")
+ logdevinfo(f"SIM ID (IMSI/CardID): {identifier}")
+ logdevinfo(f"SIM Carrier: {carrier}")
+
report.write_artifact_data_table(data_headers, data_list, folder)
report.end_artifact_report()
@@ -87,6 +106,8 @@ def process_siminfo(folder, uid, report_folder):
else:
logfunc(f'No SIM_Info{uid} data available')
db.close()
+
+
__artifacts__ = {
"siminfo": (