Merged lasted helper code and updated viber.py to conform

This commit is contained in:
U-BASIS\dsmyda 2019-09-11 16:39:48 -04:00
parent d8397ea595
commit 0580ffdd2f
3 changed files with 45 additions and 27 deletions

View File

@ -17,6 +17,8 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
""" """
from ResultSetIterator import ResultSetIterator from ResultSetIterator import ResultSetIterator
from org.sleuthkit.autopsy.coreutils import AppDBParserHelper
from org.sleuthkit.datamodel import Account
class TskCallLogsParser(ResultSetIterator): class TskCallLogsParser(ResultSetIterator):
""" """
@ -32,21 +34,24 @@ class TskCallLogsParser(ResultSetIterator):
def __init__(self, result_set): def __init__(self, result_set):
super(TskCallLogsParser, self).__init__(result_set) super(TskCallLogsParser, self).__init__(result_set)
self.INCOMING_CALL = "Incoming"
self.OUTGOING_CALL = "Outgoing"
self._DEFAULT_STRING = "" self._DEFAULT_STRING = ""
self._DEFAULT_DIRECTION = AppDBParserHelper.CommunicationDirection.UNKNOWN
self._DEFAULT_ADDRESS = Account.Address("","")
self._DEFAULT_CALL_TYPE = AppDBParserHelper.CallMediaType.UNKNOWN
def get_account_name(self): self.INCOMING_CALL = AppDBParserHelper.CommunicationDirection.INCOMING
return self._DEFAULT_STRING self.OUTGOING_CALL = AppDBParserHelper.CommunicationDirection.OUTGOING
self.AUDIO_CALL = AppDBParserHelper.CallMediaType.AUDIO
self.VIDEO_CALL = AppDBParserHelper.CallMediaType.VIDEO
def get_call_direction(self): def get_call_direction(self):
return self._DEFAULT_STRING return self._DEFAULT_DIRECTION
def get_phone_number_from(self): def get_phone_number_from(self):
return self._DEFAULT_STRING return self._DEFAULT_ADDRESS
def get_phone_number_to(self): def get_phone_number_to(self):
return self._DEFAULT_STRING return self._DEFAULT_ADDRESS
def get_call_start_date_time(self): def get_call_start_date_time(self):
return self._DEFAULT_LONG return self._DEFAULT_LONG
@ -54,5 +59,5 @@ class TskCallLogsParser(ResultSetIterator):
def get_call_end_date_time(self): def get_call_end_date_time(self):
return self._DEFAULT_LONG return self._DEFAULT_LONG
def get_contact_name(self): def get_call_type(self):
return self._DEFAULT_STRING return self._DEFAULT_CALL_TYPE

View File

@ -33,18 +33,22 @@ class TskMessagesParser(ResultSetIterator):
def __init__(self, result_set): def __init__(self, result_set):
super(TskMessagesParser, self).__init__(result_set) super(TskMessagesParser, self).__init__(result_set)
self.INCOMING_MSG = "Incoming"
self.OUTGOING_MSG = "Outgoing"
self._DEFAULT_TEXT = "" self._DEFAULT_TEXT = ""
self._DEFAULT_LONG = -1L self._DEFAULT_LONG = -1L
self._DEFAULT_MSG_READ_STATUS = AppDBParserHelper.MessageReadStatusEnum.UNKNOWN self._DEFAULT_MSG_READ_STATUS = AppDBParserHelper.MessageReadStatusEnum.UNKNOWN
self._DEFAULT_ACCOUNT_ADDRESS = Account.Address("","") self._DEFAULT_ACCOUNT_ADDRESS = Account.Address("","")
self._DEFAULT_COMMUNICATION_DIRECTION = AppDBParserHelper.CommunicationDirection.UNKNOWN
self.INCOMING = AppDBParserHelper.CommunicationDirection.INCOMING
self.OUTGOING = AppDBParserHelper.CommunicationDirection.OUTGOING
self.READ = AppDBParserHelper.MessageReadStatusEnum.READ
self.UNREAD = AppDBParserHelper.MessageReadStatusEnum.UNREAD
def get_message_type(self): def get_message_type(self):
return self._DEFAULT_TEXT return self._DEFAULT_TEXT
def get_message_direction(self): def get_message_direction(self):
return self._DEFAULT_TEXT return self._DEFAULT_COMMUNICATION_DIRECTION
def get_phone_number_from(self): def get_phone_number_from(self):
return self._DEFAULT_ACCOUNT_ADDRESS return self._DEFAULT_ACCOUNT_ADDRESS

View File

@ -88,13 +88,12 @@ class ViberAnalyzer(general.AndroidComponentAnalyzer):
calllog_parser = ViberCallLogsParser(contact_and_calllog_db) calllog_parser = ViberCallLogsParser(contact_and_calllog_db)
while calllog_parser.next(): while calllog_parser.next():
helper.addCalllog( helper.addCalllog(
calllog_parser.get_account_name(),
calllog_parser.get_call_direction(), calllog_parser.get_call_direction(),
calllog_parser.get_phone_number_from(), calllog_parser.get_phone_number_from(),
calllog_parser.get_phone_number_to(), calllog_parser.get_phone_number_to(),
calllog_parser.get_call_start_date_time(), calllog_parser.get_call_start_date_time(),
calllog_parser.get_call_end_date_time(), calllog_parser.get_call_end_date_time(),
calllog_parser.get_contact_name() calllog_parser.get_call_type()
) )
calllog_parser.close() calllog_parser.close()
@ -139,7 +138,8 @@ class ViberCallLogsParser(TskCallLogsParser):
SELECT C.canonized_number AS number, SELECT C.canonized_number AS number,
C.type AS direction, C.type AS direction,
C.duration AS seconds, C.duration AS seconds,
C.date AS start_time C.date AS start_time,
C.viber_call_type AS call_type
FROM calls AS C FROM calls AS C
""" """
) )
@ -148,20 +148,21 @@ class ViberCallLogsParser(TskCallLogsParser):
self._OUTGOING_CALL_TYPE = 2 self._OUTGOING_CALL_TYPE = 2
self._INCOMING_CALL_TYPE = 1 self._INCOMING_CALL_TYPE = 1
self._MISSED_CALL_TYPE = 3 self._MISSED_CALL_TYPE = 3
self._AUDIO_CALL_TYPE = 1
def get_account_name(self): self._VIDEO_CALL_TYPE = 4
return self.result_set.getString("number")
def get_phone_number_from(self): def get_phone_number_from(self):
if self.get_call_direction() == self.INCOMING_CALL: if self.get_call_direction() == self.INCOMING_CALL:
return self.result_set.getString("number") return Account.Address(self.result_set.getString("number"),
self.result_set.getString("number"))
#Give default value if the call is outgoing, #Give default value if the call is outgoing,
#the device's # is not stored in the database. #the device's # is not stored in the database.
return super(ViberCallLogsParser, self).get_phone_number_from() return super(ViberCallLogsParser, self).get_phone_number_from()
def get_phone_number_to(self): def get_phone_number_to(self):
if self.get_call_direction() == self.OUTGOING_CALL: if self.get_call_direction() == self.OUTGOING_CALL:
return self.result_set.getString("number") return Account.Address(self.result_set.getString("number"),
self.result_set.getString("number"))
#Give default value if the call is incoming, #Give default value if the call is incoming,
#the device's # is not stored in the database. #the device's # is not stored in the database.
return super(ViberCallLogsParser, self).get_phone_number_to() return super(ViberCallLogsParser, self).get_phone_number_to()
@ -180,6 +181,14 @@ class ViberCallLogsParser(TskCallLogsParser):
duration = self.result_set.getLong("seconds") duration = self.result_set.getLong("seconds")
return start_time + duration return start_time + duration
def get_call_type(self):
call_type = self.result_set.getInt("call_type")
if call_type == self._AUDIO_CALL_TYPE:
return self.AUDIO_CALL
if call_type == self._VIDEO_CALL_TYPE:
return self.VIDEO_CALL
return super(ViberCallLogsParser, self).get_call_type()
class ViberContactsParser(TskContactsParser): class ViberContactsParser(TskContactsParser):
""" """
Extracts TSK_CONTACT information from the Viber database. Extracts TSK_CONTACT information from the Viber database.
@ -282,8 +291,8 @@ class ViberMessagesParser(TskMessagesParser):
def get_message_direction(self): def get_message_direction(self):
direction = self.result_set.getInt("direction") direction = self.result_set.getInt("direction")
if direction == self._INCOMING_MESSAGE_TYPE: if direction == self._INCOMING_MESSAGE_TYPE:
return self.INCOMING_MSG return self.INCOMING
return self.OUTGOING_MSG return self.OUTGOING
def get_phone_number_to(self): def get_phone_number_to(self):
recipients = [] recipients = []
@ -296,11 +305,11 @@ class ViberMessagesParser(TskMessagesParser):
return self.result_set.getLong("msg_date") / 1000 return self.result_set.getLong("msg_date") / 1000
def get_message_read_status(self): def get_message_read_status(self):
if self.get_message_direction() == self.INCOMING_MSG: if self.get_message_direction() == self.INCOMING:
if self.result_set.getInt("read_status") == 0: if self.result_set.getInt("read_status") == 0:
return AppDBParserHelper.MessageReadStatusEnum.READ return self.READ
else: else:
return AppDBParserHelper.MessageReadStatusEnum.UNREAD return self.UNREAD
return super(ViberMessagesParser, self).get_message_read_status() return super(ViberMessagesParser, self).get_message_read_status()
def get_message_text(self): def get_message_text(self):