Wagner Coelho de Albuquerque Pereira

14 papers Journal 10Unranked 4
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Imaging
Pedro Sérgio Silva, Antônio Maurício Ferreira Leite Miranda de Sá, Wagner Coelho de Albuquerque Pereira, Leonardo Bonato Felix, José Manoel de Seixas
2023 J jnl
Medical Biol. Eng. Comput.
Wilfrido Gómez-Flores, Wagner Coelho de Albuquerque Pereira
2020 J jnl
Comput. Biol. Medicine
Wilfrido Gómez-Flores, Wagner Coelho de Albuquerque Pereira
2020 J jnl
IEEE Access
Bashir Zeimarani, Marly Guimarães Fernandes Costa, Nilufar Zeimarani Nurani, Sabrina Ramos Bianco, Wagner Coelho de Albuquerque Pereira, Cicero Ferreira Fernandes Costa Filho
2019 J jnl
BMC Medical Imaging
Marly Guimarães Fernandes Costa, João Paulo Mendes Campos, Gustavo de Aquino e Aquino, Wagner Coelho de Albuquerque Pereira, Cicero Ferreira Fernandes Costa Filho
2018 J jnl
Comput. Methods Programs Biomed.
Arturo Rodríguez-Cristerna, Wilfrido Gómez-Flores, Wagner Coelho de Albuquerque Pereira
2017 J jnl
Comput. Biol. Medicine
Wilfrido Gómez-Flores, Wagner Coelho de Albuquerque Pereira
2017 conf
MCPR
Arturo Rodríguez-Cristerna, Wilfrido Gómez-Flores, Wagner Coelho de Albuquerque Pereira
2015 conf
EMBC
Sergio D. de S. Silva, Marly Guimarães Fernandes Costa, Wagner Coelho de Albuquerque Pereira, Cicero Ferreira Fernandes Costa Filho
2015 J jnl
Pattern Recognit.
Wilfrido Gómez-Flores, Wagner Coelho de Albuquerque Pereira, Antonio Fernando Catelli Infantosi
2013 J jnl
Signal Image Video Process.
Cicero Ferreira Fernandes Costa Filho, Claudio Franklin Martins Pinheiro, Marly Guimarães Fernandes Costa, Wagner Coelho de Albuquerque Pereira
2013 conf
IWBBIO
Luis Maggi, Guillermo Cortela, Marco Antonio von Kruger, Carlos Negreira, Wagner Coelho de Albuquerque Pereira
2013 conf
IWBBIO
Aldo Pereira, Paulo Rosa, Daniel Matusin, Marco Antonio von Kruger, Alberto Schanaider, Wagner Coelho de Albuquerque Pereira
2012 J jnl
Expert Syst. Appl.
Cicero Ferreira Fernandes Costa Filho, Dayse Aparecida Rivera Rocha, Marly Guimarães Fernandes Costa, Wagner Coelho de Albuquerque Pereira
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("/", ".")