R. Brent Gillespie

87 papers A* 4A 2C 5Journal 31Unranked 44
YearRankTypeTitle / Venue / Authors
2025 conf
RoboSoft
Yatin Shankar Narayanan, Yilin Ma, R. Brent Gillespie, Mark Draelos, Xiaonan Huang
2024 conf
BioRob
Hannah Kuperus, Yucheng Tian, Katherine Burke, Lincoln Gillespie, Stephen Kemp, R. Brent Gillespie
2024 conf
HAPTICS
Alia Gilbert, Sachit Krishnan, R. Brent Gillespie
2024 J jnl
CoRR
Alia Gilbert, Sachit Krishnan, R. Brent Gillespie
2024 J jnl
Adv. Intell. Syst.
Tianxiang Dai, Nikola Velimirovic, Philipp Zalles, Daniel Bruder, Keith Buffinton, R. Brent Gillespie, C. David Remy
2024 J jnl
Int. J. Robotics Res.
C. David Remy, Zachary Brei, Daniel Bruder, Jan Remy, Keith W. Buffinton, R. Brent Gillespie
2023 A conf
IROS
Emma Treadway, Melissa Brei, Audrey Sedal, R. Brent Gillespie
2023 A* conf
ICRA
Mark Nail, Nick Jänne, Olivia Ma, Gabriel Arellano, Ella M. Atkins, R. Brent Gillespie
2022 conf
RoboSoft
Zachary Brei, R. Brent Gillespie
2021 J jnl
IEEE Access
Akshay Bhardwaj, Yidu Lu, Selina Pan, Nadine B. Sarter, R. Brent Gillespie
2021 J jnl
Int. J. Robotics Res.
Audrey Sedal, Alan Wineman, R. Brent Gillespie, C. David Remy
2021 J jnl
IEEE Trans. Robotics
Daniel Bruder, Xun Fu, R. Brent Gillespie, C. David Remy, Ram Vasudevan
2021 J jnl
IEEE Robotics Autom. Lett.
Daniel Bruder, Xun Fu, R. Brent Gillespie, C. David Remy, Ram Vasudevan
2021 conf
WHC
Akshay Bhardwaj, Steven Cutlip, R. Brent Gillespie
2021 J jnl
IEEE Trans. Hum. Mach. Syst.
Steven Cutlip, Yuzhi Wan, Nadine B. Sarter, R. Brent Gillespie
2021 J jnl
IEEE Trans. Robotics
Emma Treadway, R. Brent Gillespie
2020 J jnl
CoRR
Akshay Bhardwaj, Daniel Slavin, John Walsh, James S. Freudenberg, R. Brent Gillespie
2020 J jnl
CoRR
Daniel Bruder, Xun Fu, R. Brent Gillespie, C. David Remy, Ram Vasudevan
2020 J jnl
CoRR
Akshay Bhardwaj, Daniel Slavin, John Walsh, James S. Freudenberg, R. Brent Gillespie
2020 conf
HAPTICS
Steven Cutlip, Jim Freudenberg, R. Brent Gillespie
2019 J jnl
IEEE Robotics Autom. Lett.
Jiyeon Kang, Michael A. Gonzalez, R. Brent Gillespie, Deanna H. Gates
2019 J jnl
CoRR
Audrey Sedal, Alan Wineman, R. Brent Gillespie, C. David Remy
2019 conf
WHC
Steven Cutlip, Jim Freudenberg, Noah J. Cowan, R. Brent Gillespie
2019 J jnl
Cogn. Technol. Work.
Amir H. Ghasemi, Paramsothy Jayakumar, R. Brent Gillespie
2019 J jnl
IEEE Trans. Haptics
Emma Treadway, R. Brent Gillespie
2018 J jnl
IEEE Trans. Haptics
Valerie S. Morash, Alexander Russomanno, R. Brent Gillespie, Sile O'Modhrain
2018 conf
EuroHaptics (1)
Emma Treadway, Steven Cutlip, R. Brent Gillespie
2018 conf
HAPTICS
Emma Treadway, R. Brent Gillespie
2018 J jnl
IEEE Trans. Robotics
Emma Treadway, Zhenyu Gan, C. David Remy, R. Brent Gillespie
2017 conf
WHC
Emma Treadway, Yi Yang, R. Brent Gillespie
2016 conf
EuroHaptics (1)
Takamasa Horibe, Emma Treadway, R. Brent Gillespie
2016 conf
HAPTICS
Alexander Russomanno, M. Sile O'Modhrain, Mark Burns, R. Brent Gillespie
2016 J jnl
IEEE Trans. Haptics
Jeremy D. Brown, Mackenzie K. Shelley, Duane Gardner, Emmanuel A. Gansallo, R. Brent Gillespie
2016 conf
AutomotiveUI (adjunct)
Amir H. Ghasemi, Mishel Johns, Benjamin Garber, Paul Boehm, Paramsothy Jayakumar, Wendy Ju, R. Brent Gillespie
2015 A conf
IROS
Zhenyu Gan, Katelyn Fry, R. Brent Gillespie, C. David Remy
2015 J jnl
IEEE Trans. Haptics
Alexander Russomanno, Sile O'Modhrain, R. Brent Gillespie, Matthew W. M. Rodger
2015 conf
World Haptics
Alexander Russomanno, R. Brent Gillespie, Sile O'Modhrain, Mark Burns
2015 conf
NIME
Eric Sheffield, Sile O'Modhrain, Michael Gould, R. Brent Gillespie
2015 conf
World Haptics
Emma Treadway, R. Brent Gillespie, Darren Bolger, Amy A. Blank, Marcia O'Malley, Alicia J. Davis
2014 conf
CDC
Bo Yu, R. Brent Gillespie, James S. Freudenberg, Jeffrey A. Cook
2014 C conf
ACC
Bo Yu, R. Brent Gillespie, James S. Freudenberg, Jeffrey A. Cook
2014 conf
EuroHaptics (2)
Alexander Russomanno, R. Brent Gillespie, M. Sile O'Modhrain, James Barber
2014 conf
HAPTICS
R. Brent Gillespie, Dongwon Kim, Jacob M. Suchoski, Bo Yu, Jeremy D. Brown
2013 conf
EMBC
Andrew Y. Paek, Jeremy D. Brown, R. Brent Gillespie, Marcia K. O'Malley, Patricia A. Shewokis, José L. Contreras-Vidal
2013 conf
World Haptics
Dongwon Kim, Brandon J. Johnson, R. Brent Gillespie, Rachael D. Seidler
2013 conf
World Haptics
Jeremy D. Brown, Andrew Y. Paek, Mashaal Syed, Marcia Kilchenman O'Malley, Patricia A. Shewokis, José Luis Contreras-Vidal, Alicia J. Davis, R. Brent Gillespie
2013 conf
World Haptics
Ryan Christiansen, José Luis Contreras-Vidal, R. Brent Gillespie, Patricia A. Shewokis, Marcia Kilchenman O'Malley
2012 ed.
NIME
Georg Essl, R. Brent Gillespie, Michael Gurevich, Sile O'Modhrain
2012 conf
HAPTICS
Xinyi Ge, Shih-Kang Peng, Boyun Wang, Jonah Shapiro, R. Brent Gillespie, Curt Salisbury
2012 J jnl
IEEE Trans. Control. Syst. Technol.
Daniel F. Opila, Xiaoyong Wang, Ryan McGee, R. Brent Gillespie, Jeffrey A. Cook, Jessy W. Grizzle
2012 conf
HAPTICS
Jeremy D. Brown, R. Brent Gillespie, Duane Gardner, Emmanuel A. Gansallo
2012 conf
CDC
Bo Yu, James S. Freudenberg, R. Brent Gillespie, Jeffrey A. Cook
2012 C conf
ACC
Bo Yu, James S. Freudenberg, R. Brent Gillespie
2011 J jnl
IEEE Trans. Robotics
Paul G. Griffiths, R. Brent Gillespie, James S. Freudenberg
2011 J jnl
Comput. Music. J.
R. Brent Gillespie, Bo Yu, Robert Grijalva, Shorya Awtar
2011 C conf
ACC
Tulga Ersal, R. Brent Gillespie, Mark J. Brudnak, Jeffrey L. Stein, Hosam K. Fathy
2011 conf
World Haptics
R. Brent Gillespie, M. Sile O'Modhrain
2011 conf
CDC/ECC
Bo Yu, James S. Freudenberg, R. Brent Gillespie, Richard H. Middleton
2011 conf
World Haptics
Jeremy D. Brown, R. Brent Gillespie
2011 J jnl
IEEE Trans. Haptics
Curt Salisbury, R. Brent Gillespie, Hong Z. Tan, Federico Barbagli, J. Kenneth Salisbury
2010 conf
HAPTICS
Louis B. Kratchman, Jian Wen, Marc Michener, R. Brent Gillespie
2009 conf
WHC
Ozkan Celik, Marcia Kilchenman O'Malley, R. Brent Gillespie, Patricia A. Shewokis, José Luis Contreras-Vidal
2009 conf
WHC
Curt Salisbury, R. Brent Gillespie, Hong Z. Tan, Federico Barbagli, J. Kenneth Salisbury
2009 conf
WHC
R. Brent Gillespie, John Baker, Marcia Kilchenman O'Malley, Patricia A. Shewokis, José Luis Contreras-Vidal
2009 conf
WHC
Paul G. Griffiths, R. Brent Gillespie
2008 J jnl
IEEE Trans. Robotics
Paul G. Griffiths, R. Brent Gillespie, James S. Freudenberg
2008 C conf
ACC
Paul G. Griffiths, R. Brent Gillespie
2008 conf
HAPTICS
Paul G. Griffiths, R. Brent Gillespie
2007 conf
Robotics: Science and Systems
Paul G. Griffiths, R. Brent Gillespie, Jim Freudenberg
2007 J jnl
IEEE Trans. Control. Syst. Technol.
Szabolcs Sövényi, R. Brent Gillespie
2007 J jnl
Comput. Biol. Medicine
K. Han Kim, R. Brent Gillespie, Bernard J. Martin
2006 conf
HAPTICS
Paul G. Griffiths, R. Brent Gillespie, James S. Freudenberg
2005 conf
WHC
Volkan Patoglu, R. Brent Gillespie
2005 C conf
ACC
Paul G. Griffiths, R. Brent Gillespie
2005 J jnl
IEEE Trans. Robotics
Volkan Patoglu, R. Brent Gillespie
2005 J jnl
Hum. Factors
Paul G. Griffiths, R. Brent Gillespie
2004 conf
HAPTICS
Felix Huang, R. Brent Gillespie, Art Kuo
2004 conf
HAPTICS
Volkan Patoglu, R. Brent Gillespie
2004 conf
HAPTICS
Paul G. Griffiths, R. Brent Gillespie
2003 conf
HAPTICS
R. Brent Gillespie, Mark B. Hoffman, James S. Freudenberg
2003 conf
HAPTICS
Volkan Patoglu, R. Brent Gillespie
2002 A* conf
ICRA
Volkan Patoglu, R. Brent Gillespie
2002 conf
Symposium on Haptic Interfaces for Virtual Environment and Teleoperator Systems
Felix Huang, R. Brent Gillespie, Art Kuo
2001 J jnl
IEEE Trans. Robotics Autom.
R. Brent Gillespie, J. Edward Colgate, Michael A. Peshkin
2001 J jnl
IEEE Trans. Robotics Autom.
Michael A. Peshkin, J. Edward Colgate, Wit Wannasuphoprasit, Carl A. Moore, R. Brent Gillespie, Prasad Akella
1999 A* conf
ICRA
R. Brent Gillespie, J. Edward Colgate, Michael A. Peshkin
1997 A* conf
ICRA
Witaya Wannasuphoprasit, R. Brent Gillespie, J. Edward Colgate, Michael A. Peshkin
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"