Rajarshi Ray

49 papers A* 1A 1B 2C 4Misc 1Journal 20Unranked 19
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Atanu Kundu, Sauvik Gon, Rajarshi Ray
2025 J jnl
CoRR
Atanu Kundu, Pratyay Sarkar, Rajarshi Ray
2025 J jnl
CoRR
Mir Md Sajid Sarwar, Sudip Samanta, Rajarshi Ray
2025 J jnl
CoRR
Atanu Kundu, Sauvik Gon, Rajarshi Ray
2025 conf
ISEC
Sk Asif Iqbal, Mir Md Sajid Sarwar, Rajarshi Ray
2025 J jnl
CoRR
Mir Md Sajid Sarwar, Rajarshi Ray
2025 J jnl
ACM Trans. Embed. Comput. Syst.
Mir Md Sajid Sarwar, Rajarshi Ray
2025 J jnl
Theor. Comput. Sci.
Subhash Bhagat, Krishnendu Mukhopadhyaya, Rajarshi Ray
2024 conf
ISEC
Devdan Dey, Mir Md Sajid Sarwar, Rajarshi Ray, Ansuman Banerjee
2024 Misc conf
ICDCN
Subhash Bhagat, Paulomi Dey, Rajarshi Ray
2024 conf
ISEC
Atanu Kundu, Sauvik Gon, Rajarshi Ray
2023 J jnl
ACM Trans. Embed. Comput. Syst.
Mir Md Sajid Sarwar, Rajarshi Ray, Ansuman Banerjee
2023 conf
ARCH
Claudio Menghi, Paolo Arcaini, Walstan Baptista, Gidon Ernst, Georgios Fainekos, Federico Formica, Sauvik Gon, Tanmay Khandait, Atanu Kundu, Giulia Pedrielli, Jarkko Peltomäki, Ivan Porres, Rajarshi Ray, Masaki Waga, Zhenya Zhang
2023 C conf
MEMOCODE
Mir Md Sajid Sarwar, Rajarshi Ray, Ansuman Banerjee
2023 J jnl
Internet Things
Kamal Das, Rajarshi Ray, Soumen Moulik
2023 J jnl
ACM Trans. Embed. Comput. Syst.
Atanu Kundu, Sarthak Das, Rajarshi Ray
2022 conf
ARCH@SAFECOMP
Lei Bu, Goran Frehse, Atanu Kundu, Rajarshi Ray, Yuhui Shi, Enea Zaffanella
2021 conf
AIR
Atul Thakur, Raju Halder, Gourinath Banda, Rajarshi Ray, Ansuman Bhattacharya, Satyendra R. Nishad
2021 J jnl
CoRR
Moumita Das, Rajarshi Ray, Swarup Kumar Mohalik, Ansuman Banerjee
2021 J jnl
Innov. Syst. Softw. Eng.
Kamal Das, Amit Gurung, Rajarshi Ray
2020 C conf
MEMOCODE
Mir Md Sajid Sarwar, Rajarshi Ray, Ansuman Banerjee
2020 conf
ARCH
Matthias Althoff, Stanley Bak, Zongnan Bao, Marcelo Forets, Goran Frehse, Daniel Freire, Niklas Kochdumper, Yangge Li, Sayan Mitra, Rajarshi Ray, Christian Schilling, Stefan Schupp, Mark Wetzlinger
2020 conf
ARCH
Lei Bu, Alessandro Abate, Dieky Adzkiya, Muhammad Syifa'ul Mufid, Rajarshi Ray, Yuming Wu, Enea Zaffanella
2019 conf
ARCH@CPSIoTWeek
Lei Bu, Rajarshi Ray, Stefan Schupp
2019 conf
ARCH@CPSIoTWeek
Matthias Althoff, Stanley Bak, Marcelo Forets, Goran Frehse, Niklas Kochdumper, Rajarshi Ray, Christian Schilling, Stefan Schupp
2019 C conf
MEMOCODE
Bernard Nongpoh, Rajarshi Ray, Ansuman Banerjee
2019 J jnl
ACM Trans. Design Autom. Electr. Syst.
Bernard Nongpoh, Rajarshi Ray, Moumita Das, Ansuman Banerjee
2019 conf
HSCC
Sergiy Bogomolov, Goran Frehse, Amit Gurung, Dongxu Li, Georg Martius, Rajarshi Ray
2019 J jnl
Int. J. Softw. Tools Technol. Transf.
Amit Gurung, Rajarshi Ray, Ezio Bartocci, Sergiy Bogomolov, Radu Grosu
2019 B conf
ICPE
Amit Gurung, Rajarshi Ray
2018 conf
ARCH@ADHS
Lei Bu, Rajarshi Ray, Stefan Schupp
2018 conf
ARCH@ADHS
Matthias Althoff, Stanley Bak, Xin Chen, Chuchu Fan, Marcelo Forets, Goran Frehse, Niklas Kochdumper, Yangge Li, Sayan Mitra, Rajarshi Ray, Christian Schilling, Stefan Schupp
2018 J jnl
CoRR
Amit Gurung, Rajarshi Ray
2017 conf
ARCH@CPSWeek
Lei Bu, Rajarshi Ray, Stefan Schupp
2017 conf
ARCH@CPSWeek
Matthias Althoff, Stanley Bak, Dario Cattaruzza, Xin Chen, Goran Frehse, Rajarshi Ray, Stefan Schupp
2017 J jnl
IEEE Trans. Software Eng.
Bernard Nongpoh, Rajarshi Ray, Saikat Dutta, Ansuman Banerjee
2017 J jnl
CoRR
Rajarshi Ray, Arup Deka, Kamalika Datta
2016 J jnl
CoRR
Amit Gurung, Rajarshi Ray
2016 J jnl
CoRR
Amit Gurung, Arup Deka, Ezio Bartocci, Sergiy Bogomolov, Radu Grosu, Rajarshi Ray
2016 C conf
MEMOCODE
Amit Gurung, Arup Deka, Ezio Bartocci, Sergiy Bogomolov, Radu Grosu, Rajarshi Ray
2016 J jnl
CoRR
Amit Gurung, Rajarshi Ray
2015 conf
HSCC
Rajarshi Ray, Amit Gurung
2015 conf
Haifa Verification Conference
Rajarshi Ray, Amit Gurung, Binayak Das, Ezio Bartocci, Sergiy Bogomolov, Radu Grosu
2014 B conf
LCTES
Pooja Roy, Rajarshi Ray, Chundong Wang, Weng-Fai Wong
2013 A conf
SC
Wai Teng Tang, Wen Jun Tan, Rajarshi Ray, Yi Wen Wong, Weiguang Chen, Shyh-Hao Kuo, Rick Siow Mong Goh, Stephen John Turner, Weng-Fai Wong
2012
Rajarshi Ray
2012 conf
ADHS
Goran Frehse, Rajarshi Ray
2011 A* conf
CAV
Goran Frehse, Colas Le Guernic, Alexandre Donzé, Scott Cotton, Rajarshi Ray, Olivier Lebeltel, Rodolfo Ripado, Antoine Girard, Thao Dang, Oded Maler
2009 conf
ADHS
Goran Frehse, Rajarshi Ray
redb/extractors/apk_extractors/apk_permissions.py
← Index redb/extractors/apk_extractors/apk_permissions.py python
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.apk_extractor import APKExtractor
from redb.models.dataclasses import APKPermissions, APKPermission

# Known dangerous permissions (Android runtime permissions)
DANGEROUS_PERMISSIONS = {
    "android.permission.READ_CALENDAR",
    "android.permission.WRITE_CALENDAR",
    "android.permission.CAMERA",
    "android.permission.READ_CONTACTS",
    "android.permission.WRITE_CONTACTS",
    "android.permission.GET_ACCOUNTS",
    "android.permission.ACCESS_FINE_LOCATION",
    "android.permission.ACCESS_COARSE_LOCATION",
    "android.permission.ACCESS_BACKGROUND_LOCATION",
    "android.permission.RECORD_AUDIO",
    "android.permission.READ_PHONE_STATE",
    "android.permission.READ_PHONE_NUMBERS",
    "android.permission.CALL_PHONE",
    "android.permission.ANSWER_PHONE_CALLS",
    "android.permission.ADD_VOICEMAIL",
    "android.permission.USE_SIP",
    "android.permission.BODY_SENSORS",
    "android.permission.SEND_SMS",
    "android.permission.RECEIVE_SMS",
    "android.permission.READ_SMS",
    "android.permission.RECEIVE_WAP_PUSH",
    "android.permission.RECEIVE_MMS",
    "android.permission.READ_EXTERNAL_STORAGE",
    "android.permission.WRITE_EXTERNAL_STORAGE",
    "android.permission.READ_MEDIA_IMAGES",
    "android.permission.READ_MEDIA_VIDEO",
    "android.permission.READ_MEDIA_AUDIO",
    "android.permission.POST_NOTIFICATIONS",
    "android.permission.NEARBY_WIFI_DEVICES",
    "android.permission.ACTIVITY_RECOGNITION",
    "android.permission.BLUETOOTH_SCAN",
    "android.permission.BLUETOOTH_ADVERTISE",
    "android.permission.BLUETOOTH_CONNECT",
}


class APKPermissionsExtractor(APKExtractor):

    def __init__(
        self, filepath, log, exporters=None, index_prefix=None,
        known_benign=False, known_malicious=False,
        apk=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix,
            known_benign, known_malicious, apk,
        )
        self.permissions_data = None
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.APK_PERMISSIONS.value

    def _get_protection_level(self, perm_name):
        """Determine the protection level of a permission.

        Uses androguard's permission mappings first, falls back to the
        known dangerous list.
        """
        try:
            from androguard.core.api_specific_resources import load_permission_mappings
            target_sdk = self.apk.get_target_sdk_version()
            sdk = int(target_sdk) if target_sdk else 30
            permission_map = load_permission_mappings(sdk)
            if perm_name in permission_map:
                info = permission_map[perm_name]
                if isinstance(info, dict):
                    return info.get("protectionLevel", "unknown")
                return "unknown"
        except Exception:
            pass

        # Fallback to known dangerous set
        if perm_name in DANGEROUS_PERMISSIONS:
            return "dangerous"
        if perm_name.startswith("android.permission."):
            return "normal"
        return "unknown"

    def _compute_permhash(self):
        """Compute permhash using the permhash library."""
        try:
            from permhash.functions import permhash_apk
            return permhash_apk(self.filepath)
        except Exception as e:
            self.log.warning(f"Failed to compute permhash: {e}")
            return None

    def _safe_extract(self, field_name, func, default=None):
        """Extract a single field, logging and returning default on failure."""
        try:
            return func()
        except Exception as e:
            self.log.warning(
                f"Error extracting APK permissions field '{field_name}' for "
                f"{self.hash.sha256}: {e}"
            )
            return default

    def extract(self):
        if not self._is_valid_apk():
            self.log.error(f"Invalid APK for {self.hash.sha256}")
            return None

        requested_perms = self._safe_extract(
            "requested_permissions",
            lambda: list(self.apk.get_permissions() or []), []
        )
        custom_perms = self._safe_extract(
            "custom_permissions",
            lambda: list(self.apk.get_declared_permissions() or []), []
        )
        custom_perm_set = set(custom_perms)

        permission_details = []
        dangerous_permissions = []

        for perm in requested_perms:
            try:
                protection_level = self._get_protection_level(perm)
                is_custom = perm in custom_perm_set

                permission_details.append(APKPermission(
                    permission_name=perm,
                    protection_level=protection_level,
                    is_custom=is_custom,
                ))

                if protection_level == "dangerous":
                    dangerous_permissions.append(perm)
            except Exception as e:
                self.log.warning(
                    f"Error processing permission '{perm}' for "
                    f"{self.hash.sha256}: {e}"
                )
                permission_details.append(APKPermission(
                    permission_name=perm,
                    protection_level="unknown",
                    is_custom=perm in custom_perm_set,
                ))

        permhash_value = self._compute_permhash()

        self.permissions_data = APKPermissions(
            total_permission_count=len(requested_perms),
            dangerous_permission_count=len(dangerous_permissions),
            permissions=requested_perms,
            dangerous_permissions=dangerous_permissions,
            custom_permissions=custom_perms,
            permission_details=permission_details,
            permhash=permhash_value,
        )
        return self.permissions_data

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ClickHouseExporter":
            if not self.permissions_data:
                return None

            current_time = datetime.now(timezone.utc)

            # One row per permission
            data = []
            for detail in self.permissions_data.permission_details:
                data.append([
                    self.sha256,
                    detail.permission_name,
                    detail.protection_level,
                    int(detail.is_custom),
                    current_time,
                ])

            if not data:
                return None

            column_names = [
                'sha256', 'permission_name', 'protection_level',
                'is_custom', 'analysis_date',
            ]

            column_type_names = [
                'FixedString(64)', 'String', 'LowCardinality(String)',
                'UInt8', "DateTime64(3, 'UTC')",
            ]

            return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_apk_permissions"