Rajendra S. Katti

46 papers A 2B 6C 6Journal 22Unranked 10
YearRankTypeTitle / Venue / Authors
2013 C conf
DSD
Rajendra S. Katti, Rucha Sule
2012 J jnl
IEEE Trans. Inf. Forensics Secur.
Rajendra S. Katti, Aida Vosoughi
2012 B conf
TrustCom
Akshaya Mohan, Rajendra S. Katti
2012 J jnl
CoRR
Rajendra S. Katti, Cristinel Ababei
2010 B conf
GLOBECOM
Aida Vosoughi, Rajendra S. Katti
2010 J jnl
Int. J. Netw. Secur.
Rajendra S. Katti, Rajesh G. Kavasseri
2009 A conf
IPDPS
Cristinel Ababei, Rajendra S. Katti
2009 C conf
ISCAS
John Vreugdenhil, Kane Iverson, Rajendra S. Katti
2009 J jnl
J. Frankl. Inst.
Joseph P. Brennan, Rajendra S. Katti
2009 C conf
ISCAS
Rajendra S. Katti, Ahana Ghosh
2009 J jnl
J. Electr. Comput. Eng.
Sudarshan K. Srinivasan, Koushik Sarker, Rajendra S. Katti
2009 J jnl
IEEE Embed. Syst. Lett.
Sudarshan K. Srinivasan, Koushik Sarker, Rajendra S. Katti
2008 C conf
ISCAS
Rajendra S. Katti, Rajesh G. Kavasseri
2007 J jnl
IEEE Trans. Computers
Xiaoyu Ruan, Rajendra S. Katti
2006 J jnl
Int. J. Netw. Secur.
Kumar V. Mangipudi, Rajendra S. Katti
2006 J jnl
IEEE Trans. Computers
Xiaoyu Ruan, Rajendra S. Katti
2006 J jnl
Comput. Secur.
Kumar V. Mangipudi, Rajendra S. Katti
2006 C conf
ISCAS
Xiaoyu Ruan, Rajendra S. Katti, David Hinkemeyer
2006 conf
ISVLSI
Xiaoyu Ruan, Rajendra S. Katti
2006 J jnl
Int. J. Netw. Secur.
Kumar V. Mangipudi, Rajendra S. Katti, Huirong Fu
2006 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Rajendra S. Katti, Xiaoyu Ruan, Hareesh Khattri
2006 B conf
ISIT
Xiaoyu Ruan, Rajendra S. Katti
2005 B conf
ISIT
Rajendra S. Katti, Xiaoyu Ruan
2005 conf
ISVLSI
Deepak Rautela, Rajendra S. Katti
2005 A conf
FPGA
Deepak Rautela, Rajendra S. Katti
2005 conf
PE-WASUN
Hareesh Khattri, Rajendra S. Katti
2005 J jnl
IEEE Trans. Computers
Xiaoyu Ruan, Rajendra S. Katti
2005 conf
ISCAS (5)
Xiaoyu Ruan, Rajendra S. Katti
2005 conf
ISCAS (1)
Rajendra S. Katti, Xiaoyu Ruan
2005 J jnl
Theor. Comput. Sci.
Clemens Heuberger, Rajendra S. Katti, Helmut Prodinger, Xiaoyu Ruan
2004 conf
ISCAS (2)
Abdullah Mamun, Rajendra S. Katti
2004 B conf
GLOBECOM
Kumar V. Mangipudi, Nagaraja Malneedi, Rajendra S. Katti, Huirong Fu
2004 conf
ISCAS (2)
Rajendra S. Katti, Xiaoyu Ruan
2004 B conf
ISIT
Xiaoyu Ruan, Rajendra S. Katti
2003 J jnl
IEEE Trans. Computers
Rajendra S. Katti, Joseph Brennan
2002 C conf
DSD
Rajendra S. Katti
1998 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Rajendra S. Katti, Mark L. Manwaring
1997 conf
PP
Rajendra S. Katti, Longfei Hu
1997 conf
PP
Rajendra S. Katti, Huaan Zhang
1997 J jnl
IEEE Trans. Computers
Rajendra S. Katti
1996 J jnl
IEEE Trans. Computers
Rajendra S. Katti
1996 J jnl
IEEE Trans. Computers
Rajendra S. Katti
1996 J jnl
IEEE Trans. Computers
Rajendra S. Katti, Mario Blaum
1995 J jnl
IEEE Trans. Computers
Rajendra S. Katti
1995 conf
PP
J. L. Rawson, Rajendra S. Katti
1994 J jnl
IEEE Trans. Computers
Rajendra S. Katti
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("/", ".")