Mana Saleh Al Reshan

36 papers Journal 35Unranked 1
YearRankTypeTitle / Venue / Authors
2026 J jnl
Expert Syst. Appl.
Muhammad Waleed Zaffer, Muhammad Fayyaz, Qamar Uz Zaman, Mana Saleh Al Reshan, Ali Alqazzaz, Asadullah Shaikh
2026 J jnl
Concurr. Comput. Pract. Exp.
Mana Saleh Al Reshan, C. Atheeq, Mohammed Abdul Haque Farquad, Hamad Ali Abosaq, Altaf Choudapur, Mohamed A. Elmagzoub, Mousa Alalhareth, Asadullah Shaikh
2026 J jnl
IEEE Access
Muhammad Arsalan Jalees Abro, Abdul Sattar Larik, Mukhtiar Ali Unar, Irfan Ahmed Halepoto, Adel D. Rajab, Mana Saleh Al Reshan, Asadullah Shaikh, Mousa Alalhareth
2025 J jnl
IEEE Access
Muhammad Arsalan Jalees Abro, Abdul Sattar Larik, Ali Alqazzaz, Irfan Ahmed Halepoto, Mana Saleh Al Reshan, Asadullah Shaikh, Samar M. Alqhtani, Jotee Kumari Lohana
2025 J jnl
PeerJ Comput. Sci.
Muhammad Zohaib, Ghulam Farooque, Mohammad Alsulami, Fazeel Abid, Ali Alqazzaz, Mana Saleh Al Reshan, Jawad Rasheed, Asadullah Shaikh
2025 J jnl
Int. J. Comput. Intell. Syst.
Muhammad Owais Raza, Naeem Ahmed Mahoto, Mana Saleh Al Reshan, Ali Alqazzaz, Adel D. Rajab, Asadullah Shaikh
2025 J jnl
Comput. Biol. Medicine
Asadullah Shaikh, Samina Amin, Muhammad Ali Zeb, Adel Sulaiman, Mana Saleh Al Reshan, Hani Alshahrani
2025 J jnl
IET Image Process.
Fatima Aslam, Adil Afzal, Muhammad Rizwan, Adel Sulaiman, Mana Saleh Al Reshan, Asadullah Shaikh
2025 J jnl
Int. J. Comput. Intell. Syst.
Muhammad Umar Rashid, Shahnawaz Qureshi, Abdullah Abid, Saad Said Alqahtany, Ali Alqazzaz, Mahmood Ul Hassan, Mana Saleh Al Reshan, Asadullah Shaikh
2025 J jnl
ICT Express
Anam Memon, Ali Asghar Manjotho, Qasim Ali Arain, Adel Sulaiman, Nasrullah Pirzada, Mana Saleh Al Reshan, Mohammad Alsulami, Asadullah Shaikh
2025 J jnl
PeerJ Comput. Sci.
Asma Nadeem, Malik Muhammad Saad Missen, Mana Saleh Al Reshan, Muhammad Ali Memon, Yousef Asiri, Muhammad Ali Nizamani, Mohammad Alsulami, Asadullah Shaikh
2025 J jnl
Concurr. Comput. Pract. Exp.
Mian Muhammad Talha, Hikmat Ullah Khan, Muhammad Fayyaz, Ali Alqazzaz, Mana Saleh Al Reshan, Asadullah Shaikh
2025 J jnl
IEEE Access
Mana Saleh Al Reshan, Muhammad Owais Raza, Naeem Ahmed Mahoto, Adel D. Rajab, Asadullah Shaikh, Mohamed A. Elmagzoub, Khairan D. Rajab
2025 conf
ICAIIC
Kanwarpartap Singh Gill, Rupesh Gupta, Gunjan Shandilya, Srinivas Aluvala, Adel Sulaiman, Hani Alshahrani, Mana Saleh Al Reshan, Asadullah Shaikh
2024 J jnl
IEEE Access
Mana Saleh Al Reshan, Samina Amin, Muhammad Ali Zeb, Adel Sulaiman, Hani Alshahrani, Asadullah Shaikh, Mohamed A. Elmagzoub
2024 J jnl
ICT Express
Sohrab Khan, Sheharyar Khan, Adel Sulaiman, Mana Saleh Al Reshan, Hani Alshahrani, Asadullah Shaikh
2024 J jnl
Soc. Netw. Anal. Min.
Faheem Ahmed Abbasi, Raymond Houé Ngouna, Muhammad Ali Memon, Mana Saleh Al Reshan, Adel Sulaiman, Asadullah Shaikh
2024 J jnl
IEEE Access
Mohamed A. Elmagzoub, Swapandeep Kaur, Sheifali Gupta, Adel D. Rajab, Khairan D. Rajab, Mana Saleh Al Reshan, Hani Alshahrani, Asadullah Shaikh
2024 J jnl
ICT Express
Anam Memon, Qasim Ali Arain, Nasrullah Pirzada, Muhammad Akram Shaikh, Adel Sulaiman, Mana Saleh Al Reshan, Hani Alshahrani, Asadullah Shaikh
2024 J jnl
Int. J. Comput. Intell. Syst.
Muhammad Owais Raza, Areej Fatemah Meghji, Naeem Ahmed Mahoto, Mana Saleh Al Reshan, Hamad Ali Abosaq, Adel Sulaiman, Asadullah Shaikh
2024 J jnl
IEEE Access
C. Atheeq, Zameer Gulzar, Mana Saleh Al Reshan, Hani Alshahrani, Adel Sulaiman, Asadullah Shaikh
2024 J jnl
Neural Comput. Appl.
Fazeel Abid, Jawad Rasheed, Mohammed Hamdi, Hani Alshahrani, Mana Saleh Al Reshan, Asadullah Shaikh
2023 J jnl
IEEE Access
Hafiz Aamir Hafeez, Mohamed A. Elmagzoub, Nurul Azma Binti Abdullah, Mana Saleh Al Reshan, Ghulam Gilanie, Sultan Alyami, Mahmood Ul Hassan, Asadullah Shaikh
2023 J jnl
Int. J. Online Biomed. Eng.
Saleh Hamad Sajaan Almansour, Rahul Singh, Saleh Mabruk Hadrami Alyami, Neha Sharma, Mana Saleh Al Reshan, Sheifali Gupta, Mahdi Falah Mahdi Alyami, Asadullah Shaikh
2023 J jnl
IEEE Access
Mana Saleh Al Reshan, Darakhshan Syed, Noman Islam, Asadullah Shaikh, Mohammed Hamdi, Mohamed A. Elmagzoub, Ghulam Muhammad, Kashif Hussain Talpur
2023 J jnl
IEEE Access
Mana Saleh Al Reshan, Samina Amin, Muhammad Ali Zeb, Adel Sulaiman, Hani Alshahrani, Asadullah Shaikh
2023 J jnl
Biomed. Signal Process. Control.
Qurat-Ul-Ain Mastoi, Asadullah Shaikh, Mana Saleh Al Reshan, Adel Sulaiman, Mohamed A. Elmagzoub, Sultan Alyami
2023 J jnl
Biomed. Signal Process. Control.
Naeem Ahmed Mahoto, Asadullah Shaikh, Adel Sulaiman, Mana Saleh Al Reshan, Adel D. Rajab, Khairan Rajab
2023 J jnl
PeerJ Comput. Sci.
Fayaz Hassan, Jianguo Yu, Zafi Sherhan Syed, Nadeem Ahmed, Mana Saleh Al Reshan, Asadullah Shaikh
2023 J jnl
Sensors
Adel Sulaiman, Bharathiraja Nagu, Gaganpreet Kaur, Pradeepa Karuppaiah, Hani Alshahrani, Mana Saleh Al Reshan, Sultan Alyami, Asadullah Shaikh
2023 J jnl
PeerJ Comput. Sci.
Muhammad Owais Raza, Naeem Ahmed Mahoto, Mohammed Hamdi, Mana Saleh Al Reshan, Adel D. Rajab, Asadullah Shaikh
2023 J jnl
IEEE Access
Saifullah Memon, Jingyu Wang, Adnan Ahmed, Adel D. Rajab, Mana Saleh Al Reshan, Asadullah Shaikh, Muhammad Awais
2022 J jnl
Sensors
Asadullah Shaikh, Mana Saleh Al Reshan, Adel Sulaiman, Hani Alshahrani, Yousef Asiri
2022 J jnl
Intell. Autom. Soft Comput.
Farooq Javeed, Basit Shahzad, Asadullah Shaikh, Mana Saleh Al Reshan, Saba Ahmad, Hani Alshahrani, Khairan Rajab
2021 J jnl
Intell. Autom. Soft Comput.
Sara Mehmood, Naeem Ahmed Mahoto, Asadullah Shaikh, Hani Alshahrani, Mana Saleh Al Reshan
2021 J jnl
Int. J. Interact. Mob. Technol.
Mana Saleh Al Reshan
redb/extractors/elf_extractors/elf_dependencies.py
← Index redb/extractors/elf_extractors/elf_dependencies.py python
import inspect
from datetime import datetime, timezone
from typing import Any, List, Dict

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

from redb.extractors.enum import Tag
from redb.extractors.elf_extractor import ELFExtractor
from redb.models.dataclasses import ELFDependency


class ELFDependencyExtractor(ELFExtractor):

    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,
            elf,
        )
        self.elf_dependencies = []
        self.elastic_index = self.index_prefix + "-elf_dependencies"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _map_dependency_type(self, dt_tag_str: str) -> int:
        """Map dynamic tag string to enum value."""
        type_map = {
            'DT_NEEDED': 1,
            'DT_SONAME': 14,
            'DT_RPATH': 15,
            'DT_RUNPATH': 29
        }
        return type_map.get(dt_tag_str, 0)

    def _extract_dynamic_dependencies(self, elf) -> List[Dict]:
        """Extract dependencies from the dynamic section."""
        dependencies = []

        try:
            # Get the dynamic section
            dynamic_section = elf.get_section_by_name('.dynamic')
            if not dynamic_section:
                self.log.debug("No .dynamic section found")
                return dependencies

            # Iterate through dynamic tags
            for tag in dynamic_section.iter_tags():
                dt_tag = tag.entry.d_tag

                # Handle different dependency types
                if dt_tag == 'DT_NEEDED':
                    # Required library
                    dependency_name = tag.needed
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_NEEDED'),
                        dependency_type_str='NEEDED'
                    ))

                elif dt_tag == 'DT_SONAME':
                    # Shared object name
                    dependency_name = tag.soname
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_SONAME'),
                        dependency_type_str='SONAME'
                    ))

                elif dt_tag == 'DT_RPATH':
                    # Runtime library search path
                    dependency_name = tag.rpath
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_RPATH'),
                        dependency_type_str='RPATH'
                    ))

                elif dt_tag == 'DT_RUNPATH':
                    # Runtime library search path (newer)
                    dependency_name = tag.runpath
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_RUNPATH'),
                        dependency_type_str='RUNPATH'
                    ))

        except Exception as e:
            self.log.error(f"Error extracting dynamic dependencies: {e}")

        return dependencies

    def tag(self):
        return Tag.ELF_DEPENDENCIES.value if hasattr(Tag, 'ELF_DEPENDENCIES') else "elf_dependencies"

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)

            def extract_data(elf):
                # Extract dependencies - returns list of ELFDependency dataclasses
                dependencies = self._extract_dynamic_dependencies(elf)
                return dependencies

            if not self._is_elf_file():
                return None

            result = self._with_elf_file(extract_data)
            if result is None:
                return None

            self.elf_dependencies = result
            return self.elf_dependencies

        except Exception as e:
            self.log.error(f"Error extracting ELF dependencies {self.hash.sha256}: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        self.log.debug(inspect.currentframe().f_code.co_name)

        if exporter_type == "ElasticsearchExporter":
            return self.elf_dependencies
        elif exporter_type == "ClickHouseExporter":
            try:
                # Return valid empty structure if no dependencies (e.g., statically linked binary)
                # None is reserved for actual errors

                # Prepare data arrays for all dependencies
                data = []
                current_time = datetime.now(timezone.utc)
                for dep in self.elf_dependencies:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        dep.dependency_name,
                        dep.dependency_type,
                        dep.dependency_type_str,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'dependency_name', 'dependency_type', 'dependency_type_str',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'LowCardinality(String)',
                    "Enum8('NEEDED'=1, 'SONAME'=14, 'RPATH'=15, 'RUNPATH'=29)",
                    'LowCardinality(String)',
                    'DateTime64(3, \'UTC\')'
                ]

                return (data, column_names, column_type_names)

            except Exception as e:
                self.log.error(f"Error preparing export data: {e}")
                raise

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