Manel Medina

23 papers B 1C 6Misc 1Journal 4Unranked 8
YearRankTypeTitle / Venue / Authors
2024 ed.
APWG.EU Tech
Manel Medina, Zoriana Dmytryshyna, Adriana Freitas
2022 C conf
IGARSS
Joan Adrià Ruiz-de-Azua, Joan Pagès, Carlos Labella, Pol Delgado, Marisa Catalan, Manel Medina, Josep Paradells, Pol Guixé, Sergi Figuerola, José Antonio Jara, Agnès Lladós, Julià Talaya, Jordi Corbera, Màrius Monton, Josep Colomé, Maria de Quadras, Isaac Llorens, Marco Guadalupi
2020 J jnl
Libr. Trends
Manel Medina
2019 ed.
APF
Maurizio Naldi, Giuseppe F. Italiano, Kai Rannenberg, Manel Medina, Athena Bourka
2018 ed.
APF
Manel Medina, Andreas Mitrakas, Kai Rannenberg, Erich Schweighofer, Nikolaos Tsouroulas
2014 conf
WF-IoT
Jetzabel M. Serna, Roberto Morales, Manel Medina, Jesus Luna
2013 C conf
IAS
Jorge Aguila Vila, Jetzabel Serna-Olvera, Luis Fernandez, Manel Medina, Andreas Sfakianakis
2012 J jnl
Int. J. Adapt. Resilient Auton. Syst.
Jetzabel Serna-Olvera, Valentina Casola, Massimiliano Rak, Jesus Luna, Manel Medina, Nicola Mazzocca
2011 Misc conf
DCAI
Roberto Morales, Norma Candolfi, Jetzabel M. Serna, David A. Mejia, José M. Villegas, Juan I. Nieto, Manel Medina
2010 conf
ISSE
Roberto Morales, Jetzabel M. Serna, Manel Medina
2010 J jnl
Int. J. Auton. Adapt. Commun. Syst.
Valentina Casola, Jesus Luna, Antonino Mazzeo, Manel Medina, Massimiliano Rak, Jetzabel M. Serna
2010 C conf
IAS
Roberto Morales, Jetzabel M. Serna, Manel Medina, Jesus Luna
2008 conf
ISSE
Olimpia Olguín, Manel Medina
2008 C conf
IAS
Jetzabel M. Serna, Jesus Luna, Manel Medina
2008 conf
ISSE
Manel Medina, Estíbaliz Delgado, Diego Fernández
2007 C conf
GPC
Valentina Casola, Jesus Luna, Oscar Manso, Nicola Mazzocca, Manel Medina, Massimiliano Rak
2007 B conf
ARES
Valentina Casola, Nicola Mazzocca, Jesus Luna, Oscar Manso, Manel Medina
2007 J jnl
J. Supercomput.
Jesus Luna, Manel Medina, Oscar Manso
2006 conf
ISSE
Manel Medina, Miquel Colomer, Sandra Garcia Polo, Antoine de Poorter
2006 conf
GRID
Jesus Luna, Oscar Manso, Manel Medina
2006 C conf
GPC
Jesus Luna, Manel Medina, Oscar Manso
2005 conf
EuroPKI
Jesus Luna, Manel Medina, Oscar Manso
2004 conf
Odyssey
Javier R. Saeta, Javier Hernando, Oscar Manso, Manel Medina
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("/", ".")