Jan Knippers

14 papers Journal 9Unranked 4
YearRankTypeTitle / Venue / Authors
2024 J jnl
Comput. Aided Des.
Luis Orozco, Hans Jakob Wagner, Anna Krtschil, Jan Knippers, Achim Menges
2024 conf
SCF
Lasath Siriwardena, Tim Stark, Simon Lut, Hans Jakob Wagner, Mathias Maierhofer, Simon Bechert, Jan Knippers, Achim Menges
2024 J jnl
J. Comput. Des. Eng.
Fabian Kannenberg, Christoph Zechmeister, Marta Gil Pérez, Yanan Guo, Xiliu Yang, David Forster, Sebastian Hügle, Pascal Mindermann, Moataz Abdelaal, Laura Balangé, Volker Schwieger, Daniel Weiskopf, Götz T. Gresser, Peter Middendorf, Manfred Bischoff, Jan Knippers, Achim Menges
2023 J jnl
J. Comput. Des. Eng.
Marta Gil Pérez, Pascal Mindermann, Christoph Zechmeister, David Forster, Yanan Guo, Sebastian Hügle, Fabian Kannenberg, Laura Balangé, Volker Schwieger, Peter Middendorf, Manfred Bischoff, Achim Menges, Götz T. Gresser, Jan Knippers
2022 J jnl
Comput. Aided Des.
Seiichi Suzuki, Jan Knippers
2022 J jnl
J. Comput. Des. Eng.
Marta Gil Pérez, Christoph Zechmeister, Fabian Kannenberg, Pascal Mindermann, Laura Balangé, Yanan Guo, Sebastian Hügle, Andreas Gienger, David Forster, Manfred Bischoff, Cristina Tarín, Peter Middendorf, Volker Schwieger, Götz T. Gresser, Achim Menges, Jan Knippers
2021 J jnl
Comput. Aided Des.
Axel Körner, Larissa Born, Oliver Bucklin, Seiichi Suzuki, Lauren Vasey, Götz T. Gresser, Achim Menges, Jan Knippers
2017 J jnl
Int. J. Parallel Emergent Distributed Syst.
Seiichi Suzuki, Jan Knippers
2015 J jnl
Comput. Aided Des.
Simon Schleicher, Julian Lienhard, Simon Poppinga, Thomas Speck, Jan Knippers
2015 ed.
AAG
Philippe Block, Jan Knippers, Niloy J. Mitra, Wenping Wang
2014 conf
AAG
Oliver David Krieg, Tobias Schwinn, Achim Menges, Jian-Min Li, Jan Knippers, Annette Schmitt, Volker Schwieger
2014 J jnl
Comput. Aided Des.
Steffen Reichert, Tobias Schwinn, Riccardo La Magna, Frédéric Waimer, Jan Knippers, Achim Menges
2014 conf
AAG
Stefana Parascho, Jan Knippers, Moritz Dörstelmann, Marshall Prado, Achim Menges
2012 conf
AAG
Jan Knippers, Markus Gabler, Riccardo La Magna, Frédéric Waimer, Achim Menges, Steffen Reichert, Tobias Schwinn
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("/", ".")