Hai Wang

97 papers Journal 97
YearRankTypeTitle / Venue / Authors
2026 J jnl
Eng. Appl. Artif. Intell.
Zhouyu Zhang, Chenyuan He, Yingfeng Cai, Long Chen, Hai Wang, Can Zhong, Yiqun Zhang
2026 J jnl
IEEE Internet Things J.
Wei Dong, Sikai Lu, Xinhe Chen, Shunyao Zhang, Qingchao Liu, Ze Liu, Long Chen, Hai Wang, Yingfeng Cai
2026 J jnl
Knowl. Based Syst.
Rongrong Ni, Yuanhui Guo, Biao Yang, Yi Liu, Hai Wang, Chuan Hu
2026 J jnl
Telecommun. Syst.
Chenyuan He, Zhouyu Zhang, Yingfeng Cai, Hai Wang, Long Chen, Peng Jing, Fenghua Huang
2026 J jnl
IEEE Trans. Intell. Transp. Syst.
Sikai Lu, Yingfeng Cai, Hai Wang, Ze Liu, Qingchao Liu, Xiaoqiang Sun
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Sikai Lu, Hai Wang, Long Chen, Yingfeng Cai
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Sikai Lu, Yingfeng Cai, Ze Liu, Yubo Lian, Long Chen, Hai Wang
2025 J jnl
IEEE Internet Things J.
Yicheng Li, Yunqi Xia, Yingfeng Cai, Hai Wang, Long Chen
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Yuxing Li, Yingfeng Cai, Xiaoqiang Sun, Hai Wang, Long Chen, Yubo Lian, Zhaozhi Dong
2025 J jnl
J. King Saud Univ. Comput. Inf. Sci.
Chenyuan He, He Yang, Zhouyu Zhang, Hai Wang, Yingfeng Cai, Long Chen, Can Zhong, Yiqun Zhang
2025 J jnl
IEEE Trans. Intell. Veh.
Yingfeng Cai, Wei Dong, Ze Liu, Hai Wang, Long Chen
2025 J jnl
IEEE Control. Syst. Lett.
Chenyuan He, Zhouyu Zhang, Yingfeng Cai, Hai Wang, Long Chen, Can Zhong
2025 J jnl
IEEE Trans. Emerg. Top. Comput. Intell.
Hai Wang, Guirong Zhang, Long Chen, Yicheng Li, Tong Luo, Yingfeng Cai
2025 J jnl
IEEE Trans. Instrum. Meas.
Mingchen Wang, Hai Wang, Yicheng Li, Long Chen, Yingfeng Cai, Zhen Shao
2025 J jnl
J. King Saud Univ. Comput. Inf. Sci.
Pengbo Ma, Chenyuan He, Zhouyu Zhang, Zhan Xv, Hai Wang, Yingfeng Cai, Long Chen, Can Zhong, Yiqun Zhang
2025 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Cheng Zhang, Hai Wang, Long Chen, Yicheng Li, Yingfeng Cai
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Yingfeng Cai, Ziheng Lu, Hai Wang, Yubo Lian, Long Chen, Qingchao Liu
2025 J jnl
IEEE Trans. Instrum. Meas.
Ziheng Lu, Yingfeng Cai, Hai Wang, Yubo Lian, Long Chen, Yilin Zhong, Xiaoqiang Sun
2025 J jnl
IEEE Trans. Emerg. Top. Comput. Intell.
Hai Wang, Shilin Zhu, Long Chen, Yicheng Li, Yingfeng Cai
2025 J jnl
IEEE Control. Syst. Lett.
Chenyuan He, Zhouyu Zhang, Yingfeng Cai, Hai Wang, Long Chen, Can Zhong
2025 J jnl
Veh. Commun.
Chenyuan He, Zhouyu Zhang, Yingfeng Cai, Hai Wang, Long Chen, Fenghua Huang
2025 J jnl
IEEE Trans. Consumer Electron.
Wenxin Zhang, Yingfeng Cai, Hai Wang, Xiaoqiang Sun, Xinglong Zhang
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Hai Wang, Qirui Qin, Long Chen, Yicheng Li, Yingfeng Cai
2025 J jnl
IEEE Trans. Veh. Technol.
Chenyuan He, Zhouyu Zhang, Yingfeng Cai, Hai Wang, Long Chen, Fenghua Huang
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Ziheng Lu, Yingfeng Cai, Xiaoqiang Sun, Hai Wang, Yubo Lian, Long Chen
2025 J jnl
IEEE Trans. Consumer Electron.
Qianqian Zhang, Hai Wang, Yingfeng Cai, Xiaoqiang Sun, Long Chen
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Qingchao Liu, Jiaqi Liu, Jingya Zhao, Yingfeng Cai, Hai Wang, Long Chen, Chen Lv
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Xiaobo Chen, Yuwen Liang, Chuan Hu, Hai Wang, Qiaolin Ye
2025 J jnl
IEEE Trans. Instrum. Meas.
Zheng Shao, Hai Wang, Yingfeng Cai, Long Chen, Yicheng Li
2025 J jnl
IEEE Internet Things J.
Yingfeng Cai, Xinhe Chen, Hai Wang, Xiaoqiang Sun, Long Chen, Xiaodong Zhang
2024 J jnl
IEEE Trans. Veh. Technol.
Xuanyu Shi, Hai Wang, Long Chen, Xiaoqiang Sun, Chao Yang, Yingfeng Cai
2024 J jnl
IEEE Trans. Intell. Veh.
Xiao-xia Xiong, Yu He, Yingfeng Cai, Qingchao Liu, Hai Wang, Long Chen
2024 J jnl
IEEE Trans. Intell. Transp. Syst.
Biao Yang, Fucheng Fan, Rongrong Ni, Hai Wang, Ammar Jafaripournimchahi, Hongyu Hu
2024 J jnl
IEEE Trans. Intell. Transp. Syst.
Hai Wang, Yaqing Niu, Long Chen, Yicheng Li, Miguel Ángel Sotelo, Zhixiong Li, Yingfeng Cai
2024 J jnl
IEEE Trans. Intell. Veh.
Zhongyu Rao, Yingfeng Cai, Hai Wang, Yubo Lian, Yilin Zhong, Long Chen, Yicheng Li
2024 J jnl
J. King Saud Univ. Comput. Inf. Sci.
Zhouyu Zhang, Chenyuan He, Hai Wang, Yingfeng Cai, Long Chen, Zhihua Gan, Fenghua Huang, Yiqun Zhang
2024 J jnl
Simul. Model. Pract. Theory
Xuanyu Shi, Hai Wang, Long Chen, Xiaoqiang Sun, Chao Yang, Yingfeng Cai
2024 J jnl
IEEE Trans. Veh. Technol.
Qingchao Liu, Chengzhi Gao, Hai Wang, Yingfeng Cai, Long Chen, Chen Lv
2024 J jnl
IEEE Trans. Veh. Technol.
Xiaobo Chen, Haoze Yu, Chuan Hu, Hai Wang
2024 J jnl
IEEE Trans. Instrum. Meas.
Le Tao, Hai Wang, Long Chen, Yicheng Li, Yingfeng Cai
2024 J jnl
IEEE Trans. Intell. Transp. Syst.
Hai Wang, Qirui Qin, Long Chen, Yicheng Li, Yingfeng Cai
2024 J jnl
IEEE Trans. Intell. Transp. Syst.
Biao Yang, Zhiwen Wei, Chuan Hu, Yingfeng Cai, Hai Wang, Hongyu Hu
2024 J jnl
IEEE Trans. Intell. Transp. Syst.
Zhouyu Zhang, Chenyuan He, Hongshen Chen, Yiqun Zhang, Hai Wang, Yingfeng Cai, Long Chen, Haitong Li, Tongwei Lu
2024 J jnl
IEEE Trans. Intell. Transp. Syst.
Cheng Zhang, Hai Wang, Yingfeng Cai, Long Chen, Yicheng Li
2024 J jnl
IEEE Trans. Instrum. Meas.
Hai Wang, Chenyu Liu, Yingfeng Cai, Long Chen, Yicheng Li
2023 J jnl
IEEE Access
Yingfeng Cai, Ruidong Zhao, Hai Wang, Long Chen, Yubo Lian, Yilin Zhong
2023 J jnl
IEEE Trans. Emerg. Top. Comput. Intell.
Hai Wang, Yansong Xu, Zining Wang, Yingfeng Cai, Long Chen, Yicheng Li
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Hai Wang, Le Tao, Yingfeng Cai, Long Chen, Yicheng Li, Miguel Ángel Sotelo, Zhixiong Li
2023 J jnl
Sensors
Hai Wang, Shilin Zhu, Long Chen, Yicheng Li, Tong Luo
2023 J jnl
IEEE Trans. Consumer Electron.
Chao Chen, Hu Lu, Haotian Hong, Hai Wang, Shaohua Wan
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Xiaobo Chen, Yuxiang Gao, Haoze Yu, Hai Wang, Yingfeng Cai
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Zhongyu Rao, Hai Wang, Long Chen, Yubo Lian, Yilin Zhong, Ze Liu, Yingfeng Cai
2023 J jnl
Sensors
Hai Wang, Yaqing Niu, Long Chen, Yicheng Li, Tong Luo
2023 J jnl
Sensors
Guirong Zhang, Yiming Peng, Hai Wang
2023 J jnl
IEEE Trans. Veh. Technol.
Xuanyu Shi, Hai Wang, Long Chen, Xiaoqiang Sun, Chao Yang, Yingfeng Cai
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Hai Wang, Meng Qiu, Yingfeng Cai, Long Chen, Yicheng Li
2023 J jnl
CoRR
Caizhen He, Hai Wang, Long Chen, Tong Luo, Yingfeng Cai
2023 J jnl
IEEE Trans. Veh. Technol.
Xiaobo Chen, Huanjia Zhang, Yu Hu, Jun Liang, Hai Wang
2023 J jnl
Sensors
Chenkai Tan, Yingfeng Cai, Hai Wang, Xiaoqiang Sun, Long Chen
2022 J jnl
IEEE Trans. Instrum. Meas.
Yingfeng Cai, Ziheng Lu, Hai Wang, Long Chen, Yicheng Li
2022 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Yingfeng Cai, Lei Dai, Hai Wang, Long Chen, Yicheng Li
2022 J jnl
Expert Syst. Appl.
Yicheng Li, Yingfeng Cai, Zhixiong Li, Shizhe Feng, Hai Wang, Miguel Ángel Sotelo
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Yingfeng Cai, Lei Dai, Hai Wang, Long Chen, Yicheng Li, Miguel Ángel Sotelo, Zhixiong Li
2022 J jnl
IEEE Trans. Veh. Technol.
Xinglong Zhang, Wenxin Zhang, Youqun Zhao, Hai Wang, Fen Lin, Yingfeng Cai
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Ze Liu, Yingfeng Cai, Hai Wang, Long Chen, Hongbo Gao, Yunyi Jia, Yicheng Li
2022 J jnl
IEEE Trans. Instrum. Meas.
Cheng Zhang, Hai Wang, Yingfeng Cai, Long Chen, Yicheng Li, Miguel Ángel Sotelo, Zhixiong Li
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Hai Wang, Yanyan Chen, Yingfeng Cai, Long Chen, Yicheng Li, Miguel Ángel Sotelo, Zhixiong Li
2022 J jnl
IEEE Trans. Instrum. Meas.
Hai Wang, Xin Yuan, Yingfeng Cai, Long Chen, Yicheng Li
2022 J jnl
IEEE Trans. Instrum. Meas.
Xiaobo Chen, Huanjia Zhang, Feng Zhao, Yingfeng Cai, Hai Wang, Qiaolin Ye
2022 J jnl
IEEE Trans. Instrum. Meas.
Hai Wang, Zhiyu Chen, Yingfeng Cai, Long Chen, Yicheng Li, Miguel Ángel Sotelo, Zhixiong Li
2022 J jnl
IEEE Trans. Instrum. Meas.
Hai Wang, Yansong Xu, Youguo He, Yingfeng Cai, Long Chen, Yicheng Li, Miguel Ángel Sotelo, Zhixiong Li
2021 J jnl
IEEE Access
Yingfeng Cai, Shaoqing Yang, Hai Wang, Chenglong Teng, Long Chen
2021 J jnl
Expert Syst. Appl.
Yicheng Li, Yingfeng Cai, Reza Malekian, Hai Wang, Miguel Ángel Sotelo, Zhixiong Li
2021 J jnl
IEEE Trans. Veh. Technol.
Yingfeng Cai, Zihao Wang, Hai Wang, Long Chen, Yicheng Li, Miguel Ángel Sotelo, Zhixiong Li
2021 J jnl
IEEE Trans. Image Process.
Yingfeng Cai, Lei Dai, Hai Wang, Zhixiong Li
2021 J jnl
IEEE Trans. Intell. Veh.
Hai Wang, Yijie Yu, Yingfeng Cai, Xiaobo Chen, Long Chen, Yicheng Li
2021 J jnl
IEEE Trans. Instrum. Meas.
Yingfeng Cai, Tianyu Luan, Hongbo Gao, Hai Wang, Long Chen, Yicheng Li, Miguel Ángel Sotelo, Zhixiong Li
2020 J jnl
IEEE Trans. Image Process.
Yingfeng Cai, Lei Dai, Hai Wang, Long Chen, Yicheng Li
2020 J jnl
Multim. Tools Appl.
Jinmeng Cao, Biao Yang, Nan Wang, Hai Wang, Yingfeng Cai
2019 J jnl
IEEE Intell. Transp. Syst. Mag.
Hai Wang, Yijie Yu, Yingfeng Cai, Xiaobo Chen, Long Chen, Qingchao Liu
2019 J jnl
J. Sensors
Hai Wang, Xinyu Lou, Yingfeng Cai, Yicheng Li, Long Chen
2018 J jnl
Sci. Program.
Hai Wang, Xinyu Lou, Yingfeng Cai, Long Chen
2018 J jnl
Sensors
Hai Wang, Yijie Yu, Yingfeng Cai, Long Chen, Xiaobo Chen
2018 J jnl
Sensors
Xiaobo Chen, Cheng Chen, Yingfeng Cai, Hai Wang, Qiaolin Ye
2018 J jnl
J. Sensors
Hai Wang, Lei Dai, Yingfeng Cai, Long Chen, Yong Zhang
2018 J jnl
Neural Networks
Hai Wang, Lei Dai, Yingfeng Cai, Xiaoqiang Sun, Long Chen
2018 J jnl
Sensors
Yingfeng Cai, Ze Liu, Hai Wang, Xiaobo Chen, Long Chen
2017 J jnl
IEEE Access
Yingfeng Cai, Ze Liu, Hai Wang, Xiaoqiang Sun
2017 J jnl
IEEE Access
Yingfeng Cai, Hai Wang, Zhengyang Zheng, Xiaoqiang Sun
2017 J jnl
J. Sensors
Yingfeng Cai, Ze Liu, Xiaoqiang Sun, Long Chen, Hai Wang, Yong Zhang
2017 J jnl
J. Sensors
Yingfeng Cai, Hai Wang, Xiaoqiang Sun, Long Chen
2016 J jnl
IET Image Process.
Yingfeng Cai, Hai Wang, Xiaobo Chen, Long Chen
2016 J jnl
J. Sensors
Yingfeng Cai, Xiaoqiang Sun, Hai Wang, Long Chen, Hao-Bin Jiang
2016 J jnl
J. Sensors
Hai Wang, Yingfeng Cai, Xiaobo Chen, Long Chen
2016 J jnl
Multim. Tools Appl.
Hai Wang, Yingfeng Cai, Xiaobo Chen, Long Chen
2014 J jnl
J. Appl. Math.
Hai Wang, Yingfeng Cai
2014 J jnl
Adv. Robotics
Hai Wang, Yingfeng Cai, Guoyu Lin, Weigong Zhang
redb/extractors/capa.py
← Index redb/extractors/capa.py python
from dataclasses import asdict
import inspect
import json
import subprocess
import magic
from magika import Magika
from typing import Any, Dict, List, Tuple
from datetime import datetime, timezone

from redb.extractors.enum import Tag
from redb.models.dataclasses import CAPA
from redb.extractors.extractor import Extractor
from dotenv import load_dotenv
import os

load_dotenv(override=True)

class CAPAExtractor(Extractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
    ):
        super().__init__(
            filepath, 
            log, 
            exporters,
            index_prefix, 
            elastic_index, 
            known_benign, 
            known_malicious
        )
        self.capa = None
        self.elastic_index = self.index_prefix + "-capa"

    def _replace_empty_keys(self, dictionary, replacement="default_empty_key"):
        """
        Replace empty keys in a dictionary with a specified replacement.

        Args:
        dictionary (dict): The input dictionary
        replacement (str): The replacement for empty keys (default: 'empty_key')

        Returns:
        dict: A new dictionary with empty keys replaced
        """
        # tmp_dict = {}
        # for k, v in dictionary.items():
        #     if k == '':
        #         tmp_dict[replacement] = dictionary[k]
        #     else:
        #         tmp_dict[k] = dictionary[k]
        # return tmp_dict
        return {(replacement if k == "" else k): v for k, v in dictionary.items()}

    def _extract_capa(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        TIMEOUT = int(os.getenv("CAPA_TIMEOUT")) # 5 minutes in seconds
        capa_command = [os.getenv("CAPA_PATH"), "-j", self.filepath] # COMMENT FOR TESTING ON MAC

        import signal

        # try:
        #     result = subprocess.run(
        #         capa_command, capture_output=True, text=True, check=True, timeout=TIMEOUT
        #     )
        # except subprocess.TimeoutExpired:
        #     self.log.error(f"The capa command timed out after {TIMEOUT} seconds")
        #     return {}
        # except subprocess.CalledProcessError as e:
        #     self.log.error(f"Error running capa: {e}")
        #     return {}

        # try:
        #     capa_output = json.loads(result.stdout)
        # except json.JSONDecodeError as e:
        #     self.log.error("Error parsing capa output: {e}")
        #     return {}

        # Create a process group for easier termination of all child processes
        try:
            # Start the process in a new process group
            process = subprocess.Popen(
                capa_command,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True,
                preexec_fn=os.setsid  # Use os.setsid() to create a new process group
            )
            
            # Implement timeout handling manually
            try:
                stdout, stderr = process.communicate(timeout=TIMEOUT)
                # Process completed within timeout
                if process.returncode != 0:
                    self.log.error(f"Error running capa, return code: {process.returncode}, stderr: {stderr}")
                    return {}
            except subprocess.TimeoutExpired:
                # Kill the entire process group on timeout
                self.log.warning(f"The capa command timed out after {TIMEOUT} seconds, terminating process group")
                
                try:
                    # Send SIGTERM to the entire process group
                    os.killpg(process.pid, signal.SIGTERM)
                    
                    # Give it a moment to terminate gracefully
                    try:
                        process.wait(timeout=3)
                    except subprocess.TimeoutExpired:
                        # If it's still running after 3 seconds, send SIGKILL
                        self.log.warning("Process didn't terminate with SIGTERM, sending SIGKILL")
                        os.killpg(process.pid, signal.SIGKILL)
                        
                    process.wait()  # Make sure process resources are fully cleaned up
                except (ProcessLookupError, OSError) as e:
                    self.log.warning(f"Error while killing process: {e}")
                    
                return {}
                
            try:
                capa_output = json.loads(stdout)
            except json.JSONDecodeError as e:
                self.log.error(f"Error parsing capa output: {e}")
                return {}

            capa_dump = {}  # dictionalry of capabilities
            capabilities = set()  # list of capabilities
            namespaces = set()  # list of namespaces
            attack_dump = {}  # dictionary of tuples [tactic](technique, technique_id)
            tactics = set()  # list of tactics
            techniques = set()  # list of techniques
            techniques_id = set()  # list of techniques_id
            mbc_dump = {}  # dictionary of tuples [objective](behavior, behavior_id)
            mbc_objectives = set()  # list of objectives
            mbc_behaviors = set()  # list of behaviors
            mbc_behaviors_id = set()  # list of behaviors_id

            if isinstance(capa_output, dict) and "rules" in capa_output:
                rules = capa_output["rules"]
                if isinstance(rules, dict):
                    for rule_name, rule_data in rules.items():
                        if isinstance(rule_data, dict) and "meta" in rule_data:
                            meta = rule_data["meta"]
                            if isinstance(meta, dict):
                                # Process capabilities
                                namespace = meta.get("namespace", "").lower()
                                # if namespace != 'lib':
                                if namespace not in capa_dump:
                                    capa_dump[namespace] = []
                                    namespaces.add(namespace)
                                capa_dump[namespace].append(rule_name)
                                capabilities.add(rule_name)

                                # Process ATTACK information
                                if "attack" in meta:
                                    for attack_entry in meta["attack"]:
                                        tactic = attack_entry.get("tactic", "")
                                        technique = attack_entry.get("technique", "")
                                        id = attack_entry.get("id", "")
                                        if tactic and technique:
                                            if tactic in attack_dump:
                                                attack_dump[tactic].append((technique, id))
                                            else:
                                                attack_dump[tactic] = [(technique, id)]
                                            tactics.add(tactic)
                                            techniques.add(technique)
                                            techniques_id.add(id)

                                # Process MBC information
                                if "mbc" in meta:
                                    for mbc_entry in meta["mbc"]:
                                        objective = mbc_entry.get("objective", "")
                                        behavior = mbc_entry.get("behavior", "")
                                        id = mbc_entry.get("id", "")
                                        if objective and behavior:
                                            if objective in mbc_dump:
                                                mbc_dump[objective].append((behavior, id))
                                            else:
                                                mbc_dump[objective] = [(behavior, id)]
                                            mbc_objectives.add(objective)
                                            mbc_behaviors.add(behavior)
                                            mbc_behaviors_id.add(id)

            # return {
            #     'capabilities_all': json.dumps(capabilities_all, indent=2),
            #     'capabilities': list(capabilities),
            #     'namespaces': list(namespaces),
            #     'attack': json.dumps(attack, indent=2),
            #     'tactics': list(tactics),
            #     'techniques': list(techniques),
            #     'techniques_id': list(techniques_id),
            #     'mbc': json.dumps(mbc, indent=2),
            #     'mbc_objectives': list(mbc_objectives),
            #     'mbc_behaviors': list(mbc_behaviors),
            #     'mbc_behaviors_id': list(mbc_behaviors_id)
            # }

            capa_dump = self._replace_empty_keys(capa_dump)
            attack_dump = self._replace_empty_keys(attack_dump)
            mbc_dump = self._replace_empty_keys(mbc_dump)
            self.capa = CAPA(
                json.dumps(capa_dump, indent=2),
                list(capabilities),
                list(namespaces),
                json.dumps(attack_dump, indent=2),
                list(tactics),
                list(techniques),
                list(techniques_id),
                json.dumps(mbc_dump, indent=2),
                list(mbc_objectives),
                list(mbc_behaviors),
                list(mbc_behaviors_id),
            )
            self.log.debug(f"CAPA dump: {self.capa})")
            
        except Exception as e:
            self.log.error(f"Unexpected error in CAPA extraction: {str(e)}")
            # Try to clean up any process if possible
            if 'process' in locals() and process.poll() is None:
                try:
                    os.killpg(process.pid, signal.SIGKILL)
                    process.wait()
                except:
                    pass
            return {}

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.capa
        elif exporter_type == "ClickHouseExporter":
            current_time = datetime.now(timezone.utc)
            
            # Prepare data for multiple tables
            tables_data = {
                'multi_table': True,  # Flag for multi-table export
                
                # Raw data table
                'raw': {
                    'table': 'redb_capa',
                    'data': [[
                        self.sha256,
                        self.md5,
                        self.sha1,
                        current_time,
                        self.capa.capa_dump,  # capa_dump
                        self.capa.attack_dump,            # attack_dump
                        self.capa.mbc_dump                # mbc_dump
                    ]],
                    'column_names': [
                        'sha256', 'md5', 'sha1', 'analysis_date',
                        'capa_dump', 'attack_dump', 'mbc_dump'
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                        'DateTime64(3, \'UTC\')',
                        'JSON', 'JSON', 'JSON'
                    ]
                },
                
                # Capabilities table
                'capabilities': {
                    'table': 'redb_capa_capabilities',
                    'data': [
                        [self.sha256, self.md5, self.sha1, current_time, namespace, capability]
                        for namespace, capabilities in json.loads(self.capa.capa_dump).items()
                        for capability in capabilities
                    ],
                    'column_names': [
                        'sha256', 'md5', 'sha1', 'analysis_date',
                        'namespace', 'capability'
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                        'DateTime64(3, \'UTC\')',
                        'LowCardinality(String)', 'LowCardinality(String)'
                    ]
                },
                
                # MITRE ATT&CK table
                'attack': {
                    'table': 'redb_capa_attack',
                    'data': [
                        [self.sha256, self.md5, self.sha1, current_time, 
                         tactic, technique[0], technique[1]]  # technique[0] is the name, technique[1] is the ID
                        for tactic, techniques in json.loads(self.capa.attack_dump).items()
                        for technique in techniques
                    ],
                    'column_names': [
                        'sha256', 'md5', 'sha1', 'analysis_date',
                        'tactic', 'technique', 'technique_id'
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                        'DateTime64(3, \'UTC\')',
                        'LowCardinality(String)', 'LowCardinality(String)', 
                        'LowCardinality(String)'
                    ]
                },
                
                # MBC table
                'mbc': {
                    'table': 'redb_capa_mbc',
                    'data': [
                        [self.sha256, self.md5, self.sha1, current_time,
                         objective, behavior[0], behavior[1]]  # behavior[0] is the name, behavior[1] is the ID
                        for objective, behaviors in json.loads(self.capa.mbc_dump).items()
                        for behavior in behaviors
                    ],
                    'column_names': [
                        'sha256', 'md5', 'sha1', 'analysis_date',
                        'objective', 'behavior', 'behavior_id'
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                        'DateTime64(3, \'UTC\')',
                        'LowCardinality(String)', 'LowCardinality(String)',
                        'LowCardinality(String)'
                    ]
                }
            }
            
            return tables_data

    def get_clickhouse_table(self) -> str:
        return "redb_capa"  # Return the main table name

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            self._extract_capa()
            return self.capa  # Return the extracted data instead of exporting directly
        except Exception as e:
            self.log.error(f"Error extracting CAPA: {e}")
            return None

    def tag(self):
        return Tag.CAPA.value