Nazar T. Ali

58 papers B 2C 1Misc 2Journal 30Unranked 23
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Access
Ahmad Aldelemy, Ali Al-Dulaimi, Ebenezer Adjei, Prince O. Siaw, Nazar T. Ali, Viktor Doychinov, Raed A. Abd-Alhameed
2026 J jnl
IEEE Access
Mohamed Abdul-Al, George Kumi Kyeremeh, Rami Qahwaji, Nazar T. Ali, Raed A. Abd-Alhameed
2026 J jnl
IEEE Open J. Commun. Soc.
Ahmad Aldelemy, Ali Al-Dulaimi, Shaik Basheeruddin Shah, Nazar T. Ali, Walid A. Al-Hussaibi, Raed A. Abd-Alhameed
2025 J jnl
IEEE Access
Ahmad Aldelemy, Ali Al-Dulaimi, Geili T. A. El Sanousi, Prince O. Siaw, Nazar T. Ali, Viktor Doychinov, Yousif A. Dama, Raed A. Abd-Alhameed
2025 Misc conf
ICASSP
Shaik Basheeruddin Shah, Nazar T. Ali, Ahmed Altunaiji, Vijay Kumar Chakka, Mohamed I. AlHajri
2025 J jnl
Discov. Comput.
Emi Kalita, Solomon Sunday Oyelere, Silvia Gaftandzhieva, Kandala N. V. P. S. Rajesh, Senthil Kumar Jagatheesaperumal, Asmaa Mohamed, Yomna M. Elbarawy, Abeer S. Desuky, Sadiq Hussain, Mehmet Akif Cifci, Paraskevi Theodorou, Slavoljub Hilcenko, Jiten Hazarika, Nazar T. Ali
2025 J jnl
IEEE Access
George Kumi Kyeremeh, Mohamed Abdul-Al, Rami Qahwaji, Nazar T. Ali, Raed A. Abd-Alhameed
2025 J jnl
Soc. Netw. Anal. Min.
Emi Kalita, Houssam El Aouifi, Ashima Kukkar, Sadiq Hussain, Nazar T. Ali, Silvia Gaftandzhieva
2025 J jnl
IEEE Access
Ahmad Aldelemy, Ebenezer Adjei, Prince O. Siaw, Ali Al-Dulaimi, Viktor Doychinov, Nazar T. Ali, Rami Qahwaji, John G. Buckley, Pete Twigg, Raed A. Abd-Alhameed
2025 Misc conf
ICASSP
Venugopalachary Kotha, Vijay Kumar Chakka, Shaik Basheeruddin Shah, Nazar T. Ali
2025 J jnl
IEEE Open J. Commun. Soc.
Shaik Basheeruddin Shah, Nazar T. Ali, Srikanth Goli, Ahmed Altunaiji, Dragan I. Olcan
2024 J jnl
IEEE Access
Mohamed Abdul-Al, George Kumi Kyeremeh, Rami Qahwaji, Nazar T. Ali, Raed A. Abd-Alhameed
2024 conf
ICSPIS
Sara Alzaabi, Aisha Alzahmi, Maryam Almheiri, Naema Al-Ali, Nazar T. Ali, Kin Poon, Aysha Alteneiji
2024 J jnl
IEEE Access
Widad Faraj A. Mshwat, Jamal Sulieman Kosha, Abubakar Salisu, Atta Ullah, Nazar T. Ali, Issa T. E. Elfergani, Chan Hwang See, Chemseddine Zebiri, Jonathan Rodriguez, Raed Abd-Alhameed
2024 J jnl
IEEE Access
Patrick Sunday Onen, Rana H. A. Zubo, Nazar T. Ali, Geev Mokryani, Jianping Li, Raed Abd-Alhameed
2024 J jnl
IEEE Access
Mohamed Abdul-Al, George Kumi Kyeremeh, Rami Qahwaji, Nazar T. Ali, Raed A. Abd-Alhameed
2023 J jnl
IEEE Access
Falih Mahdi Alnahwi, Yasir Ismael Abdulraheem Al-Yasir, Nazar T. Ali, Ibrahim Gharbia, Abdulkareem S. Abdullah, Yim-Fun Hu, Raed A. Abd-Alhameed
2023 J jnl
IEEE Access
Falih Mahdi Alnahwi, Abdulghafor Abdulghafar Abdulhameed, Nazar T. Ali, Yasir Ismael Abdulraheem Al-Yasir, Zdenek Kubík, Abdulkareem S. Abdullah, Raed A. Abd-Alhameed
2022 J jnl
IEEE Access
Falih Mahdi Alnahwi, Yasir Ismael Abdulraheem Al-Yasir, Nazar T. Ali, Ibrahim Gharbia, Chan Hwang See, Raed A. Abd-Alhameed
2021 conf
CCECE
Aysha Alteneiji, Ubaid Ahmad, Kin Poon, Nazar T. Ali, Nawaf I. Almoosa
2020 J jnl
IEEE Access
Mohammed A. G. Al-Sadoon, Mahmood F. Mosleh, Nazar T. Ali, Hassan Migdadi, Raed A. Abd-Alhameed, Peter S. Excell
2020 conf
ICSPIS
Aysha Alteneiji, Ubaid Ahmad, Kin Poon, Nazar T. Ali, Nawaf I. Almoosa
2020 J jnl
Comput. Sci. Rev.
Huthaifa A. Obeidat, Ali A. S. Alabdullah, E. Almahdi Elkhazmi, W. Suhaib, Omar Obeidat, Majid Alkhambashi, Mahmood F. Mosleh, Nazar T. Ali, Yousef A. S. Dama, Zuhairiah Zainal Abidin, Raed A. Abd-Alhameed, Peter S. Excell
2019 J jnl
CoRR
Mohamed I. AlHajri, Nazar T. Ali, Raed M. Shubair
2019 J jnl
IEEE Access
Huthaifa A. Obeidat, Ali A. S. Alabdullah, Nazar T. Ali, Rameez Asif, Omar Obeidat, Mohammed S. A. Bin-Melha, Wafa Shuaieb, Raed A. Abd-Alhameed, Peter S. Excell
2019 J jnl
IEEE Access
George A. Oguntala, Raed A. Abd-Alhameed, Nazar T. Ali, Yim-Fun Hu, James M. Noras, Nnabuike N. Eya, Issa T. E. Elfergani, Jonathan Rodriguez
2018 conf
GlobalSIP
Mohamed I. AlHajri, Nazar T. Ali, Raed M. Shubair
2018 C conf
BROADNETS
Mohammed A. G. Al-Sadoon, N. A. Abduljabbar, Nazar T. Ali, Rameez Asif, A. Zweid, Haru Alhassan, James M. Noras, R. A. Abd-Alhameed
2018 J jnl
CoRR
Ebtesam Almazrouei, Nazar T. Ali, Saleh R. Al-Araji
2018 conf
ICSPIS
Aamna Al Teneiji, Muhammed Saeed Khan, Nazar T. Ali, Ahmed A. Al-Tunaiji
2017 J jnl
Sensors
Mohammed A. G. Al-Sadoon, Nazar T. Ali, Yousif A. Dama, Abdulkareim Zuid, Stephen M. R. Jones, Raed A. Abd-Alhameed, James M. Noras
2017 J jnl
IEEE Trans. Consumer Electron.
Nazar T. Ali, Rola Almahainy, Abdullah Al-Shabili, Nawaf I. Almoosa, Raed Abd-Alhameed
2017 J jnl
CoRR
Ehab Salahat, Ali Hakam, Nazar T. Ali
2017 J jnl
CoRR
Ehab Salahat, Ahmed Kulaib, Nazar T. Ali, Raed M. Shubair
2017 conf
EuCNC
Ehab Salahat, Ahmed Kulaib, Nazar T. Ali, Raed M. Shubair
2017 J jnl
J. Comput. Des. Eng.
Bo Liu, Alexander Irvine, Mobayode O. Akinsolu, Omer Arabi, Vic Grout, Nazar T. Ali
2017 J jnl
CoRR
Ehab Salahat, Ahmed Kulaib, Nazar T. Ali, Raed M. Shubair
2017 J jnl
CoRR
Abdulla AlShehhi, Mohammad Luai Hammadih, M. Sami Zitouni, Saif Al Kindi, Nazar T. Ali, Luis Weruaga
2017 conf
VTC Spring
Ehab Salahat, Ali Hakam, Nazar T. Ali, Ahmed Kulaib
2017 J jnl
J. Comput. Des. Eng.
Bo Liu, Slawomir Koziel, Nazar T. Ali
2016 conf
WISATS
Naeem A. Jan, Mohamed Lashab, Nazar T. Ali, Fathi M. Abdussalam, Embarak M. Ibrahim, Raed A. Abd-Alhameed, Mark B. Child
2015 conf
ICECS
Rola Almahainy, Nazar T. Ali, Saleh R. Al-Araji, Mohammed Ismail
2014 B conf
PIMRC
Ebtesam Almazrouei, Nayef Alsindi, Saleh R. Al-Araji, Nazar T. Ali, Zdenek Chaloupka, James Aweya
2013 conf
IDT
Ogbonnaya O. Anoh, R. A. Abd-Alhameed, Steve M. R. Jones, Jim M. Noras, Yousif A. Dama, A. M. Altimimi, Nazar T. Ali, M. S. Alkhambashi
2013 conf
IDT
Huthaifa A. Obeidat, R. A. Abd-Alhameed, Jim M. Noras, S. Zhu, T. Ghazaany, Nazar T. Ali, E. Almahdi Elkhazmi
2013 conf
ICSPCS
Ebtesam Almazrouei, Nayef Alsindi, Saleh R. Al-Araji, Nazar T. Ali, Zdenek Chaloupka, James Aweya
2013 conf
WPNC
Nuha Al Khanbashi, Nayef Alsindi, Saleh R. Al-Araji, Nazar T. Ali, Zdenek Chaloupka, Vivek Yenamandra, James Aweya
2013 conf
ICECS
M. Sami Zitouni, Mohammad Luai Hammadih, Muna Abdulla Al Shehhi, Saif Al Kindi, Nazar T. Ali, Luis Weruaga
2012 conf
ICECS
Vivek Yenamandra, Feiran Lei, Saleh R. Al-Araji, Nazar T. Ali, Mohammed Ismail
2012 conf
CAMAD
Ogbonnaya O. Anoh, Nazar T. Ali, Raed A. Abd-Alhameed, Steve M. R. Jones, Yousef A. S. Dama
2012 B conf
PIMRC
Nuha Al Khanbashi, Nayef Alsindi, Saleh R. Al-Araji, Nazar T. Ali, James Aweya
2011 conf
ICECS
Issa T. E. Elfergani, Raed A. Abd-Alhameed, Nazar T. Ali, A. G. Alhaddad, Chan H. See, E. H. Cabongomuqueba
2011 conf
ICECS
Tahereh Sadeghpour, R. A. Abd-Alhameed, Nazar T. Ali, Issa T. E. Elfergani, Y. A. S. Dama, Ogbonnaya O. Anoh
2010 conf
MobiMedia
Nazar T. Ali, Abubakar Sadiq Hussaini, Raed A. Abd-Alhameed, Neil J. McEwan, Mark B. Child, E. Almahdi Elkhazmi, Jonathan Rodriguez
2010 conf
MobiMedia
Abubakar Sadiq Hussaini, Tahereh Sadeghpour, Raed A. Abd-Alhameed, Mark B. Child, Nazar T. Ali, Jonathan Rodriguez
2010 conf
ICECS
Nazar T. Ali, Khalid Mubarak, Neil J. McEwan, Kahtan A. Mezher, Ahmed Kulaib, Adel Al-Zarouni
2003 conf
ICECS
Nazar T. Ali, Joe Rodriguez-Tellez, Kahtan A. Mezher, Cesar Navarro, Antonio Tazón, Angel Mediavilla, T. Fernández
2003 conf
ICECS
Joe Rodriguez-Tellez, Kahtan A. Mezher, Nazar T. Ali, Tomás Fernández Ibáñez, Angel Mediavilla, Antonio Tazón, Cesar Navarro
redb/extractors/macho_extractors/macho_segments.py
← Index redb/extractors/macho_extractors/macho_segments.py python
import hashlib
import inspect
import base64
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 MachOSegment


class MachOSegmentExtractor(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_segments"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _is_empty_result(self, extracted_data) -> bool:
        """
        Override: Empty segments is an ERROR, not a valid empty case.
        A valid MachO file must have segments (at minimum __PAGEZERO, __TEXT).
        """
        # Always return False - empty segments should be treated as an error
        return False

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

    def _extract_segments_for_arch(self, arch_name):
        """Extract segment information for a specific architecture."""
        self.log.debug(f"Extracting segments for architecture: {arch_name}")
        segments = []

        try:
            # Get segments using new API with architecture parameter
            segments_data = self.macho.get_segments(arch=arch_name)
            if not segments_data:
                return segments

            # Extract segments for this architecture
            for segment in segments_data:
                try:
                    segment_name = segment.get('segname', 'Unknown')

                    # Calculate segment hash
                    segment_data = self._get_segment_data(segment)
                    if segment_data:
                        seg_sha256 = hashlib.sha256(segment_data).hexdigest()
                    else:
                        seg_sha256 = ""

                    # Use entropy already calculated by machofile module, rounded to 3 decimal places
                    seg_entropy = round(segment.get('entropy', 0.0), 3)

                    # Create segment dataclass with architecture info
                    macho_segment = MachOSegment(
                        segment_name=segment_name,
                        segment_vaddr=segment.get('vaddr', 0),
                        segment_vsize=segment.get('vsize', 0),
                        segment_offset=segment.get('offset', 0),
                        segment_size=segment.get('size', 0),
                        segment_max_vm_protection=segment.get('max_vm_protection', 0),
                        segment_initial_vm_protection=segment.get('initial_vm_protection', 0),
                        segment_nsects=segment.get('nsects', 0),
                        segment_flags=segment.get('flags', 0),
                        segment_entropy=seg_entropy,
                        segment_sha256=seg_sha256,
                    )
                    # Add architecture info to the segment
                    macho_segment.architecture = arch_name
                    segments.append(macho_segment)

                except Exception as e:
                    self.log.warning(
                        f'Unable to process segment "{segment.get("segname", "Unknown")}" for architecture {arch_name} in {self.hash.sha256}: {e}'
                    )
                    continue

            return segments

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

    def _extract_segments(self):
        """Extract segment information from all architectures in the MachO binary."""
        self.log.debug(inspect.currentframe().f_code.co_name)
        segments = []

        if not self.macho:
            return segments

        try:
            # Get architectures using new API (already parsed in base class)
            architectures = self.macho.get_architectures()
            if not architectures:
                return segments

            # Process each architecture
            for arch_name in architectures:
                arch_segments = self._extract_segments_for_arch(arch_name)
                segments.extend(arch_segments)

            return segments

        except Exception as e:
            self.log.error(f"Error extracting MachO segments: {e}")
            return segments

    def _get_segment_data(self, segment):
        """Get the raw data for a segment."""
        try:
            offset = segment.get('offset', 0)
            size = segment.get('size', 0)
            
            if size == 0:
                return None
            
            # Read segment data from file
            with open(self.filepath, 'rb') as f:
                f.seek(offset)
                return f.read(size)
                
        except Exception as e:
            self.log.warning(f"Error reading segment data: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            segments = self._extract_segments()
            return segments
        except Exception as e:
            self.log.error(f"Error extracting MachO segments: {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:
                # Extract segments for this specific architecture
                segments = self._extract_segments_for_arch(arch_name)
                if not segments:
                    continue

                # Get architecture-specific sha256 and header info
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)

                    # Get raw architecture value
                    arch_header_raw = self.macho.get_macho_header(arch=arch_name)
                    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

                for segment in segments:
                    data.append([
                        arch_sha256,                          # sha256 (architecture-specific)
                        segment.segment_name,                 # segment_name
                        segment.segment_vaddr,                # segment_vaddr
                        segment.segment_vsize,                # segment_vsize
                        segment.segment_offset,               # segment_offset
                        segment.segment_size,                 # segment_size
                        segment.segment_max_vm_protection,    # segment_max_vm_protection
                        segment.segment_initial_vm_protection, # segment_initial_vm_protection
                        segment.segment_nsects,               # segment_nsects
                        segment.segment_flags,                # segment_flags
                        segment.segment_entropy,              # segment_entropy
                        segment.segment_sha256,               # segment_sha256
                        current_time,                         # analysis_date
                    ])

            column_names = [
                'sha256',
                'segment_name', 'segment_vaddr', 'segment_vsize', 'segment_offset',
                'segment_size', 'segment_max_vm_protection', 'segment_initial_vm_protection',
                'segment_nsects', 'segment_flags', 'segment_entropy', 'segment_sha256',
                'analysis_date'
            ]

            if not data:
                return None

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

            return (data, column_names, column_type_names)

        return None

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