Wei Zhang

71 papers A* 3A 15B 9C 2Journal 22Unranked 20
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Wei Liu, Chao Peng, Pengfei Gao, Aofan Liu, Wei Zhang, Haiyan Zhao, Zhi Jin
2025 A conf
ISSRE
Mengdan Fan, Wei Zhang, Haiyan Zhao, Zhi Jin
2024 J jnl
CoRR
Mengdan Fan, Wei Zhang, Haiyan Zhao, Zhi Jin
2024 A* conf
ASE
Mengdan Fan, Wei Zhang, Haiyan Zhao, Guangtai Liang, Zhi Jin
2024 A conf
ICSME
Ailun Yu, Yifan Shi, Bo Shen, Wei Zhang, Haiyan Zhao, Guangtai Liang, Tianyong Wu, Zhi Jin
2024 J jnl
Proc. ACM Manag. Data
Wei Liu, Wei Zhang, Haiyan Zhao, Zhi Jin
2024 A* conf
ASE
Wei Liu, Ailun Yu, Daoguang Zan, Bo Shen, Wei Zhang, Haiyan Zhao, Zhi Jin, Qianxiang Wang
2024 J jnl
CoRR
Wei Liu, Ailun Yu, Daoguang Zan, Bo Shen, Wei Zhang, Haiyan Zhao, Zhi Jin, Qianxiang Wang
2024 J jnl
Sci. China Inf. Sci.
Wenjie Chu, Ailun Yu, Wei Zhang, Haiyan Zhao, Zhi Jin
2023 J jnl
IEEE Trans Autom. Sci. Eng.
Wenjie Chu, Wei Zhang, Haiyan Zhao, Zhi Jin, Hong Mei
2022 J jnl
Sci. China Inf. Sci.
Wenjie Chu, Wei Zhang, Haiyan Zhao, Zhi Jin, Hong Mei
2021 J jnl
J. Comput. Sci. Technol.
Chun-Hui Wang, Zhi Jin, Wei Zhang, Didar Zowghi, Hai-Yan Zhao, Wenpin Jiao
2021 A conf
ICSME
Bo Shen, Wei Zhang, Ailun Yu, Zhao Wei, Guangtai Liang, Haiyan Zhao, Zhi Jin
2021 J jnl
CoRR
Wenjie Chu, Wei Zhang, Haiyan Zhao, Zhi Jin, Hong Mei
2021 conf
SPLASH-E
Yingjie Fu, Jonathan Osei-Owusu, Angello Astorga, Zirui Neil Zhao, Wei Zhang, Tao Xie
2021 conf
ESEC/SIGSOFT FSE
Bo Shen, Wei Zhang, Christian Kästner, Haiyan Zhao, Zhao Wei, Guangtai Liang, Zhi Jin
2021 A* conf
ASE
Bo Shen, Wei Zhang, Ailun Yu, Yifan Shi, Haiyan Zhao, Zhi Jin
2020 J jnl
Empir. Softw. Eng.
Chunhui Wang, Wei Zhang, Haiyan Zhao, Zhi Jin
2019 J jnl
Proc. ACM Program. Lang.
Bo Shen, Wei Zhang, Haiyan Zhao, Guangtai Liang, Zhi Jin, Qianxiang Wang
2018 J jnl
CoRR
Bo Shen, Wei Zhang, Haiyan Zhao, Zhi Jin, Yanhong Wu
2017 conf
ICAC
Tianqi Zhao, Wei Zhang, Haiyan Zhao, Zhi Jin
2017 conf
APRES
Chunhui Wang, Wei Zhang, Haiyan Zhao, Zhi Jin
2017 J jnl
CoRR
Zhuoqun Yang, Wei Zhang, Haiyan Zhao, Zhi Jin
2016 conf
Internetware
Yi Jiang, Shijun Wang, Kai Fu, Wei Zhang, Haiyan Zhao
2016 conf
Internetware
Yang Liu, Wei Zhang, Wenpin Jiao
2016 A conf
RE
Yi Jiang, Shijun Wang, Kai Fu, Wei Zhang, Haiyan Zhao
2015 conf
Internetware
Wenjing Yu, Haiyan Zhao, Wei Zhang, Zhi Jin
2015 conf
APRES
Kai Fu, Shijun Wang, Haiyan Zhao, Wei Zhang
2015 conf
Internetware
Yi Jiang, Wei Zhang, Haiyan Zhao
2015 conf
MoDRE
Tianqi Zhao, Haiyan Zhao, Wei Zhang, Zhi Jin
2015 J jnl
IEEE Softw.
Wei Zhang, Haiyan Zhao, Yi Jiang, Zhi Jin
2015 J jnl
计算机科学
Yi Jiang, Wei Zhang, Haiyan Zhao, Zhi Jin
2014 J jnl
Sci. China Inf. Sci.
Chun Liu, Yue Wang, Wei Zhang, Zhi Jin
2014 J jnl
J. Comput. Sci. Technol.
Bo Wang, Yingfei Xiong, Zhenjiang Hu, Haiyan Zhao, Wei Zhang, Hong Mei
2014 conf
ICGSE Workshops
Yi Jiang, Wei Zhang, Haiyan Zhao
2014 B conf
SPLC
Wenjing Yu, Wei Zhang, Haiyan Zhao, Zhi Jin
2014 conf
Internetware
Tianqi Zhao, Haiyan Zhao, Wei Zhang, Zhi Jin
2013 conf
Internetware
Tianqi Zhao, Haiyan Zhao, Wei Zhang
2013 B conf
ICSR
Long Li, Haiyan Zhao, Wei Zhang, Weichao Wang
2013 conf
APSEC (1)
Chun Liu, Wei Zhang, Haiyan Zhao, Zhi Jin
2013 J jnl
Sci. China Inf. Sci.
Wei Zhang, Li Yi, Haiyan Zhao, Zhi Jin
2013 B conf
COMPSAC
Bin Yin, Zhi Jin, Wei Zhang, Haiyan Zhao, Bo Wei
2013 conf
Middleware Demo & Poster Track
Huaqian Cai, Wei Zhang, Ying Zhang, Gang Huang
2013 B conf
SPLC
Bo Wang, Leonardo Teixeira Passos, Yingfei Xiong, Krzysztof Czarnecki, Haiyan Zhao, Wei Zhang
2013 J jnl
Frontiers Comput. Sci.
Bo Wang, Zhenjiang Hu, Qiang Sun, Haiyan Zhao, Yingfei Xiong, Wei Zhang, Hong Mei
2012 C conf
APSEC
Chun Liu, Wei Zhang, Haiyan Zhao, Zhi Jin
2012 A conf
RE
Li Yi, Haiyan Zhao, Wei Zhang, Zhi Jin
2012 A conf
RE
Long Li, Haiyan Zhao, Wei Zhang
2012 A conf
RE
Li Yi, Wei Zhang, Haiyan Zhao, Zhi Jin, Hong Mei
2012 A conf
OOPSLA
Ying Zhang, Gang Huang, Xuanzhe Liu, Wei Zhang, Hong Mei, Shunxiang Yang
2012 J jnl
Frontiers Comput. Sci.
Ying Zhang, Gang Huang, Wei Zhang, Xuanzhe Liu, Hong Mei
2011 B conf
ICSR
Wei Zhang, Haiyan Zhao, Hong Mei
2011 A conf
MoDELS
Hui Song, Gang Huang, Franck Chauvel, Wei Zhang, Yanchun Sun, Weizhong Shao, Hong Mei
2011 B conf
ICSR
Wei Zhang, Haiyan Zhao, Zhi Jin, Hong Mei
2010 conf
MoDELS (1)
Bo Wang, Yingfei Xiong, Zhenjiang Hu, Haiyan Zhao, Wei Zhang, Hong Mei
2010 conf
Internetware
Bo Wang, Haiyan Zhao, Wei Zhang, Zhi Jin, Hong Mei
2010 conf
Internetware
Li Yi, Wei Zhang, Haiyan Zhao, Zhi Jin, Hong Mei
2010 A conf
RE
Chun Liu, Yue Wang, Wei Zhang, Zhi Jin
2010 conf
LWI@ASE
Bo Wang, Zhenjiang Hu, Yingfei Xiong, Haiyan Zhao, Wei Zhang, Hong Mei
2009 A conf
RE
Bo Wang, Wei Zhang, Haiyan Zhao, Zhi Jin, Hong Mei
2009 conf
Internetware
Haiyan Zhao, Li Yi, Wei Zhang, Hong Mei
2009 B conf
ICSR
Hua Yan, Wei Zhang, Haiyan Zhao, Hong Mei
2008 B conf
ICSR
Wei Zhang, Hua Yan, Haiyan Zhao, Zhi Jin
2006 J jnl
Softw. Syst. Model.
Hong Mei, Wei Zhang, Haiyan Zhao
2006 J jnl
Requir. Eng.
Wei Zhang, Hong Mei, Haiyan Zhao
2006 A conf
RE
Kun Chen, Haiyan Zhao, Wei Zhang, Hong Mei
2005 A conf
RE
Wei Zhang, Hong Mei, Haiyan Zhao
2005 A conf
RE
Kun Chen, Wei Zhang, Haiyan Zhao, Hong Mei
2005 A conf
MoDELS
Wei Zhang, Hong Mei, Haiyan Zhao, Jie Yang
2004 C conf
ICFEM
Wei Zhang, Haiyan Zhao, Hong Mei
2003 B conf
COMPSAC
Hong Mei, Wei Zhang, Fang Gu
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"