Weibo Liu

63 papers Journal 58Unranked 4
YearRankTypeTitle / Venue / Authors
2026 J jnl
Neurocomputing
Yaping He, Hao Wu, Weibo Liu, Xin Luo
2026 J jnl
IEEE Internet Things J.
Rukai Lan, Yong Zhang, Zidong Wang, Weibo Liu, Rui Yang
2026 J jnl
IEEE Trans. Ind. Informatics
Yimeng He, Zidong Wang, Weibo Liu, Jingzhong Fang, Linwei Chen, Zhihuan Song
2026 J jnl
IEEE Trans. Ind. Informatics
Jingzhong Fang, Zidong Wang, Weibo Liu, Nianyin Zeng, Yimeng He, Yu Cao, Linwei Chen, Xiaohui Liu
2026 J jnl
Int. J. Mach. Learn. Cybern.
Chenlong Mao, Chuanbo Wen, Zidong Wang, Weibo Liu, Junjie Yang
2025 J jnl
Cogn. Comput.
Yiming Wang, Zidong Wang, Weibo Liu, Nianyin Zeng, Stanislao Lauria, Camilo Prieto, Fredrik Sikström, Hui Yu, Xiaohui Liu
2025 J jnl
Cogn. Comput.
Syed Hassan Fatimi, Zidong Wang, Isaac T. H. Chang, Weibo Liu, Xiaohui Liu
2025 J jnl
IEEE Trans. Ind. Informatics
Guijun Ma, Zidong Wang, Zeyuan Yang, Ruijuan Chen, Weibo Liu, Yong Zhang, Sijie Yan
2025 J jnl
Knowl. Based Syst.
Chuang Wang, Zidong Wang, Qingqiang Liu, Hongli Dong, Weibo Liu, Xiaohui Liu
2025 J jnl
Knowl. Based Syst.
Chuanbo Wen, Jiehao Zhang, Zidong Wang, Weibo Liu, Junjie Yang
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Guijun Ma, Zidong Wang, Weibo Liu, Zeyuan Yang, Desheng Huang, Han Ding
2025 J jnl
Knowl. Based Syst.
Baoye Song, Shihao Zhao, Zidong Wang, Weibo Liu, Xiaohui Liu
2025 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Chuang Wang, Zidong Wang, Hongli Dong, Stanislao Lauria, Weibo Liu, Yiming Wang, Futra Fadzil, Xiaohui Liu
2025 J jnl
Complex Intell. Syst.
Baoye Song, Shihao Zhao, Zidong Wang, Jianyu Chen, Weibo Liu, Xiaohui Liu
2025 J jnl
Neurocomputing
Tongxue Zhou, Zheng Wang, Xiaohui Liu, Weibo Liu, Shan Zhu
2025 J jnl
Neurocomputing
Baoye Song, Jianyu Chen, Weibo Liu, Jingzhong Fang, Yani Xue, Xiaohui Liu
2024 J jnl
IEEE Trans Autom. Sci. Eng.
Jingzhong Fang, Zidong Wang, Weibo Liu, Stanislao Lauria, Nianyin Zeng, Camilo Prieto, Fredrik Sikström, Xiaohui Liu
2024 J jnl
Cogn. Comput.
Xianbin Wu, Chuanbo Wen, Zidong Wang, Weibo Liu, Junjie Yang
2024 J jnl
IEEE Trans. Artif. Intell.
Yihao Xue, Rui Yang, Xiaohan Chen, Weibo Liu, Zidong Wang, Xiaohui Liu
2024 J jnl
Eng. Appl. Artif. Intell.
Jingzhong Fang, Zidong Wang, Weibo Liu, Linwei Chen, Xiaohui Liu
2024 J jnl
Knowl. Based Syst.
Yipeng Xue, Chuanbo Wen, Zidong Wang, Weibo Liu, Guochu Chen
2024 J jnl
Complex Intell. Syst.
Chuanbo Wen, Xianbin Wu, Zidong Wang, Weibo Liu, Junjie Yang
2024 J jnl
Knowl. Based Syst.
Min Zhao, Zidong Wang, Jin Wan, Guoping Lu, Weibo Liu
2024 J jnl
Neurocomputing
Baoye Song, Yiyan Liu, Jingzhong Fang, Weibo Liu, Maiying Zhong, Xiaohui Liu
2024 J jnl
Neurocomputing
Chuanbo Wen, Yipeng Xue, Weibo Liu, Guochu Chen, Xiaohui Liu
2024 J jnl
IEEE Trans. Instrum. Meas.
Yong Zhang, Rukai Lan, Xianhe Li, Jingzhong Fang, Zuowei Ping, Weibo Liu, Zidong Wang
2023 J jnl
IEEE Trans. Instrum. Meas.
Chuang Wang, Zidong Wang, Weibo Liu, Yuxuan Shen, Hongli Dong
2023 J jnl
J. Ambient Intell. Humaniz. Comput.
Mengmeng Sheng, Zidong Wang, Weibo Liu, Xi Wang, Shengyong Chen, Xiaohui Liu
2023 J jnl
Knowl. Based Syst.
Guijun Ma, Zidong Wang, Weibo Liu, Jingzhong Fang, Yong Zhang, Han Ding, Ye Yuan
2023 J jnl
Int. J. Mach. Learn. Cybern.
Jieyu Zhang, Zidong Wang, Weibo Liu, Xiaohui Liu, Qiusheng Zheng
2023 J jnl
Neurocomputing
Minzhi Chen, Guijun Ma, Weibo Liu, Nianyin Zeng, Xin Luo
2023 J jnl
IEEE CAA J. Autom. Sinica
Guijun Ma, Zidong Wang, Weibo Liu, Jingzhong Fang, Yong Zhang, Han Ding, Ye Yuan
2023 J jnl
Neurocomputing
Ziqi Liu, Rui Yang, Weibo Liu, Xiaohui Liu
2022 J jnl
IEEE Trans. Cybern.
Nianyin Zeng, Zidong Wang, Weibo Liu, Hong Zhang, Kate Hone, Xiaohui Liu
2022 J jnl
IEEE Trans. Instrum. Meas.
Nianyin Zeng, Peishu Wu, Zidong Wang, Han Li, Weibo Liu, Xiaohui Liu
2022 J jnl
Neurocomputing
Mengmeng Sheng, Shengyong Chen, Weibo Liu, Jiafa Mao, Xiaohui Liu
2022 J jnl
Knowl. Based Syst.
Mengmeng Sheng, Zidong Wang, Weibo Liu, Xi Wang, Shengyong Chen, Xiaohui Liu
2022 J jnl
Complex Intell. Syst.
Lulu Tian, Zidong Wang, Weibo Liu, Yuhua Cheng, Fuad E. Alsaadi, Xiaohui Liu
2022 J jnl
Neurocomputing
Zitong Wan, Rui Yang, Mengjie Huang, Weibo Liu, Nianyin Zeng
2022 J jnl
Int. J. Mach. Learn. Cybern.
Lulu Tian, Zidong Wang, Weibo Liu, Yuhua Cheng, Fuad E. Alsaadi, Xiaohui Liu
2022 J jnl
Neurocomputing
Yuanchen Wang, Weibo Liu, Xiaohui Liu
2022 J jnl
Neurocomputing
Jieyu Zhang, Miqing Li, Weibo Liu, Stanislao Lauria, Xiaohui Liu
2021 J jnl
Cogn. Comput.
Lulu Tian, Zidong Wang, Weibo Liu, Yuhua Cheng, Fuad E. Alsaadi, Xiaohui Liu
2021 J jnl
IEEE Trans. Cybern.
Weibo Liu, Zidong Wang, Yuan Yuan, Nianyin Zeng, Kate Hone, Xiaohui Liu
2021 J jnl
Int. J. Mach. Learn. Cybern.
Weibo Liu, Zidong Wang, Nianyin Zeng, Fuad E. Alsaadi, Xiaohui Liu
2021 J jnl
Int. J. Mach. Learn. Cybern.
Weibo Liu, Zidong Wang, Nianyin Zeng, Yuan Yuan, Fuad E. Alsaadi, Xiaohui Liu
2021 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Izaz Ur Rahman, Zidong Wang, Weibo Liu, Baoliu Ye, Muhammad Zakarya, Xiaohui Liu
2021 J jnl
Neurocomputing
Wenbin Yue, Zidong Wang, Weibo Liu, Bo Tian, Stanislao Lauria, Xiaohui Liu
2021 J jnl
Neurocomputing
Nianyin Zeng, Han Li, Zidong Wang, Weibo Liu, Songming Liu, Fuad E. Alsaadi, Xiaohui Liu
2021 J jnl
Comput. Electr. Eng.
Weibo Liu, Zidong Wang, Lulu Tian, Stanislao Lauria, Xiaohui Liu
2020
Weibo Liu
2019 conf
ICCA
Weibo Liu, Zidong Wang, Liang Hu, Xiaohui Liu
2019 J jnl
IEEE Trans. Evol. Comput.
Weibo Liu, Zidong Wang, Xiaohui Liu, Nianyin Zeng, David Bell
2019 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Yurong Liu, Zidong Wang, Yuan Yuan, Weibo Liu
2018 J jnl
Neurocomputing
Nianyin Zeng, Hong Qiu, Zidong Wang, Weibo Liu, Hong Zhang, Yurong Li
2018 J jnl
Neurocomputing
Nianyin Zeng, Hong Zhang, Baoye Song, Weibo Liu, Yurong Li, Abdullah M. Dobaie
2017 conf
ICAC
Weibo Liu, Zidong Wang, Xiaohui Liu, Wenbin Yue, David Bell
2017 J jnl
Neurocomputing
Weibo Liu, Zidong Wang, Xiaohui Liu, Nianyin Zeng, Yurong Liu, Fuad E. Alsaadi
2017 J jnl
Neurocomputing
Nianyin Zeng, Hong Zhang, Weibo Liu, Jinling Liang, Fuad E. Alsaadi
2016 J jnl
Cogn. Comput.
Nianyin Zeng, Zidong Wang, Hong Zhang, Weibo Liu, Fuad E. Alsaadi
2016 conf
ICAC
Qinyuan Liu, Zidong Wang, Weibo Liu, Wenshuo Li
2016 J jnl
Neurocomputing
Yurong Liu, Weibo Liu, Mustafa Ali Obaid, Ibrahim Atiatallah Abbas
2015 conf
VTC Spring
Weibo Liu
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"