Madeena Sultana

27 papers B 4C 5Journal 10Unranked 7
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Sourov Jajodia, Madeena Sultana, Suryadipta Majumdar, Adrian Taylor, Grant Vandenberghe
2025 C conf
PST
Md. Shamim Towhid, Shahrear Iqbal, Euclides Carlos Pinto Neto, Nashid Shahriar, Scott Buffett, Madeena Sultana, Adrian Taylor
2025 J jnl
Artif. Intell. Rev.
Euclides Carlos Pinto Neto, Shahrear Iqbal, Scott Buffett, Madeena Sultana, Adrian Taylor
2025 conf
CAI
Ryan Kerr, Adrian Taylor, Madeena Sultana, Jean-Pierre S. El Rami
2025 C conf
ISNCC
Shahrear Iqbal, Sourena Khanzadeh, Euclides Carlos Pinto Neto, Scott Buffett, Madeena Sultana, Adrian Taylor
2023 conf
CNS
Madeena Sultana, Adrian Taylor, Li Li, Suryadipta Majumdar
2021 J jnl
npj Digit. Medicine
Zahra Shakeri Hossein Abad, Adrienne S. Kline, Madeena Sultana, Mohammad Noaeen, Elvira Nurmambetova, Filipe R. Lucini, Majed M. Al-Jefri, Joon Lee
2018 J jnl
Comput. Secur.
Padma Polash Paul, Madeena Sultana, Sorin Adam Matei, Marina L. Gavrilova
2018
Madeena Sultana
2018 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Madeena Sultana, Padma Polash Paul, Marina L. Gavrilova
2018 B conf
SMC
Madeena Sultana, Marina L. Gavrilova
2017 B conf
SMC
Madeena Sultana, Padma Polash Paul, Marina L. Gavrilova
2017 J jnl
IEEE Trans. Hum. Mach. Syst.
Madeena Sultana, Padma Polash Paul, Marina L. Gavrilova
2016 J jnl
Trans. Comput. Sci.
Madeena Sultana, Padma Polash Paul, Marina L. Gavrilova
2015 C conf
CW
Madeena Sultana, Padma Polash Paul, Marina L. Gavrilova
2015 B conf
SMC
Padma Polash Paul, Madeena Sultana, Sorin Adam Matei, Marina L. Gavrilova
2015 J jnl
J. WSCG
Madeena Sultana, Padma Polash Paul, Marina L. Gavrilova
2015 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Madeena Sultana, Padma Polash Paul, Marina L. Gavrilova
2014 C conf
CW
Madeena Sultana, Padma Polash Paul, Marina L. Gavrilova
2014 conf
CIBIM
Madeena Sultana, Marina L. Gavrilova, Reda Alhajj, Svetlana N. Yanushkevich
2014 conf
VISAPP (1)
Madeena Sultana, Marina L. Gavrilova, Svetlana N. Yanushkevich
2014 J jnl
Int. J. Biom.
Madeena Sultana, Marina L. Gavrilova
2014 conf
IJCCI (FCTA)
Madeena Sultana, Marina L. Gavrilova, Svetlana N. Yanushkevich
2014 C conf
CW
Madeena Sultana, Padma Polash Paul, Marina L. Gavrilova
2014 B conf
SMC
Madeena Sultana, Marina L. Gavrilova, Svetlana N. Yanushkevich
2013 conf
CORES
Madeena Sultana, Marina L. Gavrilova
2013 conf
Canadian AI
Madeena Sultana
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("/", ".")