Olivia R. Liu Sheng

95 papers A* 1A 1B 2C 5Journal 73Unranked 13
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Tianyi Li, Yu Qin, Olivia R. Liu Sheng
2025 J jnl
Inf. Syst. Res.
Mohammad Amin Morid, Olivia R. Liu Sheng
2025 J jnl
CoRR
Mohammad Amin Morid, Olivia R. Liu Sheng
2025 J jnl
Inf. Syst. Res.
Yu Zhu, Xiao Liu, Olivia R. Liu Sheng
2024 J jnl
Inf. Syst. Res.
Ahmed Abbasi, Jeffrey Parsons, Gautam Pant, Olivia R. Liu Sheng, Suprateek Sarker
2024 J jnl
Inf. Syst. Res.
Ahmed Abbasi, Robin Dillon, H. Raghav Rao, Olivia R. Liu Sheng
2023 J jnl
Inf. Syst. Res.
Kexin Yin, Xiao Fang, Bintong Chen, Olivia R. Liu Sheng
2023 J jnl
ACM Trans. Manag. Inf. Syst.
Mohammad Amin Morid, Olivia R. Liu Sheng, Joseph Dunbar
2022 J jnl
CoRR
Kexin Yin, Xiao Fang, Bintong Chen, Olivia R. Liu Sheng
2021 J jnl
Inf. Syst. Res.
Yang Wang, Vandana Ramachandran, Olivia R. Liu Sheng
2021 J jnl
CoRR
Mohammad Amin Morid, Olivia R. Liu Sheng, Joseph Dunbar
2020 J jnl
CoRR
Mohammad Amin Morid, Olivia R. Liu Sheng, Kensaku Kawamoto, Travis Ault, Josette Dorius, Samir E. AbdelRahman
2020 J jnl
CoRR
Mohammad Amin Morid, Olivia R. Liu Sheng, Kensaku Kawamoto, Samir E. AbdelRahman
2020 J jnl
J. Biomed. Informatics
Mohammad Amin Morid, Olivia R. Liu Sheng, Kensaku Kawamoto, Samir E. AbdelRahman
2020 J jnl
Inf. Syst. Res.
Yuanyang Liu, Gautam Pant, Olivia R. Liu Sheng
2019 J jnl
J. Biomed. Informatics
Mohammad Amin Morid, Olivia R. Liu Sheng, Kensaku Kawamoto, Travis Ault, Josette Dorius, Samir E. AbdelRahman
2018 J jnl
ACM Trans. Manag. Inf. Syst.
Zhepeng (Lionel) Li, Xiao Fang, Olivia R. Liu Sheng
2017 J jnl
CoRR
Mohammad Amin Morid, Olivia R. Liu Sheng, Samir E. AbdelRahman
2017 conf
AMCIS
Mohammad Amin Morid, Olivia R. Liu Sheng, Samir E. AbdelRahman
2017 J jnl
CoRR
Mohammad Amin Morid, Olivia R. Liu Sheng, Samir E. AbdelRahman
2017 J jnl
Manag. Sci.
Zhepeng (Lionel) Li, Xiao Fang, Xue Bai, Olivia R. Liu Sheng
2017 J jnl
Data Inf. Manag.
Eric Zheng, Yong Tan, Paulo B. Góes, Ramnath K. Chellappa, D. J. Wu, Michael Shaw, Olivia R. Liu Sheng, Alok Gupta
2015 J jnl
CoRR
Zhepeng (Lionel) Li, Xiao Fang, Olivia R. Liu Sheng
2015 J jnl
CoRR
Zhepeng (Lionel) Li, Xiao Fang, Xue Bai, Olivia R. Liu Sheng
2015 J jnl
Inf. Syst. Res.
Gautam Pant, Olivia R. Liu Sheng
2013 J jnl
Oper. Res.
Xiao Fang, Olivia R. Liu Sheng, Paulo B. Góes
2012 J jnl
J. Manag. Inf. Syst.
Xiao Fang, Paul Jen-Hwa Hu, Michael Chau, Han-fen Hu, Zhuo Yang, Olivia R. Liu Sheng
2012 J jnl
Decis. Support Syst.
Zhongming Ma, Olivia R. Liu Sheng, Gautam Pant, Alicia Iriberri
2011 J jnl
Electron. Commer. Res. Appl.
Zhongming Ma, Gautam Pant, Olivia R. Liu Sheng
2010 J jnl
J. Comput. Inf. Syst.
Zhongming Ma, Gautam Pant, Olivia R. Liu Sheng
2010 J jnl
Commun. ACM
Lin Lin, Paul Jen-Hwa Hu, Olivia R. Liu Sheng, Johnny Jiung-Yee Lee
2010 C conf
ICIS
Han-fen Hu, Olivia R. Liu Sheng
2009 C conf
ICIS
Zhongming Ma, Gautam Pant, Olivia R. Liu Sheng
2009 C conf
ICIS
Gautam Pant, Olivia R. Liu Sheng
2009 conf
AMCIS
Hsunchun Chen, Olivia R. Liu Sheng, Ahmad Ezzat, Suresh Katta, Mohammad A. Ketabchi, Manoochehr Ghiassi
2009 conf
AMCIS
Zhongming Ma, Olivia R. Liu Sheng, Gautam Pant, Alicia Iriberri
2009 J jnl
Decis. Support Syst.
Zhongming Ma, Olivia R. Liu Sheng, Gautam Pant
2008 J jnl
INFORMS J. Comput.
Namsik Chang, Olivia R. Liu Sheng
2007 J jnl
ACM Trans. Inf. Syst.
Zhongming Ma, Gautam Pant, Olivia R. Liu Sheng
2007 J jnl
J. Manag. Inf. Syst.
Jie Jennifer Zhang, Xiao Fang, Olivia R. Liu Sheng
2007 J jnl
ACM Trans. Inf. Syst.
Xiao Fang, Olivia R. Liu Sheng, Michael Chau
2007 J jnl
Commun. ACM
Michael Chau, Xiao Fang, Olivia R. Liu Sheng
2006 J jnl
INFORMS J. Comput.
Xiao Fang, Olivia R. Liu Sheng, Wei Gao, Balakrishna R. Iyer
2006 J jnl
Decis. Support Syst.
Lin Lin, Paul Jen-Hwa Hu, Olivia R. Liu Sheng
2006 J jnl
Decis. Support Syst.
Paul Jen-Hwa Hu, Chih-Ping Wei, Olivia R. Liu Sheng
2006 J jnl
Inf. Syst. Res.
Sherry X. Sun, J. Leon Zhao, Jay F. Nunamaker Jr., Olivia R. Liu Sheng
2006 C conf
ICIS
Xiao Fang, Michael Chau, Paul Jen-Hwa Hu, Zhuo Yang, Olivia R. Liu Sheng
2005 J jnl
Ind. Manag. Data Syst.
Fengyi Lin, Olivia R. Liu Sheng, Soushan Wu
2005 J jnl
J. Assoc. Inf. Sci. Technol.
Michael Chau, Xiao Fang, Olivia R. Liu Sheng
2005 conf
DG.O
Xiao Fang, Olivia R. Liu Sheng
2005 J jnl
IEEE Trans. Syst. Man Cybern. Part A
Chih-Ping Wei, Paul Jen-Hwa Hu, Olivia R. Liu Sheng, Yen-Hsien Lee
2004 conf
PACIS
Zhongming Ma, Olivia R. Liu Sheng
2004 conf
AMCIS
Sherry X. Sun, J. Leon Zhao, Olivia R. Liu Sheng
2004 J jnl
ACM Trans. Internet Techn.
Xiao Fang, Olivia R. Liu Sheng
2002 J jnl
J. Organ. Comput. Electron. Commer.
Paul Jen-Hwa Hu, Patrick Y. K. Chau, Olivia R. Liu Sheng
2002 J jnl
Electron. Commer. Res.
Chih-Ping Wei, Olivia R. Liu Sheng, Paul Jen-Hwa Hu
2001 J jnl
IEEE Trans. Inf. Technol. Biomed.
Chih-Ping Wei, Paul Jen-Hwa Hu, Olivia R. Liu Sheng
2000 J jnl
Decis. Support Syst.
Olivia R. Liu Sheng, Chih-Ping Wei, Paul Jen-Hwa Hu, Namsik Chang
2000 J jnl
Decis. Support Syst.
Olivia R. Liu Sheng
2000 conf
HICSS
Chih-Ping Wei, Paul Jen-Hwa Hu, Olivia R. Liu Sheng, Yen-Hsien Lee
2000 conf
HICSS
Paul Jen-Hwa Hu, Patrick Y. K. Chau, Olivia R. Liu Sheng
2000 J jnl
J. Organ. Comput. Electron. Commer.
Bongsik Shin, Omar A. El Sawy, Olivia R. Liu Sheng, Kunihiko Higa
2000 J jnl
IEEE Trans. Engineering Management
Kunihiko Higa, Olivia R. Liu Sheng, Bongsik Shin, Aurelio Jose Figueredo
1999 J jnl
IEEE Trans. Syst. Man Cybern. Part C
Bongsik Shin, Kunihiko Higa, Olivia R. Liu Sheng, Toshihiro Ide
1999 J jnl
J. Manag. Inf. Syst.
Paul Jen-Hwa Hu, Patrick Y. K. Chau, Olivia R. Liu Sheng, Kar Yan Tam
1999 conf
HICSS
Paul Jen-Hwa Hu, Olivia R. Liu Sheng, Patrick Y. K. Chau, Kar Yan Tam, Heidi Fung
1998 conf
HICSS (4)
Bongsik Shin, Olivia R. Liu Sheng, Kunihiko Higa, Aurelio Jose Figueredo
1998 J jnl
J. Organ. Comput. Electron. Commer.
Olivia R. Liu Sheng, Paul Jen-Hwa Hu, Chih-Ping Wei, Kunihiko Higa, Grace Au
1998 J jnl
IEEE Intell. Syst.
Olivia R. Liu Sheng, Chih-Ping Wei, Paul Jen-Hwa Hu
1997 conf
HICSS (4)
Bongsik Shin, Kunihiko Higa, Olivia R. Liu Sheng
1997 conf
HICSS (4)
Kunihiko Higa, Olivia R. Liu Sheng, Paul Jen-Hwa Hu, Grace Au
1995 J jnl
Adv. Comput.
Chandra S. Amaravadi, Joey F. George, Olivia R. Liu Sheng, Jay F. Nunamaker Jr.
1994 B conf
CBMS
Yasser H. Alsafadi, Olivia R. Liu Sheng, Ralph Martinez
1994 J jnl
Int. J. Softw. Eng. Knowl. Eng.
Kunihiko Higa, Milam W. Aiken, Olivia R. Liu Sheng
1994 J jnl
Intell. Tutoring Media
Akihiro Toshimitsu, Olivia R. Liu Sheng, Paul Jen-Hwa Hu
1993 J jnl
IEEE Trans. Knowl. Data Eng.
P. Bruce Berra, Forouzan Golshani, Rajiv Mehrotra, Olivia R. Liu Sheng
1993 conf
PACIS
Hong-Mei Chen Garcia, Olivia R. Liu Sheng
1992 J jnl
Comput. Oper. Res.
Heeseok Lee, Olivia R. Liu Sheng
1992 J jnl
J. Manag. Inf. Syst.
Chandra S. Amaravadi, Olivia R. Liu Sheng, Joey F. George, Jay F. Nunamaker Jr.
1992 A conf
ER
Hong-Mei Chen Garcia, Olivia R. Liu Sheng
1992 J jnl
Commun. ACM
Kunihiko Higa, Mike Morrison, Joline Morrison, Olivia R. Liu Sheng
1992 J jnl
Inf. Manag.
Joline Morrison, Olivia R. Liu Sheng
1992 J jnl
Ann. Oper. Res.
Olivia R. Liu Sheng, Heeseok Lee
1992 J jnl
J. Syst. Softw.
Mike Morrison, Joline Morrison, Olivia R. Liu Sheng, Kunihiko Higa
1992 J jnl
Decis. Support Syst.
Olivia R. Liu Sheng, Chandra S. Amaravadi, Milam W. Aiken, Jay F. Nunamaker Jr.
1992 A* conf
ICDE
Olivia R. Liu Sheng, Chih-Ping Wei
1992 J jnl
Comput. Oper. Res.
Olivia R. Liu Sheng
1991 J jnl
Inf. Manag.
Milam W. Aiken, Olivia R. Liu Sheng
1991 J jnl
ACM Trans. Inf. Syst.
Milam W. Aiken, Olivia R. Liu Sheng, Douglas R. Vogel
1990 J jnl
J. Manag. Inf. Syst.
Olivia R. Liu Sheng, Luvai F. Motiwalla, Jay F. Nunamaker Jr., Douglas R. Vogel
1990 J jnl
Commun. ACM
Bezalel Gavish, Olivia R. Liu Sheng
1989 J jnl
Data Base
Kunihiko Higa, Olivia R. Liu Sheng
1989 B conf
COMPSAC
Kunihiko Higa, Olivia R. Liu Sheng
1988 J jnl
Perform. Evaluation
Ushio Sumita, Olivia R. Liu Sheng
1986 C conf
ICIS
Olivia R. Liu Sheng
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"