Hadeel Alsolai

24 papers A 2Journal 20Unranked 1
YearRankTypeTitle / Venue / Authors
2026 J jnl
PeerJ Comput. Sci.
Hassan Alkhiri, Sunil Kumar, Hadeel Alsolai, Hatim Dafaalla, Somia Asklany, Othman Alrusaini, Ali Alqazzaz, Menwa Alshammeri
2026 J jnl
IEEE Trans. Netw. Sci. Eng.
Xuejian Zhao, Xiaoming He, Xiaoming Xu, Hadeel Alsolai
2026 J jnl
IEEE Access
Ishrat Zahra, Hadeel Alsolai, Bayan Alabdullah, Fatimah Alhayan, Ahmad Jalal, Hui Liu
2026 J jnl
IEEE Trans. Consumer Electron.
Xiaoming He, Da Tang, Haodong Lu, Yunzhe Jiang, Hadeel Alsolai, Shahid Mumtaz
2026 J jnl
Intell. Data Anal.
Shadi AlZu'bi, Fatima M. D. Quiam, Ala' M. Al-Zoubi, Muder Almiani, Hadeel Alsolai, Randa Allafi, Munya A. Arasi
2025 J jnl
Sustain. Comput. Informatics Syst.
R. Sheeba, Hadeel Alsolai, Randa Allafi, K. Nithya, Munya A. Arasi, B. Karthikeyan, D. Sudarvizhi, S. Vivek
2025 J jnl
PeerJ Comput. Sci.
Samia Nawaz Yousafzai, Fahd N. Al-Wesabi, Hadeel Alsolai, Shouki A. Ebad, Inzamam Mashood Nasir, Emad Fadhal, Adel Thaljaoui
2025 J jnl
Comput. Electr. Eng.
Shakir Khan, Kumar Perumal, Hadeel Alsolai, Abeer Aljohani
2025 J jnl
IEEE Trans. Consumer Electron.
Guodong Wang, Qianqian Li, Qun Wang, Hadeel Alsolai, Xuejia Jiang
2025 J jnl
IEEE Trans. Consumer Electron.
Guoqiang Zhang, Yu Liang, Kaiyue Tian, Jiachen Yi, Hadeel Alsolai, Menglu Liu, Xiyuan Hu
2025 J jnl
IEEE Trans. Consumer Electron.
Haewon Byeon, Mohammed I. Khalaf, Abdelhamid Zaïdi, Saahira Banu Ahamed, Shakir Khan, Pavitar Parkash Singh, Hadeel Alsolai, Khumoyun Obidkhonov, Rupesh Gupta
2025 J jnl
PeerJ Comput. Sci.
Abdulwhab Alkharashi, Gaganjot Kaur, Hadeel Alsolai, Hatim Dafaalla, Somia Asklany, Othman Alrusaini, Ali Alqazzaz, Menwa Alshammeri
2025 conf
ICCSA (2)
Hadeel Alsolai
2023 J jnl
Comput. Electr. Eng.
Hadeel Alsolai, Mohammed Aljebreen, Jaber S. Alzahrani, Fahd N. Al-Wesabi, Anwer Mustafa Hilal, Abu Sarwar Zamani, Azza Elneil Osman, Amani A. Alneil
2023 J jnl
IEEE Access
Mofadal Alymani, Hadeel Alsolai, Mashael S. Maashi, Adeeb Alhebri, Hussain Alshahrani, Fahd N. Al-Wesabi, Abdullah Mohamed, Manar Ahmed Hamza
2023 J jnl
ICT Express
Kamal Z. Zamli, Fakhrud Din, Hussam S. Alhadawi, Shah Khalid, Hadeel Alsolai, Mohamed K. Nour, Fahd N. Al-Wesabi, Muhammad Assam
2023 J jnl
Sensors
Hadeel Alsolai, Mashael S. Maashi, Muhammad Kashif Saeed, Abdullah Mohamed, Mohammed Assiri, Sitelbanat Abdelbagi, Suhanda Drar, Amgad Atta Abdelmageed
2022 J jnl
IEEE Access
Hadeel Alsolai, Shahnawaz Qureshi, Syed Muhammad Zeeshan Iqbal, Sirirut Vanichayobon, Lawrence Edward Henesey, Craig Lindley, Seppo Karrila
2022 J jnl
IEEE Access
Ali Kamran, Umar Farooq, Ihsan Rabbi, Kashif Zia, Muhammad Assam, Hadeel Alsolai, Fahd N. Al-Wesabi
2022 J jnl
IEEE Access
Adil Aslam Mir, Fatih Vehbi Çelebi, Hadeel Alsolai, Shahzad Ahmad Qureshi, Muhammad Rafique, Jaber S. Alzahrani, Hany Mahgoub, Manar Ahmed Hamza
2020 J jnl
Inf. Softw. Technol.
Hadeel Alsolai, Marc Roper
2020
Hadeel Alsolai
2019 A conf
EASE
Hadeel Alsolai, Marc Roper
2018 A conf
ICSME
Hadeel Alsolai
redb/extractors/decompiler/apk/library_filter.py
← Index redb/extractors/decompiler/apk/library_filter.py python
"""Package-based library filtering for APK DEX code analysis.

Determines whether a method belongs to a known library/framework package
and should be filtered out of content tables. This is the Android equivalent
of is_lib_or_thunk() in the Binary Ninja pipeline.
"""

import os
from typing import Dict, List


DEFAULT_LIBRARY_PREFIXES = [
    "android.",
    "androidx.",
    "com.google.android.",
    "com.google.firebase.",
    "com.google.gson.",
    "com.google.protobuf.",
    "kotlin.",
    "kotlinx.",
    "org.apache.",
    "com.squareup.",
    "io.reactivex.",
    "org.reactivestreams.",
    "com.facebook.",
    "com.crashlytics.",
    "io.fabric.",
    "org.junit.",
    "org.mockito.",
]


class LibraryFilter:
    """Filters library/framework classes from APK analysis."""

    def __init__(self, prefixes: List[str] = None):
        env_prefixes = os.getenv("APK_LIBRARY_PREFIXES")
        if env_prefixes:
            self._prefixes = [p.strip() for p in env_prefixes.split(",") if p.strip()]
        elif prefixes is not None:
            self._prefixes = prefixes
        else:
            self._prefixes = DEFAULT_LIBRARY_PREFIXES

        # Convert Dalvik-style prefixes to both formats for matching
        self._dot_prefixes = tuple(self._prefixes)

        self._stats = {"library": 0, "user": 0}

    def is_library(self, class_name: str) -> bool:
        """Check if a class belongs to a known library/framework package.

        Accepts both Java dot notation (com.example.Foo) and Dalvik
        descriptor notation (Lcom/example/Foo;).
        """
        # Normalize Dalvik descriptor to dot notation
        normalized = self._normalize_class_name(class_name)

        is_lib = normalized.startswith(self._dot_prefixes)
        if is_lib:
            self._stats["library"] += 1
        else:
            self._stats["user"] += 1
        return is_lib

    def get_filter_stats(self) -> Dict[str, int]:
        """Return counts of filtered vs. retained classes."""
        return dict(self._stats)

    @staticmethod
    def _normalize_class_name(class_name: str) -> str:
        """Convert Dalvik descriptor to dot notation.

        Lcom/example/Foo; -> com.example.Foo
        com.example.Foo -> com.example.Foo
        """
        if class_name.startswith("L") and class_name.endswith(";"):
            return class_name[1:-1].replace("/", ".")
        return class_name.replace("/", ".")