Ishfaq Yaseen

30 papers Journal 30
YearRankTypeTitle / Venue / Authors
2025 J jnl
Comput. Mater. Continua
Fahd N. Al-Wesabi, Hamad Almansour, Huda G. Iskandar, Ishfaq Yaseen
2024 J jnl
IEEE Trans. Consumer Electron.
Mashael S. Maashi, Eatedal Alabdulkreem, Mohammed Maray, K. Shankar, Abdulbasit A. Darem, Abdulrahman Alzahrani, Ishfaq Yaseen
2024 J jnl
Comput. Syst. Sci. Eng.
Abdelwahed Motwakel, Badriyya B. Al-Onazi, Jaber S. Alzahrani, Ayman Yafoz, Mahmoud Othman, Abu Sarwar Zamani, Ishfaq Yaseen, Amgad Atta Abdelmageed
2023 J jnl
Intell. Autom. Soft Comput.
Hala J. Alshahrani, Khaled Tarmissi, Ayman Yafoz, Abdullah Mohamed, Manar Ahmed Hamza, Ishfaq Yaseen, Abu Sarwar Zamani, Mohammad Mahzari
2023 J jnl
IEEE Access
Marwa Ismael Obayya, Munya A. Arasi, Nuha Alruwais, Raed Alsini, Abdullah Mohamed, Ishfaq Yaseen
2023 J jnl
Comput. Syst. Sci. Eng.
Anwer Mustafa Hilal, Amal Al-Rasheed, Jaber S. Alzahrani, Majdy M. Eltahir, Mesfer Al Duhayyim, Nermin M. Salem, Ishfaq Yaseen, Abdelwahed Motwakel
2023 J jnl
Comput. Syst. Sci. Eng.
Abdelwahed Motwakel, Badriyya Alonazi, Jaber S. Alzahrani, Radwa Marzouk, Amira Sayed A. Aziz, Abu Sarwar Zamani, Ishfaq Yaseen, Amgad Atta Abdelmageed
2023 J jnl
Intell. Autom. Soft Comput.
Mesfer Al Duhayyim, Hala J. Alshahrani, Khaled Tarmissi, Heyam H. Al-Baity, Abdullah Mohamed, Ishfaq Yaseen, Amgad Atta Abdelmageed, Mohamed I. Eldesouki
2023 J jnl
Clust. Comput.
Anwer Mustafa Hilal, Shaha T. Al-Otaibi, Hany Mahgoub, Fahd N. Al-Wesabi, Ghadah Aldehim, Abdelwahed Motwakel, Mohammed Rizwanullah, Ishfaq Yaseen
2023 J jnl
Comput. Syst. Sci. Eng.
Abdelwahed Motwakel, Hala J. Alshahrani, Jaber S. Alzahrani, Ayman Yafoz, Heba Mohsen, Ishfaq Yaseen, Amgad Atta Abdelmageed, Mohamed I. Eldesouki
2023 J jnl
Comput. Syst. Sci. Eng.
Manar Ahmed Hamza, Haya Mesfer Alshahrani, Sami Dhahbi, Mohamed K. Nour, Mesfer Al Duhayyim, Elsayed M. Tag El Din, Ishfaq Yaseen, Abdelwahed Motwakel
2023 J jnl
Intell. Autom. Soft Comput.
Abdelwahed Motwakel, Fadwa M. Alrowais, Khaled Tarmissi, Radwa Marzouk, Abdullah Mohamed, Abu Sarwar Zamani, Ishfaq Yaseen, Mohamed I. Eldesouki
2023 J jnl
IEEE Access
Ghadah Aldehim, Munya A. Arasi, Majdi Khalid, Sumayh S. Aljameel, Radwa Marzouk, Heba Mohsen, Ishfaq Yaseen, Sara Saadeldeen Ibrahim
2023 J jnl
IEEE Access
Latifah Almuqren, Hamed AlQahtani, Sumayh S. Aljameel, Ahmed S. Salama, Ishfaq Yaseen, Amani A. Alneil
2023 J jnl
IEEE Access
Hany Mahgoub, Amani Abdulrahman Albraikan, Kamal M. Othman, Ahmed S. Salama, Ishfaq Yaseen, Sara Saadeldeen Ibrahim
2023 J jnl
Comput. Syst. Sci. Eng.
Abdelwahed Motwakel, Badriyya Alonazi, Jaber S. Alzahrani, Sana Alazwari, Mahmoud Othman, Abu Sarwar Zamani, Ishfaq Yaseen, Amgad Atta Abdelmageed
2023 J jnl
Comput. Syst. Sci. Eng.
Manar Ahmed Hamza, Hala J. Alshahrani, Khaled Tarmissi, Ayman Yafoz, Amira Sayed A. Aziz, Mohammad Mahzari, Abu Sarwar Zamani, Ishfaq Yaseen
2023 J jnl
Intell. Autom. Soft Comput.
Hala J. Alshahrani, Khaled Tarmissi, Ayman Yafoz, Abdullah Mohamed, Abdelwahed Motwakel, Ishfaq Yaseen, Amgad Atta Abdelmageed, Mohammad Mahzari
2023 J jnl
IEEE Access
Marwa Ismael Obayya, Fahd N. Al-Wesabi, Mashael S. Maashi, Abdullah Mohamed, Manar Ahmed Hamza, Suhanda Drar, Ishfaq Yaseen, Mohamed Ibrahim Alsaid
2023 J jnl
Intell. Autom. Soft Comput.
Hala J. Alshahrani, Abdulbaset Gaddah, Ehab S. Alnuzaili, Mesfer Al Duhayyim, Heba Mohsen, Ishfaq Yaseen, Amgad Atta Abdelmageed, Gouse Pasha Mohammed
2023 J jnl
Comput. Syst. Sci. Eng.
Mesfer Al Duhayyim, Badriyya Alonazi, Jaber S. Alzahrani, Hussain Alshahrani, Mohamed Ahmed Elfaki, Abdullah Mohamed, Ishfaq Yaseen, Gouse Pasha Mohammed, Mohammed Rizwanullah, Abu Sarwar Zamani
2023 J jnl
Comput. Syst. Sci. Eng.
Mesfer Al Duhayyim, Badriyya Alonazi, Mohamed K. Nour, Ayman Yafoz, Amal S. Mehanna, Ishfaq Yaseen, Amgad Atta Abdelmageed, Gouse Pasha Mohammed
2023 J jnl
Comput. Syst. Sci. Eng.
Anwer Mustafa Hilal, Jaber S. Alzahrani, Dalia H. Elkamchouchi, Majdy M. Eltahir, Ahmed S. Almasoud, Abdelwahed Motwakel, Abu Sarwar Zamani, Ishfaq Yaseen
2023 J jnl
Comput. Syst. Sci. Eng.
Manar Ahmed Hamza, Hala J. Alshahrani, Khaled Tarmissi, Ayman Yafoz, Amal S. Mehanna, Ishfaq Yaseen, Amgad Atta Abdelmageed, Mohamed I. Eldesouki
2023 J jnl
Comput. Syst. Sci. Eng.
Anwer Mustafa Hilal, Eatedal Alabdulkreem, Jaber S. Alzahrani, Majdy M. Eltahir, Mohamed I. Eldesouki, Ishfaq Yaseen, Abdelwahed Motwakel, Radwa Marzouk
2023 J jnl
Intell. Autom. Soft Comput.
Najm Alotaibi, Badriyya B. Al-Onazi, Mohamed K. Nour, Abdullah Mohamed, Abdelwahed Motwakel, Gouse Pasha Mohammed, Ishfaq Yaseen, Mohammed Rizwanullah
2023 J jnl
Comput. Syst. Sci. Eng.
Abdelwahed Motwakel, Marwa Ismael Obayya, Nadhem Nemri, Khaled Tarmissi, Heba Mohsen, Mohammed Rizwanullah, Ishfaq Yaseen, Abu Sarwar Zamani
2022 J jnl
Appl. Artif. Intell.
Amani Abdulrahman Albraikan, Jaber S. Alzahrani, Noha Negm, Lal Hussain, Mesfer Al Duhayyim, Manar Ahmed Hamza, Abdelwahed Motwakel, Ishfaq Yaseen
2022 J jnl
Expert Syst. J. Knowl. Eng.
Anwer Mustafa Hilal, Rana Alabdan, Mohamed Tahar Ben Othman, Siwar Ben Haj Hassine, Fahd N. Al-Wesabi, Mohammed Rizwanullah, Ishfaq Yaseen, Abdelwahed Motwakel
2022 J jnl
Comput. Networks
Anwer Mustafa Hilal, Amani Abdulrahman Albraikan, Sami Dhahbi, Saud S. Alotaibi, Rana Alabdan, Mesfer Al Duhayyim, Abdelwahed Motwakel, Ishfaq Yaseen
redb/extractors/macho_extractors/macho_exports.py
← Index redb/extractors/macho_extractors/macho_exports.py python
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor
from redb.models.dataclasses import MachOExport


class MachOExportExtractor(MachOExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            macho,
        )
        self.elastic_index = self.index_prefix + "-macho_exports"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.MACHO_EXPORT.value

    def _extract_exports(self, arch_name=None):
        """Extract export information from the MachO binary for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Get exported symbols using new API for specific architecture
            exported_symbols = self.macho.get_exported_symbols(arch=arch_name)

            # Extract all exported symbols (may be empty for some binaries)
            # Handle None or empty dict
            if not exported_symbols:
                exported_symbols = {}
            all_symbols = []
            for dylib_name, symbols in exported_symbols.items():
                # Process symbol names
                for symbol in symbols:
                    if isinstance(symbol, bytes):
                        symbol = symbol.decode('utf-8', errors='replace')
                    all_symbols.append(symbol)

            # Create export dataclass
            macho_export = MachOExport(
                macho_exports_total=len(all_symbols),
                macho_export_symbols=all_symbols  # Empty list is fine, but None is not allowed for Array type
            )

            return macho_export

        except Exception as e:
            self.log.error(f"Error extracting MachO exports for arch {arch_name}: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            # Get architectures (macho is already parsed in base class)
            architectures = self.macho.get_architectures()
            if len(architectures) > 1:
                # FAT binary - return list of exports for each architecture
                results = []
                for arch_name in architectures:
                    exports = self._extract_exports(arch_name)
                    if exports:
                        exports.arch_identifier = arch_name
                        results.append(exports)
                return results
            else:
                # Single architecture - return single result
                return self._extract_exports(architectures[0] if architectures else None)
        except Exception as e:
            self.log.error(f"Error extracting MachO exports: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            if not self.macho:
                return None

            # Get architectures (macho is already parsed in base class)
            try:
                architectures = self.macho.get_architectures()
                is_fat = len(architectures) > 1
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # Loop through each architecture (1 for single, multiple for FAT)
            for arch_name in architectures:
                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_header_raw = self.macho.get_macho_header(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                    arch_cputype_raw = arch_header_raw.get('cputype', 0) if arch_header_raw else 0
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific data for {arch_name}: {e}")
                    arch_sha256 = self.sha256
                    arch_cputype_raw = 0

                # Get exports for this architecture
                macho_export = self._extract_exports(arch_name)
                if not macho_export:
                    continue

                data.append([
                    arch_sha256,                          # sha256 (arch-specific)
                    macho_export.macho_exports_total,     # macho_exports_total
                    macho_export.macho_export_symbols,    # macho_export_symbols (keep as array!)
                    current_time,                         # analysis_date
                ])

            column_names = [
                'sha256',
                'macho_exports_total', 'macho_export_symbols',
                'analysis_date'
            ]

            if not data:
                return None

            column_type_names = [
                'FixedString(64)',
                'UInt32', 'Array(Nullable(String))',
                'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

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