Victor E. DeBrunner

109 papers A 2B 5C 3Misc 37Journal 23Unranked 39
YearRankTypeTitle / Venue / Authors
2025 C conf
ISCAS
Weiwei Wang, Linda S. DeBrunner, Victor E. DeBrunner
2024 conf
IEEECONF
Weiwei Wang, Victor E. DeBrunner, Linda S. DeBrunner, Dingli Xue, Hanqing Zhao, Ranran Tao
2023 C conf
ISCAS
Linda S. DeBrunner, Victor E. DeBrunner
2023 Misc conf
ICASSP
Weiwei Wang, Victor E. DeBrunner, Linda S. DeBrunner
2022 conf
IEEECONF
Linda S. DeBrunner, Victor E. DeBrunner
2022 J jnl
IEEE Signal Process. Lett.
Dingli Xue, Linda S. DeBrunner, Victor E. DeBrunner, Zhen Huang
2021 conf
ACSCC
Rajesh Thomas, Victor E. DeBrunner, Linda DeBrunner
2021 conf
ACSCC
Victor E. DeBrunner, Linda S. DeBrunner
2021 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Dingli Xue, Linda S. DeBrunner, Victor E. DeBrunner
2020 Misc conf
ACSSC
Rajesh Thomas, Victor E. DeBrunner, Linda DeBrunner
2020 Misc conf
ACSSC
Victor E. DeBrunner, Linda S. DeBrunner
2020 J jnl
IEEE Trans. Signal Process.
Dingli Xue, Linda S. DeBrunner, Victor E. DeBrunner
2019 Misc conf
ACSSC
Dingli Xue, Victor E. DeBrunner, Linda S. DeBrunner
2019 J jnl
IEEE Signal Process. Lett.
Dingli Xue, Linda S. DeBrunner, Victor E. DeBrunner
2018 Misc conf
ACSSC
Rajesh Thomas, Victor E. DeBrunner, Linda DeBrunner
2018 Misc conf
ACSSC
Dingli Xue, Linda S. DeBrunner, Victor E. DeBrunner
2018 Misc conf
ACSSC
Peng Xi, Victor E. DeBrunner
2017 Misc conf
ACSSC
Victor E. DeBrunner, Jigar Patel
2017 Misc conf
ACSSC
Peng Xi, Victor E. DeBrunner
2016 A conf
AsiaCCS
Changhai Ou, Zhu Wang, Juan Ai, Xinping Zhou, Degang Sun, Victor E. DeBrunner
2016 Misc conf
ACSSC
Peng Xi, Victor E. DeBrunner
2015 Misc conf
ACSSC
Soumak Mookherjee, Linda DeBrunner, Victor E. DeBrunner
2015 Misc conf
ICASSP
Kirandeep Ghuman, Victor E. DeBrunner
2015 Misc conf
ACSSC
Kirandeep Ghuman, Victor E. DeBrunner
2014 Misc conf
ACSSC
Soumak Mookherjee, Linda DeBrunner, Victor E. DeBrunner
2014 Misc conf
ACSSC
Kirandeep Ghuman, Victor E. DeBrunner
2014 Misc conf
ACSSC
Peng Xi, Victor E. DeBrunner
2013 Misc conf
ACSSC
Soumak Mookherjee, Linda DeBrunner, Victor E. DeBrunner
2013 Misc conf
ACSSC
Kirandeep Ghuman, Victor E. DeBrunner
2013 Misc conf
ICASSP
Guifeng Liu, Victor E. DeBrunner
2012 conf
ACSCC
Viswanadh Kandula, Linda DeBrunner, Victor E. DeBrunner, Michelle Rambo-Roddenberry
2012 conf
ACSCC
Soumak Mookherjee, Linda DeBrunner, Victor E. DeBrunner
2012 Misc conf
ICASSP
Guifeng Liu, Victor E. DeBrunner
2012 conf
ACSCC
Kirandeep Ghuman, Victor E. DeBrunner
2012 conf
ACSCC
Guifeng Liu, Victor E. DeBrunner
2011 conf
ACSCC
Viswanadh Kandula, Linda DeBrunner, Victor E. DeBrunner, Michelle Rambo-Roddenberry
2011 conf
ACSCC
Guifeng Liu, Victor E. DeBrunner
2009 Misc conf
ICASSP
Alessio Medda, Victor E. DeBrunner
2009 Misc conf
ICASSP
Minh Ta, Hieu Thai, Victor E. DeBrunner
2008 conf
ACSCC
Hieu Thai, Minh Ta, Victor E. DeBrunner
2008 Misc conf
ICASSP
Minh Ta, Victor E. DeBrunner
2008 J jnl
EURASIP J. Adv. Signal Process.
Yunhua Wang, Linda DeBrunner, Victor E. DeBrunner, Dayong Zhou
2008 Misc conf
ICASSP
Victor E. DeBrunner, Osama Alkhouli
2008 conf
ACSCC
Alessio Medda, Victor E. DeBrunner
2008 conf
ACSCC
Victor E. DeBrunner
2007 C conf
ISCAS
Yunhua Wang, Linda DeBrunner, Dayong Zhou, Victor E. DeBrunner
2007 J jnl
IEEE Trans. Signal Process.
Dayong Zhou, Victor E. DeBrunner
2007 conf
ICASSP (2)
Yunhua Wang, Linda DeBrunner, Dayong Zhou, Victor E. DeBrunner
2007 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Dayong Zhou, Victor E. DeBrunner
2007 conf
ICASSP (3)
Osama Alkhouli, Victor E. DeBrunner
2007 J jnl
IEEE Trans. Signal Process.
Dayong Zhou, Victor E. DeBrunner
2007 conf
ICIP (4)
Svetlana Bachmann, Dusan Zrnic, Victor E. DeBrunner
2007 conf
ICASSP (2)
Svetlana Bachmann, Victor E. DeBrunner, Dusan Zrnic, Mark B. Yeary
2007 J jnl
J. Multim.
Dayong Zhou, Yunhua Wang, Victor E. DeBrunner, Linda DeBrunner
2006 conf
ICASSP (5)
Dayong Zhou, Victor E. DeBrunner, Yan Zhai, Mark B. Yeary
2006 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Victor E. DeBrunner, Dayong Zhou
2006 B conf
Image Processing
Dee H. Wu, Jasjit S. Suri, Vincent Magnotta, Tomasz Przebinda, Victor E. DeBrunner
2005 conf
ICASSP (3)
Dayong Zhou, Victor E. DeBrunner
2005 B conf
GLOBECOM
Dayong Zhou, Victor E. DeBrunner
2005 J jnl
IEEE Trans. Signal Process.
Victor E. DeBrunner, Joseph P. Havlicek, Tomasz Przebinda, Murad Özaydin
2005 conf
ICIP (1)
Osama Alkhouli, Victor E. DeBrunner
2005 conf
ICIP (2)
Yan Zhai, Mark B. Yeary, Victor E. DeBrunner, Joseph P. Havlicek, Osama Alkhouli
2004 conf
ICC
Dayong Zhou, Victor E. DeBrunner
2004 conf
ICASSP (4)
Dayong Zhou, Victor E. DeBrunner
2004 B conf
GLOBECOM
Dayong Zhou, Victor E. DeBrunner
2004 conf
ISCAS (3)
Dayong Zhou, Victor E. DeBrunner
2004 conf
ICASSP (2)
Minh Ta, Victor E. DeBrunner
2004 conf
ICASSP (5)
Yunhua Wang, Linda DeBrunner, Victor E. DeBrunner, Dayong Zhou
2004 J jnl
IEEE Trans. Signal Process.
Victor E. DeBrunner, Linda DeBrunner, Longji Wang
2003 conf
ICASSP (2)
Victor E. DeBrunner, Ewa Matusiak
2003 conf
ICASSP (2)
Xiaojuan Hu, Linda DeBrunner, Victor E. DeBrunner
2003 A conf
ICME
Xiaojuan Hu, Linda DeBrunner, Victor E. DeBrunner
2002 conf
SSIAI
Peter C. Tay, Joseph P. Havlicek, Victor E. DeBrunner
2002 Misc conf
ICASSP
Peter C. Tay, Joseph P. Havlicek, Victor E. DeBrunner
2002 conf
ISCAS (4)
Xiaojuan Hu, Linda DeBrunner, Victor E. DeBrunner
2002 conf
ICIP (3)
Peter C. Tay, Joseph P. Havlicek, Victor E. DeBrunner
2002 conf
SSIAI
Amir Zia, Victor E. DeBrunner, Arulamani Chinnaswamy, Linda DeBrunner
2002 conf
SSIAI
Valliappa Lakshmanan, Victor E. DeBrunner, Robert Rabin
2002 Misc conf
ICASSP
Longji Wang, Victor E. DeBrunner, Linda DeBrunner
2001 conf
ICECS
Longji Wang, Victor E. DeBrunner, Linda DeBrunner
2001 J jnl
IEEE Trans. Inf. Theory
Tomasz Przebinda, Victor E. DeBrunner, Murad Özaydin
2001 J jnl
IEEE Trans. Educ.
Victor E. DeBrunner, Linda DeBrunner, Sridhar Radhakrishnan, A. Kamal Khan
2000 J jnl
IEEE Trans. Signal Process.
Victor E. DeBrunner, Murad Özaydm, Tomasz Przebinda
2000 conf
SSIAI
Linda DeBrunner, Victor E. DeBrunner, Minghua Yao
2000 J jnl
IEEE Commun. Surv. Tutorials
Victor E. DeBrunner, Linda DeBrunner, Longji Wang, Sridhar Radhakrishnan
2000 J jnl
IEEE Trans. Signal Process.
Victor E. DeBrunner, Sebastián M. Torres
2000 J jnl
IEEE Trans. Signal Process.
Victor E. DeBrunner, Murad Özaydm, Tomasz Przebinda
2000 B conf
ICIP
Valliappa Lakshmanan, Victor E. DeBrunner, Robert Rabin
2000 Misc conf
ICASSP
Victor E. DeBrunner, Murad Özaydin, Tomasz Przebinda, Joseph P. Havlicek
1999 conf
ISCAS (4)
Victor E. DeBrunner, Linda DeBrunner, Longji Wang
1999 J jnl
IEEE Trans. Signal Process.
Victor E. DeBrunner, Murad Özaydin, Tomasz Przebinda
1999 Misc conf
ICASSP
Tomasz Przebinda, Victor E. DeBrunner, Murad Özaydin
1998 Misc conf
ICASSP
Sebastián M. Torres, Victor E. DeBrunner
1997 J jnl
IEEE Trans. Image Process.
Victor E. DeBrunner, Lixiang Chen, Hong-Jian Li
1996 Misc conf
ICASSP
Elaine D. McKinney, Victor E. DeBrunner
1996 Misc conf
ICASSP
J. A. Thripuraneni, Wei Lou, Victor E. DeBrunner
1996 Misc conf
ICASSP
Victor E. DeBrunner, Linda DeBrunner, Sridhar Radhakrishnan, A. Kamal Khan
1995 J jnl
Signal Process.
Victor E. DeBrunner, A. A. (Louis) Beex
1995 B conf
ICIP
Victor E. DeBrunner, Lixiang Chen, Hong-Jian Li
1994 conf
ICASSP (3)
Tarek Tutunji, Victor E. DeBrunner
1994 conf
ICASSP (2)
Victor E. DeBrunner, Tod Bussert
1993 J jnl
IEEE Trans. Signal Process.
Victor E. DeBrunner
1993 conf
ICASSP (1)
Elaine D. McKinney, Victor E. DeBrunner
1992 Misc conf
ICASSP
Victor E. DeBrunner
1992 J jnl
IEEE Trans. Signal Process.
A. A. (Louis) Beex, Victor E. DeBrunner
1990 Misc conf
ICASSP
Victor E. DeBrunner, A. A. (Louis) Beex
1989 Misc conf
ICASSP
Victor E. DeBrunner, A. A. (Louis) Beex
1988 Misc conf
ICASSP
Victor E. DeBrunner, A. A. (Louis) Beex
1987 Misc conf
ICASSP
A. A. (Louis) Beex, Victor E. DeBrunner
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"