Karthick Thiyagarajan

28 papers A* 1A 2B 1C 3Journal 11Unranked 9
YearRankTypeTitle / Venue / Authors
2026 J jnl
Mach. Intell. Res.
Taoyuan Zhu, Ali Braytee, Karthick Thiyagarajan, Xing Zi, Samir Mustapha, Xian Tao, Mukesh Prasad
2026 J jnl
CoRR
Sangmim Song, Sarath Kodagoda, Marc Carmichael, Karthick Thiyagarajan
2026 B conf
IDA
Chang Qu, Ilhwan Kwon, Karthick Thiyagarajan, Mukesh Prasad, Ali Braytee
2025 J jnl
IEEE Access
Jayesh Prakash, Sam Altnji, Karthick Thiyagarajan, Jogesh S. Nanda, Abhijit Biswas, Abhra Roy Chowdhury
2025 conf
WWW (Companion Volume)
Kairui Jin, Xing Zi, Karthick Thiyagarajan, Ali Braytee, Mukesh Prasad
2025 J jnl
CoRR
Vinit Mehta, Charu Sharma, Karthick Thiyagarajan
2025 A* conf
ICRA
Vinu Maddumage, Sarath Kodagoda, Marc G. Carmichael, Amal Gunatilake, Karthick Thiyagarajan, Jodi Martin
2024 conf
ADMA (1)
Xing Zi, Yunxiao Shi, Taoyuan Zhu, Kairui Jin, Xian Tao, Jun Li, Karthick Thiyagarajan, Mukesh Prasad
2024 J jnl
IEEE Access
Amir Zahedi, Ranjith Liyanapathirana, Karthick Thiyagarajan
2024 conf
IEEE SENSORS
Kamalesh Tripathy, Dhanranjan Kumar, Karthick Thiyagarajan, Mitradip Bhattacharjee
2024 J jnl
CoRR
Sangmim Song, Sarath Kodagoda, Amal Gunatilake, Marc G. Carmichael, Karthick Thiyagarajan, Jodi Martin
2024 J jnl
IEEE Access
Lasitha Piyathilaka, Sarath Kodagoda, Karthick Thiyagarajan, Massimo Piccardi, D. M. G. Preethichandra, Umer Izhar
2024 A conf
ICST
Dayarnab Baidya, Karthick Thiyagarajan, Mitradip Bhattacharjee, Yang An
2024 conf
IEEE SENSORS
Athul Krishnan, Karthick Thiyagarajan, Mitradip Bhattacharjee, Yang An
2024 A conf
ICST
Zeyang Zhou, Angelo Greco, Fenix Huang, Karthick Thiyagarajan, Jun Li, Mukesh Prasad
2023 J jnl
Sensors
Khushboo Singh, Mondeep Saikia, Karthick Thiyagarajan, Dushmantha N. Thalakotuna, Karu Priyathama Esselle, Sarath Kodagoda
2022 J jnl
IEEE Robotics Autom. Lett.
Amal Gunatilake, Sarath Kodagoda, Karthick Thiyagarajan
2022 conf
IEEE SENSORS
Sathira Wickramanayake, Karthick Thiyagarajan, Sarath Kodagoda
2021 conf
IEEE SENSORS
Amal Gunatilake, Karthick Thiyagarajan, Sarath Kodagoda
2021 conf
IEEE SENSORS
Nalika Ulapane, Karthick Thiyagarajan, Sarath Kodagoda
2020 C conf
ICARCV
Nalika Ulapane, Karthick Thiyagarajan, Sarath Kodagoda
2020 C conf
ICARCV
Karthick Thiyagarajan, Sarath Kodagoda, Nalika Ulapane
2019 J jnl
CoRR
Lasitha Piyathilaka, Basura Sooriyaarachchi, Sarath Kodagoda, Karthick Thiyagarajan
2019 conf
CIS/RAM
Lasitha Piyathilaka, Basura Sooriyaarachchi, Sarath Kodagoda, Karthick Thiyagarajan
2018
Karthick Thiyagarajan
2018 J jnl
IEEE Access
Karthick Thiyagarajan, Sarath Kodagoda, Linh Van Nguyen, Ravindra Ranasinghe
2016 C conf
ICARCV
Karthick Thiyagarajan, Sarath Kodagoda, Jean Kyle Alvarez
2015 conf
RAM/CIS
Karthick Thiyagarajan, Sarath Kodagoda
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("/", ".")