Wei ShangGuan

77 papers B 1C 1Journal 38Unranked 37
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Internet Things J.
Xiao Liang, Wei ShangGuan, Junjie Chen, Linguo Chai, Yue Cao, Tong Zhao, Yuanyuan Zha
2026 J jnl
Expert Syst. Appl.
Jiali Peng, Wei ShangGuan, Junjie Chen, Cong Peng, Mohammad Ali Arman, Baigen Cai, Chris M. J. Tampère
2025 conf
ITSC
Rui Luo, Wei ShangGuan, Linguo Chai, Junjie Chen
2025 conf
ITSC
Feijie Gong, Wei ShangGuan, Hongyu Song, Yichen Dun, Baigen Cai
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Hongyu Song, Wei ShangGuan, Junjie Chen, Weizhi Qiu, Baigen Cai
2025 J jnl
IEEE Internet Things J.
Yuanyuan Zha, Wei ShangGuan, Junjie Chen, Linguo Chai, Weizhi Qiu, Antonio M. López
2025 J jnl
Reliab. Eng. Syst. Saf.
Cong Peng, Wei ShangGuan, Zongyao Wang, Jiali Peng, Linguo Chai, Yulong Xing, Baigen Cai
2025 conf
ITSC
Yuening Zhu, Wei ShangGuan, Linguo Chai, Jujie Chen, Siyu Zhu, Weijie Wang, Hongyu Song
2025 J jnl
IEEE Trans. Intell. Veh.
Yue Cao, Wei ShangGuan, Arnoud Visser, Junjie Chen, Linguo Chai, Baigen Cai
2024 conf
ITSC
Baigen Cai, Yan Cao, Linguo Chai, Wei ShangGuan, Yue Cao, Jin Gao, Junjie Chen
2024 J jnl
IEEE Trans. Instrum. Meas.
Zongyao Wang, Wei ShangGuan, Cong Peng, Yueyue Meng, Linguo Chai, Baigen Cai
2024 conf
ICSRS
Zongyao Wang, Wei ShangGuan, Weijun Xu, Cong Peng, Yulong Xing, Enrico Zio
2024 J jnl
CoRR
Tong Zhao, Nikolce Murgovski, Wei ShangGuan
2024 J jnl
CoRR
Feini Huang, Shijie Jiang, Lu Li, Yongkun Zhang, Ye Zhang, Ruqing Zhang, Qingliang Li, Danxi Li, Wei ShangGuan, Yongjiu Dai
2024 J jnl
IEEE Trans. Intell. Veh.
Weishu Wang, Wei ShangGuan, Jiang Liu, Junjie Chen
2024 J jnl
Expert Syst. Appl.
Qinglian Li, Cheng Zhang, Wei ShangGuan, Zhongwang Wei, Hua Yuan, Jinlong Zhu, Xiaoning Li, Lu Li, Gan Li, Pingping Liu, Yongjiu Dai
2024 conf
ITSC
Hongyu Song, Wei ShangGuan, Weihao Liu, Weizhi Qiu, Junjie Chen, Baigen Cai, Yongqiang Liu
2024 J jnl
IEEE Trans. Intell. Transp. Syst.
Yichen Dun, Wei ShangGuan, Hongyu Song, Baigen Cai
2024 C conf
IV
Yuanyuan Zha, Wei ShangGuan, Linguo Chai
2023 J jnl
CoRR
Jiali Peng, Wei ShangGuan, Linguo Chai, Rui Luo, Ke Gao
2023 conf
ITSC
Tong Zhao, Wei ShangGuan, Linguo Chai, Yue Cao
2023 J jnl
Environ. Model. Softw.
Feini Huang, Wei ShangGuan, Qingliang Li, Lu Li, Ye Zhang
2023 J jnl
Comput. Aided Civ. Infrastructure Eng.
Weizhi Qiu, Wei ShangGuan, Baigen Cai, Linguo Chai
2023 conf
ITSC
Yue Cao, Wei ShangGuan, Lu Zhang, Yuanyuan Zha, Tong Zhao, Linguo Chai
2023 J jnl
IEEE Intell. Transp. Syst. Mag.
Yue Cao, Wei ShangGuan, Baigen Cai, Linguo Chai, Weizhi Qiu
2023 J jnl
Remote. Sens.
Ye Zhang, Feini Huang, Lu Li, Qinglian Li, Yongkun Zhang, Wei ShangGuan
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Hongyu Song, Wei ShangGuan, Weizhi Qiu, Sheng Zhao, Steven Harrod
2022 J jnl
Remote. Sens.
Taoning Mao, Wei ShangGuan, Qingliang Li, Lu Li, Ye Zhang, Feini Huang, Jianduo Li, Wei Liu, Ruqing Zhang
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Wei ShangGuan, Rui Luo, Hongyu Song, Jing Sun
2022 J jnl
CoRR
Zhengwei Bai, Peng Hao, Wei ShangGuan, Baigen Cai, Matthew J. Barth
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Zhengwei Bai, Peng Hao, Wei ShangGuan, Baigen Cai, Matthew J. Barth
2022 J jnl
Comput. Electron. Agric.
Qingliang Li, Zhongyan Li, Wei ShangGuan, Xuezhi Wang, Lu Li, Fanhua Yu
2022 conf
ITSC
Linguo Chai, Haojie Pang, Wei ShangGuan, Baigen Cai
2022 J jnl
IEEE Intell. Transp. Syst. Mag.
Weizhi Qiu, Wei ShangGuan, Linguo Chai, Baigen Cai, Junjie Chen
2021 J jnl
IEEE Trans. Veh. Technol.
Yu Du, Wei ShangGuan, Linguo Chai
2021 J jnl
IEEE Trans. Veh. Technol.
Wei Jiang, Yizhi Yu, Kaibin Zong, Baigen Cai, Chris Rizos, Jian Wang, Dan Liu, Wei ShangGuan
2021 J jnl
Reliab. Eng. Syst. Saf.
Yu Zang, Wei ShangGuan, Baigen Cai, Huashen Wang, Michael G. Pecht
2020 conf
ITSC
Weizhi Qiu, Wei ShangGuan, Baigen Cai, Linguo Chai, Junjie Chen
2020 J jnl
IEEE Access
Wei ShangGuan, Yu Zang, Huashen Wang, Michael G. Pecht
2019 J jnl
IEEE Trans. Veh. Technol.
Wei Jiang, Dan Liu, Baigen Cai, Chris Rizos, Jian Wang, Wei ShangGuan
2019 conf
ITSC
Hongyu Song, Wei ShangGuan, Bai-gen Cai, Sheng Zhao
2019 J jnl
IEEE Access
Bin Chen, Baigen Cai, Wei ShangGuan, Jian Wang
2019 J jnl
CoRR
Zhengwei Bai, Baigen Cai, Wei ShangGuan, Linguo Chai
2019 J jnl
CoRR
Zhengwei Bai, Baigen Cai, Wei ShangGuan, Linguo Chai
2019 conf
ITSC
Yue Cao, Wei ShangGuan, Xinhang Shang, Weizhi Qiu, Yu Du
2019 conf
CAA SAFEPROCESS
Yueyue Meng, Wei ShangGuan, Baigen Cai, Junzheng Zhang
2019 conf
ITSC
Junjie Chen, Wei ShangGuan, Baigen Cai, Manoj Bhat, Yu Du
2019 J jnl
IEEE Access
Wei ShangGuan, Yu Du, Linguo Chai
2019 conf
CAA SAFEPROCESS
Zhengjiao Li, Baigen Cai, Jiang Liu, Wei ShangGuan, Debiao Lu, Linfu Zhu
2019 conf
ITSC
Yu Du, Wei ShangGuan, Dingchao Rong, Linguo Chai
2019 conf
ITSC
Yahui Yuan, Jian Wang, Wei ShangGuan, Baigen Cai, Hongyu Song
2019 conf
CAA SAFEPROCESS
Yahui Yuan, Baigen Cai, Wei ShangGuan, Xiyao Shi
2018 J jnl
IEEE Trans. Veh. Technol.
Wei Jiang, Sirui Chen, Baigen Cai, Jian Wang, Wei ShangGuan, Chris Rizos
2018 conf
ITSC
Sheng Zhao, Bai-gen Cai, Wei ShangGuan
2018 conf
ITSC
Wei Zheng, Zhuolin Hu, Tao Tang, Jidong Lv, Wei ShangGuan
2018 conf
PLANS
Debiao Lu, Shuxian Jiang, Baigen Cai, Wei ShangGuan, Xiankai Liu, Jin Luan
2018 conf
ITSC
Tuo Wang, Jidong Lv, Baiquan Wei, Tao Tang, Wei ShangGuan
2017 J jnl
Sensors
Linguo Chai, Baigen Cai, Wei ShangGuan, Jian Wang, Huashen Wang
2017 conf
ITSC
Linguo Chai, Baigen Cai, Wei ShangGuan, Jian Wang
2017 conf
ITSC
Wei ShangGuan, Junzheng Zhang, Juan Feng, Baigen Cai
2016 conf
ITSC
Yu Zang, Wei ShangGuan, Huashen Wang, Baigen Cai
2016 J jnl
IEEE Trans. Intell. Transp. Syst.
Xi-Hui Yan, Baigen Cai, Bin Ning, Wei ShangGuan
2016 conf
ITSC
Wei ShangGuan, Bin Shi, Baigen Cai, Jian Wang, Yu Zang
2016 conf
ITSC
Wei ShangGuan, Xin-Yuan Liu, Hong-Qian Guo, Baigen Cai, Jian Wang, Yu Zang
2016 conf
ITSC
Wei ShangGuan, Fuwei Hu, Min Yuan, Baigen Cai, Jian Wang
2015 J jnl
Comput. Sci. Inf. Syst.
Jian Wang, Baigen Cai, Jiang Liu, Wei ShangGuan
2015 J jnl
IEEE Trans. Intell. Transp. Syst.
Wei ShangGuan, Xi-Hui Yan, Baigen Cai, Jian Wang
2014 conf
ITSC
Baigen Cai, Congcong Wang, Wei ShangGuan, Jian Wang
2014 conf
ITSC
Wei ShangGuan, Hong-Qian Guo, Peng-Hui Liu, Baigen Cai, Jian Wang
2014 conf
ITSC
Baigen Cai, Sen Yang, Wei ShangGuan, Jian Wang
2014 conf
ITSC
Baigen Cai, Ziru Zheng, Wei ShangGuan, Jian Wang
2013 conf
ITSC
Jiang Liu, Baigen Cai, Jian Wang, Wei ShangGuan
2013 B conf
Intelligent Vehicles Symposium
Yingying Fan, Baigen Cai, Wei ShangGuan, Jian Wang, Daming Jiang
2011 conf
ITSC
Xi-Hui Yan, Jian Wang, Bai-gen Cai, Wei ShangGuan
2011 conf
ITSC
Chen-xi Gou, Bai-gen Cai, Wei ShangGuan, Jian Wang
2009 conf
CSIE (5)
Jian Wang, Wei ShangGuan, Bo-gen Cai, Dewang Chen
2007 conf
LSMS (1)
Yanling Hao, Wei ShangGuan, Yi Zhu, Yanhong Tang
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"