Jamil Y. Khan

121 papers B 28C 1Misc 3Journal 29Unranked 60
YearRankTypeTitle / Venue / Authors
2022 J jnl
Future Internet
Nusrat Afrin, Jason Brown, Jamil Y. Khan
2021 conf
VTC Fall
Shashank K. Gupta, Jamil Y. Khan, Duy T. Ngo
2020 J jnl
Trans. Emerg. Telecommun. Technol.
Dong Chen, Jamil Y. Khan, Jason Brown, Muhammad Awais Javed, Yuan Zhuang
2020 B conf
LCN
Summera Nosheen, Jamil Y. Khan
2020 conf
VTC Spring
Summera Nosheen, Jamil Y. Khan
2020 Misc conf
ICNC
Summera Nosheen, Jamil Y. Khan
2019 conf
VTC Spring
Shashank K. Gupta, Jamil Y. Khan, Duy T. Ngo
2019 conf
VTC Spring
Summera Nosheen, Jamil Y. Khan
2019 conf
VNC
Shashank K. Gupta, Jamil Y. Khan, Duy T. Ngo
2019 J jnl
CoRR
Dong Chen, Jamil Y. Khan, Muhammad Awais Javed, Jason Brown
2019 J jnl
Trans. Emerg. Telecommun. Technol.
Dong Chen, Jamil Y. Khan, Muhammad Awais Javed, Jason Brown
2019 conf
VTC Spring
Samoda Gamage, Jamil Y. Khan, Duy T. Ngo
2019 conf
SmartGridComm
Ashfaq Ahmad, Jamil Y. Khan
2019 J jnl
IEEE Trans. Smart Grid
Ashfaq Ahmad, Jamil Y. Khan
2018 J jnl
IEEE Trans. Green Commun. Netw.
Thien D. Nguyen, Jamil Y. Khan, Duy Trong Ngo
2018 conf
ICC
Ashfaq Ahmad, Jamil Y. Khan
2018 conf
I-SPAN
Summera Nosheen, Jamil Y. Khan
2018 J jnl
Comput. Networks
Samoda Gamage, Jamil Y. Khan, Duy T. Ngo
2018 conf
WCNC Workshops
Shashank K. Gupta, Jamil Y. Khan, Duy T. Ngo
2018 Misc conf
ITNAC
Jason Brown, Jamil Y. Khan
2018 conf
SmartGridComm
Ashfaq Ahmad, Jamil Y. Khan
2018 B conf
WCNC
Samoda Gamage, Duy T. Ngo, Jamil Y. Khan
2017 B conf
GLOBECOM
Thien D. Nguyen, Jamil Y. Khan, Duy T. Ngo
2017 conf
ICC Workshops
Samoda Gamage, Jamil Y. Khan, Duy Trong Ngo
2017 conf
ICC
Thien D. Nguyen, Jamil Y. Khan, Duy T. Ngo
2017 J jnl
Ad Hoc Networks
Thien D. Nguyen, Jamil Y. Khan, Duy T. Ngo
2016 J jnl
J. Sens. Actuator Networks
Jamil Y. Khan, Dong Chen, Jason Brown
2016 B conf
WCNC
Samoda Gamage, Jamil Y. Khan, Duy Trong Ngo
2016 B conf
GLOBECOM
Thien D. Nguyen, Jamil Y. Khan, Duy T. Ngo
2016 J jnl
Trans. Emerg. Telecommun. Technol.
Jason Brown, Nusrat Afrin, Jamil Y. Khan
2016 J jnl
IEEE Trans. Mob. Comput.
Jason Brown, Nusrat Afrin, Jamil Y. Khan
2015 J jnl
IEEE Trans. Mob. Comput.
Jason Brown, Jamil Y. Khan
2015 conf
ISSNIP
Wan Norsyafizan W. Muhamad, Jamil Y. Khan, Jason Brown
2015 conf
ICT
Dong Chen, Jamil Y. Khan, Jason Brown
2015 B conf
PIMRC
Thien D. Nguyen, Jamil Y. Khan, Duy T. Ngo
2015 conf
ICSPCS
Dong Chen, Jason Brown, Jamil Y. Khan
2015 conf
ICC
Nusrat Afrin, Jason Brown, Jamil Y. Khan
2015 J jnl
Veh. Commun.
Muhammad Awais Javed, Duy T. Ngo, Jamil Y. Khan
2015 conf
BODYNETS
Thien D. Nguyen, Jamil Y. Khan, Duy T. Ngo
2015 conf
ICT
Wan Norsyafizan W. Muhamad, Jamil Y. Khan, Jason Brown
2015 conf
ICSPCS
Samoda Gamage, Jamil Y. Khan, Duy Trong Ngo
2015 conf
ICC
Thien D. Nguyen, Duy T. Ngo, Ali A. Nasir, Jamil Y. Khan
2014 conf
CSNDSP
Wan Norsyafizan W. Muhamad, Jamil Y. Khan, Jason Brown
2014 conf
VTC Spring
Muhammad Awais Javed, Jamil Y. Khan, Duy T. Ngo
2014 J jnl
EURASIP J. Wirel. Commun. Netw.
Muhammad Awais Javed, Duy T. Ngo, Jamil Y. Khan
2014 conf
NGMAST
Nusrat Afrin, Jason Brown, Jamil Y. Khan
2014 B conf
MASS
Alia Asheralieva, Kaushik Mahata, Jamil Y. Khan
2014 B conf
WCNC
Muhammad Awais Javed, Jamil Y. Khan, Duy T. Ngo
2014 conf
VTC Fall
Muhammad Awais Javed, Jamil Y. Khan, Duy T. Ngo
2014 conf
ISSNIP
Dong Chen, Jason Brown, Jamil Y. Khan
2014 Misc conf
ICNC
Muhammad Awais Javed, Jamil Y. Khan
2014 J jnl
IEEE Trans. Mob. Comput.
Kasun M. S. Thotahewa, Jamil Y. Khan, Mehmet R. Yuce
2014 B conf
GLOBECOM
Jason Brown, Jamil Y. Khan
2013 conf
VTC Spring
Muhammad Awais Javed, Jamil Y. Khan
2013 C conf
BSN
Mohd Noor Islam, Jamil Y. Khan, Mehmet Rasit Yuce
2013 conf
ATNAC
Wan Norsyafizan W. Muhamad, Jason Brown, Jamil Y. Khan
2013 J jnl
Comput. Networks
Reduan H. Khan, Jamil Y. Khan
2013 conf
GLOBECOM Workshops
Nusrat Afrin, Jason Brown, Jamil Y. Khan
2013 conf
ICSPCS
Nusrat Afrin, Jason Brown, Jamil Y. Khan
2013 conf
SmartGridComm
Mashud Hyder, Reduan H. Khan, Kaushik Mahata, Jamil Y. Khan
2013 conf
WiFlex
Alia Asheralieva, Kaushik Mahata, Jamil Y. Khan
2013 conf
SmartGridComm
Reduan H. Khan, Taha Selim Ustun, Jamil Y. Khan
2013 J jnl
Comput. Commun.
Jason Brown, Jamil Y. Khan
2013 conf
ATNAC
Khalid I. Saad, Jamil Y. Khan
2013 conf
ICSPCS
Muhammad Awais Javed, Jamil Y. Khan
2013 conf
ATNAC
Nusrat Afrin, Jason Brown, Jamil Y. Khan
2013 conf
ICC Workshops
Reduan H. Khan, Jason Brown, Jamil Y. Khan
2013 conf
ICC Workshops
Jason Brown, Jamil Y. Khan
2013 conf
ICC
Jason Brown, Jamil Y. Khan
2012 conf
SmartGridComm
Reduan H. Khan, Jamil Y. Khan
2012 conf
ICWCA
Nazmus S. Nafi, Jamil Y. Khan
2012 conf
ICUMT
Alia Asheralieva, Jamil Y. Khan, Kaushik Mahata
2012 conf
GLOBECOM Workshops
Jason Brown, Jamil Y. Khan
2012 conf
SmartGridComm
Jason Brown, Jamil Y. Khan
2012 J jnl
Int. J. Internet Protoc. Technol.
Alia Asheralieva, Jamil Y. Khan, Kaushik Mahata
2012 J jnl
IEEE Trans. Mob. Comput.
Eng Hwee Ong, Jamil Y. Khan, Kaushik Mahata
2012 conf
SmartGridComm
Reduan H. Khan, Jamil Y. Khan
2012 J jnl
J. Medical Syst.
Jamil Y. Khan, Mehmet R. Yuce, Garrick Bulger, Benjamin Harding
2011 conf
ATNAC
Muhammad Awais Javed, Jamil Y. Khan
2011 conf
ISABEL
Kasun Maduranga Silva Thotahewa, Mehmet R. Yuce, Jamil Y. Khan
2011 J jnl
Int. J. Wirel. Networks Broadband Technol.
Muhammad Awais Javed, Jamil Y. Khan
2011 conf
ICC
Eng Hwee Ong, Kaushik Mahata, Jamil Y. Khan
2011 conf
BODYNETS
Kasun Maduranga Silva Thotahewa, Mehmet R. Yuce, Jamil Y. Khan
2011 conf
ATNAC
Alia Asheralieva, Jamil Y. Khan, Kaushik Mahata
2011 B conf
WCNC
Alia Asheralieva, Jamil Y. Khan, Kaushik Mahata
2010 J jnl
Comput. Networks
Eng Hwee Ong, Jamil Y. Khan
2010 B conf
WCNC
Eng Hwee Ong, Jamil Y. Khan, Kaushik Mahata
2010 J jnl
IEEE Commun. Lett.
Eng Hwee Ong, Jamil Y. Khan
2009 B conf
WCNC
Eng Hwee Ong, Jamil Y. Khan
2009 conf
Wireless Days
Eng Hwee Ong, Jamil Y. Khan
2009 B conf
IWCMC
Joshua Wall, Jamil Y. Khan
2009 J jnl
Comput. Commun.
Joshua Wall, Jamil Y. Khan
2009 B conf
PIMRC
Ahsan A. Chaudhry, Jamil Y. Khan
2009 conf
Wireless Days
Eng Hwee Ong, Jamil Y. Khan
2008 B conf
PIMRC
Ahsan A. Chaudhry, Jamil Y. Khan
2008 conf
VTC Spring
Eng Hwee Ong, Jamil Y. Khan
2008 J jnl
J. Medical Syst.
Mehmet R. Yuce, Peng Choong Ng, Jamil Y. Khan
2007 B conf
WCNC
Mehmet R. Yuce, Steven W. P. Ng, Naung L. Myo, Chin K. Lee, Jamil Y. Khan, Wentai Liu
2007 B conf
PIMRC
Xinzhi Yan, Jamil Y. Khan, Brendan Jones
2007 conf
VTC Fall
Xinzhi Yan, Jamil Y. Khan, Brendan Jones
2007 B conf
PIMRC
Xinzhi Yan, Jamil Y. Khan, Brendan Jones
2007 B conf
WCNC
Joshua Wall, Jamil Y. Khan
2007 J jnl
J. Medical Syst.
Mehmet R. Yuce, Steven W. P. Ng, Naung L. Myo, Jamil Y. Khan, Wentai Liu
2006 B conf
PIMRC
Joshua Wall, Jamil Y. Khan
2006 conf
APCCAS
Jamil Y. Khan, D. F. Hall, P. D. Turner
2006 J jnl
IEEE Trans. Veh. Technol.
Pratik Das, Jamil Y. Khan
2005 B conf
PIMRC
Glenn Platt, Jamil Y. Khan
2004 B conf
WCNC
Joshua Wall, Jamil Y. Khan
2004 B conf
GLOBECOM
Joshua Wall, Jamil Y. Khan
2004 conf
ICC
Pratik Das, Jamil Y. Khan
2003 J jnl
Int. J. Wirel. Opt. Commun.
Jamil Y. Khan
2003 conf
ICC
Glenn Platt, Jamil Y. Khan
2003 B conf
WCNC
Glenn Platt, Jamil Y. Khan
2003 conf
ICON
Pratik Das, Jamil Y. Khan
2002 B conf
PIMRC
Jamil Y. Khan
2002 conf
DELTA
Jamil Y. Khan, Joshua Wall, Mohammed A. Rashid
2002 B conf
PIMRC
Jamil Y. Khan, Pratik Das
2002 B conf
PIMRC
Jamil Y. Khan, Glenn Platt
2001 conf
VTC Fall
Jamil Y. Khan
2000 J jnl
Int. J. Wirel. Inf. Networks
Jamil Y. Khan, Yifan Li
2000 B conf
PIMRC
Jamil Y. Khan
redb/extractors/elf_extractors/elf_segments.py
← Index redb/extractors/elf_extractors/elf_segments.py python
import inspect
import hashlib
import math
from collections import Counter
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 ELFSegment


class ELFSegmentExtractor(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_segments = []
        self.elastic_index = self.index_prefix + "-elf_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 ELF file must have segments (program headers).
        """
        # Always return False - empty segments should be treated as an error
        return False

    def _calculate_entropy(self, data: bytes) -> float:
        """Calculate Shannon entropy of data."""
        if not data:
            return 0.0

        try:
            # Count frequency of each byte
            byte_counts = Counter(data)
            data_len = len(data)

            # Calculate entropy
            entropy = 0.0
            for count in byte_counts.values():
                if count > 0:
                    frequency = count / data_len
                    entropy -= frequency * math.log2(frequency)

            return entropy
        except Exception as e:
            self.log.error(f"Error calculating entropy: {e}")
            return 0.0

    def _map_segment_type(self, p_type_str: str) -> int:
        """Map segment type string to enum value."""
        type_map = {
            'PT_NULL': 0,
            'PT_LOAD': 1,
            'PT_DYNAMIC': 2,
            'PT_INTERP': 3,
            'PT_NOTE': 4,
            'PT_SHLIB': 5,
            'PT_PHDR': 6,
            'PT_TLS': 7
        }
        return type_map.get(p_type_str, 0)

    def _decode_segment_flags(self, flags: int) -> List[str]:
        """Decode segment flags to human-readable strings."""
        flag_strings = []

        if flags & 0x1:  # PF_X
            flag_strings.append('EXECUTE')
        if flags & 0x2:  # PF_W
            flag_strings.append('WRITE')
        if flags & 0x4:  # PF_R
            flag_strings.append('READ')

        return flag_strings if flag_strings else ['NONE']

    def _extract_segment_data(self, segment) -> ELFSegment:
        """Extract data from a single segment with granular error handling."""
        # Initialize with safe defaults
        segment_type = 0
        segment_type_str = 'unknown'
        segment_flags = 0
        segment_flags_str = ['NONE']
        segment_offset = 0
        segment_vaddr = 0
        segment_paddr = 0
        segment_filesz = 0
        segment_memsz = 0
        segment_align = 0
        segment_entropy = 0.0
        segment_sha256 = ""
        segment_md5 = ""

        # Try to get segment header
        header = None
        try:
            header = segment.header
        except Exception as e:
            self.log.warning(f"Could not access segment header: {e}")
            return ELFSegment(
                segment_type=segment_type, segment_type_str=segment_type_str,
                segment_flags=segment_flags, segment_flags_str=segment_flags_str,
                segment_offset=segment_offset, segment_vaddr=segment_vaddr,
                segment_paddr=segment_paddr, segment_filesz=segment_filesz,
                segment_memsz=segment_memsz, segment_align=segment_align,
                segment_entropy=segment_entropy, segment_sha256=segment_sha256,
                segment_md5=segment_md5
            )

        # Extract segment type
        try:
            p_type_str = header.get('p_type', 'PT_NULL')
            segment_type = self._map_segment_type(p_type_str)
            segment_type_str = p_type_str.replace('PT_', '') if p_type_str.startswith('PT_') else p_type_str
        except Exception as e:
            self.log.warning(f"Could not extract segment type: {e}")

        # Extract segment flags
        try:
            segment_flags = header.get('p_flags', 0)
            segment_flags_str = self._decode_segment_flags(segment_flags)
        except Exception as e:
            self.log.warning(f"Could not extract segment flags: {e}")

        # Extract segment addresses and sizes
        try:
            segment_offset = header.get('p_offset', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment offset: {e}")

        try:
            segment_vaddr = header.get('p_vaddr', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment vaddr: {e}")

        try:
            segment_paddr = header.get('p_paddr', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment paddr: {e}")

        try:
            segment_filesz = header.get('p_filesz', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment filesz: {e}")

        try:
            segment_memsz = header.get('p_memsz', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment memsz: {e}")

        try:
            segment_align = header.get('p_align', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment align: {e}")

        # Calculate entropy and hashes for segment data (most likely to fail)
        try:
            if segment_filesz > 0:
                segment_data = segment.data()
                if segment_data:
                    # Calculate entropy
                    segment_entropy = self._calculate_entropy(segment_data)

                    # Calculate hashes
                    segment_sha256 = hashlib.sha256(segment_data).hexdigest()
                    segment_md5 = hashlib.md5(segment_data).hexdigest()
        except Exception as e:
            self.log.warning(f"Could not read segment data for hashing: {e}")
            # Keep defaults (0.0, "", "")

        return ELFSegment(
            segment_type=segment_type,
            segment_type_str=segment_type_str,
            segment_flags=segment_flags,
            segment_flags_str=segment_flags_str,
            segment_offset=segment_offset,
            segment_vaddr=segment_vaddr,
            segment_paddr=segment_paddr,
            segment_filesz=segment_filesz,
            segment_memsz=segment_memsz,
            segment_align=segment_align,
            segment_entropy=segment_entropy,
            segment_sha256=segment_sha256,
            segment_md5=segment_md5
        )

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

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

            def extract_segments(elf):
                segments_data = []

                # Iterate through all segments with per-segment error handling
                for segment_index, segment in enumerate(elf.iter_segments()):
                    try:
                        segment_data = self._extract_segment_data(segment)
                        if segment_data:
                            segments_data.append(segment_data)
                        else:
                            self.log.warning(f"Failed to extract data for segment {segment_index}")
                    except Exception as e:
                        self.log.warning(f"Error processing segment {segment_index}: {e}")
                        # Continue processing other segments

                return segments_data

            # Check if file is valid ELF
            if not self._is_elf_file():
                self.log.error(f"No valid ELF file for {self.hash.sha256}")
                return None

            segments_data = self._with_elf_file(extract_segments)
            if segments_data is None:
                return None

            self.elf_segments = segments_data
            return self.elf_segments

        except Exception as e:
            self.log.error(f"Error extracting ELF segments {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_segments
        elif exporter_type == "ClickHouseExporter":
            try:
                if not self.elf_segments:
                    return None

                # Prepare data arrays for all segments
                data = []
                current_time = datetime.now(timezone.utc)
                for segment in self.elf_segments:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        segment.segment_type,
                        segment.segment_type_str,
                        segment.segment_flags,
                        segment.segment_flags_str,
                        segment.segment_offset,
                        segment.segment_vaddr,
                        segment.segment_paddr,
                        segment.segment_filesz,
                        segment.segment_memsz,
                        segment.segment_align,
                        segment.segment_entropy,
                        segment.segment_sha256,
                        segment.segment_md5,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'segment_type', 'segment_type_str', 'segment_flags', 'segment_flags_str',
                    'segment_offset', 'segment_vaddr', 'segment_paddr',
                    'segment_filesz', 'segment_memsz', 'segment_align',
                    'segment_entropy', 'segment_sha256', 'segment_md5',
                    'analysis_date'
                ]

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    "Enum8('NULL'=0, 'LOAD'=1, 'DYNAMIC'=2, 'INTERP'=3, 'NOTE'=4, 'SHLIB'=5, 'PHDR'=6, 'TLS'=7)",
                    'LowCardinality(String)',
                    'UInt32',
                    'Array(LowCardinality(String))',
                    'UInt64', 'UInt64', 'UInt64', 'UInt64', 'UInt64', 'UInt64',
                    'Float64',
                    'FixedString(64)', 'FixedString(32)',
                    'DateTime64(3, \'UTC\')'
                ]

                if not data:
                    return None

                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_segments"