Oleksandr Sokolov

18 papers C 1Misc 1Journal 2Unranked 12
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Informetrics
Gerson Pech, Aleksandra Mrela, Veslava Osinska, Oleksandr Sokolov
2024 conf
WorldCIST (2)
Zbigniew Szkulmowski, Slawomir Grzelak, Michal Joachimiak, Sebastian Meszynski, Marcin Schiller, Oleksandr Sokolov
2023 conf
AMCIS
Krzysztof Grabczewski, Rafal Adamczak, Marek Grochowski, Michal Joachimiak, Oleksandr Sokolov, Michalina Marta Kolodziejczak, Piotr Kowalski, Katarzyna Sierakowska
2022 conf
ACIIDS (Companion)
Aleksandra Mrela, Oleksandr Sokolov, Veslava Osinska, Wlodzislaw Duch
2022 C conf
FedCSIS
Aleksandra Mrela, Oleksandr Sokolov, Maryla Bieniek-Majka, Veslava Osinska, Wlodzislaw Duch
2021 ed.
ProfIT AI
Dmytro Chumachenko, Oleksandr Sokolov, Natalia Kryvinska, Serhii Yakovlev
2020 J jnl
Int. J. Comput.
Dmytro Chumachenko, Oleksandr Sokolov, Sergiy Yakovlev
2020 ed.
ICTERI Workshops
Oleksandr Sokolov, Grygoriy Zholtkevych, Vitaliy Yakovyna, Yulia Tarasich, Vyacheslav Kharchenko, Vitaliy Kobets, Olexandr Burov, Serhiy Semerikov, Hennadiy Kravtsov
2019 conf
ISAT (2)
Oleksandr Sokolov, Veslava Osinska, Aleksandra Mrela, Wlodzislaw Duch, Marcin Burak
2017 conf
ICTERI (Revised Selected Papers)
Aleksandra Mrela, Oleksandr Sokolov
2017 Misc conf
ICTERI
Aleksandra Mrela, Oleksandr Sokolov
2014 conf
CIHLI
Oleksandr Sokolov, Sebastian Meszynski, Gernot Groemer, Birgit Sattler, Franco Carbognani, Jean Marc Salotti, Mateusz Jozefowicz
2014 conf
CICARE
Oleksandr Sokolov, Krzysztof Dobosz, Joanna Dreszer, Bibianna Balaj, Wlodzislaw Duch, Slawomir Grzelak, Tomasz Komendzinski, Dariusz Mikolajewski, Tomasz Piotrowski, Malgorzata Swierkocka, Piotr Weber
2012 conf
IPMU (2)
Michael Wagenknecht, Oleksandr Sokolov, Olga Molchanova
2011 conf
EUSFLAT Conf.
Oleksandr Sokolov, Olga Molchanova
2007 conf
EUSFLAT Conf. (2)
Oleksandr Sokolov, Michael Wagenknecht, Ulrike Gocht
2003 conf
EUSFLAT Conf.
Oleksandr Sokolov, O. Radivonenko, N. Bakumenko
2003 conf
EUSFLAT Conf.
Oleksandr Sokolov
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("/", ".")