Wei Ai

74 papers A* 2A 1B 5Journal 62Unranked 4
YearRankTypeTitle / Venue / Authors
2026 J jnl
ACM Trans. Inf. Syst.
Yuntao Shou, Tao Meng, Wei Ai, Fangze Fu, Nan Yin, Keqin Li
2026 J jnl
CoRR
Yunsheng Wang, Yuntao Shou, Yilong Tan, Wei Ai, Tao Meng, Keqin Li
2026 J jnl
Expert Syst. Appl.
Yunsheng Wang, Yuntao Shou, Yilong Tan, Wei Ai, Tao Meng, Keqin Li
2026 J jnl
Neural Networks
Yuntao Shou, Tao Meng, Wei Ai, Nan Yin, Keqin Li
2026 J jnl
Comput. Networks
Hongyi Chen, Yun Peng, Chen Wei, Tao Meng, Wei Ai, Zhixiong He, Keqin Li
2026 J jnl
CoRR
Yuntao Shou, Jun Zhou, Tao Meng, Wei Ai, Keqin Li
2026 J jnl
CoRR
Tao Meng, Weilun Tang, Yuntao Shou, Yilong Tan, Jun Zhou, Wei Ai, Keqin Li
2026 J jnl
Comput. Sci. Rev.
Yuntao Shou, Wei Ai, Tao Meng, Keqin Li
2026 J jnl
CoRR
Ying Liu, Yuntao Shou, Wei Ai, Tao Meng, Keqin Li
2026 J jnl
Neurocomputing
Ying Liu, Yuntao Shou, Wei Ai, Tao Meng, Keqin Li
2026 J jnl
CoRR
Wei Ai, Yilong Tan, Yuntao Shou, Tao Meng, Haowen Chen, Zhixiong He, Keqin Li
2026 J jnl
Comput. Sci. Rev.
Wei Ai, Yilong Tan, Yuntao Shou, Tao Meng, Haowen Chen, Zhixiong He, Keqin Li
2026 J jnl
CoRR
Wei Ai, Yun Peng, Yuntao Shou, Tao Meng, Keqin Li
2025 conf
BIBM
Yi Yin, Yuntao Shou, Zao Dai, Yun Peng, Tao Meng, Wei Ai, Keqin Li
2025 J jnl
CoRR
Yi Yin, Yuntao Shou, Zao Dai, Yun Peng, Tao Meng, Wei Ai, Keqin Li
2025 J jnl
Expert Syst. Appl.
Wei Ai, Jianbin Li, Ze Wang, Yingying Wei, Tao Meng, Keqin Li
2025 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Wei Ai, Yuntao Shou, Tao Meng, Keqin Li
2025 B conf
COLING
Yuntao Shou, Tao Meng, Wei Ai, Keqin Li
2025 J jnl
CoRR
Yuntao Shou, Jun Yao, Tao Meng, Wei Ai, Cen Chen, Keqin Li
2025 A* conf
IJCAI
Yuntao Shou, Jun Yao, Tao Meng, Wei Ai, Cen Chen, Keqin Li
2025 J jnl
IEEE Trans. Inf. Forensics Secur.
Yiping Zhang, Yuntao Shou, Wei Ai, Tao Meng, Keqin Li
2025 J jnl
CoRR
Yiping Zhang, Yuntao Shou, Wei Ai, Tao Meng, Keqin Li
2025 J jnl
Expert Syst. Appl.
Yiping Zhang, Yuntao Shou, Wei Ai, Tao Meng, Keqin Li
2025 J jnl
Knowl. Based Syst.
Wei Ai, Yulu Liu, Chen Wei, Tao Meng, Hongen Shao, Zhixiong He, Keqin Li
2025 J jnl
CoRR
Yuntao Shou, Tao Meng, Wei Ai, Keqin Li
2025 conf
ECML/PKDD (4)
Yuntao Shou, Tao Meng, Wei Ai, Keqin Li
2025 A* conf
AAAI
Wei Ai, Fuchen Zhang, Yuntao Shou, Tao Meng, Haowen Chen, Keqin Li
2025 J jnl
Knowl. Based Syst.
Fangze Fu, Wei Ai, Fan Yang, Yuntao Shou, Tao Meng, Keqin Li
2025 J jnl
Neural Comput. Appl.
Tao Meng, Wei Ai, Jianbin Li, Ze Wang, Keqin Li
2025 J jnl
IEEE Trans. Knowl. Data Eng.
Tao Meng, Shuo Shan, Hongen Shao, Yuntao Shou, Wei Ai, Keqin Li
2025 J jnl
CoRR
Tao Meng, Shuo Shan, Hongen Shao, Yuntao Shou, Wei Ai, Keqin Li
2024 J jnl
IEEE Trans. Knowl. Data Eng.
Wei Ai, CanHao Xie, Tao Meng, Jiayi Du, Keqin Li
2024 J jnl
CoRR
Yiping Zhang, Yuntao Shou, Tao Meng, Wei Ai, Keqin Li
2024 J jnl
CoRR
Wei Ai, Fuchen Zhang, Tao Meng, Yuntao Shou, Hongen Shao, Keqin Li
2024 J jnl
Neurocomputing
Tao Meng, Yuntao Shou, Wei Ai, Jiayi Du, Haiyan Liu, Keqin Li
2024 J jnl
Knowl. Inf. Syst.
Yiping Zhang, Yuntao Shou, Tao Meng, Wei Ai, Keqin Li
2024 J jnl
Inf. Fusion
Yuntao Shou, Tao Meng, Wei Ai, Fuchen Zhang, Nan Yin, Keqin Li
2024 J jnl
CoRR
Wei Ai, CanHao Xie, Tao Meng, Yinghao Wu, Keqin Li
2024 J jnl
CoRR
Wei Ai, Jianbin Li, Ze Wang, Yingying Wei, Tao Meng, Yuntao Shou, Keqin Li
2024 J jnl
IEEE Trans. Artif. Intell.
Tao Meng, Yuntao Shou, Wei Ai, Nan Yin, Keqin Li
2024 J jnl
CoRR
Yuntao Shou, Tao Meng, Wei Ai, Keqin Li
2024 J jnl
Expert Syst. Appl.
Wei Ai, Yingying Wei, Hongen Shao, Yuntao Shou, Tao Meng, Keqin Li
2024 J jnl
CoRR
Yuntao Shou, Wei Ai, Jiayi Du, Tao Meng, Haiyan Liu
2024 J jnl
CoRR
Jiayi Du, Yinghao Wu, Wei Ai, Tao Meng, CanHao Xie, Keqin Li
2024 J jnl
CoRR
Wei Ai, Jianbin Li, Ze Wang, Jiayi Du, Tao Meng, Yuntao Shou, Keqin Li
2024 J jnl
CoRR
Yiping Zhang, Yuntao Shou, Wei Ai, Tao Meng, Keqin Li
2024 J jnl
Comput. Oper. Res.
Yi Liu, Xuan Wang, Tao Meng, Wei Ai, Keqin Li
2024 J jnl
CoRR
Wei Ai, Wen Deng, Hongyi Chen, Jiayi Du, Tao Meng, Yuntao Shou
2024 J jnl
IEEE ACM Trans. Audio Speech Lang. Process.
Tao Meng, Fuchen Zhang, Yuntao Shou, Hongen Shao, Wei Ai, Keqin Li
2024 J jnl
CoRR
Tao Meng, Fuchen Zhang, Yuntao Shou, Hongen Shao, Wei Ai, Keqin Li
2024 J jnl
CoRR
Tao Meng, Fuchen Zhang, Yuntao Shou, Wei Ai, Nan Yin, Keqin Li
2024 J jnl
CoRR
Fangze Fu, Wei Ai, Fan Yang, Yuntao Shou, Tao Meng, Keqin Li
2024 J jnl
CoRR
Tao Meng, Wei Ai, Jianbin Li, Ze Wang, Yuntao Shou, Keqin Li
2024 J jnl
CoRR
Wei Ai, Yinghui Gao, Jianbin Li, Jiayi Du, Tao Meng, Yuntao Shou, Keqin Li
2024 J jnl
IEEE Internet Things J.
Zhao Tong, Yuanyang Zhang, Jing Mei, Wei Ai, Kenli Li, Keqin Li
2023 J jnl
CoRR
Yuntao Shou, Tao Meng, Wei Ai, Nan Yin, Keqin Li
2023 B conf
ICPADS
Wei Ai, Fuchen Zhang, Tao Meng, Yuntao Shou, Hongen Shao, Keqin Li
2023 J jnl
Appl. Intell.
Wei Ai, Ze Wang, Hongen Shao, Tao Meng, Keqin Li
2023 J jnl
CoRR
Yuntao Shou, Tao Meng, Wei Ai, Keqin Li
2023 B conf
ICPADS
Wei Ai, CanHao Xie, Tao Meng, Yinghao Wu, Keqin Li
2023 J jnl
CoRR
Yuntao Shou, Wei Ai, Tao Meng, Keqin Li
2023 J jnl
CoRR
Wei Ai, Yuntao Shou, Tao Meng, Keqin Li
2023 J jnl
CoRR
Tao Meng, Yuntao Shou, Wei Ai, Nan Yin, Keqin Li
2023 B conf
ICPADS
Jiayi Du, Yinghao Wu, Wei Ai, Tao Meng, CanHao Xie, Keqin Li
2023 J jnl
CoRR
Yuntao Shou, Wei Ai, Tao Meng
2023 B conf
ICPADS
Yuntao Shou, Wei Ai, Tao Meng, Fuchen Zhang, Keqin Li
2022 J jnl
IEEE Access
Wei Ai, Hongen Shao, Jia Xu, Tao Meng, Keqin Li
2022 J jnl
Neurocomputing
Yuntao Shou, Tao Meng, Wei Ai, Sihan Yang, Keqin Li
2022 conf
HPCC/DSS/SmartCity/DependSys
Jiayi Du, Yulu Liu, Wei Ai, Hongen Shao, Tao Meng
2021 conf
ICSAI
Wei Ai, Jia Xu, Hongen Shao, Ze Wang, Tao Meng
2018 J jnl
Appl. Soft Comput.
Wei Ai, Kenli Li, Keqin Li
2017 A conf
ICDCS
Wei Ai, Kenli Li, Cen Chen, Jiwu Peng, Keqin Li
2016 J jnl
Sci. Program.
Wei Ai, Kenli Li, Shenglin Lan, Fan Zhang, Jing Mei, Keqin Li, Rajkumar Buyya
2015 J jnl
IEEE Trans. Parallel Distributed Syst.
Kenli Li, Wei Ai, Zhuo Tang, Fan Zhang, Lingang Jiang, Keqin Li, Kai Hwang
redb/extractors/decompiler/_archive/DecompileGhidra-old.py
← Index redb/extractors/decompiler/_archive/DecompileGhidra-old.py python
from hashlib import sha256
import inspect
from pathlib import Path
import subprocess
import json
import subprocess
import json
import os
import tempfile
import uuid
import shutil
import time

from dotenv import load_dotenv

from redb.extractors.enum import Tag
from redb.models.dataclasses import Decompiled
from redb.extractors.extractor import Extractor


class DecompileGhidra(Extractor):
    def __init__(
        self,
        filepath,
        log,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
    ):
        super().__init__(
            filepath, log, index_prefix, elastic_index, known_benign, known_malicious
        )
        self.log.debug(inspect.currentframe().f_code.co_name)
        self.elastic_index = self.index_prefix + "-ghidra"
        self.ghidra_path = "/opt/ghidra"
        self.java_script_path = (
            self.ghidra_path
            + "/Ghidra/Features/Base/ghidra_scripts/GhidraDecompilerScript.java"
        )
        self.decompiled = None
        load_dotenv()
        self.decompiled_folder = os.getenv("DECOMPILED_FOLDER", "/opt/decompiled")
        self.log.debug(f"Decompiled folder: {self.decompiled_folder}")

    def run_command(self, cmd, env=None):
        try:
            self.log.info(f"Starting command: {' '.join(cmd)}")
            start_time = time.time()
            TIMEOUT = 1200  # 20 minutes in seconds
            process = subprocess.Popen(
                cmd, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
            )

            while True:
                output = process.stdout.readline()
                if output:
                    print(output.strip())
                if process.poll() is not None:
                    break
            try:
                stdout, stderr = process.communicate(timeout=TIMEOUT)
            except subprocess.TimeoutExpired:
                process.kill()
                self.log.error(f"Ghidra timed out after {TIMEOUT} seconds")
                # raise subprocess.TimeoutExpired(process.args, TIMEOUT)
                return None
            end_time = time.time()

            self.log.debug(
                f"Command finished. Execution time: {end_time - start_time:.2f} seconds"
            )
            self.log.debug(f"Return code: {process.returncode}")

            if process.returncode != 0:
                self.log.error(f"Error output:\n{stderr}")
                return None
            return stdout
        except Exception as e:
            self.log.error(f"Error running command {' '.join(cmd)}: {e}")
            return None

    def analyze_binary(self):
        self.log.debug(f"Ghidra path: {self.ghidra_path}")
        self.log.debug(f"Binary path: {self.filepath}")
        self.log.debug(f"Java script path: {self.java_script_path}")

        # Check if Java script exists
        if not os.path.exists(self.java_script_path):
            self.log.error(f"Error: Java script not found at {self.java_script_path}")
            return None

        # Set up environment variables
        env = os.environ.copy()
        java_home = "/usr/lib/jvm/java-17-openjdk-amd64"  # Adjust this path if needed
        env["JAVA_HOME"] = java_home
        env["PATH"] = f"{java_home}/bin:{env['PATH']}"
        env["LD_LIBRARY_PATH"] = f"{java_home}/lib:{env.get('LD_LIBRARY_PATH', '')}"
        env["DECOMPILED_FOLDER"] = self.decompiled_folder

        # Print environment variables for debugging
        self.log.debug(f"JAVA_HOME: {env['JAVA_HOME']}")
        self.log.debug(f"PATH: {env['PATH']}")
        self.log.debug(f"LD_LIBRARY_PATH: {env['LD_LIBRARY_PATH']}")

        # Check Ghidra installation
        analyzeHeadless_path = f"{self.ghidra_path}/support/analyzeHeadless"
        self.log.debug(
            f"analyzeHeadless exists: {os.path.exists(analyzeHeadless_path)}"
        )

        # Create a temporary project directory
        project_path = tempfile.gettempdir() + "/ghidra_" + str(uuid.uuid4())
        os.makedirs(project_path, exist_ok=True)
        self.log.debug(f"Created temporary project path: {project_path}")
        output_file = ""

        try:
            # Run Ghidra's headless analyzer
            analyze_cmd = [
                analyzeHeadless_path,
                project_path,
                "TempProject",
                "-import",
                self.filepath,
                "-postScript",
                self.java_script_path,
                self.sha256,
                "-deleteProject",
            ]

            result = self.run_command(analyze_cmd, env=env)
            if result is None:
                return None

            # Read the output JSON file
            output_file = os.path.join(
                self.decompiled_folder, self.sha256 + "-decompiled.json"
            )
            if os.path.exists(output_file):
                with open(output_file, "r") as f:
                    functions = json.load(f)
                return functions
            else:
                self.log.error(
                    f"Output file {output_file} not found. Ghidra analysis may have failed."
                )
                return None
        finally:
            # Clean up
            if os.path.exists(project_path):
                shutil.rmtree(project_path)
                self.log.debug(f"Deleted temporary project path: {project_path}")

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

            if functions:
                self.log.info(f"Extracted functions from {self.filepath}:")
                for func in functions:
                    id = sha256(func["address"].encode()).hexdigest()
                    self.decompiled = Decompiled(
                        _id=id,
                        decompiled_function_name=func["name"],
                        decompiled_function_address=func["address"],
                        decompiled_function=func["decompiled"],
                    )
                    self.export_to_elastic([self.decompiled])
            else:
                self.log.error("No decompiled functions extracted.")
            return True
        except Exception as e:
            self.log.error(f"Error extracting decompiled information: {e}")
            return None

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