Rajeev Shorey

60 papers A* 7B 9Misc 19Journal 12Unranked 8
YearRankTypeTitle / Venue / Authors
2026 Misc conf
COMSNETS
Spaarsh Thakkar, Dev Gupta, Rajeev Shorey
2026 Misc conf
COMSNETS
Vedic Chawla, Bhumil Rangholiya, Sachin D. Patil, Rajeev Shorey
2025 Misc conf
COMSNETS
Satvik Rajesh, Ishaan Gakhar, Rajeev Shorey, Rohit Verma
2024 conf
AIMLSystems
Nikita Karthikeyan, Hayagreev Jeyandran, Rohit Verma, Rajeev Shorey
2024 Misc conf
COMSNETS
Anirudha Kulkarni, Abhinav Kumar, Rajeev Shorey, Rohit Verma
2023 Misc conf
COMSNETS
Sourav Bansal, Manav Bansal, Rohit Verma, Rajeev Shorey, Huzur Saran
2023 Misc conf
COMSNETS
Aniket Modi, Rishi Shah, Krishnanshu Jain, Rohit Verma, Rajeev Shorey, Huzur Saran
2022 Misc conf
COMSNETS
Manupriya Gupta, Pavas Goyal, Rohit Verma, Rajeev Shorey, Huzur Saran
2022 Misc conf
COMSNETS
Tanmay Jain, Avaneesh, Rohit Verma, Rajeev Shorey
2022 Misc conf
COMSNETS
Ishan Prakash, Aniruddh Bansal, Rohit Verma, Rajeev Shorey
2021 J jnl
CoRR
Manupriya Gupta, Pavas Goyal, Rohit Verma, Rajeev Shorey, Huzur Saran
2021 J jnl
CoRR
Tanmay Jain, Avaneesh, Rohit Verma, Rajeev Shorey
2021 J jnl
CoRR
Ishan Prakash, Aniruddh Bansal, Rohit Verma, Rajeev Shorey
2020 Misc conf
COMSNETS
Gaurav Bhandari, Rajeev Shorey, Rajesh Sundaresan, Prakash Hiremath M., Ashish Joglekar, Anupama Kulkarni, Devadatta M. Kulkarni, C. Mahadeva, Sampad B. Mohanty, D. Raghunath, M. B. Raju
2020 Misc conf
COMSNETS
Rishabh Mehta, Rajeev Shorey
2020 Misc conf
COMSNETS
Siddharth Singhal, Utkarsh Chawla, Rajeev Shorey
2019 ed.
COMSNETS (Extended Selected Papers)
Subir Biswas, Animesh Mukherjee, Mun Choon Chan, Sandip Chakraborty, Abhinav Kumar, Giridhar Mandyam, Rajeev Shorey
2019 Misc conf
COMSNETS
Rishabh Mehta, Naman Kapoor, Soumya Sourav, Rajeev Shorey
2019 Misc conf
COMSNETS
Aditya Ahuja, Himanshu Gandhi, Rajeev Shorey, Devadatta M. Kulkarni, Jeffrey D. Tew
2018 J jnl
ACM Trans. Embed. Comput. Syst.
Soubhagya Sutar, Arnab Raha, Devadatta M. Kulkarni, Rajeev Shorey, Jeffrey D. Tew, Vijay Raghunathan
2018 A* ed.
MobiCom
Rajeev Shorey, Rohan Murty, Yingying (Jennifer) Chen, Kyle Jamieson
2018 A* conf
MobiCom
Rajeev Shorey
2018 A* conf
MobiCom
Rajeev Shorey
2018 Misc conf
COMSNETS
Yash Gupta, Rajeev Shorey, Devadatta M. Kulkarni, Jeffrey D. Tew
2017 Misc conf
COMSNETS
Shilpa Rao, Rajeev Shorey
2016 Misc conf
COMSNETS
Kaustubh Dhondge, Rajeev Shorey, Jeffrey D. Tew
2015 ed.
e-Energy
Shivkumar Kalyanaraman, Deva P. Seetharam, Rajeev Shorey, Sarvapali D. Ramchurn, Mani Srivastava
2014 Misc conf
COMSNETS
Uday B. Desai, Giridhar D. Mandyam, Rajeev Shorey, G. Venkatesh
2013 ed.
PSATS
Prashant Pillai, Rajeev Shorey, Erina Ferro
2012 Misc ed.
COMSNETS
K. K. Ramakrishnan, Rajeev Shorey, Donald F. Towsley
2011 J jnl
Mob. Networks Appl.
Falko Dressler, Archan Misra, Rajeev Shorey
2010 A* ed.
SIGCOMM
Shivkumar Kalyanaraman, Venkata N. Padmanabhan, K. K. Ramakrishnan, Rajeev Shorey, Geoffrey M. Voelker
2009 ed.
ISWCS
Giovanni Giambene, Yuming Jiang, Boon Sain Yeo, Rajeev Shorey
2009 ed.
Vehicular Ad Hoc Networks
Rajeev Shorey, André Weimerskirch, Daniel Jiang, Martin Mauve
2007 J jnl
IEEE J. Sel. Areas Commun.
Farooq Anjum, Sunghyun Choi, Virgil D. Gligor, Ralf Guido Herrtwich, Jean-Pierre Hubaux, P. R. Kumar, Rajeev Shorey, Chin-Tau Lea
2007 conf
COMSWARE
Ashish Sangwan, Venkatesh Ramaiyan, Rajeev Shorey
2006 A* conf
PerCom
Wen Hu, Archan Misra, Rajeev Shorey
2006 J jnl
Wirel. Networks
Sorav Bansal, Rajeev Shorey, Rajeev Gupta, Archan Misra
2004 J jnl
Comput. Networks
Abhinav Kamra, Huzur Saran, Sandeep Sen, Rajeev Shorey
2004 conf
ICPP Workshops
K. N. Sridhar, Lillykutty Jacob, Rajeev Shorey
2004 B conf
WCNC
Arzad Alam Kherani, Rajeev Shorey
2004 B conf
WCNC
Sorav Bansal, Rajeev Shorey, Arzad Alam Kherani
2004 B conf
WCNC
Arzad Alam Kherani, Rajeev Shorey
2003 B conf
WCNC
Sorav Bansal, Rajeev Shorey, Archan Misra
2003 conf
ICC
Parminder Chhabra, Ajita John, Huzur Saran, Rajeev Shorey
2003 J jnl
IEEE J. Sel. Areas Commun.
Rajarathnam Chandramouli, Rajeev Shorey, Pradip K. Srimani, X. Wang, H. Yu
2002 A* conf
INFOCOM
Imran Ali, Rajeev Gupta, Sorav Bansal, Archan Misra, Ashu Razdan, Rajeev Shorey
2002 B conf
NETWORKING
Abhinav Kamra, Huzur Saran, Sandeep Sen, Rajeev Shorey
2002 B conf
GLOBECOM
Sorav Bansal, Rajeev Shorey, Shobhit Chugh, Anurag Goel, Kapil Kumar, Archan Misra
2002 B conf
ICNP
Parminder Chhabra, Shobhit Chuig, Anurag Goel, Ajita John, Abhishek Kumar, Huzur Saran, Rajeev Shorey
2001 A* conf
INFOCOM
Rajeev Shorey, Abhishek Das, Ashu Razdan, Abhishek Ghose, Huzur Saran
2001 conf
ICC
Indraneel Chakraborty, Abhishek Kashyap, Apurva Kumar, Anupam Rastogi, Huzur Saran, Rajeev Shorey
2001 J jnl
J. High Speed Networks
Apurva Kumar, Lakshmi Ramachandran, Rajeev Shorey
2001 B conf
GLOBECOM
Abhay Chrungoo, Vishu Gupta, Huzur Saran, Rajeev Shorey
2000 conf
ICC (2)
Manpreet Singh Dang, Amol Prakash, Rajeev Shorey, Natwar Modani, Dinesh K. Anvekar
2000 conf
ICC (3)
Sulabh Agarwal, Ashish Ahuja, Jatinder Pal Singh, Rajeev Shorey
1997 J jnl
ACM Trans. Model. Comput. Simul.
Rajeev Shorey, Anurag Kumar, Kiran M. Rege
1996 conf
Workshop on Parallel and Distributed Simulation
Manish Gupta, Anurag Kumar, Rajeev Shorey
1994 B conf
PADS
Anurag Kumar, Rajeev Shorey
1993 J jnl
IEEE Trans. Parallel Distributed Syst.
Anurag Kumar, Rajeev Shorey
redb/extractors/macho_extractor.py
← Index redb/extractors/macho_extractor.py python
import logging
from abc import ABCMeta, abstractmethod
import inspect
import sys
import os

import machofile

from redb.extractors.extractor import Extractor

logger = logging.getLogger(__name__)


@abstractmethod
class MachOExtractor(Extractor, metaclass=ABCMeta):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        # Read binary and parse machofile BEFORE calling super().__init__
        # This avoids reading the file twice
        with open(filepath, "rb") as f:
            binary_data = f.read()

        # Parse machofile with binary data
        self.macho = macho if macho else self._generate_machofile_object(binary_data)

        # Extract hashes from machofile to pass to parent
        precomputed_hashes = None
        if self.macho:
            try:
                general_info = self.macho.get_general_info()
                if general_info:
                    # For FAT binaries, get_general_info() returns dict with 'fat' key
                    # For single-arch, it returns the info directly
                    if 'fat' in general_info:
                        fat_info = general_info['fat']
                        precomputed_hashes = {
                            'MD5': fat_info.get('MD5'),
                            'SHA1': fat_info.get('SHA1'),
                            'SHA256': fat_info.get('SHA256'),
                        }
                    else:
                        precomputed_hashes = {
                            'MD5': general_info.get('MD5'),
                            'SHA1': general_info.get('SHA1'),
                            'SHA256': general_info.get('SHA256'),
                        }
            except Exception as e:
                logger.debug(f"Could not get hashes from machofile: {e}")

        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            precomputed_hashes=precomputed_hashes,
        )

        # Store binary data so base class doesn't re-read
        self._binary_data = binary_data

    @property
    def binary(self):
        """Override to use already-read binary data."""
        return self._binary_data

    def _generate_machofile_object(self, binary_data):
        """Generate and parse a machofile object from binary data."""
        macho = None
        try:
            macho = machofile.UniversalMachO(data=binary_data)
            if not macho:
                raise Exception("Empty file?")

            # Parse the MachO object once during initialization
            macho.parse()

        except Exception as e:
            logger.error(f"Format error parsing MachO: {e}")
        return macho

    # def _is_macho_file(self):
    #     """Check if the file is a valid Mach-O binary."""
    #     try:
    #         if not self.macho:
    #             return False
            
    #         # For Universal/FAT binaries, check if any architecture is valid
    #         if hasattr(self.macho, 'is_fat') and self.macho.is_fat:
    #             return len(self.macho.architectures) > 0
    #         else:
    #             # Single architecture binary
    #             return hasattr(self.macho, 'macho') and self.macho.macho is not None
    #     except Exception as e:
    #         self.log.error(f"Error checking Mach-O file: {e}")
    #         return False

    def _is_signed(self):
        """Check if the Mach-O binary is code signed using new API."""
        try:
            if not self.macho:
                return False

            # Get architectures using new API
            architectures = self.macho.get_architectures()

            # For each architecture, check if signed
            for arch in architectures:
                try:
                    signature_info = self.macho.get_code_signature_info(arch=arch)
                    if signature_info and signature_info.get('signed', False):
                        return True
                except Exception:
                    continue

            return False
        except Exception as e:
            self.log.error(f"Error checking Mach-O signature: {e}")
            return False

    def _get_architectures(self):
        """Get list of architectures in the Mach-O binary using new API."""
        try:
            if not self.macho:
                return []

            # Use new API method
            architectures = self.macho.get_architectures()
            return architectures if architectures else []
        except Exception as e:
            self.log.error(f"Error getting architectures: {e}")
            return []

    # def _get_macho_for_arch(self, arch_name=None):
    #     """Get MachO instance for specific architecture or default."""
    #     try:
    #         if not self.macho:
    #             return None
            
    #         if hasattr(self.macho, 'is_fat') and self.macho.is_fat:
    #             if arch_name:
    #                 return self.macho.architectures.get(arch_name)
    #             else:
    #                 # Return first available architecture
    #                 return next(iter(self.macho.architectures.values())) if self.macho.architectures else None
    #         else:
    #             # Single architecture binary
    #             return self.macho.macho if hasattr(self.macho, 'macho') else None
    #     except Exception as e:
    #         self.log.error(f"Error getting MachO for architecture: {e}")
    #         return None

    # def _get_formatted_header_values(self, header):
    #     """Get both raw and human-readable header values."""
    #     try:
    #         macho_instance = self._get_macho_for_arch()
    #         if not macho_instance:
    #             return None
            
    #         # Parse the MachO if not already parsed
    #         if not hasattr(macho_instance, 'header') or not macho_instance.header:
    #             macho_instance.parse()
            
    #         # Get human-readable values using machofile's formatting methods
    #         magic_str = macho_instance.format_magic_value(header.get('magic', 0))
            
    #         # Simple CPU type mapping since CPU_TYPE_MAP is not exposed
    #         cputype = header.get('cputype', 0)
    #         if cputype == 0x7:
    #             cputype_str = "x86"
    #         elif cputype == 0x1000007:
    #             cputype_str = "x86_64"
    #         elif cputype == 0xC:
    #             cputype_str = "ARM"
    #         elif cputype == 0x100000C:
    #             cputype_str = "ARM 64-bit"
    #         else:
    #             cputype_str = str(cputype)
            
    #         cpusubtype_str = macho_instance.decode_cpusubtype(header.get('cputype', 0), header.get('cpusubtype', 0))
    #         filetype_str = macho_instance.format_file_type(header.get('filetype', 0))
    #         flags_str = macho_instance.decode_flags(header.get('flags', 0))
            
    #         return {
    #             'raw': {
    #                 'magic': header.get('magic', 0),
    #                 'cputype': header.get('cputype', 0),
    #                 'cpusubtype': header.get('cpusubtype', 0),
    #                 'filetype': header.get('filetype', 0),
    #                 'flags': header.get('flags', 0),
    #             },
    #             'formatted': {
    #                 'magic_str': magic_str,
    #                 'cputype_str': cputype_str,
    #                 'cpusubtype_str': cpusubtype_str,
    #                 'filetype_str': filetype_str,
    #                 'flags_str': flags_str,
    #             }
    #         }
    #     except Exception as e:
    #         self.log.error(f"Error formatting header values: {e}")
    #         return None