From cf88740f6a39ea0ccb2807b2eaefbfe0d49b3ffb Mon Sep 17 00:00:00 2001 From: tek Date: Wed, 26 Jan 2022 14:50:34 +0100 Subject: [PATCH] Fixes bugs in SafariBrowserState module and add tests --- mvt/ios/modules/mixed/safari_browserstate.py | 10 +++-- .../3a47b0981ed7c10f3e2800aa66bac96a3b5db28e | Bin 0 -> 40960 bytes tests/ios/test_safari_browserstate.py | 36 ++++++++++++++++++ 3 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 tests/artifacts/ios_backup/3a/3a47b0981ed7c10f3e2800aa66bac96a3b5db28e create mode 100644 tests/ios/test_safari_browserstate.py diff --git a/mvt/ios/modules/mixed/safari_browserstate.py b/mvt/ios/modules/mixed/safari_browserstate.py index 38de49f..97806e1 100644 --- a/mvt/ios/modules/mixed/safari_browserstate.py +++ b/mvt/ios/modules/mixed/safari_browserstate.py @@ -62,6 +62,7 @@ class SafariBrowserState(IOSExtraction): self.detected.append(result) def _process_browser_state_db(self, db_path): + self._recover_sqlite_db_if_needed(db_path) conn = sqlite3.connect(db_path) cur = conn.cursor() @@ -92,8 +93,12 @@ class SafariBrowserState(IOSExtraction): if row[4]: # Skip a 4 byte header before the plist content. session_plist = row[4][4:] - session_data = plistlib.load(io.BytesIO(session_plist)) - session_data = keys_bytes_to_string(session_data) + session_data = {} + try: + session_data = plistlib.load(io.BytesIO(session_plist)) + session_data = keys_bytes_to_string(session_data) + except plistlib.InvalidFileException: + pass if "SessionHistoryEntries" in session_data.get("SessionHistory", {}): for session_entry in session_data["SessionHistory"].get("SessionHistoryEntries"): @@ -114,7 +119,6 @@ class SafariBrowserState(IOSExtraction): }) def run(self): - if self.is_backup: for backup_file in self._get_backup_files_from_manifest(relative_path=SAFARI_BROWSER_STATE_BACKUP_RELPATH): self.file_path = self._get_backup_file_from_id(backup_file["file_id"]) diff --git a/tests/artifacts/ios_backup/3a/3a47b0981ed7c10f3e2800aa66bac96a3b5db28e b/tests/artifacts/ios_backup/3a/3a47b0981ed7c10f3e2800aa66bac96a3b5db28e new file mode 100644 index 0000000000000000000000000000000000000000..b27d5a27145d3836437c7622d7eded7c10d1a7e2 GIT binary patch literal 40960 zcmeI(U2ob}7zc1WBw#XSRNW#jcH?S_8WfX2LlUxSQVp0WD}{y^tx+#52Om-^1`{8X zEW2x0P1?o2&ZKFV`vTLXYQ5jZq-h^umpjKm0H>)?RE>nW-y(@eu z#eQ1)@qJygKCgZ)2zmE*E)zw@{3yj7x+0g6So>rBgRQDgN)kFD_b||Zj zdS$=NKKEEF*OlRr<+}E?E|)9p)hLzZMtT3Bp(z6#-84Ky&Xp=Txu6x*MyVgA^g2za z-F2BDF^7^oE5^+M2<&C67teDdCI=~Z?V78{9vU6A9N zEXv=pE5eFxP>*FG=WIeet4$cGTAG|Rml&qiIkqhpdE_`JZNoj$$M$VBNluq^Se};a zv~}C+oXELKWt1$X(C5xM%cS#+#0_rkxB7$8J*TVFrt8?Y?zCEzc$Xs|_11N*GlNar zk?WjOmNuBrv}o5hE_jD*iaMrYI~}51ZR3~(L;VyCiH**5&izAja!!;$#Mtf+i*=$z zuY@PYYjtufWrdQsTC|D#3*q?Z%kL;r>X#-BKM957Yir`6Uyy@ZrsT9oI!zK-ou4Sv zz{b^%(I)H=K23bPE=G9D?>_Q#2F4p$otwxR*m&ckK=CfRqcg&2){UlToe|x1n!PsZ zc!9dU5;rW8Y2!z6R6jFpHqR3^oc7OutejZg(O#4J(pJy5FLc{sB^?M(DK6Sz?|smKtqWAq2<^2!V-Ilv0nxDg9QQ*fB*y_009U<00Izz00bZafmB1Jj!7s*s7uXLL z2tWV=5P$##AOHafKmY;|fB*z;m%!?LLyAsw{m<|Jhho18vA<(~uwPgp009U<00Izz z00bZa0SG_<0uZ}#GhSs8iF9P(R|JQ_=b}M!cgM>|SxpiW7iD?<@j(fbp*EU$3zUMl< z?v!EbFE3Mnemq~B=Kg>G`TsXU?9J@>&@%)e009U<00Izz00bZa0SG_<0yh)5ADZs} zAo}