Raed Abd-Alhameed

36 papers B 2C 5Journal 16Unranked 13
YearRankTypeTitle / Venue / Authors
2024 conf
EUVIP
Amir Zaernia, Mansour Youseffi, Luca Parisi, Raed Abd-Alhameed, Renfei Ma
2024 C conf
WINCOM
Issam Trrad, Huthaifa A. Obeidat, Muhammad Ali Malik, Ali M. Hayajneh, Issa T. E. Elfergani, Omar Obeidat, Raed Abd-Alhameed
2024 B conf
WCNC
Rida Gadhafi, Elham Serria, Sara Almaeeni, Husameldin Mukhtar, Abigail Copiaco, Raed Abd-Alhameed, Frederic Lemieux, Wathiq Mansoor
2024 J jnl
IEEE Access
Widad Faraj A. Mshwat, Jamal Sulieman Kosha, Abubakar Salisu, Atta Ullah, Nazar T. Ali, Issa T. E. Elfergani, Chan Hwang See, Chemseddine Zebiri, Jonathan Rodriguez, Raed Abd-Alhameed
2024 J jnl
Sensors
Rida Gadhafi, Elham Serria, Sara Almaeeni, Husameldin Mukhtar, Raed Abd-Alhameed, Wathiq Mansoor
2024 C conf
WINCOM
Huthaifa A. Obeidat, Muhammad Ali Malik, Issam Trrad, Issa T. E. Elfergani, Ashwain Rayit, Omar Obeidat, Raed Abd-Alhameed
2024 J jnl
IEEE Access
Hassan Zakeri, Parsa Khoddami, Gholamreza Moradi, Mohammad Alibakhshikenari, Raed Abd-Alhameed, Slawomir Koziel, Mariana Dalarsson
2024 J jnl
Telecommun. Syst.
Huthaifa A. Obeidat, Mohammed A. G. Al-Sadoon, Chemseddine Zebiri, Omar Obeidat, Issa T. E. Elfergani, Raed Abd-Alhameed
2024 J jnl
IEEE Access
Patrick Sunday Onen, Rana H. A. Zubo, Nazar T. Ali, Geev Mokryani, Jianping Li, Raed Abd-Alhameed
2023 J jnl
Sensors
Elham Serria, Rida Gadhafi, Sara Almaeeni, Husameldin Mukhtar, Abigail Copiaco, Raed Abd-Alhameed, Frederic Lemieux, Wathiq Mansoor
2022 conf
CAMAD
Mohamed Lamine Bouknia, Rami Zegadi, Djamel Sayad, Chemseddine Zebiri, Issa T. E. Elfergani, Jonathan Rodriguez, Ifiok E. Otung, Raed Abd-Alhameed
2022 conf
CAMAD
Rami Zegadi, Mohamed Lamine Bouknia, Djamel Sayad, Chemseddine Zebiri, Issa T. E. Elfergani, Jonathan Rodriguez, Zoran Vujicic, Raed Abd-Alhameed
2021 conf
CAMAD
Maryam Sajedin, Issa T. E. Elfergani, Jonathan Rodriguez, Raed Abd-Alhameed, Mónica Fernández-Barciela
2021 J jnl
Wirel. Pers. Commun.
Huthaifa A. Obeidat, Wafa Shuaieb, Omar Obeidat, Raed Abd-Alhameed
2021 conf
UKCI
Ramzi Jaber, Rami Qahwaji, Amr Abdullatif, John G. Buckley, Raed Abd-Alhameed
2021 J jnl
IEEE Commun. Stand. Mag.
Jonathan Rodriguez, Georgios P. Koudouridis, Xavier Gelabert, Muhammad Tayyab, Riccardo Bassoli, Frank H. P. Fitzek, Roberto Torre Arranz, Raed Abd-Alhameed, Maryam Sajedin, Issa T. E. Elfergani, Sarah Irum, Gerrit Schulte, Pedro Diogo, Fatma Marzouk, Marcus de Ree, Georgios Mantas, Ilias Politis
2021 J jnl
CoRR
Jonathan Rodriguez, George P. Koudouridis, Xavier Gelabert, Muhammad Tayyab, Riccardo Bassoli, Frank H. P. Fitzek, Roberto Torre Arranz, Raed Abd-Alhameed, Maryam Sajedin, Issa T. E. Elfergani, Sarah Irum, Gerrit Schulte, Pedro Diogo, Fatma Marzouk, Marcus de Ree, Georgios Mantas, Ilias Politis
2020 conf
CSNDSP
Maryam Sajedin, Issa T. E. Elfergani, Jonathan Rodriguez, Raed Abd-Alhameed, Mónica Fernández-Barciela, Manuel Violas, Ahmed Maan Abdulkhaleq
2020 conf
CAMAD
Yasir Ismael Abdulraheem Al-Yasir, Naser Ojaroudi Parchin, Ahmed Maan Abdulkhaleq, Raed Abd-Alhameed, Jonathan Rodriguez
2019 conf
SMACD
Yasir Ismael Abdulraheem Al-Yasir, Naser Ojaroudi Parchin, Ahmed Maan Abdulkhaleq, Khalid W. Hameed, Mohammed A. G. Al-Sadoon, Raed Abd-Alhameed
2019 conf
SMACD
Yasir I. A. AI-Yasir, Naser Ojaroudi Parchin, Ali A. S. Alabdullah, Widad Faraj A. Mshwat, Atta Ullah, Raed Abd-Alhameed
2019 J jnl
Comput.
George A. Oguntala, Gbeminiyi Sobamowo, Yinusa Ahmed, Raed Abd-Alhameed
2018 J jnl
IEEE Access
Ruoyu He, Hongbo Zhang, Chan Hwang See, Yan Su, Yue Ma, Deqing Kong, Xinying Zhu, Raed Abd-Alhameed
2018 C conf
BROADNETS
Maryam Sajedin, Issa T. E. Elfergani, Abubakar Sadiq Hussaini, Jonathan Rodriguez, Ayman Radwan, Raed Abd-Alhameed
2018 C conf
BROADNETS
Issa T. E. Elfergani, Mina Al-Rawi, Abdelgader M. Abdalla, Jonathan Rodriguez, Atta Ullah, Raed Abd-Alhameed
2018 J jnl
Comput. Sci. Rev.
George A. Oguntala, Raed Abd-Alhameed, Stephen M. R. Jones, James M. Noras, Mohammad N. Patwary, Jonathan Rodriguez
2017 J jnl
Turkish J. Electr. Eng. Comput. Sci.
Yong Zhang, Pavlos I. Lazaridis, Raed Abd-Alhameed, Ian A. Glover
2017 J jnl
IEEE Trans. Consumer Electron.
Nazar T. Ali, Rola Almahainy, Abdullah Al-Shabili, Nawaf I. Almoosa, Raed Abd-Alhameed
2017 J jnl
EAI Endorsed Trans. Cogn. Commun.
Issa T. E. Elfergani, Mina Al-Rawi, Jonathan Rodriguez, Widad Faraj A. Mshwat, Abubakar Sadiq Hussaini, Abdelgader M. Abdalla, Ifiok E. Otung, Raed Abd-Alhameed
2017 C conf
CoDIT
Rana H. A. Zubo, Geev Mokryani, Haile-Selassie Rajamani, Raed Abd-Alhameed, Yim-Fun Hu
2016 conf
WISATS
B. A. Mohammed, N. A. Abduljabbar, Mohammed A. G. Al-Sadoon, Khalid W. Hameed, Ash S. Hussaini, Steve M. R. Jones, Fauzi Elmegri, R. W. Clark, Raed Abd-Alhameed
2016 J jnl
Digit. Commun. Networks
Mohammad N. Patwary, Shree Krishna Sharma, Symeon Chatzinotas, Yunfei Chen, Mohamed Abdel-Maguid, Raed Abd-Alhameed, James M. Noras, Björn E. Ottersten
2014 conf
WICON
Trust Tshepo Mapoka, Haider M. AlSabbagh, Yousef A. S. Dama, Simon J. Shepherd, Raed Abd-Alhameed, Mohammad S. Bin-Melha, Kelvin O. O. Anoh
2014 conf
WICON
Muhammad Adeka, Mohammad Ngala, Mohammad S. Bin-Melha, E. Ibrahim, Simon J. Shepherd, Issa T. E. Elfergani, Ash S. Hussaini, Fauzi Elmegri, Raed Abd-Alhameed
2014 B conf
IWCMC
Trust Tshepo Mapoka, Simon J. Shepherd, Raed Abd-Alhameed, Kelvin O. O. Anoh
2014 conf
WICON
Issa T. E. Elfergani, Abubakar Sadiq Hussaini, Jonathan Rodriguez, Paulo Marques, Raed Abd-Alhameed
redb/extractors/apk_extractors/apk_permissions.py
← Index redb/extractors/apk_extractors/apk_permissions.py python
import inspect
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 APKPermissions, APKPermission

# Known dangerous permissions (Android runtime permissions)
DANGEROUS_PERMISSIONS = {
    "android.permission.READ_CALENDAR",
    "android.permission.WRITE_CALENDAR",
    "android.permission.CAMERA",
    "android.permission.READ_CONTACTS",
    "android.permission.WRITE_CONTACTS",
    "android.permission.GET_ACCOUNTS",
    "android.permission.ACCESS_FINE_LOCATION",
    "android.permission.ACCESS_COARSE_LOCATION",
    "android.permission.ACCESS_BACKGROUND_LOCATION",
    "android.permission.RECORD_AUDIO",
    "android.permission.READ_PHONE_STATE",
    "android.permission.READ_PHONE_NUMBERS",
    "android.permission.CALL_PHONE",
    "android.permission.ANSWER_PHONE_CALLS",
    "android.permission.ADD_VOICEMAIL",
    "android.permission.USE_SIP",
    "android.permission.BODY_SENSORS",
    "android.permission.SEND_SMS",
    "android.permission.RECEIVE_SMS",
    "android.permission.READ_SMS",
    "android.permission.RECEIVE_WAP_PUSH",
    "android.permission.RECEIVE_MMS",
    "android.permission.READ_EXTERNAL_STORAGE",
    "android.permission.WRITE_EXTERNAL_STORAGE",
    "android.permission.READ_MEDIA_IMAGES",
    "android.permission.READ_MEDIA_VIDEO",
    "android.permission.READ_MEDIA_AUDIO",
    "android.permission.POST_NOTIFICATIONS",
    "android.permission.NEARBY_WIFI_DEVICES",
    "android.permission.ACTIVITY_RECOGNITION",
    "android.permission.BLUETOOTH_SCAN",
    "android.permission.BLUETOOTH_ADVERTISE",
    "android.permission.BLUETOOTH_CONNECT",
}


class APKPermissionsExtractor(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.permissions_data = None
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _get_protection_level(self, perm_name):
        """Determine the protection level of a permission.

        Uses androguard's permission mappings first, falls back to the
        known dangerous list.
        """
        try:
            from androguard.core.api_specific_resources import load_permission_mappings
            target_sdk = self.apk.get_target_sdk_version()
            sdk = int(target_sdk) if target_sdk else 30
            permission_map = load_permission_mappings(sdk)
            if perm_name in permission_map:
                info = permission_map[perm_name]
                if isinstance(info, dict):
                    return info.get("protectionLevel", "unknown")
                return "unknown"
        except Exception:
            pass

        # Fallback to known dangerous set
        if perm_name in DANGEROUS_PERMISSIONS:
            return "dangerous"
        if perm_name.startswith("android.permission."):
            return "normal"
        return "unknown"

    def _compute_permhash(self):
        """Compute permhash using the permhash library."""
        try:
            from permhash.functions import permhash_apk
            return permhash_apk(self.filepath)
        except Exception as e:
            self.log.warning(f"Failed to compute permhash: {e}")
            return None

    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 permissions 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

        requested_perms = self._safe_extract(
            "requested_permissions",
            lambda: list(self.apk.get_permissions() or []), []
        )
        custom_perms = self._safe_extract(
            "custom_permissions",
            lambda: list(self.apk.get_declared_permissions() or []), []
        )
        custom_perm_set = set(custom_perms)

        permission_details = []
        dangerous_permissions = []

        for perm in requested_perms:
            try:
                protection_level = self._get_protection_level(perm)
                is_custom = perm in custom_perm_set

                permission_details.append(APKPermission(
                    permission_name=perm,
                    protection_level=protection_level,
                    is_custom=is_custom,
                ))

                if protection_level == "dangerous":
                    dangerous_permissions.append(perm)
            except Exception as e:
                self.log.warning(
                    f"Error processing permission '{perm}' for "
                    f"{self.hash.sha256}: {e}"
                )
                permission_details.append(APKPermission(
                    permission_name=perm,
                    protection_level="unknown",
                    is_custom=perm in custom_perm_set,
                ))

        permhash_value = self._compute_permhash()

        self.permissions_data = APKPermissions(
            total_permission_count=len(requested_perms),
            dangerous_permission_count=len(dangerous_permissions),
            permissions=requested_perms,
            dangerous_permissions=dangerous_permissions,
            custom_permissions=custom_perms,
            permission_details=permission_details,
            permhash=permhash_value,
        )
        return self.permissions_data

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

            current_time = datetime.now(timezone.utc)

            # One row per permission
            data = []
            for detail in self.permissions_data.permission_details:
                data.append([
                    self.sha256,
                    detail.permission_name,
                    detail.protection_level,
                    int(detail.is_custom),
                    current_time,
                ])

            if not data:
                return None

            column_names = [
                'sha256', 'permission_name', 'protection_level',
                'is_custom', 'analysis_date',
            ]

            column_type_names = [
                'FixedString(64)', 'String', 'LowCardinality(String)',
                'UInt8', "DateTime64(3, 'UTC')",
            ]

            return (data, column_names, column_type_names)

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