Wei Wang

145 papers B 3C 19Journal 111Unranked 12
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Mengze Yu, Wei Wang, Jiaqi Yan, Yuzhang Peng
2026 J jnl
CoRR
Yuzhang Peng, Wei Wang, Jiaqi Yan, Mengze Yu
2026 J jnl
CoRR
Kunrui Ze, Wei Wang, Guibin Sun, Jiaqi Yan, Kexin Liu, Jinhu Lü
2026 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Zhe Li, Changdi Liu, Shaolin Tan, Wei Wang
2026 J jnl
CoRR
Yichen Cai, Yuan Gao, Pengpeng Li, Wei Wang, Guibin Sun, Jinhu Lü
2026 J jnl
IEEE Trans. Ind. Electron.
Xinyang Tian, Xiaolong Yu, Jianwei Niu, Wei Wang
2026 J jnl
IEEE Trans. Netw. Sci. Eng.
Hongyuan Xu, Wei Wang, Jiaqi Yan, Qing Gao
2025 J jnl
Autom.
Jiajun Shen, Wei Wang, Jing Zhou, Jinhu Lü
2025 B conf
CEC
Wei Wang, Yindong Shen
2025 J jnl
IEEE Internet Things J.
Ye Tao, Shaolin Tan, Rongen Yan, Nian Liu, Wei Wang, Jinhu Lü
2025 J jnl
IEEE Trans. Control. Netw. Syst.
Jiang Long, Wei Wang, Yangming Guo, Zun Liu
2025 J jnl
IEEE Trans. Ind. Electron.
Jiajun Shen, Yehui Liu, Wei Wang, Zhenqian Wang
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Jinhu Lü, Kunrui Ze, Shuoyu Yue, Kexin Liu, Wei Wang, Guibin Sun
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Xiangkai Wu, Wei Wang, Shaolin Tan
2025 J jnl
IEEE Control. Syst. Lett.
Mengze Yu, Wei Wang, Jiaqi Yan
2025 J jnl
IEEE CAA J. Autom. Sinica
Chenguang Liu, Qing Gao, Wei Wang, Jinhu Lü
2025 J jnl
Autom.
Jiang Long, Wei Wang, Changyun Wen, Jiangshuai Huang, Yangming Guo
2025 J jnl
CoRR
Mengze Yu, Wei Wang, Jiaqi Yan
2025 J jnl
Comput. Secur.
Nan Sun, Wei Wang, Kexin Liu, Donghong Li, Jinhu Lü
2025 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Chenguang Liu, Michael V. Basin, Qing Gao, Wei Wang, Jinhu Lü
2025 J jnl
J. Frankl. Inst.
Yilin Wang, Yang Liu, Dianyan Xiao, Hao Wu, Tongshuai Zhang, Wei Wang
2025 J jnl
IEEE Trans. Veh. Technol.
Nan Sun, Wei Wang, Hao Wu, Qing Gao, Kexin Liu, Jinhu Lü
2024 J jnl
CoRR
Mingjing Li, Huihui Zhou, Xiaofeng Xu, Zhiwei Zhong, Puli Quan, Xueke Zhu, Yanyu Lin, Wenjie Lin, Hongyu Guo, Junchao Zhang, Yunhao Ma, Wei Wang, Qingyan Meng, Zhengyu Ma, Guoqi Li, Xiaoxin Cui, Yonghong Tian
2024 C conf
ICARCV
Jiajun Shen, Zitong Bai, Wei Wang, Jing Zhou
2024 J jnl
CoRR
Jiajun Shen, Wei Wang, Jing Zhou, Jinhu Lu
2024 J jnl
IEEE Trans. Control. Netw. Syst.
Shuyuan Zhang, Lei Wang, Bai Xue, Kexin Liu, Wei Wang
2024 J jnl
Frontiers Comput. Sci.
Nan Sun, Wei Wang, Yongxin Tong, Kexin Liu
2024 J jnl
IEEE Internet Things J.
Ye Tao, Baoqi Huang, Rongen Yan, Long Zhao, Wei Wang
2024 J jnl
CoRR
Jiajun Shen, Wei Wang, Changyun Wen, Jinhu Lü
2024 J jnl
CoRR
Jinhu Lü, Kunrui Ze, Shuoyu Yue, Kexin Liu, Wei Wang, Guibin Sun
2024 conf
PRCV (12)
Zhen Zhang, Wei Wang, Guoliang Kang
2024 B conf
IJCNN
Zhen Zhang, Wei Wang, Guoliang Kang
2024 J jnl
IEEE Trans. Cybern.
Mengze Yu, Wei Wang, Jiangshuai Huang, Changyun Wen, Jing Zhou
2024 J jnl
IEEE Trans. Control. Netw. Syst.
Jiajun Shen, Wei Wang, Changyun Wen, Jiangshuai Huang
2024 J jnl
IEEE Trans. Ind. Informatics
Zhen Han, Wei Wang, Changyun Wen, Lei Wang
2024 J jnl
IEEE Trans. Cybern.
Ziye Liu, Wei Wang, Fanghong Guo, Qing Gao
2024 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Yuxiao Liu, Xiangkai Wu, Jiang Long, Wei Wang
2024 J jnl
IEEE Trans. Autom. Control.
Dong Yue, Chao Deng, Changyun Wen, Wei Wang
2024 J jnl
IEEE Trans. Cybern.
Jiang Long, Wei Wang, Changyun Wen, Jiangshuai Huang, Yangming Guo
2024 J jnl
CoRR
Kunrui Ze, Wei Wang, Shuoyu Yue, Guibin Sun, Kexin Liu, Jinhu Lü
2024 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Zhen Han, Wei Wang, Maopeng Ran, Changyun Wen, Lei Wang
2024 J jnl
IEEE Trans. Netw. Sci. Eng.
Jie Ding, Yaozhong Zhang, Kun Song, Guoqi Li, Wei Wang, Kexin Liu
2024 J jnl
IEEE Trans. Ind. Electron.
Kunrui Ze, Wei Wang, Kexin Liu, Jinhu Lü
2023 C conf
IECON
Ziye Liu, Wei Wang, Fanghong Guo
2023 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Xinpeng Fang, Huijin Fan, Wei Wang, Lei Liu, Bo Wang, Zhongtao Cheng
2023 C conf
IECON
Yaozhong Zhang, Jiang Long, Zitong Bai, Wei Wang
2023 J jnl
Autom.
Huijin Fan, Xinpeng Fang, Wei Wang, Jiangshuai Huang, Lei Liu
2023 J jnl
Int. J. Comput. Vis.
Runqi Wang, Linlin Yang, Hanlin Chen, Wei Wang, David S. Doermann, Baochang Zhang
2023 J jnl
IEEE Trans. Cybern.
Chao Deng, Weinan Gao, Changyun Wen, Zhiyong Chen, Wei Wang
2023 J jnl
IEEE Trans. Ind. Electron.
Zhen Han, Wei Wang, Jiangshuai Huang, Zhenqian Wang
2023 J jnl
IEEE Trans. Autom. Control.
Chao Deng, Changyun Wen, Wei Wang, Xinyao Li, Dong Yue
2023 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Jiang Long, Yangming Guo, Zun Liu, Wei Wang, Siwen Zhou
2023 J jnl
Neurocomputing
Shanmin Pang, Wei Wang, Renzhong Zhang, Wenyu Hao
2023 C conf
IECON
Zifei Li, Zhen Han, Wei Wang, Jing Zhou
2023 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Xiaoqun Wu, Ziye Fan, Jinmiao He, Wei Wang, Jinhu Lü
2023 conf
COMPLEX NETWORKS (4)
Shuyuan Zhang, Lei Wang, Wei Wang
2022 J jnl
IEEE Trans. Ind. Informatics
Lei Ren, Zidi Jia, Xiaokang Wang, Jiabao Dong, Wei Wang
2022 J jnl
IEEE Trans. Cybern.
Chao Deng, Changyun Wen, Ying Zou, Wei Wang, Xinyao Li
2022 J jnl
IFAC J. Syst. Control.
Arghya Chakravarty, Chitralekha Mahanta, Wei Wang, Indrani Kar
2022 J jnl
IEEE Trans. Autom. Control.
Wei Wang, Jing Zhou, Changyun Wen, Jiang Long
2022 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Zongyu Zuo, Jiawei Song, Wei Wang, Zhengtao Ding
2022 J jnl
IEEE Trans. Ind. Electron.
Jiangshuai Huang, Wei Wang, Jing Zhou
2022 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Jiang Long, Wei Wang, Jiangshuai Huang, Jinhu Lü, Kexin Liu
2022 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Jiang Long, Wei Wang, Kexin Liu, Jinhu Lü
2022 J jnl
IEEE Trans. Cybern.
Huijin Fan, Kanghua Zheng, Lei Liu, Bo Wang, Wei Wang
2022 J jnl
Appl. Math. Comput.
Yi Zheng, Xiaoqun Wu, Ziye Fan, Wei Wang
2022 J jnl
Autom.
Jiang Long, Wei Wang, Changyun Wen, Jiangshuai Huang, Jinhu Lü
2022 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Qingyu Qu, Kexin Liu, Wei Wang, Jinhu Lü
2021 J jnl
CoRR
Ziye Liu, Fanghong Guo, Wei Wang, Xiaoqun Wu
2021 conf
CDC
Mengze Yu, Wei Wang, Jing Zhou, Yongxin Tong
2021 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Jiangshuai Huang, Wei Wang, Xiaojie Su
2021 J jnl
Autom.
Wei Wang, Jiang Long, Jing Zhou, Jiangshuai Huang, Changyun Wen
2021 J jnl
IEEE Trans. Cybern.
Jiang Long, Wei Wang, Jiangshuai Huang, Jing Zhou, Kexin Liu
2021 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Wei Wang, Zhen Han, Kexin Liu, Jinhu Lü
2021 J jnl
IEEE Trans. Ind. Informatics
Bowen Xu, Fanghong Guo, Wen-An Zhang, Wei Wang, Changyun Wen, Zhengguo Li
2020 J jnl
IEEE Trans. Autom. Control.
Jiangshuai Huang, Wei Wang, Changyun Wen, Guoqi Li
2020 C conf
ICARCV
Mengze Yu, Wei Wang, Changyun Wen
2020 J jnl
Autom.
Wei Wang, Changyun Wen, Jiangshuai Huang, Jing Zhou
2020 J jnl
Autom.
Jiangshuai Huang, Wei Wang, Changyun Wen, Jing Zhou, Guoqi Li
2020 conf
ICCA
Biru Chi, Qinglei Hu, Wei Wang
2020 C conf
ICARCV
Jiajun Shen, Wei Wang, Jinhu Lü, Chao Deng
2020 C conf
IECON
Zhen Han, Wei Wang, Mengze Yu, Huijin Fan
2020 J jnl
J. Control. Decis.
Wei Wang, Jiang Long, Changyun Wen, Jiangshuai Huang
2020 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Kexin Liu, Haibo Gu, Wei Wang, Jinhu Lü
2019 J jnl
IEEE Trans. Autom. Control.
Jing Zhou, Changyun Wen, Wei Wang, Fan Yang
2019 J jnl
IEEE Trans. Ind. Electron.
Wei Wang, Bin Xie, Zongyu Zuo, Huijin Fan
2018 J jnl
IEEE Trans. Inf. Forensics Secur.
Hao Wu, Wei Wang
2018 C conf
ICARCV
Jiang Long, Wei Wang, Jing Zhou
2018 J jnl
Autom.
Jiangshuai Huang, Wei Wang, Changyun Wen, Jing Zhou
2018 J jnl
Autom.
Jing Zhou, Changyun Wen, Wei Wang
2018 conf
CDC
Jiang Long, Wei Wang, Jing Zhou, Hao Wu
2018 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Chenliang Wang, Changyun Wen, Qinglei Hu, Wei Wang, Xiuyu Zhang
2018 J jnl
IEEE Trans. Cybern.
Jiangshuai Huang, Yongduan Song, Wei Wang, Changyun Wen, Guoqi Li
2018 J jnl
Trans. Inst. Meas. Control
Jiangshuai Huang, Wei Wang, Qing-Guo Wang
2018 J jnl
Inf. Sci.
Hao Wu, Wei Wang, Changyun Wen, Zhengguo Li
2018 J jnl
IEEE Trans. Image Process.
Baochang Zhang, Shangzhen Luan, Chen Chen, Jungong Han, Wei Wang, Alessandro Perina, Ling Shao
2017 conf
ICCA
Yun Li, Chenliang Wang, Wei Wang
2017 J jnl
Autom.
Chenliang Wang, Changyun Wen, Yan Lin, Wei Wang
2017 J jnl
Autom.
Wei Wang, Changyun Wen, Jiangshuai Huang
2017 J jnl
CoRR
Baochang Zhang, Shangzhen Luan, Chen Chen, Jungong Han, Wei Wang, Alessandro Perina, Ling Shao
2017 J jnl
Autom.
Jiangshuai Huang, Yong-Duan Song, Wei Wang, Changyun Wen, Guoqi Li
2016 C conf
ICARCV
Zhixiang Dong, Huijin Fan, Yongji Wang, Lingyi Xu, Wei Wang
2016 C conf
ICARCV
Jing Zhou, Wei Wang
2016 C conf
ICARCV
Bin Xie, Wei Wang, Zongyu Zuo
2016 J jnl
Autom.
Jiangshuai Huang, Changyun Wen, Wei Wang, Yong-Duan Song
2016 C conf
ICARCV
Wei Wang, Jiangshuai Huang, Changyun Wen
2016 C conf
ACC
Tongshuai Zhang, Wei Wang, Hao Ye, Dexian Huang, Haifeng Zhang, Mingliang Li
2016 J jnl
Frontiers Comput. Neurosci.
Guoqi Li, Lei Deng, Dong Wang, Wei Wang, Fei Zeng, Ziyang Zhang, Huanglong Li, Sen Song, Pei Jing, Luping Shi
2016 J jnl
IEEE Trans. Autom. Control.
Wei Wang, Changyun Wen, Jiangshuai Huang, Zhengguo Li
2016 conf
CRC
Lingyi Xu, Huijin Fan, Zhixiang Dong, Wei Wang
2015 J jnl
Autom.
Huijin Fan, Bing Liu, Wei Wang, Changyun Wen
2015 J jnl
Autom.
Jiangshuai Huang, Changyun Wen, Wei Wang, Yong-Duan Song
2015 J jnl
Syst. Control. Lett.
Jiangshuai Huang, Changyun Wen, Wei Wang, Yong-Duan Song
2015 J jnl
Int. J. Syst. Sci.
Hao Wu, Wei Wang, Hao Ye
2015 J jnl
IEEE Trans Autom. Sci. Eng.
Benben Jiang, Fan Yang, Wei Wang, Dexian Huang
2015 J jnl
Autom.
Benben Jiang, Fan Yang, Wei Wang, Dexian Huang
2014 J jnl
IEEE Trans. Autom. Control.
Huijin Fan, Bing Liu, Yindong Shen, Wei Wang
2014 J jnl
Autom.
Jiangshuai Huang, Changyun Wen, Wei Wang, Zhong-Ping Jiang
2014 J jnl
Comput. Electr. Eng.
Bo Zhou, Wei Wang, Hao Ye
2014 J jnl
Sci. China Inf. Sci.
Yiming Wan, Wei Wang, Hao Ye
2014 J jnl
Autom.
Wei Wang, Jiangshuai Huang, Changyun Wen, Huijin Fan
2014 C conf
CCA
Bo Zhou, Wei Wang, Hao Ye
2013 J jnl
J. Frankl. Inst.
Qingdong Li, Zhang Ren, Shicong Dai, Wei Wang
2013 conf
ASCC
Wei Wang, Changyun Wen, Jiangshuai Huang
2013 J jnl
Syst. Control. Lett.
Jiangshuai Huang, Changyun Wen, Wei Wang, Zhong-Ping Jiang
2013 J jnl
J. Electronic Imaging
Bin Li, Wei Wang, Hao Ye
2013 C conf
ACC
Benben Jiang, Fan Yang, Dexian Huang, Wei Wang
2013 C conf
ACC
Wei Wang, Changyun Wen, Zhengguo Li, Jiangshuai Huang
2013 J jnl
Neurocomputing
Cong Zhang, Wei Wang, Hao Ye
2013 conf
CDC
Hao Wu, Wei Wang, Hao Ye
2013 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Hao Wu, Wei Wang, Hao Ye
2013 J jnl
Neurocomputing
Hao Wu, Wei Wang, Hao Ye
2013 J jnl
Autom.
Hao Wu, Wei Wang, Hao Ye, Zidong Wang
2012 C conf
ICARCV
Wei Wang, Changyun Wen, Jiangshuai Huang
2011 J jnl
Autom.
Wei Wang, Changyun Wen
2010 J jnl
Autom.
Wei Wang, Changyun Wen
2010 conf
CDC
Wei Wang, Changyun Wen
2009 conf
CDC
Wei Wang, Changyun Wen
2009 J jnl
Autom.
Jing Zhou, Changyun Wen, Wei Wang
2009 J jnl
Autom.
Changyun Wen, Jing Zhou, Wei Wang
2009 J jnl
J. Syst. Sci. Complex.
Wei Wang, Changyun Wen, Guang-Hong Yang
2008 C conf
ICARCV
Wei Wang, Changyun Wen, Jing Zhou
2003 conf
AVBPA
Baochang Zhang, Wen Gao, Shiguang Shan, Wei Wang
2003 C conf
ISMIS
Shiguang Shan, Wen Gao, Wei Wang, Debin Zhao, Baocai Yin
2002 B conf
ICMI
Wei Wang, Shiguang Shan, Wen Gao, Bo Cao, Baocai Yin
redb/extractors/decompiler/DecompileAPK.py
← Index redb/extractors/decompiler/DecompileAPK.py python
"""APK Code Analysis Extractor.

Decompiles and disassembles APK DEX bytecode at the method level,
producing per-method content and reference records analogous to
the Binary Ninja code_binja_* tables.

Uses androguard + JADX + apktool to replicate Binary Ninja analysis
depth for Android applications.
"""

import gc
import hashlib
import inspect
import logging
import os
import threading
import time
from datetime import datetime, timezone
from typing import Any, Dict, Optional

from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
from redb.extractors.enum import Tag
from redb.extractors.extractor import Extractor


class DecompileAPK(Extractor):
    """APK code analysis extractor — produces multi-table ClickHouse export.

    Follows the same pattern as DecompileBinja for consistency.
    """

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        known_benign=False,
        known_malicious=False,
        filetype=None,
        decompile_modules=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            known_benign=known_benign,
            known_malicious=known_malicious,
        )
        self.log.debug(inspect.currentframe().f_code.co_name)
        self.analysis_results = None
        self.analyzer = None
        self.filetype = filetype or "apk"
        self.decompile_modules = decompile_modules or {"all"}

        try:
            self.APK_DECOMPILE_TIMEOUT = int(
                os.getenv("APK_DECOMPILE_TIMEOUT", "600")
            )
        except ValueError:
            self.log.warning(
                "Invalid APK_DECOMPILE_TIMEOUT value, using default of 600 seconds"
            )
            self.APK_DECOMPILE_TIMEOUT = 600

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.cleanup_run()

    def calculate_md5(self, input_str):
        """Calculate MD5 hash of a string."""
        return hashlib.md5(input_str.encode("utf-8")).hexdigest()

    def cleanup_run(self):
        """Clean up after analysis."""
        try:
            if self.analyzer:
                self.analyzer.cleanup()
                self.analyzer = None
            gc.collect()
        except Exception as e:
            self.log.error(f"Error in cleanup: {e}")

    def analyze_apk(self) -> Optional[Dict[str, Any]]:
        """Run APK code analysis and return results."""
        self.log.debug("Starting APK code analysis")
        try:
            self.analyzer = APKCodeAnalyzer(
                filepath=self.filepath,
                timeout=self.APK_DECOMPILE_TIMEOUT,
                log=self.log,
                decompile_modules=self.decompile_modules,
            )
            results = self.analyzer.extract()
            return results
        except Exception as e:
            self.log.error(f"Error in APK code analysis: {e}")
            import traceback
            self.log.error(f"Traceback: {traceback.format_exc()}")
            return None
        finally:
            self.cleanup_run()

    def extract(self):
        """Extract and process all analysis results.

        Uses daemon thread with timeout, same pattern as DecompileBinja.
        """
        self.log.debug(inspect.currentframe().f_code.co_name)

        extraction_completed = False
        extraction_result = False
        extraction_error = None

        def do_extraction():
            nonlocal extraction_completed, extraction_result, extraction_error
            try:
                results = self.analyze_apk()
                if not results:
                    extraction_result = False
                else:
                    self.analysis_results = results
                    self.analysis_results["sha256"] = self.sha256
                    self.analysis_results["sha1"] = self.sha1
                    self.analysis_results["md5"] = self.md5
                    extraction_result = True
            except Exception as e:
                extraction_error = e
                extraction_result = False
            finally:
                extraction_completed = True

        extraction_thread = threading.Thread(target=do_extraction)
        extraction_thread.daemon = True
        extraction_thread.start()

        start_time = time.time()
        while (
            not extraction_completed
            and (time.time() - start_time) < self.APK_DECOMPILE_TIMEOUT
        ):
            time.sleep(1)

        if not extraction_completed:
            self.log.error(
                f"APK extraction timed out after {self.APK_DECOMPILE_TIMEOUT} seconds"
            )
            self.cleanup_run()
            return None

        if extraction_error:
            self.log.error(f"Error in APK extraction: {extraction_error}")
            return None

        return self.analysis_results if extraction_result else None

    def prepare_export_data(self, exporter_type: str) -> Any:
        """Prepare data for database export."""
        self.log.debug(inspect.currentframe().f_code.co_name)
        if not self.analysis_results:
            return None

        if exporter_type == "ClickHouseExporter":
            now = datetime.now(timezone.utc)
            export = {"multi_table": True}

            # Table 1: Decompiled method content
            if self.analysis_results.get("decompiled_content"):
                export["decompiled_content"] = {
                    "table": "code_apk_decompiled_methods_content",
                    "data": [
                        [
                            f["decompiled_method_hash"],
                            f["decompiled_method"],
                            f.get("decompiled_method_type", "UNKNOWN"),
                            1 if f.get("decompiled_has_string_encryption") else 0,
                            1 if f.get("decompiled_has_reflection_calls") else 0,
                            1 if f.get("decompiled_excessive_goto_count") else 0,
                            now,
                        ]
                        for f in self.analysis_results["decompiled_content"]
                    ],
                    "column_names": [
                        "decompiled_method_hash",
                        "decompiled_method",
                        "decompiled_method_type",
                        "decompiled_has_string_encryption",
                        "decompiled_has_reflection_calls",
                        "decompiled_excessive_goto_count",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "String",
                        "Enum8('USER'=1, 'LIBRARY'=2, 'UNKNOWN'=5)",
                        "UInt8",
                        "UInt8",
                        "UInt8",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            # Table 2: Decompiled method references
            if self.analysis_results.get("decompiled_refs"):
                export["decompiled_refs"] = {
                    "table": "code_apk_decompiled_methods_references",
                    "data": [
                        [
                            self.analysis_results["sha256"],
                            f["decompiled_method_hash"],
                            f.get("smali_method_hash"),
                            f.get("decompiled_class_name", ""),
                            f.get("decompiled_method_name", ""),
                            f.get("decompiled_method_signature", ""),
                            f.get("decompiled_method_prototype", ""),
                            f.get("functions_caller", []),
                            f.get("functions_call", []),
                            now,
                        ]
                        for f in self.analysis_results["decompiled_refs"]
                    ],
                    "column_names": [
                        "sha256",
                        "decompiled_method_hash",
                        "smali_method_hash",
                        "decompiled_class_name",
                        "decompiled_method_name",
                        "decompiled_method_signature",
                        "decompiled_method_prototype",
                        "functions_caller",
                        "functions_call",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "FixedString(64)",
                        "Nullable(FixedString(64))",
                        "LowCardinality(String)",
                        "LowCardinality(String)",
                        "String",
                        "String",
                        "Array(String)",
                        "Array(String)",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            # Table 3: Smali method content
            if self.analysis_results.get("smali_content"):
                export["smali_content"] = {
                    "table": "code_apk_smali_methods_content",
                    "data": [
                        [
                            f["smali_method_hash"],
                            f["smali_method"],
                            f.get("smali_method_type", "UNKNOWN"),
                            f.get("smali_instructions_count", 0),
                            f.get("smali_register_count", 0),
                            1 if f.get("smali_has_string_encryption") else 0,
                            1 if f.get("smali_has_reflection_calls") else 0,
                            1 if f.get("smali_excessive_goto_count") else 0,
                            f.get("smali_flattened_score", 0.0),
                            f.get("smali_mba_score", 0.0),
                            now,
                        ]
                        for f in self.analysis_results["smali_content"]
                    ],
                    "column_names": [
                        "smali_method_hash",
                        "smali_method",
                        "smali_method_type",
                        "smali_instructions_count",
                        "smali_register_count",
                        "smali_has_string_encryption",
                        "smali_has_reflection_calls",
                        "smali_excessive_goto_count",
                        "smali_flattened_score",
                        "smali_mba_score",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "String",
                        "Enum8('USER'=1, 'LIBRARY'=2, 'UNKNOWN'=5)",
                        "UInt32",
                        "UInt16",
                        "UInt8",
                        "UInt8",
                        "UInt8",
                        "Float64",
                        "Float64",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            # Table 4: Smali method references
            if self.analysis_results.get("smali_refs"):
                export["smali_refs"] = {
                    "table": "code_apk_smali_methods_references",
                    "data": [
                        [
                            self.analysis_results["sha256"],
                            f["smali_method_hash"],
                            f.get("decompiled_method_hash"),
                            f.get("smali_class_name", ""),
                            f.get("smali_method_name", ""),
                            f.get("smali_method_signature", ""),
                            now,
                        ]
                        for f in self.analysis_results["smali_refs"]
                    ],
                    "column_names": [
                        "sha256",
                        "smali_method_hash",
                        "decompiled_method_hash",
                        "smali_class_name",
                        "smali_method_name",
                        "smali_method_signature",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "FixedString(64)",
                        "Nullable(FixedString(64))",
                        "LowCardinality(String)",
                        "LowCardinality(String)",
                        "String",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            # Table 5: Method similarity metrics (content-based fuzzy matching)
            if self.analysis_results.get("similarity_metrics"):
                export["method_similarity_metrics"] = {
                    "table": "code_apk_method_similarity_metrics",
                    "data": [
                        [
                            f["smali_method_hash"],
                            f.get("ssdeep_smali"),
                            f.get("tlsh_smali"),
                            f.get("ssdeep_smali_normalized"),
                            f.get("tlsh_smali_normalized"),
                            f.get("minhash", []),
                            now,
                        ]
                        for f in self.analysis_results["similarity_metrics"]
                    ],
                    "column_names": [
                        "smali_method_hash",
                        "ssdeep_smali",
                        "tlsh_smali",
                        "ssdeep_smali_normalized",
                        "tlsh_smali_normalized",
                        "minhash",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "Nullable(String)",
                        "Nullable(FixedString(72))",
                        "Nullable(String)",
                        "Nullable(FixedString(72))",
                        "Array(UInt8)",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            # Table 5b: CFG method features (structural/topological)
            if self.analysis_results.get("cfg"):
                export["cfg_methods"] = {
                    "table": "code_apk_cfg_methods",
                    "data": [
                        [
                            cfg["smali_method_hash"],
                            cfg["cfg_topology_hash"],
                            cfg["block_count"],
                            cfg["edge_count"],
                            cfg.get("cfg_instructions_count", 0),
                            cfg.get("call_count", 0),
                            cfg["cyclomatic_complexity"],
                            cfg.get("loop_count", 0),
                            cfg.get("max_depth", 0),
                            cfg.get("max_fan_out", 0),
                            cfg.get("md_index_topdown", 0),
                            cfg.get("md_index_bottomup", 0),
                            cfg.get("prime_product_smali", 0),
                            cfg.get("cfg_feature_tlsh"),
                            cfg.get("wl_minhash", []),
                            cfg.get("bb_features", []),
                            cfg.get("cfg_adjacency", []),
                            now,
                        ]
                        for cfg in self.analysis_results["cfg"]
                        if cfg is not None
                    ],
                    "column_names": [
                        "smali_method_hash",
                        "cfg_topology_hash",
                        "block_count",
                        "edge_count",
                        "cfg_instructions_count",
                        "call_count",
                        "cyclomatic_complexity",
                        "loop_count",
                        "max_depth",
                        "max_fan_out",
                        "md_index_topdown",
                        "md_index_bottomup",
                        "prime_product_smali",
                        "cfg_feature_tlsh",
                        "wl_minhash",
                        "bb_features",
                        "cfg_adjacency",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "FixedString(16)",
                        "UInt16",
                        "UInt16",
                        "UInt32",
                        "UInt16",
                        "UInt16",
                        "UInt16",
                        "UInt16",
                        "UInt16",
                        "UInt64",
                        "UInt64",
                        "UInt64",
                        "Nullable(FixedString(72))",
                        "Array(UInt8)",
                        "Array(Array(UInt16))",
                        "Array(UInt32)",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            # Table 6: Strings — reuse code_binja_strings_raw for cross-format correlation
            # DEX strings are MUTF-8; string_raw = string since no encoding difference
            if self.analysis_results.get("strings"):
                export["strings_raw"] = {
                    "table": "code_binja_strings_raw",
                    "data": [
                        [
                            self.analysis_results["sha256"],
                            s["string"],
                            s["string"],  # string_raw = string (MUTF-8 decoded to UTF-8)
                            s.get("string_encoding", "UTF8"),
                            s.get("string_offset", 0),
                            s.get("string_length", len(s["string"])),
                            s.get("string_length", len(s["string"])),  # string_raw_length = string_length
                            s.get("string_entropy", 0.0),
                        ]
                        for s in self.analysis_results["strings"]
                    ],
                    "column_names": [
                        "sha256",
                        "string",
                        "string_raw",
                        "string_encoding",
                        "string_offset",
                        "string_length",
                        "string_raw_length",
                        "string_entropy",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "String",
                        "String",
                        "LowCardinality(String)",
                        "UInt64",
                        "UInt32",
                        "UInt32",
                        "Float32",
                    ],
                }

            # Table 7: Analysis errors
            if self.analysis_results.get("analysis_errors"):
                export["analysis_errors"] = {
                    "table": "code_apk_analysis_errors",
                    "data": [
                        [
                            self.analysis_results["sha256"],
                            f.get("class_name"),
                            f.get("method_name"),
                            f.get("error_location", "unknown"),
                            f.get("error_message", ""),
                            f.get("error_type", "unknown"),
                            self.calculate_md5(
                                f"{f.get('error_message', '')}"
                                f"{f.get('class_name', '')}"
                                f"{f.get('method_name', '')}"
                                f"{f.get('error_location', 'unknown')}"
                            ),
                            "new",
                            now,
                        ]
                        for f in self.analysis_results["analysis_errors"]
                    ],
                    "column_names": [
                        "sha256",
                        "class_name",
                        "method_name",
                        "error_location",
                        "error_message",
                        "error_type",
                        "error_hash",
                        "status",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "Nullable(String)",
                        "Nullable(String)",
                        "LowCardinality(String)",
                        "Nullable(String)",
                        "Nullable(String)",
                        "FixedString(32)",
                        "Enum8('new'=1, 'investigating'=2, 'fixed'=3, 'wontfix'=4)",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            return export

        return None

    def tag(self) -> str:
        """Return the tag for this extractor."""
        return Tag.APK_DECOMPILED.value

    def get_clickhouse_table(self) -> str:
        """Not used directly as we're handling multiple tables."""
        pass