Rajesh Singh

66 papers Journal 39Unranked 27
YearRankTypeTitle / Venue / Authors
2026 J jnl
Array
R. Bhuvanya, T. Kujani, M. Mohamed Iqbal, Ankur Dumka, Rajesh Singh, Anita Gehlot, Amit Kumar Thakur, Sudhanshu Dogra, Anil Ghubade
2026 J jnl
Secur. Priv.
Simant Kamal Dutta, Rajesh Singh, Anita Gehlot, Puneet Chandra Srivastava, Kiran Srivastava, Praveen Kumar Malik, Gunjan Gupta
2025 J jnl
Oper. Res. Forum
Ruby Pant, Rajesh Singh, Anita Gehlot, Amit Kumar Thakur
2025 J jnl
Biomed. Signal Process. Control.
R. Bhuvanya, V. Vanitha, M. Mohamed Iqbal, Ankur Dumka, Rajesh Singh, Anita Gehlot, Amit Kumar Thakur
2025 J jnl
IET Commun.
Gaurav Singh Negi, Rajesh Singh, Anita Gehlot, Praveen Kumar Malik, Rohit Sharma, Ahmed J. Obaid, Ali Alferaidi, Yasser Obaid Alharbi, Sachin Kumar
2025 J jnl
Expert Syst. J. Knowl. Eng.
Sakshi Koli, Anita Gehlot, Rajesh Singh, Fuad Ali Mohammed Al-Yarimi, Salil Bharany, Sadia Din, Ateeq Ur Rehman
2025 J jnl
SN Comput. Sci.
Priyam Agarwal, Ramesh Chandra Pathak, Rajesh Singh, Anita Gehlot, Shaik Vaseem Akram, Amit Kumar Thakur
2024 J jnl
Wirel. Pers. Commun.
Suverna Sengar, Praveen Kumar Malik, Sudipta Das, Tanvir Islam, Rajesh Singh, Sivaji Asha
2024 J jnl
IEEE Trans. Consumer Electron.
Ajmeera Kiran, Janjhyam Venkata Naga Ramesh, Vrince Vimal, Kishore M. Kumar, Mukesh Soni, Shashi Bhushan, Tariq Ahamed Ahanger, Pavitar Parkash Singh, Rajesh Singh
2024 J jnl
J. Ind. Inf. Integr.
Amit Anthwal, Akshat Uniyal, Jitender Gairolla, Rajesh Singh, Anita Gehlot, Mohamed Abbas, Shaik Vaseem Akram
2024 J jnl
Int. J. Satell. Commun. Netw.
M. V. Ramachandra Praveen, Sushabhan Choudhury, Piyush Kuchhal, Rajesh Singh, Purnendu Shekhar Pandey, Antonino Galletta
2024 J jnl
Discov. Artif. Intell.
Ashish Singh Chauhan, Rajesh Singh, Neeraj Priyadarshi, Bhekisipho Twala, Surindra Suthar, Siddharth Swami
2024 J jnl
Discov. Internet Things
G. Gopichand, T. Sarath, Ankur Dumka, Himanshu Rai Goyal, Rajesh Singh, Anita Gehlot, Lovi Raj Gupta, Amit Kumar Thakur, Neeraj Priyadarshi, Bhekisipho Twala
2023 J jnl
IET Commun.
Shashank Awasthi, Pramod Kumar Srivastava, Naresh Kumar, Rudra Pratap Ojha, Purnendu Shekhar Pandey, Rajesh Singh, Anita Gehlot, Neeraj Priyadarshi, Rituraj Jain, Yohannes Bekuma Bakare
2023 conf
IC3I
Mousam Sharma, Kanishka Vaish, Samta Kathuria, Rajesh Singh, Kanegonda Ravi Chythanya, Shashank Awasthi
2023 J jnl
IEEE Access
Rudra Pratap Ojha, Pramod Kumar Srivastava, Shashank Awasthi, Vineet Srivastava, Purnendu Shekhar Pandey, Radhe Shyam Dwivedi, Rajesh Singh, Antonino Galletta
2023 conf
ICCCNT
Angel Swastik Duggal, Praveen Kumar Malik, Harpreet Bedi, Rashmi Roges, Rajesh Singh
2023 J jnl
IEEE Access
Manoj Kumar, Syed Sadique Anwer Askari, Purnendu Shekhar Pandey, Yadvendra Singh, Rajesh Singh, Sanjeev Kumar Raghuwanshi, Gyanendra Kumar Singh, Santosh Kumar
2023 J jnl
Sensors
Vikas Srivastava, Parulpreet Singh, Praveen Kumar Malik, Rajesh Singh, Sudeep Tanwar, Fayez Alqahtani, Amr Tolba, Marina Verdes, Maria Simona Raboaca
2023 J jnl
J. Electr. Comput. Eng.
Rajesh Singh, Anita Gehlot, Piyush Kuchhal, Sushabhan Choudhury, Shaik Vaseem Akram, Neeraj Priyadarshi, Baseem Khan
2022 conf
IC3I
Shubhendu Shekher Shukla, Mohit Tiwari, Arti Chudamanrao Lokhande, Tripti Tiwari, Rajesh Singh, Anoop Beri
2022 conf
IC3I
Vibha Suraj Bhusari, Suresh Kumar M. V, Somanchi Hari Krishna, Rajesh Singh, Syed Mohammad Faisal, Devesh Pratap Singh
2022 conf
IC3I
Pragati Upadhya, J. Sangeethapriya, Ajay Kumar, R. B. Dhumale, Rajesh Singh, Vikas Tripathi
2022 J jnl
J. Supercomput.
Rydhm Beri, Mithilesh K. Dubey, Anita Gehlot, Rajesh Singh, Mohammed Abd-Elnaby, Aman Singh
2022 J jnl
IET Commun.
Angel Swastik Duggal, Praveen Kumar Malik, Anita Gehlot, Rajesh Singh, Gurjot Singh Gaba, Mehedi Masud, Jehad F. Al-Amri
2022 conf
IC3I
Shaktija Singh Baghel, Poonam Rawat, Rajesh Singh, Shaik Vaseem Akram, Shweta Pandey, AishwaryVikram Singh Baghel
2022 conf
IC3I
Melanie Lourens, Ramakrishnan Raman, P. Vanitha, Rajesh Singh, Geetha Manoharan, Manoj Kumar Tiwari
2022 conf
IC3I
Shaikh Abdul Hannan, Preeti Gupta, P. Vanitha, Rajesh Singh, Dimple Saini, Mohit Tiwari
2022 conf
IC3I
Ramakrishnan Raman, Rajesh Singh, Soumya Ranjan Sabat, Shivaji Bothe, Shalini Singh, Lalit Thakur
2022 conf
IC3I
Samta Kathuria, Poonam Rawat, Rajesh Singh, Anita Gehlot, Namrata Kathuria, Shweta Pandey
2022 conf
IC3I
Dipra Mitra, Neha Sharma, Mamoon Rashid, Rajesh Singh
2022 conf
IC3I
Rajesh Singh, Akkaraju Sailesh Chandra, Babeetta Bbhagat, Jeidy Panduro-Ramirez, Anil Pandurang Gaikwad, Bhasker Pant
2022 conf
IC3I
Gopal Krishna, Rajesh Singh, Anita Gehlot
2022 conf
IC3I
Soumitra Das, Durgaprasad Gangodkar, Rajesh Singh, Pradakhshana Vijay, Ankit Bhardwaj, Amit Semwal
2022 conf
IC3I
Vipul Masal, P. Pavithra, Shiv Kant Tiwari, Rajesh Singh, Jeidy Panduro-Ramirez, Durgaprasad Gangodkar
2022 conf
IC3I
Vivek Veeraiah, G. K. Ravikaumar, Dipen Bhuva, Rajesh Singh, Adusupalle Muni Raju, Unnati Joshi
2022 conf
IC3I
Meet Kumari, Vivek Arya, Neha Sharma, Mamoon Rashid, Rajesh Singh
2022 J jnl
Sensors
Rajesh Singh, Shaik Vaseem Akram, Anita Gehlot, Dharam Buddhi, Neeraj Priyadarshi, Bhekisipho Twala
2022 conf
IC3I
Vinay Kumar Nassa, V. L. Varun, Akkaraju Sailesh Chandra, Maddikera Kalyan Chakravarthi, Rajesh Singh, Devvret Verma
2022 J jnl
J. King Saud Univ. Comput. Inf. Sci.
Rajesh Singh, Anita Gehlot, Shaik Vaseem Akram, Amit Kumar Thakur, Dharam Buddhi, Prabin Kumar Das
2022 J jnl
J. Inf. Telecommun.
Abdul Rahim, Praveen Kumar Malik, Rajesh Singh
2022 conf
IC3I
Jitendra Kumar Chaudhary, M. Sameena Nazeer, Rajesh Singh, Devvret Verma, Amit B. Kasar, Megha Dhotay
2022 conf
IC3I
Chandrashekhar Goswami, Ramakrishnan Raman, Biju G. Pillai, Rajesh Singh, Basava Dhanne, Dhiraj Kapila
2022 conf
IC3I
Shweta Pandey, Anita Gehlot, Anil Kumar Dixit, Rajat Balyan, Rajesh Singh, Samta Kathuria
2022 J jnl
Comput. Electr. Eng.
Sanjeev Kimothi, Rajesh Singh, Anita Gehlot, Shaik Vaseem Akram, Praveen Kumar Malik, Anish Gupta, Naveen Bilandi
2022 J jnl
Expert Syst. J. Knowl. Eng.
Lalit Mohan Joshi, Rajendra Kumar Bharti, Rajesh Singh
2022 J jnl
IEEE Access
Swapnil Bagwari, Ajay Roy, Anita Gehlot, Rajesh Singh, Neeraj Priyadarshi, Baseem Khan
2022 J jnl
IEEE Access
Swapnil Bagwari, Anita Gehlot, Rajesh Singh, Neeraj Priyadarshi, Baseem Khan
2022 conf
IC3I
Veera Talukdar, Shivaji Bothe, Rajesh Singh, R. Ponnusamy, Unnati Joshi, Suryansh Talukdar
2022 J jnl
Comput. Electr. Eng.
Lalit Mohan Joshi, Rajendra Kumar Bharti, Rajesh Singh, Praveen Kumar Malik
2022 J jnl
Comput. Electr. Eng.
Anandkumar R, Dinesh K, Ahmed J. Obaid, Praveen Kumar Malik, Rohit Sharma, Ankur Dumka, Rajesh Singh, Satish Khatak
2022 conf
IC3I
Samta Kathuria, Poonam Rawat, Rajesh Singh, Anita Gehlot, Abhinav Kathuria, Shweta Pandey
2022 conf
IC3I
Ranjeet Yadav, Ritambhara, Karthik Kumar Vaigandla, G. S. Pradeep Ghantasala, Rajesh Singh, Durgaprasad Gangodkar
2022 conf
IC3I
Shashidhar Sonnad, Manoj Sathe, D. Khalandar Basha, Vipul Bansal, Rajesh Singh, Devesh Pratap Singh
2022 J jnl
Displays
Navjot Rathour, Rajesh Singh, Anita Gehlot, Shaik Vaseem Akram, Amit Kumar Thakur, Amit Kumar
2022 conf
IC3I
Swati Kiran Rajput, R. Umamageswari, Rajesh Singh, Lalit Thakur, C. P. Sanjay, Maddikera Kalyan Chakravarthi
2022 J jnl
Comput. Ind. Eng.
Praveen Kumar Malik, Rajesh Singh, Anita Gehlot, Shaik Vaseem Akram, Prabin Kumar Das
2022 conf
IC3I
Ramakrishnan Raman, Rajesh Singh, Zatin Gupta, Shikha Verma, Akshay Rajput, Swapnil M. Parikh
2021 J jnl
Int. J. Commun. Syst.
Mahendra Swain, Mohammad Farukh Hashmi, Rajesh Singh, Abdul Wahab Hashmi
2021 J jnl
Secur. Commun. Networks
Shaik Vaseem Akram, Sultan S. Alshamrani, Rajesh Singh, Mamoon Rashid, Anita Gehlot, Ahmed Saeed Alghamdi, Deepak Prashar
2021 J jnl
Comput. Commun.
Praveen Kumar Malik, Rohit Sharma, Rajesh Singh, Anita Gehlot, Suresh Chandra Satapathy, Waleed S. Alnumay, Danilo Pelusi, Uttam Ghosh, Janmenjoy Nayak
2021 J jnl
Sensors
Shaik Vaseem Akram, Rajesh Singh, Mohammed Abdullatif Alzain, Anita Gehlot, Mamoon Rashid, Osama S. Faragallah, Walid El Shafai, Deepak Prashar
2021 J jnl
Sensors
Anita Gehlot, Rajesh Singh, Piyush Kuchhal, Adesh Kumar, Aman Singh, Khalid Alsubhi, Muhammad Ibrahim, Santos Gracia Villar, Jose Breñosa
2020 J jnl
Secur. Priv.
Shaik Vaseem Akram, Praveen Kumar Malik, Rajesh Singh, Anita Gehlot, Sudeep Tanwar
2020 J jnl
Int. J. Mechatronics Autom.
Rajesh Singh, Anita Gehlot, Rohit Samkaria, Sushabhan Choudhury
2018 J jnl
Int. J. Web Appl.
Rajesh Singh, Rohit Samkaria, Anita Gehlot, Sushabhan Choudhary
redb/extractors/elf_extractor.py
← Index redb/extractors/elf_extractor.py python
import logging
from abc import ABCMeta, abstractmethod
import inspect

from elftools.elf.elffile import ELFFile
from elftools.common.exceptions import ELFError

from redb.extractors.extractor import Extractor

logger = logging.getLogger(__name__)


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

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        elf=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious
        )
        # Store ELF object if provided, otherwise we'll create it per-operation for security
        self._provided_elf = elf
        self._elf_file_valid = None  # Cache validity check

    def _with_elf_file(self, operation):
        """Safely execute an operation with an ELF file using context manager.

        Args:
            operation: A callable that takes an ELFFile object and returns a result

        Returns:
            The result of the operation, or None if an error occurred
        """
        if self._provided_elf:
            try:
                return operation(self._provided_elf)
            except ELFError as e:
                if "String Table not found" in str(e):
                    self.log.warning(f"String table missing in ELF {self.hash.sha256}: {e}")
                    return None
                else:
                    self.log.error(f"ELF format error {self.hash.sha256} Full error: {e}")
                    return None
            except Exception as e:
                self.log.error(f"Error processing ELF file {self.hash.sha256} Full error: {e}")
                return None

        try:
            with open(self.filepath, 'rb') as f:
                elf = ELFFile(f)
                if not elf:
                    raise ELFError("Empty file?")
                return operation(elf)
        except ELFError as e:
            if "String Table not found" in str(e):
                self.log.warning(f"String table missing in ELF {self.hash.sha256}: {e}")
                return None
            else:
                self.log.error(f"ELF format error {self.hash.sha256} Full error: {e}")
                return None
        except Exception as e:
            self.log.error(f"Error reading ELF file {self.hash.sha256} Full error: {e}")
            return None

    def _is_elf_file(self):
        """Check if the file is a valid ELF binary."""
        if self._elf_file_valid is not None:
            return self._elf_file_valid

        def check_elf_validity(elf):
            # pyelftools ELFFile object existing means it's valid ELF
            # Just check that we can access the header
            header = elf.header
            return header is not None

        try:
            result = self._with_elf_file(check_elf_validity)
            self._elf_file_valid = bool(result)
            return self._elf_file_valid
        except Exception as e:
            self.log.error(f"Error checking ELF file: {e}")
            self._elf_file_valid = False
            return False

    def _is_64bit(self):
        """Check if the ELF binary is 64-bit."""
        def check_64bit(elf):
            return elf.header.get('e_ident', {}).get('EI_CLASS') == 'ELFCLASS64'

        try:
            result = self._with_elf_file(check_64bit)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking ELF bitness: {e}")
            return False

    def _is_stripped(self):
        """Check if the ELF binary is stripped (no symbol table)."""
        def check_stripped(elf):
            # Look for symbol table sections
            for section in elf.iter_sections():
                if section.name in ['.symtab', '.strtab']:
                    return False
            return True

        try:
            result = self._with_elf_file(check_stripped)
            return result if result is not None else True
        except Exception as e:
            self.log.error(f"Error checking if ELF is stripped: {e}")
            return True

    def _has_debug_info(self):
        """Check if the ELF binary contains debug information."""
        def check_debug_info(elf):
            # Look for debug sections
            debug_sections = ['.debug_info', '.debug_line', '.debug_str', '.debug_abbrev']
            for section in elf.iter_sections():
                if section.name in debug_sections:
                    return True
            return False

        try:
            result = self._with_elf_file(check_debug_info)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking debug info: {e}")
            return False

    def _get_architecture(self):
        """Get the architecture of the ELF binary."""
        def get_arch(elf):
            machine = elf.header.get('e_machine', 'EM_NONE')

            # Map common machine types to readable names
            arch_map = {
                'EM_386': 'x86',
                'EM_X86_64': 'x86_64',
                'EM_ARM': 'ARM',
                'EM_AARCH64': 'ARM64',
                'EM_MIPS': 'MIPS',
                'EM_PPC': 'PowerPC',
                'EM_PPC64': 'PowerPC64',
                'EM_SPARC': 'SPARC',
                'EM_RISCV': 'RISC-V'
            }

            return arch_map.get(machine, machine)

        try:
            result = self._with_elf_file(get_arch)
            return result if result is not None else "unknown"
        except Exception as e:
            self.log.error(f"Error getting architecture: {e}")
            return "unknown"

    def _get_endianness(self):
        """Get the endianness of the ELF binary."""
        def get_endian(elf):
            data_encoding = elf.header.get('e_ident', {}).get('EI_DATA')
            if data_encoding == 'ELFDATA2LSB':
                return "little"
            elif data_encoding == 'ELFDATA2MSB':
                return "big"
            return "unknown"

        try:
            result = self._with_elf_file(get_endian)
            return result if result is not None else "unknown"
        except Exception as e:
            self.log.error(f"Error getting endianness: {e}")
            return "unknown"

    def _get_file_type(self):
        """Get the file type of the ELF binary."""
        def get_file_type(elf):
            etype = elf.header.get('e_type', 'ET_NONE')

            # Map file types to readable names
            type_map = {
                'ET_NONE': 'none',
                'ET_REL': 'relocatable',
                'ET_EXEC': 'executable',
                'ET_DYN': 'shared_object',
                'ET_CORE': 'core_dump'
            }

            return type_map.get(etype, etype)

        try:
            result = self._with_elf_file(get_file_type)
            return result if result is not None else "unknown"
        except Exception as e:
            self.log.error(f"Error getting file type: {e}")
            return "unknown"

    def _is_pie(self):
        """Check if the ELF binary is position-independent executable."""
        def check_pie(elf):
            # PIE binaries are typically ET_DYN type
            etype = elf.header.get('e_type', 'ET_NONE')
            if etype == 'ET_DYN':
                # Check if it has an entry point (executable) vs library
                entry_point = elf.header.get('e_entry', 0)
                return entry_point > 0
            return False

        try:
            result = self._with_elf_file(check_pie)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking PIE: {e}")
            return False

    def _has_stack_protection(self):
        """Check if the binary has stack protection (canaries)."""
        def check_stack_protection(elf):
            # Look for stack protection symbols
            stack_symbols = ['__stack_chk_fail', '__stack_chk_guard']

            for section in elf.iter_sections():
                if hasattr(section, 'iter_symbols'):
                    for symbol in section.iter_symbols():
                        if symbol.name in stack_symbols:
                            return True
            return False

        try:
            result = self._with_elf_file(check_stack_protection)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking stack protection: {e}")
            return False

    def _has_nx_bit(self):
        """Check if the binary has NX bit (non-executable stack)."""
        def check_nx_bit(elf):
            # Look for GNU_STACK segment
            for segment in elf.iter_segments():
                if segment.header.get('p_type') == 'PT_GNU_STACK':
                    flags = segment.header.get('p_flags', 0)
                    # Check if execute flag is NOT set (NX enabled)
                    return not (flags & 0x1)  # PF_X = 0x1
            return False

        try:
            result = self._with_elf_file(check_nx_bit)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking NX bit: {e}")
            return False

    def _has_relro(self):
        """Check if the binary has RELRO (Relocation Read-Only)."""
        def check_relro(elf):
            # Look for GNU_RELRO segment
            for segment in elf.iter_segments():
                if segment.header.get('p_type') == 'PT_GNU_RELRO':
                    return True
            return False

        try:
            result = self._with_elf_file(check_relro)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking RELRO: {e}")
            return False

    def _get_build_id(self):
        """Extract build ID from notes section."""
        def get_build_id(elf):
            # Look for build ID in notes sections
            for section in elf.iter_sections():
                if section.name == '.note.gnu.build-id':
                    for note in section.iter_notes():
                        if note['n_type'] == 'NT_GNU_BUILD_ID':
                            # Convert bytes to hex string
                            build_id = note['n_desc']
                            if isinstance(build_id, bytes):
                                return build_id.hex()
                            return str(build_id)
            return None

        try:
            result = self._with_elf_file(get_build_id)
            return result
        except Exception as e:
            self.log.error(f"Error getting build ID: {e}")
            return None

    def _count_sections(self):
        """Count the number of sections in the ELF file."""
        def count_sections(elf):
            return elf.header.get('e_shnum', 0)

        try:
            result = self._with_elf_file(count_sections)
            return result if result is not None else 0
        except Exception as e:
            self.log.error(f"Error counting sections: {e}")
            return 0

    def _count_segments(self):
        """Count the number of segments (program headers) in the ELF file."""
        def count_segments(elf):
            return elf.header.get('e_phnum', 0)

        try:
            result = self._with_elf_file(count_segments)
            return result if result is not None else 0
        except Exception as e:
            self.log.error(f"Error counting segments: {e}")
            return 0

    def _count_symbols(self):
        """Count the total number of symbols in symbol tables."""
        def count_symbols(elf):
            symbol_count = 0
            for section in elf.iter_sections():
                if hasattr(section, 'iter_symbols'):
                    symbol_count += section.num_symbols()
            return symbol_count

        try:
            result = self._with_elf_file(count_symbols)
            return result if result is not None else 0
        except Exception as e:
            self.log.error(f"Error counting symbols: {e}")
            return 0

    def _get_dependencies(self):
        """Get list of dynamic dependencies."""
        def get_dependencies(elf):
            dependencies = []
            dynamic_section = elf.get_section_by_name('.dynamic')
            if dynamic_section:
                for tag in dynamic_section.iter_tags():
                    if tag.entry.d_tag == 'DT_NEEDED':
                        dependencies.append(tag.needed)
            return dependencies

        try:
            result = self._with_elf_file(get_dependencies)
            return result if result is not None else []
        except Exception as e:
            self.log.error(f"Error getting dependencies: {e}")
            return []