The following issues were found

mvt/ios/modules/fs/filesystem.py
11 issues
Attempted relative import beyond top-level package
Error

Line: 11 Column: 1

              
from mvt.common.utils import convert_timestamp_to_iso

from ..base import IOSExtraction


class Filesystem(IOSExtraction):
    """This module extracts creation and modification date of files from a
    full file-system dump."""

            

Reported by Pylint.

Dangerous default value [] as argument
Error

Line: 18 Column: 5

                  """This module extracts creation and modification date of files from a
    full file-system dump."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Unused variable 'dirs'
Error

Line: 41 Column: 19

                              self.detected.append(result)

    def run(self):
        for root, dirs, files in os.walk(self.base_folder):
            for file_name in files:
                try:
                    file_path = os.path.join(root, file_name)
                    result = {
                        "file_path": os.path.relpath(file_path, self.base_folder),

            

Reported by Pylint.

No exception type(s) specified
Error

Line: 49 Column: 17

                                      "file_path": os.path.relpath(file_path, self.base_folder),
                        "modified": convert_timestamp_to_iso(datetime.datetime.utcfromtimestamp(os.stat(file_path).st_mtime)),
                    }
                except:
                    continue
                else:
                    self.results.append(result)

            

Reported by Pylint.

Missing module docstring
Error

Line: 1 Column: 1

              # Mobile Verification Toolkit (MVT)
# Copyright (c) 2021 The MVT Project Authors.
# Use of this software is governed by the MVT License 1.1 that can be found at
#   https://license.mvt.re/1.1/

import datetime
import os

from mvt.common.utils import convert_timestamp_to_iso

            

Reported by Pylint.

Too many arguments (7/5)
Error

Line: 18 Column: 5

                  """This module extracts creation and modification date of files from a
    full file-system dump."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 24 Column: 5

                                       output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)

    def serialize(self, record):
        return {
            "timestamp": record["modified"],
            "module": self.__class__.__name__,
            "event": "file_modified",
            "data": record["file_path"],

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 32 Column: 5

                          "data": record["file_path"],
        }

    def check_indicators(self):
        if not self.indicators:
            return

        for result in self.results:
            if self.indicators.check_file(result["file_path"]):

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 40 Column: 5

                          if self.indicators.check_file(result["file_path"]):
                self.detected.append(result)

    def run(self):
        for root, dirs, files in os.walk(self.base_folder):
            for file_name in files:
                try:
                    file_path = os.path.join(root, file_name)
                    result = {

            

Reported by Pylint.

Line too long (126/100)
Error

Line: 47 Column: 1

                                  file_path = os.path.join(root, file_name)
                    result = {
                        "file_path": os.path.relpath(file_path, self.base_folder),
                        "modified": convert_timestamp_to_iso(datetime.datetime.utcfromtimestamp(os.stat(file_path).st_mtime)),
                    }
                except:
                    continue
                else:
                    self.results.append(result)

            

Reported by Pylint.

mvt/ios/modules/fs/safari_favicon.py
11 issues
Attempted relative import beyond top-level package
Error

Line: 10 Column: 1

              
from mvt.common.utils import convert_mactime_to_unix, convert_timestamp_to_iso

from ..base import IOSExtraction

SAFARI_FAVICON_ROOT_PATHS = [
    "private/var/mobile/Library/Image Cache/Favicons/Favicons.db",
    "private/var/mobile/Containers/Data/Application/*/Library/Image Cache/Favicons/Favicons.db",
]

            

Reported by Pylint.

Access to member 'results' before its definition line 95
Error

Line: 94 Column: 70

                          self.log.info("Found Safari favicon cache database at path: %s", file_path)
            self._process_favicon_db(file_path)

        self.log.info("Extracted a total of %d favicon records", len(self.results))
        self.results = sorted(self.results, key=lambda x: x["isodate"])

            

Reported by Pylint.

Dangerous default value [] as argument
Error

Line: 20 Column: 5

              class SafariFavicon(IOSExtraction):
    """This module extracts all Safari favicon records."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Attribute 'results' defined outside __init__
Error

Line: 95 Column: 9

                          self._process_favicon_db(file_path)

        self.log.info("Extracted a total of %d favicon records", len(self.results))
        self.results = sorted(self.results, key=lambda x: x["isodate"])

            

Reported by Pylint.

Missing module docstring
Error

Line: 1 Column: 1

              # Mobile Verification Toolkit (MVT)
# Copyright (c) 2021 The MVT Project Authors.
# Use of this software is governed by the MVT License 1.1 that can be found at
#   https://license.mvt.re/1.1/

import sqlite3

from mvt.common.utils import convert_mactime_to_unix, convert_timestamp_to_iso


            

Reported by Pylint.

Too many arguments (7/5)
Error

Line: 20 Column: 5

              class SafariFavicon(IOSExtraction):
    """This module extracts all Safari favicon records."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 26 Column: 5

                                       output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)

    def serialize(self, record):
        return {
            "timestamp": record["isodate"],
            "module": self.__class__.__name__,
            "event": "safari_favicon",
            "data": f"Safari favicon from {record['url']} with icon URL {record['icon_url']} ({record['type']})",

            

Reported by Pylint.

Line too long (113/100)
Error

Line: 31 Column: 1

                          "timestamp": record["isodate"],
            "module": self.__class__.__name__,
            "event": "safari_favicon",
            "data": f"Safari favicon from {record['url']} with icon URL {record['icon_url']} ({record['type']})",
        }

    def check_indicators(self):
        if not self.indicators:
            return

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 34 Column: 5

                          "data": f"Safari favicon from {record['url']} with icon URL {record['icon_url']} ({record['type']})",
        }

    def check_indicators(self):
        if not self.indicators:
            return

        for result in self.results:
            if self.indicators.check_domain(result["url"]) or self.indicators.check_domain(result["icon_url"]):

            

Reported by Pylint.

Line too long (111/100)
Error

Line: 39 Column: 1

                          return

        for result in self.results:
            if self.indicators.check_domain(result["url"]) or self.indicators.check_domain(result["icon_url"]):
                self.detected.append(result)

    def _process_favicon_db(self, file_path):
        conn = sqlite3.connect(file_path)


            

Reported by Pylint.

mvt/android/modules/adb/whatsapp.py
11 issues
Attempted relative import beyond top-level package
Error

Line: 13 Column: 1

              
from mvt.common.utils import check_for_links, convert_timestamp_to_iso

from .base import AndroidExtraction

log = logging.getLogger(__name__)

WHATSAPP_PATH = "data/data/com.whatsapp/databases/msgstore.db"


            

Reported by Pylint.

Dangerous default value [] as argument
Error

Line: 22 Column: 5

              class Whatsapp(AndroidExtraction):
    """This module extracts all WhatsApp messages containing links."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 serial=None, fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Unused argument 'serial'
Error

Line: 23 Column: 18

                  """This module extracts all WhatsApp messages containing links."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 serial=None, fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)

    def serialize(self, record):

            

Reported by Pylint.

Redefining name 'log' from outer scope (line 15)
Error

Line: 23 Column: 48

                  """This module extracts all WhatsApp messages containing links."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 serial=None, fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)

    def serialize(self, record):

            

Reported by Pylint.

Attribute 'results' defined outside __init__
Error

Line: 82 Column: 9

                      conn.close()

        log.info("Extracted a total of %d WhatsApp messages containing links", len(messages))
        self.results = messages

    def run(self):
        self._adb_process_file(os.path.join("/", WHATSAPP_PATH), self._parse_db)

            

Reported by Pylint.

Missing module docstring
Error

Line: 1 Column: 1

              # Mobile Verification Toolkit (MVT)
# Copyright (c) 2021 The MVT Project Authors.
# Use of this software is governed by the MVT License 1.1 that can be found at
#   https://license.mvt.re/1.1/

import base64
import logging
import os
import sqlite3

            

Reported by Pylint.

Too many arguments (8/5)
Error

Line: 22 Column: 5

              class Whatsapp(AndroidExtraction):
    """This module extracts all WhatsApp messages containing links."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 serial=None, fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 28 Column: 5

                                       output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)

    def serialize(self, record):
        text = record["data"].replace("\n", "\\n")
        return {
            "timestamp": record["isodate"],
            "module": self.__class__.__name__,
            "event": f"whatsapp_msg_{record['direction']}",

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 37 Column: 5

                          "data": f"\"{text}\""
        }

    def check_indicators(self):
        if not self.indicators:
            return

        for message in self.results:
            if not "data" in message:

            

Reported by Pylint.

Unnecessary parens after 'if' keyword
Error

Line: 74 Column: 1

              
            # If we find links in the messages or if they are empty we add them to the list.
            if check_for_links(message["data"]) or message["data"].strip() == "":
                if (message.get('thumb_image') is not None):
                    message['thumb_image'] = base64.b64encode(message['thumb_image'])
                messages.append(message)

        cur.close()
        conn.close()

            

Reported by Pylint.

mvt/ios/modules/fs/cache_files.py
11 issues
Attempted relative import beyond top-level package
Error

Line: 9 Column: 1

              import os
import sqlite3

from ..base import IOSExtraction


class CacheFiles(IOSExtraction):

    def __init__(self, file_path=None, base_folder=None, output_folder=None,

            

Reported by Pylint.

Dangerous default value [] as argument
Error

Line: 14 Column: 5

              
class CacheFiles(IOSExtraction):

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Attribute 'detected' defined outside __init__
Error

Line: 36 Column: 9

                      if not self.indicators:
            return

        self.detected = {}
        for key, items in self.results.items():
            for item in items:
                if self.indicators.check_domain(item["url"]):
                    if key not in self.detected:
                        self.detected[key] = [item,]

            

Reported by Pylint.

Attribute 'results' defined outside __init__
Error

Line: 71 Column: 9

                          })

    def run(self):
        self.results = {}
        for root, dirs, files in os.walk(self.base_folder):
            for file_name in files:
                if file_name != "Cache.db":
                    continue


            

Reported by Pylint.

Unused variable 'dirs'
Error

Line: 72 Column: 19

              
    def run(self):
        self.results = {}
        for root, dirs, files in os.walk(self.base_folder):
            for file_name in files:
                if file_name != "Cache.db":
                    continue

                file_path = os.path.join(root, file_name)

            

Reported by Pylint.

Missing module docstring
Error

Line: 1 Column: 1

              # Mobile Verification Toolkit (MVT)
# Copyright (c) 2021 The MVT Project Authors.
# Use of this software is governed by the MVT License 1.1 that can be found at
#   https://license.mvt.re/1.1/

import os
import sqlite3

from ..base import IOSExtraction

            

Reported by Pylint.

Missing class docstring
Error

Line: 12 Column: 1

              from ..base import IOSExtraction


class CacheFiles(IOSExtraction):

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,

            

Reported by Pylint.

Too many arguments (7/5)
Error

Line: 14 Column: 5

              
class CacheFiles(IOSExtraction):

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 20 Column: 5

                                       output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)

    def serialize(self, record):
        records = []
        for item in self.results[record]:
            records.append({
                "timestamp": item["isodate"],
                "module": self.__class__.__name__,

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 32 Column: 5

              
        return records

    def check_indicators(self):
        if not self.indicators:
            return

        self.detected = {}
        for key, items in self.results.items():

            

Reported by Pylint.

mvt/ios/modules/mixed/safari_history.py
10 issues
Attempted relative import beyond top-level package
Error

Line: 12 Column: 1

              from mvt.common.url import URL
from mvt.common.utils import convert_mactime_to_unix, convert_timestamp_to_iso

from ..base import IOSExtraction

SAFARI_HISTORY_BACKUP_RELPATH = "Library/Safari/History.db"
SAFARI_HISTORY_ROOT_PATHS = [
    "private/var/mobile/Library/Safari/History.db",
    "private/var/mobile/Containers/Data/Application/*/Library/Safari/History.db",

            

Reported by Pylint.

Dangerous default value [] as argument
Error

Line: 24 Column: 5

                  """This module extracts all Safari visits and tries to detect potential
    network injection attacks."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Missing module docstring
Error

Line: 1 Column: 1

              # Mobile Verification Toolkit (MVT)
# Copyright (c) 2021 The MVT Project Authors.
# Use of this software is governed by the MVT License 1.1 that can be found at
#   https://license.mvt.re/1.1/

import os
import sqlite3

from mvt.common.url import URL

            

Reported by Pylint.

Too many arguments (7/5)
Error

Line: 24 Column: 5

                  """This module extracts all Safari visits and tries to detect potential
    network injection attacks."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 30 Column: 5

                                       output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)

    def serialize(self, record):
        return {
            "timestamp": record["isodate"],
            "module": self.__class__.__name__,
            "event": "safari_history",
            "data": f"Safari visit to {record['url']} (ID: {record['id']}, Visit ID: {record['visit_id']})",

            

Reported by Pylint.

Line too long (108/100)
Error

Line: 35 Column: 1

                          "timestamp": record["isodate"],
            "module": self.__class__.__name__,
            "event": "safari_history",
            "data": f"Safari visit to {record['url']} (ID: {record['id']}, Visit ID: {record['visit_id']})",
        }

    def _find_injections(self):
        for result in self.results:
            # We presume injections only happen on HTTP visits.

            

Reported by Pylint.

Line too long (103/100)
Error

Line: 70 Column: 1

                              elapsed_ms = elapsed_time.microseconds / 1000

                if elapsed_time.seconds == 0:
                    self.log.warning("Redirect took less than a second! (%d milliseconds)", elapsed_ms)

    def check_indicators(self):
        self._find_injections()

        if not self.indicators:

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 72 Column: 5

                              if elapsed_time.seconds == 0:
                    self.log.warning("Redirect took less than a second! (%d milliseconds)", elapsed_ms)

    def check_indicators(self):
        self._find_injections()

        if not self.indicators:
            return


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 113 Column: 5

                      cur.close()
        conn.close()

    def run(self):
        if self.is_backup:
            for history_file in self._get_backup_files_from_manifest(relative_path=SAFARI_HISTORY_BACKUP_RELPATH):
                history_path = self._get_backup_file_from_id(history_file["file_id"])
                if not history_path:
                    continue

            

Reported by Pylint.

Line too long (114/100)
Error

Line: 115 Column: 1

              
    def run(self):
        if self.is_backup:
            for history_file in self._get_backup_files_from_manifest(relative_path=SAFARI_HISTORY_BACKUP_RELPATH):
                history_path = self._get_backup_file_from_id(history_file["file_id"])
                if not history_path:
                    continue

                self.log.info("Found Safari history database at path: %s", history_path)

            

Reported by Pylint.

mvt/android/modules/adb/__init__.py
10 issues
Unable to import '__init__.chrome_history'
Error

Line: 6 Column: 1

              # Use of this software is governed by the MVT License 1.1 that can be found at
#   https://license.mvt.re/1.1/

from .chrome_history import ChromeHistory
from .dumpsys_batterystats import DumpsysBatterystats
from .dumpsys_packages import DumpsysPackages
from .dumpsys_procstats import DumpsysProcstats
from .packages import Packages
from .processes import Processes

            

Reported by Pylint.

Unable to import '__init__.dumpsys_batterystats'
Error

Line: 7 Column: 1

              #   https://license.mvt.re/1.1/

from .chrome_history import ChromeHistory
from .dumpsys_batterystats import DumpsysBatterystats
from .dumpsys_packages import DumpsysPackages
from .dumpsys_procstats import DumpsysProcstats
from .packages import Packages
from .processes import Processes
from .rootbinaries import RootBinaries

            

Reported by Pylint.

Unable to import '__init__.dumpsys_packages'
Error

Line: 8 Column: 1

              
from .chrome_history import ChromeHistory
from .dumpsys_batterystats import DumpsysBatterystats
from .dumpsys_packages import DumpsysPackages
from .dumpsys_procstats import DumpsysProcstats
from .packages import Packages
from .processes import Processes
from .rootbinaries import RootBinaries
from .sms import SMS

            

Reported by Pylint.

Unable to import '__init__.dumpsys_procstats'
Error

Line: 9 Column: 1

              from .chrome_history import ChromeHistory
from .dumpsys_batterystats import DumpsysBatterystats
from .dumpsys_packages import DumpsysPackages
from .dumpsys_procstats import DumpsysProcstats
from .packages import Packages
from .processes import Processes
from .rootbinaries import RootBinaries
from .sms import SMS
from .whatsapp import Whatsapp

            

Reported by Pylint.

Unable to import '__init__.packages'
Error

Line: 10 Column: 1

              from .dumpsys_batterystats import DumpsysBatterystats
from .dumpsys_packages import DumpsysPackages
from .dumpsys_procstats import DumpsysProcstats
from .packages import Packages
from .processes import Processes
from .rootbinaries import RootBinaries
from .sms import SMS
from .whatsapp import Whatsapp


            

Reported by Pylint.

Unable to import '__init__.processes'
Error

Line: 11 Column: 1

              from .dumpsys_packages import DumpsysPackages
from .dumpsys_procstats import DumpsysProcstats
from .packages import Packages
from .processes import Processes
from .rootbinaries import RootBinaries
from .sms import SMS
from .whatsapp import Whatsapp

ADB_MODULES = [ChromeHistory, SMS, Whatsapp, Processes,

            

Reported by Pylint.

Unable to import '__init__.rootbinaries'
Error

Line: 12 Column: 1

              from .dumpsys_procstats import DumpsysProcstats
from .packages import Packages
from .processes import Processes
from .rootbinaries import RootBinaries
from .sms import SMS
from .whatsapp import Whatsapp

ADB_MODULES = [ChromeHistory, SMS, Whatsapp, Processes,
               DumpsysBatterystats, DumpsysProcstats,

            

Reported by Pylint.

Unable to import '__init__.sms'
Error

Line: 13 Column: 1

              from .packages import Packages
from .processes import Processes
from .rootbinaries import RootBinaries
from .sms import SMS
from .whatsapp import Whatsapp

ADB_MODULES = [ChromeHistory, SMS, Whatsapp, Processes,
               DumpsysBatterystats, DumpsysProcstats,
               DumpsysPackages, Packages, RootBinaries]

            

Reported by Pylint.

Unable to import '__init__.whatsapp'
Error

Line: 14 Column: 1

              from .processes import Processes
from .rootbinaries import RootBinaries
from .sms import SMS
from .whatsapp import Whatsapp

ADB_MODULES = [ChromeHistory, SMS, Whatsapp, Processes,
               DumpsysBatterystats, DumpsysProcstats,
               DumpsysPackages, Packages, RootBinaries]

            

Reported by Pylint.

Missing module docstring
Error

Line: 1 Column: 1

              # Mobile Verification Toolkit (MVT)
# Copyright (c) 2021 The MVT Project Authors.
# Use of this software is governed by the MVT License 1.1 that can be found at
#   https://license.mvt.re/1.1/

from .chrome_history import ChromeHistory
from .dumpsys_batterystats import DumpsysBatterystats
from .dumpsys_packages import DumpsysPackages
from .dumpsys_procstats import DumpsysProcstats

            

Reported by Pylint.

mvt/ios/modules/mixed/chrome_history.py
10 issues
Attempted relative import beyond top-level package
Error

Line: 11 Column: 1

              from mvt.common.utils import (convert_chrometime_to_unix,
                              convert_timestamp_to_iso)

from ..base import IOSExtraction

CHROME_HISTORY_BACKUP_IDS = [
    "faf971ce92c3ac508c018dce1bef2a8b8e9838f1",
]


            

Reported by Pylint.

TODO: Confirm Chrome database path.
Error

Line: 17 Column: 3

                  "faf971ce92c3ac508c018dce1bef2a8b8e9838f1",
]

# TODO: Confirm Chrome database path.
CHROME_HISTORY_ROOT_PATHS = [
    "private/var/mobile/Containers/Data/Application/*/Library/Application Support/Google/Chrome/Default/History",
]

class ChromeHistory(IOSExtraction):

            

Reported by Pylint.

Dangerous default value [] as argument
Error

Line: 25 Column: 5

              class ChromeHistory(IOSExtraction):
    """This module extracts all Chome visits."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Missing module docstring
Error

Line: 1 Column: 1

              # Mobile Verification Toolkit (MVT)
# Copyright (c) 2021 The MVT Project Authors.
# Use of this software is governed by the MVT License 1.1 that can be found at
#   https://license.mvt.re/1.1/

import sqlite3

from mvt.common.utils import (convert_chrometime_to_unix,
                              convert_timestamp_to_iso)

            

Reported by Pylint.

Line too long (113/100)
Error

Line: 19 Column: 1

              
# TODO: Confirm Chrome database path.
CHROME_HISTORY_ROOT_PATHS = [
    "private/var/mobile/Containers/Data/Application/*/Library/Application Support/Google/Chrome/Default/History",
]

class ChromeHistory(IOSExtraction):
    """This module extracts all Chome visits."""


            

Reported by Pylint.

Too many arguments (7/5)
Error

Line: 25 Column: 5

              class ChromeHistory(IOSExtraction):
    """This module extracts all Chome visits."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 31 Column: 5

                                       output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)

    def serialize(self, record):
        return {
            "timestamp": record["isodate"],
            "module": self.__class__.__name__,
            "event": "visit",
            "data": f"{record['id']} - {record['url']} (visit ID: {record['visit_id']}, redirect source: {record['redirect_source']})"

            

Reported by Pylint.

Line too long (134/100)
Error

Line: 36 Column: 1

                          "timestamp": record["isodate"],
            "module": self.__class__.__name__,
            "event": "visit",
            "data": f"{record['id']} - {record['url']} (visit ID: {record['visit_id']}, redirect source: {record['redirect_source']})"
        }

    def check_indicators(self):
        if not self.indicators:
            return

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 39 Column: 5

                          "data": f"{record['id']} - {record['url']} (visit ID: {record['visit_id']}, redirect source: {record['redirect_source']})"
        }

    def check_indicators(self):
        if not self.indicators:
            return

        for result in self.results:
            if self.indicators.check_domain(result["url"]):

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 47 Column: 5

                          if self.indicators.check_domain(result["url"]):
                self.detected.append(result)

    def run(self):
        self._find_ios_database(backup_ids=CHROME_HISTORY_BACKUP_IDS,
                                root_paths=CHROME_HISTORY_ROOT_PATHS)
        self.log.info("Found Chrome history database at path: %s", self.file_path)

        conn = sqlite3.connect(self.file_path)

            

Reported by Pylint.

mvt/android/modules/adb/chrome_history.py
10 issues
Attempted relative import beyond top-level package
Error

Line: 13 Column: 1

              from mvt.common.utils import (convert_chrometime_to_unix,
                              convert_timestamp_to_iso)

from .base import AndroidExtraction

log = logging.getLogger(__name__)

CHROME_HISTORY_PATH = "data/data/com.android.chrome/app_chrome/Default/History"


            

Reported by Pylint.

Value 'convert_chrometime_to_unix' is unsubscriptable
Error

Line: 60 Column: 53

                              "url": item[1],
                "visit_id": item[2],
                "timestamp": item[3],
                "isodate": convert_timestamp_to_iso(convert_chrometime_to_unix[item[3]]),
                "redirect_source": item[4],
            })

        cur.close()
        conn.close()

            

Reported by Pylint.

Dangerous default value [] as argument
Error

Line: 22 Column: 5

              class ChromeHistory(AndroidExtraction):
    """This module extracts records from Android's Chrome browsing history."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 serial=None, fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Redefining name 'log' from outer scope (line 15)
Error

Line: 23 Column: 48

                  """This module extracts records from Android's Chrome browsing history."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 serial=None, fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)

    def serialize(self, record):

            

Reported by Pylint.

Unused argument 'serial'
Error

Line: 23 Column: 18

                  """This module extracts records from Android's Chrome browsing history."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 serial=None, fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)

    def serialize(self, record):

            

Reported by Pylint.

Missing module docstring
Error

Line: 1 Column: 1

              # Mobile Verification Toolkit (MVT)
# Copyright (c) 2021 The MVT Project Authors.
# Use of this software is governed by the MVT License 1.1 that can be found at
#   https://license.mvt.re/1.1/

import logging
import os
import sqlite3


            

Reported by Pylint.

Too many arguments (8/5)
Error

Line: 22 Column: 5

              class ChromeHistory(AndroidExtraction):
    """This module extracts records from Android's Chrome browsing history."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 serial=None, fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 28 Column: 5

                                       output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)

    def serialize(self, record):
        return {
            "timestamp": record["isodate"],
            "module": self.__class__.__name__,
            "event": "visit",
            "data": f"{record['id']} - {record['url']} (visit ID: {record['visit_id']}, redirect source: {record['redirect_source']})"

            

Reported by Pylint.

Line too long (134/100)
Error

Line: 33 Column: 1

                          "timestamp": record["isodate"],
            "module": self.__class__.__name__,
            "event": "visit",
            "data": f"{record['id']} - {record['url']} (visit ID: {record['visit_id']}, redirect source: {record['redirect_source']})"
        }

    def _parse_db(self, db_path):
        """Parse a Chrome History database file.
        :param db_path: Path to the History database to process.

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 69 Column: 5

              
        log.info("Extracted a total of %d history items", len(self.results))

    def run(self):
        self._adb_process_file(os.path.join("/", CHROME_HISTORY_PATH),
                               self._parse_db)

            

Reported by Pylint.

mvt/ios/modules/backup/profile_events.py
9 issues
Attempted relative import beyond top-level package
Error

Line: 11 Column: 1

              
from mvt.common.utils import convert_timestamp_to_iso

from ..base import IOSExtraction

CONF_PROFILES_EVENTS_RELPATH = "Library/ConfigurationProfiles/MCProfileEvents.plist"

class ProfileEvents(IOSExtraction):
    """This module extracts events related to the installation of configuration

            

Reported by Pylint.

Unused datetime imported from datetime
Error

Line: 7 Column: 1

              #   https://license.mvt.re/1.1/

import plistlib
from datetime import datetime

from mvt.common.utils import convert_timestamp_to_iso

from ..base import IOSExtraction


            

Reported by Pylint.

Dangerous default value [] as argument
Error

Line: 20 Column: 5

                  profiles.
    """

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Missing module docstring
Error

Line: 1 Column: 1

              # Mobile Verification Toolkit (MVT)
# Copyright (c) 2021 The MVT Project Authors.
# Use of this software is governed by the MVT License 1.1 that can be found at
#   https://license.mvt.re/1.1/

import plistlib
from datetime import datetime

from mvt.common.utils import convert_timestamp_to_iso

            

Reported by Pylint.

Too many arguments (7/5)
Error

Line: 20 Column: 5

                  profiles.
    """

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 26 Column: 5

                                       output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)

    def serialize(self, record):
        return {
            "timestamp": record.get("timestamp"),
            "module": self.__class__.__name__,
            "event": "profile_operation",
            "data": f"Process {record.get('process')} started operation {record.get('operation')} of profile {record.get('profile_id')}"

            

Reported by Pylint.

Line too long (136/100)
Error

Line: 31 Column: 1

                          "timestamp": record.get("timestamp"),
            "module": self.__class__.__name__,
            "event": "profile_operation",
            "data": f"Process {record.get('process')} started operation {record.get('operation')} of profile {record.get('profile_id')}"
        }

    def run(self):
        for events_file in self._get_backup_files_from_manifest(relative_path=CONF_PROFILES_EVENTS_RELPATH):
            events_file_path = self._get_backup_file_from_id(events_file["file_id"])

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 34 Column: 5

                          "data": f"Process {record.get('process')} started operation {record.get('operation')} of profile {record.get('profile_id')}"
        }

    def run(self):
        for events_file in self._get_backup_files_from_manifest(relative_path=CONF_PROFILES_EVENTS_RELPATH):
            events_file_path = self._get_backup_file_from_id(events_file["file_id"])
            if not events_file_path:
                continue


            

Reported by Pylint.

Line too long (108/100)
Error

Line: 35 Column: 1

                      }

    def run(self):
        for events_file in self._get_backup_files_from_manifest(relative_path=CONF_PROFILES_EVENTS_RELPATH):
            events_file_path = self._get_backup_file_from_id(events_file["file_id"])
            if not events_file_path:
                continue

            with open(events_file_path, "rb") as handle:

            

Reported by Pylint.

mvt/android/lookups/virustotal.py
9 issues
Unable to import 'rich.console'
Error

Line: 9 Column: 1

              import logging

import requests
from rich.console import Console
from rich.progress import track
from rich.table import Table
from rich.text import Text

log = logging.getLogger(__name__)

            

Reported by Pylint.

Unable to import 'rich.progress'
Error

Line: 10 Column: 1

              
import requests
from rich.console import Console
from rich.progress import track
from rich.table import Table
from rich.text import Text

log = logging.getLogger(__name__)


            

Reported by Pylint.

Unable to import 'rich.table'
Error

Line: 11 Column: 1

              import requests
from rich.console import Console
from rich.progress import track
from rich.table import Table
from rich.text import Text

log = logging.getLogger(__name__)

def get_virustotal_report(hashes):

            

Reported by Pylint.

Unable to import 'rich.text'
Error

Line: 12 Column: 1

              from rich.console import Console
from rich.progress import track
from rich.table import Table
from rich.text import Text

log = logging.getLogger(__name__)

def get_virustotal_report(hashes):
    apikey = "233f22e200ca5822bd91103043ccac138b910db79f29af5616a9afe8b6f215ad"

            

Reported by Pylint.

Missing module docstring
Error

Line: 1 Column: 1

              # Mobile Verification Toolkit (MVT)
# Copyright (c) 2021 The MVT Project Authors.
# Use of this software is governed by the MVT License 1.1 that can be found at
#   https://license.mvt.re/1.1/

import logging

import requests
from rich.console import Console

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 16 Column: 1

              
log = logging.getLogger(__name__)

def get_virustotal_report(hashes):
    apikey = "233f22e200ca5822bd91103043ccac138b910db79f29af5616a9afe8b6f215ad"
    url = f"https://www.virustotal.com/partners/sysinternals/file-reports?apikey={apikey}"

    items = []
    for sha256 in hashes:

            

Reported by Pylint.

Unnecessary "else" after "return"
Error

Line: 32 Column: 5

                  headers = {"User-Agent": "VirusTotal", "Content-Type": "application/json"}
    res = requests.post(url, headers=headers, json=items)

    if res.status_code == 200:
        report = res.json()
        return report["data"]
    else:
        log.error("Unexpected response from VirusTotal: %s", res.status_code)
        return None

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 39 Column: 1

                      log.error("Unexpected response from VirusTotal: %s", res.status_code)
        return None

def virustotal_lookup(packages):
    log.info("Looking up all extracted files on VirusTotal (www.virustotal.com)")

    unique_hashes = []
    for package in packages:
        for file in package.files:

            

Reported by Pylint.

Line too long (105/100)
Error

Line: 61 Column: 1

                              detections[entry["hash"]] = entry["detection_ratio"]

    batch = []
    for i in track(range(total_unique_hashes), description=f"Looking up {total_unique_hashes} files..."):
        file_hash = unique_hashes[i]
        batch.append(file_hash)
        if len(batch) == 25:
            virustotal_query(batch)
            batch = []

            

Reported by Pylint.