Kaiheng Zou

32 papers Journal 1Unranked 31
YearRankTypeTitle / Venue / Authors
2023 conf
OFC
Huibin Zhou, Hao Song, Xinzhou Su, Yuxiang Duan, Kaiheng Zou, Runzhou Zhang, Moshe Tur, Alan E. Willner
2023 conf
OFC
Hao Song, Huibin Zhou, Yuxiang Duan, Zile Jiang, Muralekrishnan Ramakrishnan, Wing Ko, Yingning Wang, Xinzhou Su, Kaiheng Zou, Abdulrahman Alhaddad, Ruoyu Zeng, Robert Bock, Moshe Tur, Alan E. Willner
2023 conf
OFC
Amir Minoofar, Hao Song, Ahmed Almaiman, Narek Karapetyan, Wing Ko, Kaiheng Zou, Huibin Zhou, Muralekrishnan Ramakrishnan, Murali Annavaram, Jonathan L. Habif, Moshe Tur, Alan E. Willner
2022 conf
OFC
Hao Song, Runzhou Zhang, Huibin Zhou, Xinzhou Su, Kaiheng Zou, Yuxiang Duan, Haoqian Song, Kai Pang, Nanzhe Hu, Narek Karapetyan, Amir Minoofar, Moshe Tur, Alan E. Willner
2022 conf
OFC
Haoqian Song, Runzhou Zhang, Huibin Zhou, Kaiheng Zou, Nanzhe Hu, Xinzhou Su, Hao Song, Kai Pang, Yuxiang Duan, Daeyoung Park, Brittany Lynn, Greg Gbur, Aristide Dogariu, Richard J. Watkins, Jerome K. Miller, Eric Johnson, Moshe Tur, Alan E. Willner
2022 conf
OFC
Xinzhou Su, Yuxiang Duan, Huibin Zhou, Hao Song, Kai Pang, Cong Liu, Kaiheng Zou, Runzhou Zhang, Haoqian Song, Nanzhe Hu, Moshe Tur, Alan E. Willner
2022 conf
OFC
Xinzhou Su, Hao Song, Huibin Zhou, Kaiheng Zou, Yuxiang Duan, Narek Karapetyan, Runzhou Zhang, Amir Minoofar, Haoqian Song, Kai Pang, Shlomo Zach, Andreas F. Molisch, Moshe Tur, Alan E. Willner
2021 conf
OFC
Haoqian Song, Runzhou Zhang, Nanzhe Hu, Huibin Zhou, Xinzhou Su, Kaiheng Zou, Kai Pang, Hao Song, Cong Liu, Brittany Lynn, Daeyoung Park, Moshe Tur, Alan E. Willner
2021 conf
OFC
Xinzhou Su, Huibin Zhou, Kaiheng Zou, Amir Minoofar, Hao Song, Runzhou Zhang, Kai Pang, Haoqian Song, Nanzhe Hu, Zhe Zhao, Ahmed Almaiman, Shlomo Zach, Moshe Tur, Andreas F. Molisch, Hirofumi Sasaki, Doohwan Lee, Alan E. Willner
2021 conf
OFC
Kaiheng Zou, Kai Pang, Hao Song, Jintao Fan, Zhe Zhao, Haoqian Song, Runzhou Zhang, Huibin Zhou, Amir Minoofar, Cong Liu, Xinzhou Su, Nanzhe Hu, Andrew McClung, Mahsa Torfeh, Amir Arbabi, Moshe Tur, Alan E. Willner
2021 conf
OFC
Hao Song, Huibin Zhou, Kaiheng Zou, Runzhou Zhang, Kai Pang, Haoqian Song, Xinzhou Su, Amir Minoofar, Nanzhe Hu, Cong Liu, Robert Bock, Brittany Lynn, Shlomo Zach, Moshe Tur, Alan E. Willner
2021 conf
ECOC
Amir Minoofar, Xinzhou Su, Huibin Zhou, Fatemeh Alishahi, Kai Pang, Kaiheng Zou, Runzhou Zhang, Shlomo Zach, Moshe Tur, Andreas F. Molisch, Hirofumi Sasaki, Doohwan Lee, Alan E. Willner
2021 conf
OFC
Fatemeh Alishahi, Amir Minoofar, Ahmad Fallahpour, Kaiheng Zou, Huibin Zhou, Jonathan L. Habif, Moshe Tur, Alan E. Willner
2021 conf
OFC
Nanzhe Hu, Huibin Zhou, Runzhou Zhang, Haoqian Song, Kai Pang, Kaiheng Zou, Hao Song, Xinzhou Su, Cong Liu, Brittany Lynn, Moshe Tur, Alan E. Willner
2021 conf
ECOC
Huibin Zhou, Nanzhe Hu, Xinzhou Su, Runzhou Zhang, Haoqian Song, Hao Song, Kai Pang, Kaiheng Zou, Amir Minoofar, Brittany Lynn, Moshe Tur, Alan E. Willner
2021 conf
ICC Workshops
Xinzhou Su, Nanzhe Hu, Amir Minoofar, Hao Song, Huibin Zhou, Zhe Zhao, Runzhou Zhang, Kai Pang, Cong Liu, Kaiheng Zou, Haoqian Song, Brittany Lynn, Shlomo Zach, Moshe Tur, Andreas F. Molisch, Hirofumi Sasaki, Doohwan Lee, Alan E. Willner
2020 conf
OFC
A. Fallahpour, Fatemeh Alishahi, Amir Minoofar, Kaiheng Zou, Ahmed Almaiman, P. Liao, Huibin Zhou, Moshe Tur, Alan E. Willner
2020 conf
ECOC
Huibin Zhou, Hao Song, Runzhou Zhang, Nanzhe Hu, Kaiheng Zou, Haoqian Song, Kai Pang, Xinzhou Su, Cong Liu, Amir Minoofar, Brittany Lynn, Daeyoung Park, Moshe Tur, Alan E. Willner
2020 conf
OFC
Kaiheng Zou, Peicheng Liao, Huibin Zhou, Ahmad Fallahpour, Amir Minoofar, Ahmed Almaiman, Fatemeh Alishahi, Moshe Tur, Alan E. Willner
2020 conf
GLOBECOM (Workshops)
Xinzhou Su, Runzhou Zhang, Zhe Zhao, Hao Song, Amir Minoofar, Nanzhe Hu, Huibin Zhou, Kaiheng Zou, Kai Pang, Haoqian Song, Brittany Lynn, Shlomo Zach, Nadav Cohen, Moshe Tur, Andreas F. Molisch, Hirofumi Sasaki, Doohwan Lee, Alan E. Willner
2020 conf
OFC
Kai Pang, Haoqian Song, Xinzhou Su, Kaiheng Zou, Zhe Zhao, Hao Song, Ahmed Almaiman, Runzhou Zhang, Cong Liu, Nanzhe Hu, Shlomo Zach, Nadav Cohen, Brittany Lynn, Andreas F. Molisch, Robert W. Boyd, Moshe Tur, Alan E. Willner
2020 conf
OFC
Huibin Zhou, Kaiheng Zou, P. Liao, Ahmed Almaiman, Fatemeh Alishahi, Ahmad Fallahpour, Amir Minoofar, Moshe Tur, Alan E. Willner
2019 conf
OFC
Haoqian Song, Long Li, Kai Pang, Runzhou Zhang, Kaiheng Zou, Zhe Zhao, Jing Du, Hao Song, Cong Liu, Yinwen Cao, Ari N. Willner, Robert Bock, Brittany Lynn, Moshe Tur, Alan E. Willner
2019 conf
OFC
Yinwen Cao, Kaiheng Zou, Huibin Zhou, Ahmed Almaiman, Peicheng Liao, Fatemeh Alishahi, Ahmad Fallahpour, Karapet Manukyan, Alan E. Willner
2019 conf
OFC
Ahmad Fallahpour, Fatemeh Alishahi, Kaiheng Zou, Yinwen Cao, Ahmed Almaiman, Arne Kordts, Maxim Karpov, Martin H. Pfeiffer, Karapet Manukyan, Huibin Zhou, Peicheng Liao, Moshe Tur, Tobias J. Kippenberg, Alan E. Willner
2019 conf
OFC
Fatemeh Alishahi, Ahmad Fallahpour, Kaiheng Zou, Yinwen Cao, Arne Kordts, Maxim Karpov, Martin H. Pfeiffer, Peicheng Liao, Ahmed Almaiman, Huibin Zhou, Karapet Manukyan, Tobias J. Kippenberg, Alan E. Willner
2019 conf
OFC
Kaiheng Zou, Zhewei Zhang, Peicheng Liao, Huolei Wang, Yinwen Cao, Ahmed Almaiman, Ahmad Fallahpour, Naresh Satyan, George Rakuljic, Moshe Tur, Amnon Yariv, Alan E. Willner
2018 J jnl
Sci. China Inf. Sci.
Zhongwei Tan, Chuanchuan Yang, Yixiao Zhu, Zhaopeng Xu, Kaiheng Zou, Fan Zhang, Ziyu Wang
2018 conf
OFC
Peicheng Liao, Changjing Bao, Ahmed Almaiman, Arne Kordts, Maxim Karpov, Martin Hubert Peter Pfeiffer, Lin Zhang, Fatemeh Alishahi, Kaiheng Zou, Yinwen Cao, Amirhossein Mohajerin Ariaei, Ahmad Fallahpour, Moshe Tur, Youichi Akasaka, Tobias J. Kippenberg, Alan E. Willner
2018 conf
OFC
Long Li, Runzhou Zhang, Peicheng Liao, Hao Song, Kaiheng Zou, Guodong Xie, Zhe Zhao, Cong Liu, Haoqian Song, Kai Pang, Guillaume Labroille, Pu Jian, Dmitry Starodubov, Brittany Lynn, Robert Bock, Moshe Tur, Alan E. Willner
2017 conf
OFC
Yixiao Zhu, Xiaoke Ruan, Zeyu Chen, Mingxuan Jiang, Kaiheng Zou, Chenjia Li, Fan Zhang
2015 conf
ECOC
Xin Lv, Dan Wang, Yixiao Zhu, Kaiheng Zou, Zhennan Zheng, Fan Zhang, Lixin Zhu, Zhangyuan Chen
redb/extractors/elf_extractors/elf_exports.py
← Index redb/extractors/elf_extractors/elf_exports.py python
import inspect
from datetime import datetime, timezone
from typing import Any, List, Set

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 ELFExport


class ELFExportExtractor(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_exports = None
        self.elastic_index = self.index_prefix + "-elf_exports"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _get_exported_functions_from_symbols(self, elf) -> Set[str]:
        """Extract exported functions from symbol tables."""
        exported_functions = set()

        try:
            # Check both static (.symtab) and dynamic (.dynsym) symbol tables
            symbol_sections = ['.symtab', '.dynsym']

            for section_name in symbol_sections:
                section = elf.get_section_by_name(section_name)
                if not section or not hasattr(section, 'iter_symbols'):
                    continue

                for symbol in section.iter_symbols():
                    # Check if symbol is exported (defined and globally visible)
                    if (symbol.name and
                        symbol.entry.get('st_shndx', 0) != 'SHN_UNDEF' and  # Not undefined
                        symbol.entry.get('st_info', {}).get('bind') in ['STB_GLOBAL', 'STB_WEAK'] and  # Global or weak binding
                        symbol.entry.get('st_info', {}).get('type') in ['STT_FUNC', 'STT_OBJECT']):  # Function or object

                        # Additional checks for meaningful exports
                        if (symbol.entry.get('st_value', 0) > 0 or  # Has a value
                            symbol.entry.get('st_size', 0) > 0):    # Has a size
                            exported_functions.add(symbol.name)

        except Exception as e:
            self.log.error(f"Error extracting exported functions from symbols: {e}")

        return exported_functions

    def _get_exported_functions_from_dynamic_section(self, elf) -> Set[str]:
        """Extract exported functions information from dynamic section."""
        exported_functions = set()

        try:
            # Get the dynamic section
            dynamic_section = elf.get_section_by_name('.dynamic')
            if not dynamic_section:
                return exported_functions

            # Look for version definition sections that might indicate exports
            # This is complementary to symbol table analysis
            for tag in dynamic_section.iter_tags():
                if tag.entry.d_tag == 'DT_SONAME':
                    # If it has a SONAME, it's likely a shared library with exports
                    # The actual exports are still found in symbol tables
                    pass

        except Exception as e:
            self.log.error(f"Error extracting exports from dynamic section: {e}")

        return exported_functions

    def _filter_meaningful_exports(self, exports: Set[str]) -> Set[str]:
        """Filter out compiler-generated and internal symbols to focus on meaningful exports."""
        filtered_exports = set()

        # Common patterns to exclude (compiler-generated, internal symbols)
        exclude_patterns = [
            '_start',
            '_init',
            '_fini',
            '__libc_',
            '__gmon_start__',
            '_IO_stdin_used',
            '__data_start',
            '__bss_start',
            '_edata',
            '_end',
            '__TMC_END__',
            '_ITM_deregisterTMCloneTable',
            '_ITM_registerTMCloneTable',
            '__cxa_finalize',
            '__gxx_personality_v0',
            '_Jv_RegisterClasses'
        ]

        for export in exports:
            # Skip empty or very short names
            if not export or len(export) < 2:
                continue

            # Skip symbols that match exclude patterns
            skip = False
            for pattern in exclude_patterns:
                if export.startswith(pattern):
                    skip = True
                    break

            # Skip symbols that look like internal mangled names (but keep reasonable C++ names)
            if export.startswith('_Z') and len(export) > 50:  # Very long mangled names
                skip = True

            if not skip:
                filtered_exports.add(export)

        return filtered_exports

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

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

            def extract_data(elf):
                # Extract exported functions from multiple sources
                exported_functions = set()

                # From symbol tables (primary source)
                symbol_exports = self._get_exported_functions_from_symbols(elf)
                exported_functions.update(symbol_exports)

                # From dynamic section (supplementary)
                dynamic_exports = self._get_exported_functions_from_dynamic_section(elf)
                exported_functions.update(dynamic_exports)

                # Filter out compiler-generated and internal symbols
                meaningful_exports = self._filter_meaningful_exports(exported_functions)

                # Convert to sorted list for consistent output
                export_functions_list = sorted(list(meaningful_exports))

                # Return ELFExport dataclass
                return ELFExport(
                    elf_exports_total=len(export_functions_list),
                    elf_export_functions=export_functions_list,
                )

            if not self._is_elf_file():
                return None

            result = self._with_elf_file(extract_data)
            if result is None:
                return None

            self.elf_exports = result
            return self.elf_exports

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

                # Prepare data array
                data = [[
                    self.sha256,
                    self.md5,
                    self.sha1,
                    self.elf_exports.elf_exports_total,
                    self.elf_exports.elf_export_functions,
                    datetime.now(timezone.utc)
                ]]

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'elf_exports_total',
                    'elf_export_functions',
                    'analysis_date'
                ]

                if not data:
                    return None

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

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