Kai Zou

77 papers A* 14A 2C 1Misc 1Journal 45Unranked 14
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Tao Yu, Yujia Yang, Haopeng Jin, Junhao Gong, Xinlong Chen, Yuxuan Zhou, Shanbin Zhang, Jiabing Yang, Xinming Wang, Hongzhu Yi, Ping Nie, Kai Zou, Zhang Zhang, Yan Huang, Liang Wang, Yeshani, Ruiwen Tao, Jin Ma, Haijin Liang, Jinwen Luo
2026 A* conf
AAAI
Kai Zou, Hongbo Liu, Dian Zheng, Jianxiong Gao, Zhiwei Zhao, Bin Liu
2026 J jnl
CoRR
Kai Zou, Hongbo Liu, Dian Zheng, Jianxiong Gao, Zhiwei Zhao, Bin Liu
2026 J jnl
Inf. Fusion
Muhammad Sher Afgan, Bin Liu, Mamoona Naveed Asghar, Wajahat Khalid, Kai Zou, Dianmo Sheng
2026 J jnl
CoRR
Kai Zou, Dian Zheng, Hongbo Liu, Tiankai Hang, Bin Liu, Nenghai Yu
2026 J jnl
CoRR
Zhuofeng Li, Dongfu Jiang, Xueguang Ma, Haoxiang Zhang, Ping Nie, Yuyu Zhang, Kai Zou, Jianwen Xie, Yu Zhang, Wenhu Chen
2026 J jnl
CoRR
Jiarong Liang, Zhiheng Lyu, Zijie Liu, Xiangchao Chen, Ping Nie, Kai Zou, Wenhu Chen
2025 J jnl
CoRR
Dian Zheng, Manyuan Zhang, Hongyu Li, Kai Zou, Hongbo Liu, Ziyu Guo, Kaituo Feng, Yexin Liu, Ying Luo, Yan Feng, Peng Pei, Xunliang Cai, Hongsheng Li
2025 J jnl
CoRR
Zijian Chen, Xueguang Ma, Shengyao Zhuang, Ping Nie, Kai Zou, Andrew Liu, Joshua Green, Kshama Patel, Ruoxi Meng, Mingyi Su, Sahel Sharifymoghaddam, Yanxi Li, Haoran Hong, Xinyu Shi, Xuye Liu, Nandan Thakur, Crystina Zhang, Luyu Gao, Wenhu Chen, Jimmy Lin
2025 J jnl
CoRR
Shan Zhang, Aotian Chen, Kai Zou, Jindong Gu, Yuan Xue, Anton van den Hengel
2025 J jnl
CoRR
Pingzhi Li, Morris Yu-Chao Huang, Zhen Tan, Qingquan Song, Jie Peng, Kai Zou, Yu Cheng, Kaidi Xu, Tianlong Chen
2025 J jnl
CoRR
Yanpeng Sun, Shan Zhang, Wei Tang, Aotian Chen, Piotr Koniusz, Kai Zou, Yuan Xue, Anton van den Hengel
2025 A* conf
CVPR
Dar-Yen Chen, Hmrishav Bandyopadhyay, Kai Zou, Yi-Zhe Song
2025 J jnl
CoRR
Dar-Yen Chen, Hmrishav Bandyopadhyay, Kai Zou, Yi-Zhe Song
2025 J jnl
CoRR
Shan Zhang, Aotian Chen, Yanpeng Sun, Jindong Gu, Yi-Yu Zheng, Piotr Koniusz, Kai Zou, Anton van den Hengel, Yuan Xue
2025 A* conf
AAAI
Chenchen Yang, Hao Wu, Tao Shen, Kai Zou, Siqi Sun
2025 A* conf
ICML
Shan Zhang, Aotian Chen, Yanpeng Sun, Jindong Gu, Yi-Yu Zheng, Piotr Koniusz, Kai Zou, Anton van den Hengel, Yuan Xue
2025 J jnl
Vis. Comput.
Kai Zou, Lianghai Jin, Xiangyang Xu
2025 J jnl
CoRR
Kai Zou, Ziqi Huang, Yuhao Dong, Shulin Tian, Dian Zheng, Hongbo Liu, Jingwen He, Bin Liu, Yu Qiao, Ziwei Liu
2025 A* conf
ICML
Zijie Qiu, Jiaqi Wei, Xiang Zhang, Sheng Xu, Kai Zou, Zhi Jin, Zhiqiang Gao, Nanqing Dong, Siqi Sun
2025 J jnl
CoRR
Zijie Qiu, Jiaqi Wei, Xiang Zhang, Sheng Xu, Kai Zou, Zhi Jin, Zhiqiang Gao, Nanqing Dong, Siqi Sun
2025 A* conf
EMNLP
Yubo Wang, Ping Nie, Kai Zou, Lijun Wu, Wenhu Chen
2025 J jnl
CoRR
Yubo Wang, Ping Nie, Kai Zou, Lijun Wu, Wenhu Chen
2025 J jnl
CoRR
Dian Zheng, Ziqi Huang, Hongbo Liu, Kai Zou, Yinan He, Fan Zhang, Yuanhan Zhang, Jingwen He, Wei-Shi Zheng, Yu Qiao, Ziwei Liu
2025 J jnl
CoRR
Dongfu Jiang, Yi Lu, Zhuofeng Li, Zhiheng Lyu, Ping Nie, Haozhe Wang, Alex Su, Hui Chen, Kai Zou, Chao Du, Tianyu Pang, Wenhu Chen
2025 J jnl
CoRR
Yuansheng Ni, Songcheng Cai, Xiangchao Chen, Jiarong Liang, Zhiheng Lyu, Jiaqi Deng, Kai Zou, Ping Nie, Fei Yuan, Xiang Yue, Wenhu Chen
2025 conf
EMNLP (Findings)
Yuansheng Ni, Ping Nie, Kai Zou, Xiang Yue, Wenhu Chen
2025 J jnl
CoRR
Yuansheng Ni, Ping Nie, Kai Zou, Xiang Yue, Wenhu Chen
2025 A* conf
EMNLP
Yiming Jia, Jiachen Li, Xiang Yue, Bo Li, Ping Nie, Kai Zou, Wenhu Chen
2025 J jnl
CoRR
Yiming Jia, Jiachen Li, Xiang Yue, Bo Li, Ping Nie, Kai Zou, Wenhu Chen
2024 Misc conf
ICMLC
Hanzhong Xu, Dianliang Wu, Kai Zou, Qihang Yu, Haiwen Yu
2024 J jnl
Comput. Aided Civ. Infrastructure Eng.
Yan Gao, Tianlong Zhang, Caiyiyi Zhu, Shusheng Yang, Paul M. Schonfeld, Kai Zou, Jialing Zhang, Ying Zhu, Ping Wang, Qing He
2024 A conf
CIKM
Chang Su, Jiexing Qi, He Yan, Kai Zou, Zhouhan Lin
2024 J jnl
CoRR
Chang Su, Jiexing Qi, He Yan, Kai Zou, Zhouhan Lin
2024 J jnl
CoRR
Xiangpeng Wan, Haicheng Deng, Kai Zou, Shiqi Xu
2024 J jnl
IEEE Access
Miaocheng Yang, Kai Zou, Yihang Guo, Xin Wei
2024 conf
ECCV (69)
Xiaofeng Wu, Velibor Bojkovic, Bin Gu, Kun Suo, Kai Zou
2024 J jnl
CoRR
Xiaofeng Wu, Velibor Bojkovic, Bin Gu, Kun Suo, Kai Zou
2024 conf
BIBM
Pengju Tang, Dawei Dai, Kai Zou, Xionghui Yang, Guoyin Wang
2024 J jnl
CoRR
Meng Fang, Xiangpeng Wan, Fei Lu, Fei Xing, Kai Zou
2024 J jnl
CoRR
Yao Fu, Yinsicheng Jiang, Yeqi Huang, Ping Nie, Zhan Lu, Leyang Xue, Congjie He, Man-Kit Sit, Jilong Xue, Li Dong, Ziming Miao, Kai Zou, Edoardo M. Ponti, Luo Mai
2024 conf
OFC
Zifan Hao, Kai Zou, Yun Meng, Thomas Descamps, Adrian Iovan, Val Zwiller, Xiaolong Hu
2024 J jnl
IEEE Trans. Knowl. Data Eng.
Kai Zou, Xike Xie, Haoyun Li, X. Sean Wang
2024 J jnl
CoRR
Dar-Yen Chen, Hmrishav Bandyopadhyay, Kai Zou, Yi-Zhe Song
2024 conf
OFC
Yun Meng, Yanqing Shi, Kai Zou, Youjian Song, Xiaolong Hu
2024 conf
OFC
Kai Zou, Yun Meng, Zifan Hao, Xiaolong Hu
2024 conf
ICAICE
Kai Gao, Kai Zou, Shiyu Wang, Zhao Sun, Mengru Wang
2024 A* conf
NeurIPS
Xingyu Cui, Huanjing Yue, Song Li, Xiangjun Yin, Yusen Hou, Yun Meng, Kai Zou, Xiaolong Hu, Jingyu Yang
2023 conf
BIC
Simeng Wang, Kai Zou, Ziqian Wang, Suwan Zhu, Fan Yang
2023 conf
EMNLP (Findings)
Xiang Fang, Daizong Liu, Wanlong Fang, Pan Zhou, Yu Cheng, Keke Tang, Kai Zou
2023 J jnl
Sensors
Kai Zou, Simeng Wang, Ziqian Wang, Hongliang Zou, Fan Yang
2023 A* conf
EMNLP
Andrea Sottana, Bin Liang, Kai Zou, Zheng Yuan
2023 J jnl
CoRR
Andrea Sottana, Bin Liang, Kai Zou, Zheng Yuan
2023 J jnl
CoRR
He Yan, Xinyao Hu, Xiangpeng Wan, Chengyu Huang, Kai Zou, Shiqi Xu
2023 A* conf
CVPR
Zenghui Yuan, Pan Zhou, Kai Zou, Yu Cheng
2022 A* conf
ICDE
Kai Zou, Xike Xie, Qi Li, Deyu Kong
2022 J jnl
CoRR
Kai Zou, Xike Xie, Qi Li, Deyu Kong
2022 J jnl
CoRR
Hanxue Liang, Zhiwen Fan, Rishov Sarkar, Ziyu Jiang, Tianlong Chen, Kai Zou, Yu Cheng, Cong Hao, Zhangyang Wang
2022 A* conf
WWW
Ran Gao, Xike Xie, Kai Zou, Torben Bach Pedersen
2022 A* conf
NeurIPS
Hanxue Liang, Zhiwen Fan, Rishov Sarkar, Ziyu Jiang, Tianlong Chen, Kai Zou, Yu Cheng, Cong Hao, Zhangyang Wang
2022 J jnl
Complex Intell. Syst.
Xuchong Liu, Jianian Zhu, Kai Zou
2022 J jnl
IEEE Access
Yihang Guo, Kai Zou, Miaocheng Yang, Chang Liu
2022 A* conf
AAAI
Daizong Liu, Xiaoye Qu, Yinzhen Wang, Xing Di, Kai Zou, Yu Cheng, Zichuan Xu, Pan Zhou
2022 J jnl
CoRR
Daizong Liu, Xiaoye Qu, Yinzhen Wang, Xing Di, Kai Zou, Yu Cheng, Zichuan Xu, Pan Zhou
2021 conf
WISE (2)
Qi Li, Kai Zou, Deyu Kong, Huhao Guan, Xike Xie
2021 conf
OFC
Nan Hu, Yifan Feng, Liang Xu, Yun Meng, Kai Zou, Samuel Gyger, Stephan Steinhauer, Val Zwiller, Xiaolong Hu
2020 J jnl
BMC Bioinform.
Du Zhang, Qi Hu, Xinxing Liu, Kai Zou, Emmanuel Konadu Sarkodie, Xueduan Liu, Fei Gao
2020 J jnl
IEEE Trans. Ind. Electron.
Kai Zou, Ghulam Mohy-ud-din, Ashish P. Agalgaonkar, Kashem M. Muttaqi, Sarath Perera
2020 J jnl
IEEE Trans. Knowl. Data Eng.
Xike Xie, Kai Zou, Xingjun Hao, Torben Bach Pedersen, Peiquan Jin, Wei Yang
2019 J jnl
Sci. China Inf. Sci.
Shang Xiang, Lining Xing, Ling Wang, Kai Zou
2019 conf
ICIG (1)
Kai Zou, Ming Yin, Weitian Huang, Yiqiu Zeng
2019 conf
EMNLP/IJCNLP (1)
Jason W. Wei, Kai Zou
2019 J jnl
CoRR
Jason W. Wei, Kai Zou
2015 conf
NAS
Meng Zhang, Fei Wu, Changsheng Xie, You Zhou, Kai Zou
2014 J jnl
IEEE Trans. Smart Grid
Kai Zou, Ashish P. Agalgaonkar, Kashem M. Muttaqi, Sarath Perera
2013 C conf
FUSION
Tusi Chowdhury, Parham Aarabi, Weijian Zhou, Yuan Zhonglin, Kai Zou
2013 A conf
ICME
Tusi Chowdhury, Parham Aarabi, Weijian Zhou, Yuan Zhonglin, Kai Zou
redb/extractors/js_extractor.py
← Index redb/extractors/js_extractor.py python
import logging
import re
from abc import ABCMeta, abstractmethod

from redb.extractors.extractor import Extractor
from redb.extractors.js_extractors.js_context import JSContext, _text_entropy

logger = logging.getLogger(__name__)

# ESM is recognised by line-anchored `import ... from "..."` / bare side-effect
# `import "..."` / top-level `export ...`. Anchored at line start to avoid
# matching the substring inside string literals or comments.
_ESM_PATTERN = re.compile(
    r'(?m)^\s*(?:'
    r'import\s+[^;\n]*?\bfrom\s+[\'"]'
    r'|import\s+[\'"][^\'"]+[\'"]'
    r'|export\s+(?:default\b|\{|\*|const\b|let\b|var\b|function\b|class\b|async\b)'
    r')'
)


@abstractmethod
class JSExtractor(Extractor, metaclass=ABCMeta):
    """Base class for JavaScript file extractors.

    Every JSExtractor reads its raw materials (bytes / decoded source / line
    list / scan_source results / pyjsparser AST / text entropy) from a shared
    `JSContext`. When workers.py drives the JS pipeline it builds one context
    per sample and threads it into every extractor via `context=`. When tests
    or other callers instantiate an extractor directly, the constructor builds
    a fresh context from `(filepath, source=...)`.

    All historical instance attributes (`self.binary`, `self.js_source`,
    `self.lines`) and helpers (`self._decode_source`, `self._parse_ast`,
    `self._calculate_text_entropy`) are preserved as thin delegators so
    existing extractor code keeps working unchanged.
    """

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        known_benign=False,
        known_malicious=False,
        source=None,
        context=None,
    ):
        if context is None:
            context = JSContext.from_path(filepath, log=log, source=source)
        elif source is not None and context.source != source:
            log.warning(
                "JSExtractor received both `source=` and `context=` with "
                "differing source; ignoring source kwarg"
            )
        self._context = context

        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            known_benign=known_benign,
            known_malicious=known_malicious,
        )

    @property
    def binary(self):
        return self._context.raw_bytes

    @property
    def js_source(self):
        return self._context.source

    @property
    def lines(self):
        return self._context.lines

    def _decode_source(self):
        """Back-compat shim — the context already decoded once at construction.

        Kept so any external caller using the historical method name keeps
        working without touching the underlying bytes again.
        """
        return self._context.source

    def _parse_ast(self):
        """Return the shared pyjsparser AST (or None if unavailable)."""
        return self._context.ast

    def _calculate_text_entropy(self, text):
        """Shannon text entropy for `text`.

        When `text` is the context's own source we read the cached value;
        otherwise we compute fresh. JSStringsExtractor calls this on arbitrary
        decoded substrings, so the fresh-compute path must remain available.
        """
        if text is self._context.source:
            return self._context.text_entropy
        return _text_entropy(text)

    def _detect_environment(self):
        """Detect the target JS runtime environment."""
        src = self.js_source
        if not src:
            return "unknown"

        # WScript/WSH indicators
        wscript_patterns = [
            'WScript.', 'WSH.', 'ActiveXObject', 'Scripting.FileSystemObject',
            'WScript.Shell', 'ADODB.Stream',
        ]
        for p in wscript_patterns:
            if p in src:
                return "wscript"

        # Browser-extension APIs — checked before generic browser/worker because
        # `chrome.*` and `browser.runtime` are distinctive of MV2/MV3 extensions
        extension_patterns = [
            'chrome.runtime', 'chrome.tabs', 'chrome.storage',
            'chrome.webRequest', 'browser.runtime', 'browser.tabs',
        ]
        for p in extension_patterns:
            if p in src:
                return "browser_extension"

        # Service / Web Workers — worker-only APIs that don't appear in regular
        # browser pages (a generic browser script would use `window.` or
        # `document.`, never `self.importScripts` or `caches.match`)
        worker_patterns = [
            "self.addEventListener('fetch'", 'self.addEventListener("fetch"',
            'self.importScripts', 'self.skipWaiting',
            'caches.match', 'caches.open',
        ]
        for p in worker_patterns:
            if p in src:
                return "service_worker"

        # Deno runtime
        if 'Deno.' in src:
            return "deno"

        # Node.js indicators
        node_patterns = [
            'require(', 'module.exports', 'process.env', '__dirname',
            '__filename', 'Buffer.', 'child_process',
        ]
        for p in node_patterns:
            if p in src:
                return "node"

        # Browser indicators
        browser_patterns = [
            'document.', 'window.', 'navigator.', 'localStorage',
            'sessionStorage', 'XMLHttpRequest', 'addEventListener',
        ]
        for p in browser_patterns:
            if p in src:
                return "browser"

        return "unknown"

    def _detect_script_type(self):
        """Detect the script type/format."""
        src = self.js_source
        if not src:
            return "unknown"

        stripped = src.lstrip()

        # JScript.Encode payload — must be checked first since the encoded
        # body can't be classified any other way
        if stripped.startswith('#@~^'):
            return "jse"

        # WSF / HTA live in the first few KB of an HTML-ish wrapper
        head_lower = stripped[:4096].lower()

        # Windows Script File — XML wrapper around one or more <script> blocks
        if ('<job' in head_lower or '<package' in head_lower) and '<script' in head_lower:
            return "wsf"

        # HTML Application — distinct from generic embedded_html because HTAs
        # run under mshta.exe with full WSH/ActiveX access
        if '<hta:application' in head_lower or 'application/hta' in head_lower:
            return "hta"

        if stripped.startswith('<!') or stripped.startswith('<html') or '<script' in stripped[:2000]:
            return "embedded_html"

        if 'WScript.' in src or 'WSH.' in src:
            return "wscript"

        if _ESM_PATTERN.search(src):
            return "esm"

        if 'require(' in src or 'module.exports' in src:
            return "node_module"

        return "standalone"