Olli Alanen

31 papers A 3B 6C 3Journal 3Unranked 15
YearRankTypeTitle / Venue / Authors
2021 J jnl
IEEE Access
Roberto Maldonado, Anders Karstensen, Guillermo Pocovi, Ali A. Esswie, Claudio Rosa, Olli Alanen, Mika Kasslin, Troels E. Kolding
2013 B conf
WCNC
Timo Nihtilä, Vitaliy Tykhomyrov, Olli Alanen, Mikko A. Uusitalo, Antti Sorri, Martti Moisio, Sassan Iraji, Rapeepat Ratasuk, Nitin Mangalvedhe
2012 C conf
ICCC
Zheng Chang, Olli Alanen, Eng Hwee Ong, Jarkko Kneckt
2012 conf
VTC Spring
Zheng Chang, Olli Alanen, Toni Huovinen, Timo Nihtilä, Eng Hwee Ong, Jarkko Kneckt, Tapani Ristaniemi
2011 B conf
PIMRC
Eng Hwee Ong, Jarkko Kneckt, Olli Alanen, Zheng Chang, Toni Huovinen, Timo Nihtilä
2011 conf
VTC Spring
Niko Kolehmainen, Olli Alanen, Tero Henttonen
2011 conf
VTC Spring
Jani Puttonen, Janne Kurjenniemi, Olli Alanen, Tero Henttonen
2011 J jnl
Simul.
Alexander Sayenko, Olli Alanen, Henrik Martikainen, Vitaliy Tykhomyrov, Aleksandr Puchko, Vesa P. Hytönen, Timo Hämäläinen
2010 B conf
WCNC
Alexander Sayenko, Olli Alanen, Henrik Martikainen
2010 B conf
PIMRC
Jani Puttonen, Jussi Turkka, Olli Alanen, Janne Kurjenniemi
2010 conf
SimuTools
Vesa P. Hytönen, Alexander Sayenko, Henrik Martikainen, Olli Alanen
2010 conf
VTC Spring
Janne Kurjenniemi, Olli Alanen, Tero Henttonen, Jorma Kaikkonen
2010 B conf
PIMRC
Jani Puttonen, Janne Kurjenniemi, Olli Alanen
2009 conf
WTS
Henrik Martikainen, Olli Alanen, Alexander Sayenko
2009 conf
SimuTools
Alexander Sayenko, Olli Alanen, Henrik Martikainen, Vitaliy Tykhomyrov, Alexander Puchko, Timo Hämäläinen
2008 conf
ICC
Alexander Sayenko, Olli Alanen, Timo Hämäläinen
2008 conf
ICT
Vitaliy Tykhomyrov, Alexander Sayenko, Henrik Martikainen, Olli Alanen, Timo Hämäläinen
2008 J jnl
Comput. Networks
Alexander Sayenko, Olli Alanen, Timo Hämäläinen
2007 conf
VTC Fall
Jani Lakkakorpi, Alexander Sayenko, Juha Karhula, Olli Alanen, Jani Moilanen
2007 C conf
WOWMOM
Alexander Sayenko, Olli Alanen, Timo Hämäläinen
2007 C conf
QSHINE
Alexander Sayenko, Olli Alanen, Timo Hämäläinen
2007 A conf
MSWiM
Olli Alanen
2007 B conf
GLOBECOM
Alexander Sayenko, Olli Alanen, Timo Hämäläinen
2007 conf
NEW2AN
Vitaliy Tykhomyrov, Alexander Sayenko, Henrik Martikainen, Olli Alanen, Timo Hämäläinen
2007 A conf
MSWiM
Alexander Sayenko, Vitaliy Tykhomyrov, Henrik Martikainen, Olli Alanen
2007
Olli Alanen
2006 conf
NEW2AN
Alexander Sayenko, Olli Alanen, Olli Karppinen, Timo Hämäläinen
2006 A conf
MSWiM
Alexander Sayenko, Olli Alanen, Juha Karhula, Timo Hämäläinen
2006 conf
CCNC
Olli Karppinen, Olli Alanen, Timo Hämäläinen
2006 conf
AINA (1)
Olli Alanen, Timo Hämäläinen, Eero Wallenius
2004 conf
ICON
Olli Alanen, Mikko Pääkkönen, Timo Hämäläinen, Mikko Ketola, Jyrki Joutsensalo
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("/", ".")