Source code for plaso.parsers.sqlite_plugins.ios_notes

"""SQLite parser plugin for iOS Notes database files."""

from dfdatetime import cocoa_time as dfdatetime_cocoa_time

from plaso.containers import events
from plaso.parsers import sqlite
from plaso.parsers.sqlite_plugins import interface


[docs] class IOSNotesEventData(events.EventData): """iOS Notes event data. Attributes: creation_time (dfdatetime.DateTimeValues): date and time the note was created. modification_time (dfdatetime.DateTimeValues): date and time the note was last modified. snippet (str): snippet of the note. title (str): title of the note. """ DATA_TYPE = 'ios:notes:note'
[docs] def __init__(self): """Initializes event data.""" super().__init__(data_type=self.DATA_TYPE) self.creation_time = None self.modification_time = None self.snippet = None self.title = None
[docs] class IOSNotesPlugin(interface.SQLitePlugin): """SQLite parser plugin for iOS Notes database files.""" NAME = 'ios_notes' DATA_FORMAT = 'iOS Notes SQLite database file' REQUIRED_STRUCTURE = { 'ZICCLOUDSYNCINGOBJECT': frozenset([ 'ZCREATIONDATE3', 'ZMODIFICATIONDATE1', 'ZSNIPPET', 'ZTITLE1'])} QUERIES = [ (('SELECT ZCREATIONDATE3, ZMODIFICATIONDATE1, ZSNIPPET, ZTITLE1 ' 'FROM ZICCLOUDSYNCINGOBJECT'), '_ParseNoteRow')] SCHEMAS = [{ 'ACHANGE': ( 'CREATE TABLE ACHANGE ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, ' 'Z_OPT INTEGER, ZCHANGETYPE INTEGER, ZENTITY INTEGER, ZENTITYPK ' 'INTEGER, ZTRANSACTIONID INTEGER, ZCOLUMNS BLOB )'), 'ATRANSACTION': ( 'CREATE TABLE ATRANSACTION ( Z_PK INTEGER PRIMARY KEY, Z_ENT ' 'INTEGER, Z_OPT INTEGER, ZAUTHORTS INTEGER, ZBUNDLEIDTS INTEGER, ' 'ZCONTEXTNAMETS INTEGER, ZPROCESSIDTS INTEGER, ZTIMESTAMP FLOAT, ' 'ZAUTHOR VARCHAR, ZBUNDLEID VARCHAR, ZCONTEXTNAME VARCHAR, ' 'ZPROCESSID VARCHAR, ZQUERYGEN BLOB )'), 'ATRANSACTIONSTRING': ( 'CREATE TABLE ATRANSACTIONSTRING ( Z_PK INTEGER PRIMARY KEY, Z_ENT ' 'INTEGER, Z_OPT INTEGER, ZNAME VARCHAR )'), 'ZICCLOUDSTATE': ( 'CREATE TABLE ZICCLOUDSTATE ( Z_PK INTEGER PRIMARY KEY, Z_ENT ' 'INTEGER, Z_OPT INTEGER, ZCURRENTLOCALVERSION INTEGER, ZINCLOUD ' 'INTEGER, ZLATESTVERSIONSYNCEDTOCLOUD INTEGER, ZCLOUDSYNCINGOBJECT ' 'INTEGER, Z2_CLOUDSYNCINGOBJECT INTEGER, ZLOCALVERSIONDATE ' 'TIMESTAMP )'), 'ZICCLOUDSYNCINGOBJECT': ( 'CREATE TABLE ZICCLOUDSYNCINGOBJECT ( Z_PK INTEGER PRIMARY KEY, ' 'Z_ENT INTEGER, Z_OPT INTEGER, ZCRYPTOITERATIONCOUNT INTEGER, ' 'ZISPASSWORDPROTECTED INTEGER, ZMARKEDFORDELETION INTEGER, ' 'ZMINIMUMSUPPORTEDNOTESVERSION INTEGER, ZNEEDSINITIALFETCHFROMCLOUD ' 'INTEGER, ZNEEDSTOBEFETCHEDFROMCLOUD INTEGER, ' 'ZNEEDSTOSAVEUSERSPECIFICRECORD INTEGER, ZCLOUDSTATE INTEGER, ' 'ZACCOUNT INTEGER, ZCHECKEDFORLOCATION INTEGER, ZFILESIZE INTEGER, ' 'ZHANDWRITINGSUMMARYVERSION INTEGER, ZHASMARKUPDATA INTEGER, ' 'ZIMAGECLASSIFICATIONSUMMARYVERSION INTEGER, ZIMAGEFILTERTYPE ' 'INTEGER, ZNEEDSINITIALRELATIONSHIPSETUP INTEGER, ' 'ZOCRSUMMARYVERSION INTEGER, ZORIENTATION INTEGER, ZSECTION ' 'INTEGER, ZURLEXPIRED INTEGER, ZLOCATION INTEGER, ZMEDIA INTEGER, ' 'ZNOTE INTEGER, ZNOTEUSINGTITLEFORNOTETITLE INTEGER, ' 'ZPARENTATTACHMENT INTEGER, ZAPPEARANCETYPE INTEGER, ' 'ZSCALEWHENDRAWING INTEGER, ZVERSION INTEGER, ZVERSIONOUTOFDATE ' 'INTEGER, ZATTACHMENT INTEGER, ZSTATE INTEGER, ZACCOUNT1 INTEGER, ' 'ZACCOUNT2 INTEGER, ZMENTIONNOTIFICATIONATTEMPTCOUNT INTEGER, ' 'ZMENTIONNOTIFICATIONSTATE INTEGER, ZNOTE1 INTEGER, ' 'ZPARENTATTACHMENT1 INTEGER, ZTYPE INTEGER, ZACCOUNT3 INTEGER, ' 'ZATTACHMENT1 INTEGER, ZATTACHMENTVIEWTYPE INTEGER, ZISPINNED ' 'INTEGER, ZISSYSTEMPAPER INTEGER, ZLEGACYNOTEWASPLAINTEXT INTEGER, ' 'ZNOTEHASCHANGES INTEGER, ZPAPERSTYLETYPE INTEGER, ' 'ZPREFERREDBACKGROUNDTYPE INTEGER, ZACCOUNT4 INTEGER, ZFOLDER ' 'INTEGER, ZNOTEDATA INTEGER, ZTITLESOURCEATTACHMENT INTEGER, ' 'ZISHIDDENNOTECONTAINER INTEGER, ZSORTORDER INTEGER, ZOWNER ' 'INTEGER, ZACCOUNTTYPE INTEGER, ZDIDCHOOSETOMIGRATE INTEGER, ' 'ZDIDFINISHMIGRATION INTEGER, ZDIDMIGRATEONMAC INTEGER, ' 'ZSERVERSIDEUPDATETASKFAILURECOUNT INTEGER, ZSTOREDATASEPARATELY ' 'INTEGER, ZACCOUNTDATA INTEGER, ZCUSTOMNOTESORTTYPEVALUE INTEGER, ' 'ZFOLDERTYPE INTEGER, ZIMPORTEDFROMLEGACY INTEGER, ZACCOUNT5 ' 'INTEGER, ZPARENT INTEGER, ZCREATIONDATE TIMESTAMP, ' 'ZCROPPINGQUADBOTTOMLEFTX FLOAT, ZCROPPINGQUADBOTTOMLEFTY FLOAT, ' 'ZCROPPINGQUADBOTTOMRIGHTX FLOAT, ZCROPPINGQUADBOTTOMRIGHTY FLOAT, ' 'ZCROPPINGQUADTOPLEFTX FLOAT, ZCROPPINGQUADTOPLEFTY FLOAT, ' 'ZCROPPINGQUADTOPRIGHTX FLOAT, ZCROPPINGQUADTOPRIGHTY FLOAT, ' 'ZDURATION FLOAT, ZMODIFICATIONDATE TIMESTAMP, ZORIGINX FLOAT, ' 'ZORIGINY FLOAT, ZPREVIEWUPDATEDATE TIMESTAMP, ZSIZEHEIGHT FLOAT, ' 'ZSIZEWIDTH FLOAT, ZHEIGHT FLOAT, ZMODIFIEDDATE TIMESTAMP, ZSCALE ' 'FLOAT, ZWIDTH FLOAT, ZSTATEMODIFICATIONDATE TIMESTAMP, ' 'ZCREATIONDATE1 TIMESTAMP, ZCREATIONDATE2 TIMESTAMP, ' 'ZMODIFICATIONDATEATIMPORT TIMESTAMP, ZCREATIONDATE3 TIMESTAMP, ' 'ZFOLDERMODIFICATIONDATE TIMESTAMP, ' 'ZLASTACTIVITYRECENTUPDATESVIEWEDDATE TIMESTAMP, ' 'ZLASTACTIVITYSUMMARYVIEWEDDATE TIMESTAMP, ' 'ZLASTATTRIBUTIONSVIEWEDDATE TIMESTAMP, ZLASTNOTIFIEDDATE ' 'TIMESTAMP, ZLASTOPENEDDATE TIMESTAMP, ZLASTVIEWEDMODIFICATIONDATE ' 'TIMESTAMP, ZLEGACYMODIFICATIONDATEATIMPORT TIMESTAMP, ' 'ZMODIFICATIONDATE1 TIMESTAMP, ZCUSTOMNOTESORTTYPEMODIFICATIONDATE ' 'TIMESTAMP, ZDATEFORLASTTITLEMODIFICATION TIMESTAMP, ' 'ZPARENTMODIFICATIONDATE TIMESTAMP, ZIDENTIFIER VARCHAR, ' 'ZPASSWORDHINT VARCHAR, ZZONEOWNERNAME VARCHAR, ' 'ZADDITIONALINDEXABLETEXT VARCHAR, ZFALLBACKSUBTITLEIOS VARCHAR, ' 'ZFALLBACKSUBTITLEMAC VARCHAR, ZFALLBACKTITLE VARCHAR, ' 'ZHANDWRITINGSUMMARY VARCHAR, ZIMAGECLASSIFICATIONSUMMARY VARCHAR, ' 'ZOCRSUMMARY VARCHAR, ZREMOTEFILEURLSTRING VARCHAR, ZSUMMARY ' 'VARCHAR, ZTITLE VARCHAR, ZTYPEUTI VARCHAR, ZURLSTRING VARCHAR, ' 'ZUSERTITLE VARCHAR, ZDEVICEIDENTIFIER VARCHAR, ZDISPLAYTEXT ' 'VARCHAR, ZSTANDARDIZEDCONTENT VARCHAR, ZALTTEXT VARCHAR, ' 'ZTOKENCONTENTIDENTIFIER VARCHAR, ZTYPEUTI1 VARCHAR, ' 'ZCONTENTHASHATIMPORT VARCHAR, ZFILENAME VARCHAR, ' 'ZLEGACYCONTENTHASHATIMPORT VARCHAR, ZLEGACYIMPORTDEVICEIDENTIFIER ' 'VARCHAR, ZLEGACYMANAGEDOBJECTIDURIREPRESENTATION VARCHAR, ' 'ZSELECTEDINKCOLORSTRING VARCHAR, ZSELECTEDINKIDENTIFIER VARCHAR, ' 'ZSNIPPET VARCHAR, ZTHUMBNAILATTACHMENTIDENTIFIER VARCHAR, ZTITLE1 ' 'VARCHAR, ZACCOUNTNAMEFORACCOUNTLISTSORTING VARCHAR, ' 'ZNESTEDTITLEFORSORTING VARCHAR, ZNAME VARCHAR, ' 'ZSERVERSIDEUPDATETASKLASTATTEMPTEDBUILD VARCHAR, ' 'ZSERVERSIDEUPDATETASKLASTATTEMPTEDVERSION VARCHAR, ' 'ZSERVERSIDEUPDATETASKLASTCOMPLETEDBUILD VARCHAR, ' 'ZSERVERSIDEUPDATETASKLASTCOMPLETEDVERSION VARCHAR, ZUSERRECORDNAME ' 'VARCHAR, ZSMARTFOLDERQUERYJSON VARCHAR, ZTITLE2 VARCHAR, ' 'ZPAPERASSETSURL VARCHAR, ZPAPERDATABASEURL VARCHAR, ' 'ZREPLICAIDTOBUNDLEIDENTIFIER BLOB, ZACTIVITYEVENTSDATA BLOB, ' 'ZASSETCRYPTOINITIALIZATIONVECTOR BLOB, ZASSETCRYPTOTAG BLOB, ' 'ZCRYPTOINITIALIZATIONVECTOR BLOB, ZCRYPTOSALT BLOB, ZCRYPTOTAG ' 'BLOB, ZCRYPTOWRAPPEDKEY BLOB, ZENCRYPTEDVALUESJSON BLOB, ' 'ZREPLICAIDTONOTESVERSIONDATA BLOB, ZSERVERRECORDDATA BLOB, ' 'ZSERVERSHAREDATA BLOB, ZUNAPPLIEDENCRYPTEDRECORD BLOB, ' 'ZUSERSPECIFICSERVERRECORDDATA BLOB, ZMERGEABLEDATA BLOB, ' 'ZFALLBACKIMAGECRYPTOINITIALIZATIONVECTOR BLOB, ' 'ZFALLBACKIMAGECRYPTOTAG BLOB, ZLINKPRESENTATIONARCHIVEDMETADATA ' 'BLOB, ZMARKUPMODELDATA BLOB, ZMERGEABLEDATA1 BLOB, ZMETADATADATA ' 'BLOB, ZSYNAPSEDATA BLOB, ZCRYPTOMETADATAINITIALIZATIONVECTOR BLOB, ' 'ZCRYPTOMETADATATAG BLOB, ZENCRYPTEDMETADATA BLOB, ZMETADATA BLOB, ' 'ZLASTNOTIFIEDTIMESTAMPDATA BLOB, ZLASTVIEWEDTIMESTAMPDATA BLOB, ' 'ZREPLICAIDTOUSERIDDICTDATA BLOB, ZCRYPTOVERIFIER BLOB, ' 'ZSERVERSIDEUPDATETASKCONTINUATIONTOKEN BLOB, ZMERGEABLEDATA2 BLOB ' ')'), 'ZICLOCATION': ( 'CREATE TABLE ZICLOCATION ( Z_PK INTEGER PRIMARY KEY, Z_ENT ' 'INTEGER, Z_OPT INTEGER, ZPLACEUPDATED INTEGER, ZATTACHMENT ' 'INTEGER, ZLATITUDE FLOAT, ZLONGITUDE FLOAT, ZPLACEMARKDATA BLOB )'), 'ZICNOTEDATA': ( 'CREATE TABLE ZICNOTEDATA ( Z_PK INTEGER PRIMARY KEY, Z_ENT ' 'INTEGER, Z_OPT INTEGER, ZNOTE INTEGER, ZCRYPTOINITIALIZATIONVECTOR ' 'BLOB, ZCRYPTOTAG BLOB, ZDATA BLOB )'), 'ZICSERVERCHANGETOKEN': ( 'CREATE TABLE ZICSERVERCHANGETOKEN ( Z_PK INTEGER PRIMARY KEY, ' 'Z_ENT INTEGER, Z_OPT INTEGER, ZDATABASESCOPE INTEGER, ZACCOUNT ' 'INTEGER, ZOWNERNAME VARCHAR, ZZONENAME VARCHAR, ' 'ZCKSERVERCHANGETOKENDATA BLOB )'), 'Z_METADATA': ( 'CREATE TABLE Z_METADATA (Z_VERSION INTEGER PRIMARY KEY, Z_UUID ' 'VARCHAR(255), Z_PLIST BLOB)'), 'Z_MODELCACHE': ( 'CREATE TABLE Z_MODELCACHE (Z_CONTENT BLOB)'), 'Z_PRIMARYKEY': ( 'CREATE TABLE Z_PRIMARYKEY (Z_ENT INTEGER PRIMARY KEY, Z_NAME ' 'VARCHAR, Z_SUPER INTEGER, Z_MAX INTEGER)')}] def _GetDateTimeRowValue(self, query_hash, row, value_name): """Retrieves a date and time value from the row. Args: query_hash (int): hash of the query, that uniquely identifies the query that produced the row. row (sqlite3.Row): row. value_name (str): name of the value. Returns: dfdatetime.CocoaTime: date and time value or None if not available. """ timestamp = self._GetRowValue(query_hash, row, value_name) if timestamp is None: return None return dfdatetime_cocoa_time.CocoaTime(timestamp=timestamp) def _ParseNoteRow(self, parser_mediator, query, row, **unused_kwargs): """Parses a note row. Args: parser_mediator (ParserMediator): mediates interactions between parsers and other components, such as storage and dfVFS. query (str): query that created the row. row (sqlite3.Row): row. """ query_hash = hash(query) event_data = IOSNotesEventData() event_data.creation_time = self._GetDateTimeRowValue( query_hash, row, 'ZCREATIONDATE3') event_data.modification_time = self._GetDateTimeRowValue( query_hash, row, 'ZMODIFICATIONDATE1') event_data.title = self._GetRowValue(query_hash, row, 'ZTITLE1') event_data.snippet = self._GetRowValue(query_hash, row, 'ZSNIPPET') parser_mediator.ProduceEventData(event_data)
sqlite.SQLiteParser.RegisterPlugin(IOSNotesPlugin)