Mansour Jamzad

84 papers A 1B 6C 11Misc 1Journal 44Unranked 21
YearRankTypeTitle / Venue / Authors
2024 J jnl
Image Vis. Comput.
Fariba Lotfi, Mansour Jamzad, Hamid Beigy, Helia Farhood, Quan Z. Sheng, Amin Beheshti
2024 A conf
ICWS
Fariba Lotfi, Amin Beheshti, Mansour Jamzad, Hamid Beigy, Jia Wu, Philip S. Yu
2023 J jnl
Comput. Vis. Image Underst.
Zeinab Abedini, Mansour Jamzad
2023 J jnl
Algorithms
Fariba Lotfi, Amin Beheshti, Helia Farhood, Matineh Pooshideh, Mansour Jamzad, Hamid Beigy
2023 J jnl
Multim. Tools Appl.
Artin Ghostan Khatchatoorian, Mansour Jamzad
2022 J jnl
J. Digit. Imaging
Zeynab Barzegar, Mansour Jamzad
2022 J jnl
Comput. Electron. Agric.
Mohammad Reza Kamandar, Jafar Massah, Mansour Jamzad
2022 conf
ICSOC Workshops
Fariba Lotfi, Fatemeh Tohidian, Mansour Jamzad, Hamid Beigy
2021 J jnl
J. Vis. Commun. Image Represent.
Fatemeh Zamani, Mansour Jamzad, Hamid R. Rabiee
2021 conf
ICSOC Workshops
Fariba Lotfi, Mansour Jamzad, Hamid Beigy
2021 J jnl
IET Comput. Vis.
Zeynab Barzegar, Mansour Jamzad
2021 J jnl
Biomed. Signal Process. Control.
Zeynab Barzegar, Mansour Jamzad
2021 J jnl
IET Image Process.
Zeinab Abedini, Mansour Jamzad
2020 J jnl
Signal Image Video Process.
Zeynab Barzegar, Mansour Jamzad
2020 J jnl
CoRR
Javad Amiryan, Mansour Jamzad
2020 J jnl
IET Comput. Vis.
Artin Ghostan Khatchatoorian, Mansour Jamzad
2018 J jnl
Multim. Tools Appl.
Roya Rad, Mansour Jamzad
2018 conf
ICDSP
Artin Ghostan Khatchatoorian, Mansour Jamzad
2018 C conf
ICMV
Zeynab Barzegar, Mansour Jamzad
2018 J jnl
J. Vis. Commun. Image Represent.
S. Hamid Amiri, Mansour Jamzad
2018 J jnl
IET Image Process.
Fariborz Taherkhani, Mansour Jamzad
2017 J jnl
EURASIP J. Image Video Process.
Fatemeh Zamani, Mansour Jamzad
2017 J jnl
Comput. Vis. Image Underst.
Azadeh Sadat Mozafari, Mansour Jamzad
2017 J jnl
J. Vis. Commun. Image Represent.
Roya Rad, Mansour Jamzad
2017 Misc conf
DICTA
Artin Ghostan Khatchatoorian, Mansour Jamzad
2016 J jnl
Pattern Recognit.
Azadeh Sadat Mozafari, Mansour Jamzad
2016 J jnl
CoRR
Azadeh Sadat Mozafari, David Vázquez, Mansour Jamzad, Antonio M. López
2016 J jnl
CoRR
Fariborz Taherkhani, Mansour Jamzad
2015 J jnl
IET Comput. Vis.
Roya Rad, Mansour Jamzad
2015 J jnl
Pattern Recognit.
S. Hamid Amiri, Mansour Jamzad
2015 J jnl
Pattern Recognit.
S. Hamid Amiri, Mansour Jamzad
2014 B conf
ICIP
Azadeh Sadat Mozafari, Mansour Jamzad
2014 J jnl
Signal Process. Image Commun.
S. Hamid Amiri, Mansour Jamzad
2013 J jnl
Int. J. Electron. Secur. Digit. Forensics
Mahsa Shakeri, Mansour Jamzad
2012 J jnl
Secur. Commun. Networks
Amirhossein Taherinia, Mansour Jamzad
2012 J jnl
Sci. Iran.
Amin Jourabloo, Amir H. Feghahati, Mansour Jamzad
2012 conf
ISSPIT
Amin Jourabloo, Behnam Babagholami-Mohamadabadi, Amir H. Feghahati, Mohammad T. Manzuri Shalmani, Mansour Jamzad
2012 conf
ISSPIT
Ramin Raziperchikolaei, Mansour Jamzad
2012 conf
ISSPIT
Amir H. Feghahati, Amin Jourabloo, Mansour Jamzad, Mohammad T. Manzuri Shalmani
2011 conf
PSIVT (2)
Mahsa Shakeri, Mansour Jamzad
2011 C conf
ISPA
S. Hamid Amiri, Ahmad Ali Abin, Mansour Jamzad
2011 C conf
ISPA
Amir Hossein Ahmadi, Mansour Jamzad
2011 J jnl
Secur. Commun. Networks
Hedieh Sajedi, Mansour Jamzad
2011 C conf
ISPA
S. Hamid Amiri, Mansour Jamzad
2010 B conf
ARES
Zahra Toony, Mansour Jamzad
2010 J jnl
Int. J. Electron. Secur. Digit. Forensics
Amirhossein Taherinia, Mansour Jamzad
2010 J jnl
Expert Syst. Appl.
Hedieh Sajedi, Mansour Jamzad
2010 J jnl
J. Signal Process. Syst.
Hedieh Sajedi, Mansour Jamzad
2010 J jnl
EURASIP J. Adv. Signal Process.
Farzin Yaghmaee, Mansour Jamzad
2010 B conf
ICPR
Mohammad Mehdi Saboorian, Mansour Jamzad, Hamid R. Rabiee
2010 J jnl
Int. J. Inf. Sec.
Hedieh Sajedi, Mansour Jamzad
2009 B conf
ARES
Amirhossein Taherinia, Mehran Fotouhi, Mansour Jamzad
2009 B conf
ARES
S. Hamid Amiri, Mansour Jamzad
2009 B conf
ARES
Amirhossein Taherinia, Mansour Jamzad
2009 J jnl
Int. J. Electron. Secur. Digit. Forensics
Amirhossein Taherinia, Mansour Jamzad
2009 J jnl
Wirel. Sens. Netw.
Hedieh Sajedi, Mansour Jamzad
2009 conf
CCECE
Zahra Mansoori, Mansour Jamzad
2009 conf
ISA
Hedieh Sajedi, Mansour Jamzad
2009 J jnl
Int. J. Inf. Sec.
Hedieh Sajedi, Mansour Jamzad
2008 conf
IIH-MSP
Hedieh Sajedi, Mansour Jamzad
2008 C conf
IWDW
S. Hamid Amiri, Mansour Jamzad
2008 conf
IIH-MSP
Farzin Yaghmaee, Mansour Jamzad
2008 conf
IIH-MSP
Nima Asadi, Mansour Jamzad, Hedieh Sajedi
2008 conf
IIH-MSP
Farzin Yaghmaee, Mansour Jamzad
2008 conf
ICIAR
Farzin Yaghmaee, Mansour Jamzad
2008 J jnl
Trans. Data Hiding Multim. Secur.
Mansour Jamzad, Zahra Zahedi Kermani
2007 conf
SITIS
Hedieh Sajedi, Mansour Jamzad
2007 J jnl
EURASIP J. Adv. Signal Process.
Mohsen Ebrahimi Moghaddam, Mansour Jamzad
2007 J jnl
Pattern Recognit.
Mohsen Ebrahimi Moghaddam, Mansour Jamzad
2006 conf
IWICPAS
Mohsen Ebrahimi Moghaddam, Mansour Jamzad, Hamid Reza Mahini
2005 conf
SOAS
Mahdi Asadpour, Mansour Jamzad
2005 J jnl
Pattern Recognit. Lett.
Roya Rad, Mansour Jamzad
2004 conf
ICIAR (2)
Mansour Jamzad, Farzin Yaghmaee
2003 conf
SIP
Farzin Yaghmaee, Mansour Jamzad
2003 C conf
RoboCup
Mansour Jamzad, Abolfazl Keighobadi Lamjiri
2003 conf
ISIC
Mansour Jamzad, Abolfazl Keighobadi Lamjiri
2002 conf
ISIC
Mansour Jamzad, Ehsan Chiniforushan Esfahani, Sayyed Bashir Sadjad
2002 J jnl
AI Mag.
Manuela M. Veloso, Tucker R. Balch, Peter Stone, Hiroaki Kitano, Fuminori Yamasaki, Ken Endo, Minoru Asada, Mansour Jamzad, Sayyed Bashir Sadjad, Vahab S. Mirrokni, Moslem Kazemi, Hamid Reza Chitsaz, Abbas Heydarnoori, Mohammad Taghi Hajiaghayi, Ehsan Chiniforooshan
2001 C conf
RoboCup
Mansour Jamzad, Sayyed Bashir Sadjad, Vahab S. Mirrokni, Moslem Kazemi, Hamid Reza Chitsaz, Abbas Heydarnoori, Mohammad Taghi Hajiaghayi, Ehsan Chiniforooshan
2001 C conf
RoboCup
Mansour Jamzad, Hamid Reza Chitsaz, Amirali Foroughnassiraei, Reza Ghorbani, Moslem Kazemi, Vahab S. Mirrokni, Sayyed Bashir Sadjad
2000 C conf
RoboCup
Mansour Jamzad, Amirali Foroughnassiraei, Mohammad Taghi Hajiaghayi, Vahab S. Mirrokni, Reza Ghorbani, Abbas Heydarnoori, Moslem Kazemi, Hamid Reza Chitsaz, Farid Mobasser, Mohsen Ebrahimi Moghaddam, M. Gudarzi, N. Ghaffarzadegan
2000 J jnl
AI Mag.
Mansour Jamzad, Amirali Foroughnassiraei, Ehsan Chiniforooshan, Reza Ghorbani, Moslem Kazemi, Hamid Reza Chitsaz, Farid Mobasser, Sayyed Bashir Sadjad
1999 C conf
RoboCup
Mansour Jamzad, Amirali Foroughnassiraei, Ehsan Chiniforooshan, Reza Ghorbani, Moslem Kazemi, Hamid Reza Chitsaz, Farid Mobasser, Sayyed Bashir Sadjad
1999 C conf
RoboCup
Mansour Jamzad, Amirali Foroughnassiraei, Ehsan Chiniforooshan, Reza Ghorbani, Moslem Kazemi, Hamid Reza Chitsaz, Farid Mobasser, Sayyed Bashir Sadjad
redb/extractors/apk_extractors/apk_features.py
← Index redb/extractors/apk_extractors/apk_features.py python
import inspect
import zipfile
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.apk_extractor import APKExtractor
from redb.models.dataclasses import APKFeatures


class APKFeaturesExtractor(APKExtractor):

    def __init__(
        self, filepath, log, exporters=None, index_prefix=None,
        known_benign=False, known_malicious=False,
        apk=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix,
            known_benign, known_malicious, apk,
        )
        self.apk_features = None
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.APK_FEATURES.value

    def _extract_zip_timestamps(self):
        """Extract earliest and latest content modification from ZIP entries."""
        earliest = None
        latest = None
        try:
            zf = self._get_zip_file()
            if zf:
                with zf:
                    for info in zf.infolist():
                        try:
                            dt = datetime(*info.date_time)
                            if earliest is None or dt < earliest:
                                earliest = dt
                            if latest is None or dt > latest:
                                latest = dt
                        except (ValueError, TypeError):
                            continue
        except Exception as e:
            self.log.warning(f"Error extracting ZIP timestamps: {e}")
        return (
            earliest.isoformat() if earliest else None,
            latest.isoformat() if latest else None,
        )

    def _extract_supported_abis(self):
        """Determine supported ABIs from lib/ directory."""
        abis = set()
        for f in self._list_files():
            if f.startswith("lib/") and f.endswith(".so"):
                parts = f.split("/")
                if len(parts) >= 3:
                    abis.add(parts[1])
        return sorted(abis)

    def _count_dex_files(self):
        """Count DEX files and compute total size."""
        dex_count = 0
        total_size = 0
        try:
            zf = self._get_zip_file()
            if zf:
                with zf:
                    for info in zf.infolist():
                        if info.filename.endswith(".dex"):
                            dex_count += 1
                            total_size += info.file_size
        except Exception as e:
            self.log.warning(f"Error counting DEX files: {e}")
        return dex_count, total_size

    def _check_embedded_apk(self):
        """Check if the archive contains nested APK files."""
        for f in self._list_files():
            if f.lower().endswith(".apk"):
                return True
        return False

    def _safe_extract(self, field_name, func, default=None):
        """Extract a single field, logging and returning default on failure."""
        try:
            return func()
        except Exception as e:
            self.log.warning(
                f"Error extracting APK field '{field_name}' for "
                f"{self.hash.sha256}: {e}"
            )
            return default

    def extract(self):
        if not self._is_valid_apk():
            self.log.error(f"Invalid APK for {self.hash.sha256}")
            return None

        package_name = self._safe_extract(
            "package_name", lambda: self.apk.get_package()
        )
        app_name = self._safe_extract(
            "app_name", lambda: self.apk.get_app_name()
        )

        def _get_version_code():
            try:
                return int(self.apk.get_androidversion_code() or 0)
            except (ValueError, TypeError):
                return 0

        version_code = self._safe_extract("version_code", _get_version_code)
        version_name = self._safe_extract(
            "version_name", lambda: self.apk.get_androidversion_name()
        )

        def _get_sdk(getter):
            val = getter()
            return int(val) if val else None

        min_sdk = self._safe_extract(
            "min_sdk_version", lambda: _get_sdk(self.apk.get_min_sdk_version)
        )
        target_sdk = self._safe_extract(
            "target_sdk_version", lambda: _get_sdk(self.apk.get_target_sdk_version)
        )
        compile_sdk = self._safe_extract(
            "compile_sdk_version",
            lambda: _get_sdk(self.apk.get_effective_target_sdk_version),
        )

        main_activity = self._safe_extract(
            "main_activity", lambda: self.apk.get_main_activity()
        )

        is_debuggable = self._safe_extract(
            "is_debuggable",
            lambda: self.apk.get_attribute_value(
                "application", "debuggable"
            ) == "true",
            False,
        )
        allow_backup = self._safe_extract(
            "allow_backup",
            lambda: self.apk.get_attribute_value(
                "application", "allowBackup"
            ) != "false",
            True,
        )
        uses_cleartext = self._safe_extract(
            "uses_cleartext_traffic",
            lambda: self.apk.get_attribute_value(
                "application", "usesCleartextTraffic"
            ) == "true",
            False,
        )

        supported_abis = self._safe_extract(
            "supported_abis", self._extract_supported_abis, []
        )
        dex_count, total_dex_size = self._safe_extract(
            "dex_files", self._count_dex_files, (0, 0)
        )
        all_files = self._safe_extract("file_list", self._list_files, [])
        total_file_count = len(all_files)
        has_native_code = any(
            f.startswith("lib/") and f.endswith(".so") for f in all_files
        )
        has_assets = any(f.startswith("assets/") for f in all_files)
        contains_embedded_apk = self._safe_extract(
            "contains_embedded_apk", self._check_embedded_apk, False
        )

        uses_libraries = self._safe_extract(
            "uses_libraries",
            lambda: list(self.apk.get_libraries() or []),
            [],
        )

        earliest_mod, latest_mod = self._safe_extract(
            "zip_timestamps", self._extract_zip_timestamps, (None, None)
        )

        self.apk_features = APKFeatures(
            package_name=package_name,
            app_name=app_name,
            version_code=version_code,
            version_name=version_name,
            min_sdk_version=min_sdk,
            target_sdk_version=target_sdk,
            compile_sdk_version=compile_sdk,
            main_activity=main_activity,
            is_debuggable=is_debuggable,
            allow_backup=allow_backup,
            uses_cleartext_traffic=uses_cleartext,
            supported_abis=supported_abis,
            dex_count=dex_count,
            total_dex_size=total_dex_size,
            total_file_count=total_file_count,
            has_native_code=has_native_code,
            has_assets=has_assets,
            uses_libraries=uses_libraries,
            earliest_content_modification=earliest_mod,
            latest_content_modification=latest_mod,
            contains_embedded_apk=contains_embedded_apk,
        )
        return self.apk_features

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ClickHouseExporter":
            if not self.apk_features:
                return None

            f = self.apk_features
            current_time = datetime.now(timezone.utc)
            data = [[
                self.sha256,
                f.package_name,
                f.app_name,
                f.version_code,
                f.version_name,
                f.min_sdk_version,
                f.target_sdk_version,
                f.compile_sdk_version,
                f.main_activity,
                int(f.is_debuggable),
                int(f.allow_backup),
                int(f.uses_cleartext_traffic),
                f.supported_abis,
                f.dex_count,
                f.total_dex_size,
                f.total_file_count,
                int(f.has_native_code),
                int(f.has_assets),
                f.uses_libraries,
                f.earliest_content_modification,
                f.latest_content_modification,
                int(f.contains_embedded_apk),
                current_time,
            ]]

            column_names = [
                "sha256",
                "package_name", "app_name", "version_code", "version_name",
                "min_sdk_version", "target_sdk_version", "compile_sdk_version",
                "main_activity",
                "is_debuggable", "allow_backup", "uses_cleartext_traffic",
                "supported_abis",
                "dex_count", "total_dex_size", "total_file_count",
                "has_native_code", "has_assets",
                "uses_libraries",
                "earliest_content_modification", "latest_content_modification",
                "contains_embedded_apk",
                "analysis_date",
            ]

            column_type_names = [
                "FixedString(64)",
                "Nullable(String)", "Nullable(String)", "Nullable(UInt32)", "Nullable(String)",
                "Nullable(UInt16)", "Nullable(UInt16)", "Nullable(UInt16)",
                "Nullable(String)",
                "UInt8", "UInt8", "UInt8",
                "Array(String)",
                "UInt16", "UInt64", "UInt32",
                "UInt8", "UInt8",
                "Array(String)",
                "Nullable(String)", "Nullable(String)",
                "UInt8",
                "DateTime64(3, 'UTC')",
            ]

            return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_apk_features"