K. Vinod Kumar

15 papers Journal 11Unranked 4
YearRankTypeTitle / Venue / Authors
2024 conf
ICCCNT
P. Raghu Ramaiah, Shaik Javid Basha, K. Vinod Kumar, Y. Mallikarjuna Rao
2022 J jnl
J. Intell. Fuzzy Syst.
Ramesh Devarapalli, B. Venkateswara Rao, Bishwajit Dey, K. Vinod Kumar, Hasmat Malik, Fausto Pedro García Márquez
2021 J jnl
Remote. Sens.
Arindam Guha, Uday Kumar Ghosh, Joyasree Sinha, Amin Beiranvand Pour, Ratnakar Bhaisal, Snehamoy Chatterjee, Nikhil Kumar Baranval, Nisha Rani, K. Vinod Kumar, Pamaraju V. N. Rao
2019 J jnl
Remote. Sens.
Arindam Guha, Yasushi Yamaguchi, Snehamoy Chatterjee, Komal Rani, K. Vinod Kumar
2018 J jnl
J. Intell. Fuzzy Syst.
K. Vinod Kumar, Ranvijay
2015 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Priyom Roy, Arindam Guha, K. Vinod Kumar
2015 J jnl
Int. J. Appl. Earth Obs. Geoinformation
John Mathew, Ritwik Majumdar, K. Vinod Kumar
2013 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Arindam Guha, Vivek Kumar Singh, Reshma Parveen, K. Vinod Kumar, A. T. Jeyaseelan, E. N. Dhanamjaya Rao
2011 J jnl
IEEE Trans. Geosci. Remote. Sens.
Tapas Ranjan Martha, Norman Kerle, Cees J. van Westen, Victor Jetten, K. Vinod Kumar
2011 conf
ACC (4)
K. Vinod Kumar, G. Lakshmi Phani, K. Venkat Sayeesh, Aparna Chaganty, Garimella Rama Murthy
2010 conf
WOCN
G. Lakshmi Phani, K. Venkat Sayeesh, K. Vinod Kumar, Garimella Rama Murthy
2010 J jnl
IEEE Geosci. Remote. Sens. Lett.
Tapas Ranjan Martha, Norman Kerle, Victor Jetten, Cees J. van Westen, K. Vinod Kumar
2009 conf
NaBIC
Pamela Chaudhury, Madhuri Rao, K. Vinod Kumar
1998 J jnl
Comput. Vis. Image Underst.
Pijush K. Ghosh, K. Vinod Kumar
1978 J jnl
ACM SIGPLAN Notices
V. Sinha, K. Vinod Kumar
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("/", ".")