Habib Shah

42 papers B 1C 1Journal 29Unranked 11
YearRankTypeTitle / Venue / Authors
2025 J jnl
Soc. Netw. Anal. Min.
Shah Khalid, Sulaiman Sulmi Almutairi, Abdallah Namoun, Jawad Khan, Hasan Ali Khattak, Habib Shah
2024 J jnl
Comput. Mater. Continua
Saad Akbar, Humera Azam, Sulaiman Sulmi Almutairi, Omar Saad Alqahtani, Habib Shah, Aliya Aleryani
2024 J jnl
KSII Trans. Internet Inf. Syst.
Sulaiman Sulmi Almutairi, Rehmat Ullah, Qazi Zia Ullah, Habib Shah
2024 B conf
IEEE Big Data
Sulaiman Aftan, Yu Zhuang, Ahmad O. Aseeri, Habib Shah
2023 J jnl
Complex.
Salman Ali, Muhammad Sadiq Khan, Habib Shah, Harish Garg, Abdullah Alsheddy
2023 J jnl
IEEE Access
Areesha Ijaz, Basit Raza, Iqra Kiran, Abdul Waheed, Aadil Raza, Habib Shah, Sulaiman Aftan
2023 J jnl
Sensors
Muhammad Hammad, Rashad Maqbool Jillani, Sami Ullah, Abdallah Namoun, Ali Tufail, Ki-Hyung Kim, Habib Shah
2023 J jnl
J. King Saud Univ. Comput. Inf. Sci.
Sheher Bano, Shah Khalid, Nasser Mansoor Tairan, Habib Shah, Hasan Ali Khattak
2022 J jnl
Soft Comput.
Muhammad Asim, Wali Khan Mashwani, Habib Shah, Samir Brahim Belhaouari
2022 J jnl
Soft Comput.
Asia Noureen, Wali Khan Mashwani, Faiz Rehman, Muhammad Sagheer, Habib Shah, Muhammad Asim
2022 J jnl
IEEE Access
Hameed Ullah Khan, Basit Raza, Abdul Waheed, Habib Shah
2022 J jnl
IEEE Access
Ibrar Hussain, Riaz Ahmad, Siraj Muhammad, Khalil Ullah, Habib Shah, Abdallah Namoun
2022 J jnl
IEEE Access
Zia Ullah, Basit Raza, Habib Shah, Shahzad Khan, Abdul Waheed
2021 J jnl
IEEE Access
Muhammad Tanveer, Abd Ullah Khan, Habib Shah, Ahmed Alkhayyat, Shehzad Ashraf Chaudhry, Musheer Ahmad
2021 J jnl
IEEE Access
Muhammad Faheem Mushtaq, Mobeen Shahroz, Ali M. Aseere, Habib Shah, Rizwan Majeed, Danish Shehzad, Ali Samad
2021 J jnl
Neural Comput. Appl.
Amina Nuhu Muhammad, Ali M. Aseere, Haruna Chiroma, Habib Shah, Abdulsalam Ya'u Gital, Ibrahim Abaker Targio Hashem
2021 J jnl
Complex.
Harish Garg, Zeeshan Ali, Tahir Mahmood, Sultan Aljahdali, Habib Shah
2021 J jnl
IEEE Access
Muhammad Tanveer, Abd Ullah Khan, Habib Shah, Shehzad Ashraf Chaudhry, Alamgir Naushad
2021 J jnl
IEEE Access
Muhammad Asghar Khan, Habib Shah, Sajjad ur Rehman, Neeraj Kumar, Rozaida Ghazali, Danish Shehzad, Insaf Ullah
2019 J jnl
J. Medical Imaging Health Informatics
Fakhre Alam, Sami ur Rahman, Nasser Tairan, Habib Shah, Mohammed Saeed Abohashrh, Sohail Abbas
2019 J jnl
Int. J. Swarm Intell. Res.
Anuja Arora, Riyu Bana, Habib Shah, Divakar Yadav
2019 J jnl
Int. J. Swarm Intell. Res.
Zeeshan Danish, Habib Shah, Nasser Tairan, Rozaida Gazali, Akhtar Badshah
2018 J jnl
Symmetry
Habib Shah, Nasser Tairan, Harish Garg, Rozaida Ghazali
2018 conf
SCDM
Fazli Wahid, Rozaida Ghazali, Habib Shah
2018 conf
SCDM
Umer Iqbal, Rozaida Ghazali, Habib Shah
2018 J jnl
Comput.
Habib Shah, Nasser Tairan, Harish Garg, Rozaida Ghazali
2018 J jnl
J. Intell. Fuzzy Syst.
Rashida Adeeb Khanum, Muhammad Asif Jan, Wali Khan Mashwani, Nasser Mansoor Tairan, Hidayat Ullah Khan, Habib Shah
2018 conf
ICBDE
Nawsher Khan, Mohammed Alsaqer, Habib Shah, Gran Badshah, Aftab Ahmad Abbasi, Soulmaz Salehian
2017 J jnl
Artif. Intell. Rev.
Jamal Uddin, Rozaida Ghazali, Mustafa Mat Deris, Rashid Naseem, Habib Shah
2017 conf
ICIC (3)
Habib Shah, Nasser Tairan, Wali Khan Mashwani, Abdulrahman Ahmad Al-Sewari, Muhammad Asif Jan, Gran Badshah
2017 J jnl
Frontiers Inf. Technol. Electron. Eng.
Rashid Naseem, Mustafa Mat Deris, Onaiza Maqbool, Jingpeng Li, Sara Shahzad, Habib Shah
2015 conf
DaEng
Habib Shah, Haruna Chiroma, Tutut Herawan, Rozaida Ghazali, Nasser Tairan
2014 conf
ICONIP (1)
Habib Shah, Tutut Herawan, Rozaida Ghazali, Rashid Naseem, Maslina Abdul Aziz, Jemal H. Abawajy
2014 conf
SCDM
Habib Shah, Rozaida Ghazali, Yana Mazwin Mohmad Hassim
2014 conf
ICSI (1)
Habib Shah, Tutut Herawan, Rashid Naseem, Rozaida Ghazali
2014 conf
ICCSA (6)
Haruna Chiroma, Sameem Abdul Kareem, Eka Novita Sari, Zailani Abdullah, Sanah Abdullahi Muaz, Oguz Kaynar, Habib Shah, Tutut Herawan
2013 conf
ACIIDS (1)
Habib Shah, Rozaida Ghazali, Nazri Mohd Nawi
2013 J jnl
Int. J. Appl. Evol. Comput.
Habib Shah, Rozaida Ghazali, Nazri Mohd Nawi, Mustafa Mat Deris, Tutut Herawan
2012 J jnl
Int. J. Appl. Metaheuristic Comput.
Habib Shah, Rozaida Ghazali, Nazri Mohd Nawi, Mustafa Mat Deris
2012 conf
ICCSA (1)
Habib Shah, Rozaida Ghazali, Nazri Mohd Nawi, Mustafa Mat Deris
2011 C conf
DeSE
Habib Shah, Rozaida Ghazali
2011 J jnl
CoRR
Habib Shah, Rozaida Ghazali, Nazri Mohd Nawi
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"