Rahnuma Islam Nishat

45 papers A 6B 3C 4Misc 3Journal 21Unranked 6
YearRankTypeTitle / Venue / Authors
2026 J jnl
Inf. Comput.
Therese Biedl, Stephane Durocher, Debajyoti Mondal, Rahnuma Islam Nishat, Bastien Rivier
2025 J jnl
Bus. Process. Manag. J.
Mostafa Abbasi, Rahnuma Islam Nishat, Corey Bond, John Brandon Graham-Knight, Patricia Lasserre, Yves Lucet, Homayoun Najjaran
2025 B conf
WALCOM
Therese Biedl, Stephane Durocher, Debajyoti Mondal, Rahnuma Islam Nishat, Bastien Rivier
2025 J jnl
Int. J. Found. Comput. Sci.
Muhammad Nur Yanhaona, Rahnuma Islam Nishat, Md. Saidur Rahman
2024 J jnl
CoRR
Mostafa Abbasi, Rahnuma Islam Nishat, Corey Bond, John Brandon Graham-Knight, Patricia Lasserre, Yves Lucet, Homayoun Najjaran
2024 J jnl
Comput. J.
Sheikh Azizul Hakim, Rahnuma Islam Nishat, Md. Saidur Rahman
2024 J jnl
CoRR
Therese Biedl, Stephane Durocher, Debajyoti Mondal, Rahnuma Islam Nishat, Bastien Rivier
2024 ed.
CCCG
Rahnuma Islam Nishat
2024 J jnl
CoRR
Reyan Ahmed, Debajyoti Mondal, Rahnuma Islam Nishat
2024 J jnl
J. Comb. Optim.
Rahnuma Islam Nishat, Venkatesh Srinivasan, Sue Whitesides
2023 J jnl
J. Graph Algorithms Appl.
Rahnuma Islam Nishat, Venkatesh Srinivasan, Sue Whitesides
2023 conf
CCCG
Yeganeh Bahoo, Onur Cagirici, Kody Manastyrski, Rahnuma Islam Nishat, Christopher Kolios, Roni Sherman
2023 J jnl
Algorithmica
William J. Lenhart, Giuseppe Liotta, Debajyoti Mondal, Rahnuma Islam Nishat
2023 J jnl
Int. J. Found. Comput. Sci.
Rahnuma Islam Nishat, Sue Whitesides
2022 B conf
WALCOM
Rahnuma Islam Nishat, Venkatesh Srinivasan, Sue Whitesides
2022 J jnl
Comput. Graph. Forum
A. Bedel, Yoann Coudert-Osmont, Jonàs Martínez, Rahnuma Islam Nishat, Sue Whitesides, Sylvain Lefebvre
2022 Misc conf
COCOON
Rahnuma Islam Nishat, Venkatesh Srinivasan, Sue Whitesides
2022 J jnl
CoRR
Rahnuma Islam Nishat, Venkatesh Srinivasan, Sue Whitesides
2021 C conf
IWOCA
Rahnuma Islam Nishat, Srinivasan Venkatesh, Sue Whitesides
2020
Rahnuma Islam Nishat
2019 B conf
WG
Rahnuma Islam Nishat, Sue Whitesides
2018 J jnl
Comput. Geom.
William S. Evans, Stefan Felsner, Michael Kaufmann, Stephen G. Kobourov, Debajyoti Mondal, Rahnuma Islam Nishat, Kevin Verbeek
2017 Misc conf
COCOON
Rahnuma Islam Nishat, Sue Whitesides
2014 conf
CRV
River Allen, Neil Macmillan, Dimitri Marinakis, Rahnuma Islam Nishat, Rayhan Rahman, Sue Whitesides
2013 J jnl
J. Graph Algorithms Appl.
Stephane Durocher, Debajyoti Mondal, Rahnuma Islam Nishat, Sue Whitesides
2013 J jnl
J. Discrete Algorithms
Debajyoti Mondal, Rahnuma Islam Nishat, Md. Saidur Rahman, Sue Whitesides
2013 conf
CCCG
River Allen, Laurie J. Heyer, Rahnuma Islam Nishat, Sue Whitesides
2013 conf
CCCG
Rahnuma Islam Nishat, Sue Whitesides
2013 J jnl
J. Comb. Optim.
Debajyoti Mondal, Rahnuma Islam Nishat, Sudip Biswas, Md. Saidur Rahman
2013 A conf
GD
William J. Lenhart, Giuseppe Liotta, Debajyoti Mondal, Rahnuma Islam Nishat
2013 A conf
ESA
William S. Evans, Stefan Felsner, Michael Kaufmann, Stephen G. Kobourov, Debajyoti Mondal, Rahnuma Islam Nishat, Kevin Verbeek
2012 C conf
IWOCA
Debajyoti Mondal, Rahnuma Islam Nishat, Md. Saidur Rahman, Sue Whitesides
2012 J jnl
J. Discrete Algorithms
Debajyoti Mondal, Rahnuma Islam Nishat, Sue Whitesides, Md. Saidur Rahman
2012 C conf
COCOA
Sudip Biswas, Stephane Durocher, Debajyoti Mondal, Rahnuma Islam Nishat
2012 A conf
GD
Fabrizio Frati, Marc Glisse, William J. Lenhart, Giuseppe Liotta, Tamara Mchedlidze, Rahnuma Islam Nishat
2012 J jnl
Comput. Geom.
Rahnuma Islam Nishat, Debajyoti Mondal, Md. Saidur Rahman
2012 A conf
GD
Stephen G. Kobourov, Debajyoti Mondal, Rahnuma Islam Nishat
2011 conf
CCCG
Stephane Durocher, Debajyoti Mondal, Rahnuma Islam Nishat, Sue Whitesides
2011 C conf
IWOCA
Debajyoti Mondal, Rahnuma Islam Nishat, Sue Whitesides, Md. Saidur Rahman
2011 A conf
GD
Stephane Durocher, Debajyoti Mondal, Rahnuma Islam Nishat, Md. Saidur Rahman, Sue Whitesides
2011 J jnl
J. Graph Algorithms Appl.
Debajyoti Mondal, Rahnuma Islam Nishat, Md. Saidur Rahman, Muhammad Jawaherul Alam
2011 J jnl
Math. Comput. Sci.
Rahnuma Islam Nishat, Debajyoti Mondal, Md. Saidur Rahman
2010 Misc conf
COCOON
Sudip Biswas, Debajyoti Mondal, Rahnuma Islam Nishat, Md. Saidur Rahman
2010 conf
CCCG
Debajyoti Mondal, Rahnuma Islam Nishat, Md. Saidur Rahman, Md. Jawaherul Alam
2010 A conf
GD
Rahnuma Islam Nishat, Debajyoti Mondal, Md. Saidur Rahman
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"