Kaouther Nouira

31 papers B 1C 6Journal 8Unranked 14
YearRankTypeTitle / Venue / Authors
2026 conf
ICAART (4)
Siwar Gorrab, Fahmi Ben Rejab, Kaouther Nouira
2025 C conf
CoDIT
Chaima Chaieb, Kaouther Nouira
2025 J jnl
Knowl. Inf. Syst.
Fahmi Ben Rejab, Siwar Gorrab, Kaouther Nouira
2024 J jnl
SN Comput. Sci.
Zainab Maalej, Fahmi Ben Rejab, Kaouther Nouira
2024 C conf
CoDIT
Zina Nakhla, Kaouther Nouira, Azza Gamgami
2024 C conf
CoDIT
Zina Nakhla, Kaouther Nouira
2024 J jnl
Prog. Artif. Intell.
Siwar Gorrab, Fahmi Ben Rejab, Kaouther Nouira
2023 conf
KES-AMSTA
Anis Cherfi, Kaouther Nouira
2023 conf
IWBBIO (2)
Zainab Maalej, Fahmi Ben Rejab, Kaouther Nouira
2023 C conf
CoDIT
Zina Nakhla, Kaouther Nouira
2022 conf
IWBBIO (1)
Siwar Gorrab, Fahmi Ben Rejab, Kaouther Nouira
2022 ch.
Machine Learning and Data Analytics for Solving Business Problems
Siwar Gorrab, Fahmi Ben Rejab, Kaouther Nouira
2020 conf
OCTA
Kaouther Nouira, Sirine Tebbeb, Zina Nakhla
2020 conf
OCTA
Kaouther Nouira, Walid Ksiaâ, Samia Ayari, Fahmi Ben Rejab, Ines Chetouane
2020 conf
OCTA
Kaouther Nouira, Zainab Maalej, Fahmi Ben Rejab, Linda Ouerfelly, Ahmed Ferchichi
2020 J jnl
Int. J. Ad Hoc Ubiquitous Comput.
Tesnim Charrad, Kaouther Nouira, Ahmed Ferchichi
2020 conf
OCTA
Kaouther Nouira, Nesrine Ben Njima
2020 J jnl
Int. J. Comput. Intell. Stud.
Anis Cherfi, Kaouther Nouira, Ahmed Ferchichi
2020 C conf
ISDA
Walid Ksiaâ, Fahmi Ben Rejab, Kaouther Nouira
2019 J jnl
Comput. J.
Zina Nakhla, Kaouther Nouira, Ahmed Ferchichi
2018 conf
ICDEc
Ons Jabnoun, Hadhemi Achour, Kaouther Nouira
2018 J jnl
Appl. Artif. Intell.
Anis Cherfi, Kaouther Nouira, Ahmed Ferchichi
2017 B conf
KES
Zina Nakhla, Kaouther Nouira
2017 conf
IIMSS
Walid Ksiaâ, Fahmi Ben Rejab, Kaouther Nouira
2017 conf
IWBBIO (1)
Fahmi Ben Rejab, Walid Ksiaâ, Kaouther Nouira
2017 C conf
ISDA
Fahmi Ben Rejab, Kaouther Nouira
2014 conf
IWBBIO
Zina Nakhla, Kaouther Nouira
2014 conf
IWBBIO
Fahmi Ben Rejab, Kaouther Nouira, Bilel Amri
2014 conf
Brain Informatics and Health
Fahmi Ben Rejab, Kaouther Nouira, Abdelwahed Trabelsi
2012 J jnl
J. Medical Syst.
Kaouther Nouira, Abdelwahed Trabelsi
2010
Kaouther Nouira
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("/", ".")