Naeem Iqbal

62 papers A* 1C 2Misc 3Journal 51Unranked 5
YearRankTypeTitle / Venue / Authors
2026 J jnl
Expert Syst. Appl.
Muhammad Faseeh, Tahira Amin, Naeem Iqbal, Hamad Shahid Hussain, Salman Ahmad, Muhammad Afzaal
2026 J jnl
Sci. China Inf. Sci.
Junhua Tong, Xiaoyu Shi, Zhiyang Xu, Naeem Iqbal, Kun Ge, Tianrui Zhai
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Muhammad Ahsen Ali, Muhammad Rehan, Naeem Iqbal, Abdul Basit, Choon Ki Ahn
2025 J jnl
CAAI Trans. Intell. Technol.
Murad Ali Khan, Jong-Hyun Jang, Naeem Iqbal, Harun Jamil, Syed Shehryar Ali Naqvi, Salabat Khan, Jae-Chul Kim, Do-Hyeun Kim
2024 J jnl
Internet Things
Syed Shehryar Ali Naqvi, Harun Jamil, Muhammad Faseeh, Naeem Iqbal, Salabat Khan, Do-Hyeun Kim
2024 J jnl
IEEE Access
Muhammad Mamoon, Muhammad Rehan, Ghulam Mustafa, Naeem Iqbal, Ijaz Ahmed, Muhammad Waqas Khalid
2024 J jnl
Future Gener. Comput. Syst.
Murad Ali Khan, Naeem Iqbal, Harun Jamil, Faiza Qayyum, Jong-Hyun Jang, Salabat Khan, Jae-Chul Kim, Dohyeun Kim
2024 J jnl
IEEE Access
Muhammad Faseeh, Murad Ali Khan, Naeem Iqbal, Faiza Qayyum, Asif Mehmood, Jungsuk Kim
2024 J jnl
IEEE Access
Syed Shehryar Ali Naqvi, Harun Jamil, Naeem Iqbal, Salabat Khan, Murad Ali Khan, Faiza Qayyum, Do-Hyeun Kim
2024 J jnl
Comput. Electron. Agric.
Atif Rizwan, Anam Nawaz Khan, Muhammad Ibrahim, Rashid Ahmad, Naeem Iqbal, Do-Hyeun Kim
2024 conf
ECCV Workshops (3)
Jan Christoph Krause, Mark Niemeyer, Janosch Bajorath, Naeem Iqbal, Joachim Hertzberg
2023 J jnl
IEEE Trans. Netw. Sci. Eng.
Ijaz Ahmed, Muhammad Rehan, Naeem Iqbal, Choon Ki Ahn
2023 C conf
FedCSIS
Naeem Iqbal, Christoph Manss, Christian Scholz, Philipp Daniel König, Matthias Igelbrink, Arno Ruckelshausen
2023 J jnl
J. Netw. Comput. Appl.
Murad Ali Khan, Naeem Iqbal, Imran, Harun Jamil, Do-Hyeun Kim
2023 conf
MetaCom
Faiza Qayyum, Naeem Iqbal, Harun Jamil, Atif Rizwan, Anam Nawaz Khan, Rashid Ahmad, Salabat Khan, Do Hyeun Kim
2023 conf
GIL Jahrestagung
Naeem Iqbal, Justus Bracke, Anton Elmiger, Hunaid Hameed, Kai von Szadkowski
2023 J jnl
IEEE Access
Taimur Shahzad, Khalid Iqbal, Murad Ali Khan, Imran, Naeem Iqbal
2023 conf
ECMR
Naeem Iqbal, Mark Niemeyer, Jan Christoph Krause, Joachim Hertzberg
2022 J jnl
IEEE Access
Anam Nawaz Khan, Naeem Iqbal, Atif Rizwan, Sehrish Malik, Rashid Ahmad, Dohyeun Kim
2022 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Ijaz Ahmed, Muhammad Rehan, Naeem Iqbal
2022 J jnl
IEEE Access
Mansoor Ahmed, Naeem Iqbal, Faraz Hussain, Murad-Ali Khan, Markus Helfert, Imran, Jungsuk Kim
2022 J jnl
Sensors
Harun Jamil, Faiza Qayyum, Naeem Iqbal, Do-Hyeun Kim
2022 J jnl
Intell. Autom. Soft Comput.
Shifa Siddiqui, Ch. Muhammad Shahzad Faisal, Shahzada Khurram, Azeem Irshad, Mohammed Baz, Habib Hamam, Naeem Iqbal, Muhammad Shafiq
2022 J jnl
Scientometrics
Faiza Qayyum, Harun Jamil, Naeem Iqbal, Do-Hyeun Kim, Muhammad Tanvir Afzal
2021 J jnl
IEEE Access
Naeem Iqbal, Faisal Jamil, Shabir Ahmad, Dohyeun Kim
2021 J jnl
Sensors
Naeem Iqbal, Imran, Shabir Ahmad, Rashid Ahmad, Do-Hyeun Kim
2021 J jnl
IEEE Access
Naeem Iqbal, Atif Rizwan, Anam Nawaz Khan, Rashid Ahmad, Bong Wan Kim, Kwangsoo Kim, Do Hyeun Kim
2021 J jnl
IEEE Access
Atif Rizwan, Anam Nawaz Khan, Naeem Iqbal, Rashid Ahmad, Dohyeun Kim
2021 J jnl
Symmetry
Anam Nawaz Khan, Naeem Iqbal, Rashid Ahmad, Do-Hyeun Kim
2021 J jnl
IEEE Access
Naeem Iqbal, Anam Nawaz Khan, Atif Rizwan, Rashid Ahmad, Bong Wan Kim, Kwangsoo Kim, Do-Hyeun Kim
2021 J jnl
Symmetry
Imran, Naeem Iqbal, Shabir Ahmad, Do-Hyeun Kim
2021 J jnl
J. Intell. Fuzzy Syst.
Naeem Iqbal, Rashid Ahmad, Faisal Jamil, Do-Hyeun Kim
2021 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Ateeq Ur Rehman, Muhammad Rehan, Naeem Iqbal, Choon Ki Ahn
2021 J jnl
IEEE Access
Faisal Jamil, Naeem Iqbal, Imran, Shabir Ahmad, Dohyeun Kim
2021 J jnl
IEEE Syst. J.
Ateeq Ur Rehman, Muhammad Rehan, Naeem Iqbal, Choon Ki Ahn
2021 J jnl
IEEE Access
Atif Rizwan, Naeem Iqbal, Anam Nawaz Khan, Rashid Ahmad, Do Hyeun Kim
2020 J jnl
J. Frankl. Inst.
Ateeq Ur Rehman, Muhammad Rehan, Naeem Iqbal, Muhammad Zohaib Waris
2020 J jnl
IEEE Access
Shabir Ahmad, Imran, Naeem Iqbal, Faisal Jamil, Dohyeun Kim
2020 J jnl
IEEE Access
Shabir Ahmad, Imran, Faisal Jamil, Naeem Iqbal, Dohyeun Kim
2020 J jnl
Sensors
Faisal Jamil, Naeem Iqbal, Shabir Ahmad, Do-Hyeun Kim
2020 J jnl
IEEE Access
Naeem Iqbal, Faisal Jamil, Shabir Ahmad, Dohyeun Kim
2020 J jnl
Sensors
Faisal Jamil, Shabir Ahmad, Naeem Iqbal, Do-Hyeun Kim
2019 J jnl
CoRR
Adil Khan, Abdul Qayyum Khan, Muhammad Sarwar, Muhammad Abubakar, Naeem Iqbal
2019 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Ateeq Ur Rehman, Muhammad Rehan, Naeem Iqbal, Choon Ki Ahn
2018 C conf
TENCON
Najam Us Saqib, Muntazir Hussain, Muhammad Siddique, Muhammad Rehan, Naeem Iqbal
2018 J jnl
IEEE Trans. Control. Syst. Technol.
Najam U. Saqib, Muhammad Rehan, Naeem Iqbal, Keum-Shik Hong
2017 J jnl
Control. Intell. Syst.
Abrar Ahmed, Naeem Iqbal
2017 J jnl
J. Frankl. Inst.
Najam U. Saqib, Muhammad Rehan, Muntazir Hussain, Naeem Iqbal, Haroon-ur-Rasheed
2017 J jnl
IEEE Access
Muhammad Masood Tahir, Abdul Qayyum Khan, Naeem Iqbal, Ayyaz Hussain, Saeed Badshah
2016 J jnl
Int. J. Control
Atif Jameel, Muhammad Rehan, Keum-Shik Hong, Naeem Iqbal
2016 Misc conf
HAIS
Fawad Hassan, Naeem Iqbal, Francisco Martínez-Álvarez, Khawaja M. Asim
2015 Misc conf
FIT
Haseeb Fayyaz Abbasi, Naeem Iqbal, Muhammad Rehan
2013 J jnl
Appl. Math. Comput.
Muhammad Rehan, Abdul Qayyum Khan, Muhammad Abid, Naeem Iqbal, Babar Hussain
2013 conf
ICAT
Zeeshan Shareef, Abrar Ahmed, Naeem Iqbal
2012 J jnl
Ind. Robot
Muhammad Umer Khan, Ibrar ullah Jan, Naeem Iqbal
2012 J jnl
Ind. Robot
Ibrar ullah Jan, Muhammad Umer Khan, Naeem Iqbal
2011 A* conf
ICRA
Muhammad Umer Khan, Ibrar ullah Jan, Abrar Ahmed, M. Ajmal Azad, Naeem Iqbal
2011 J jnl
Ind. Robot
Muhammad Umer Khan, Ibrar ullah Jan, Naeem Iqbal, Jian S. Dai
2011 J jnl
IEICE Electron. Express
Ibrar ullah Jan, Muhammad Umer Khan, Naeem Iqbal
2010 J jnl
IEICE Electron. Express
Khalid Mahmood, Naeem Iqbal
2009 Misc conf
FIT
Muhammad Umer Khan, Naeem Iqbal, Ibrar ullah Jan
2007 J jnl
J. Circuits Syst. Comput.
Nadeem Qaiser, Naeem Iqbal, Amir Hussain, Naeem Qaiser
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"