Osamu Saisho

19 papers A* 1C 1Misc 4Journal 2Unranked 11
YearRankTypeTitle / Venue / Authors
2026 conf
CHI Extended Abstracts
Masami Takahashi, Osamu Saisho, Takafumi Inoue, Yujiro Tanaka, Daichi Matsunaga
2025 conf
BWCCA
Seiya Kajihara, Ryunosuke Harada, Toma Ogiri, Wataru Hatakeyama, Kazuki Takabayashi, Seiji Sato, Nami Ashizawa, Toshiki Shibahara, Osamu Saisho, Tetsushi Ohki, Masakatsu Nishigaki
2025 J jnl
J. Inf. Process.
Osamu Saisho, Takayuki Miura, Kazuki Iwahana, Masanobu Kii, Rina Okada
2025 conf
HCI (63)
Seiya Kajihara, Takumi Takaiwa, Tsubasa Shibata, Nami Ashizawa, Naoto Kiribuchi, Toshiki Shibahara, Osamu Saisho, Tetsushi Ohki, Masakatsu Nishigaki
2025 conf
PerCom Workshops
Osamu Saisho, Takayuki Miura, Kazuki Iwahana, Masanobu Kii, Rina Okada
2025 conf
UbiComp Companion
Osamu Saisho, Masami Takahashi, Yujiro Tanaka, Daichi Matsunaga, Takafumi Inoue, Takuro Tajima
2024 conf
ACSAC Workshops
Nami Ashizawa, Toshiki Shibahara, Naoto Kiribuchi, Osamu Saisho, Naoto Yanai
2023 A* conf
AAAI
Jingyu Sun, Hongjie Zhai, Osamu Saisho, Susumu Takeuchi
2023 conf
ESORICS Workshops (2)
Kazuki Iwahana, Osamu Saisho, Takayuki Miura, Akira Ito
2023 conf
UbiComp/ISWC Adjunct
Osamu Saisho, Keiichiro Kashiwagi, Sakiko Kawai, Kazuki Iwahana, Koki Mitani
2022 conf
UbiComp/ISWC Adjunct
Osamu Saisho, Keiichiro Kashiwagi, Koki Mitani
2022 C conf
PACLIC
Osamu Saisho
2021 conf
PerCom Workshops
Osamu Saisho, Takeshi Ohguro, Jingyu Sun, Hiroshi Imamura, Susumu Takeuchi, Daigoro Yokozeki
2020 conf
UbiComp/ISWC Adjunct
Osamu Saisho, Keiichiro Kashiwagi, Yui Saito, Tomoyuki Fujino
2019 Misc conf
UbiComp
Osamu Saisho, Shingo Tsukada, Hiroshi Nakashima, Hiroshi Imamura, Kyoichi Takaori
2018 Misc conf
UbiComp
Osamu Saisho, Makoto Nakayama, Kentaro Tanaka, Daigoro Yokozeki
2016 Misc conf
UbiComp
Masamichi Shimosaka, Osamu Saisho
2016 J jnl
Adv. Robotics
Masamichi Shimosaka, Osamu Saisho, Takuya Sunakawa, Hidenori Koyasu, Keisuke Maeda, Ryoma Kawajiri
2015 Misc conf
ISWC
Kota Tsubouchi, Osamu Saisho, Junichi Sato, Seira Araki, Masamichi Shimosaka
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("/", ".")