Weifeng Cao

29 papers B 3C 2Journal 21Unranked 3
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Xiaoyan Lei, Wenlong Zhang, Biao Luo, Hui Liang, Weifeng Cao, Qiuting Lin
2026 J jnl
IEEE Trans. Image Process.
Xiaoyan Lei, Wenlong Zhang, Biao Luo, Hui Liang, Weifeng Cao, Qiuting Lin
2025 C conf
CloudCom
Weifeng Cao, Yu Wu, Jiaxin Chen, Jie Wang, Tiehao Wang, Tong Liu
2025 J jnl
CoRR
Xinyu Xie, Weifeng Cao, Jun Shi, Yangyang Hu, Hui Liang, Wanyong Liang, Xiaoliang Qian
2025 J jnl
Vis. Comput.
Weifeng Cao, Xiaoyan Lei, Jun Shi, Wanyong Liang, Jie Liu, Zongfei Bai
2025 J jnl
Appl. Soft Comput.
Weifeng Cao, Xiaoyan Lei, Yong Jiang, Zongfei Bai, Xiaoliang Qian
2025 J jnl
IEEE Internet Things J.
Weifeng Cao, Yulong Zou, Bin Li, Jia Zhu
2025 C conf
CloudCom
Mingguang Shen, Xuanrui Xiong, Dan Hu, Xiaoqian Xi, Weifeng Cao, Xinhui Wang
2024 J jnl
J. Supercomput.
Jun Shi, Peiyi Zhang, Sihan Du, Wanyong Liang, Weifeng Cao, Qingbo Li, Hechao Hou
2024 conf
CVPR Workshops
Xiaoyan Lei, Wenlong Zhang, Weifeng Cao
2024 J jnl
CoRR
Xiaoyan Lei, Wenlong Zhang, Weifeng Cao
2024 J jnl
J. Circuits Syst. Comput.
Jun Shi, Wei Zhu, Xiaoning Li, Weifeng Cao
2024 J jnl
CoRR
Weifeng Cao, Xiaoyan Lei, Jun Shi, Wanyong Liang, Jie Liu, Zongfei Bai
2024 J jnl
Int. J. Syst. Assur. Eng. Manag.
Jun Shi, Peiyi Zhang, Hechao Hou, Weifeng Cao, Lintao Zhou
2024 J jnl
J. Real Time Image Process.
Yong Jiang, Shuai Wang, Weifeng Cao, Wanyong Liang, Jun Shi, Lintao Zhou
2024 J jnl
IEEE Syst. J.
Weifeng Cao, Yulong Zou, Zhen Yang, Jia Zhu, Bin Li
2024 conf
CVPR Workshops
Bin Ren, Yawei Li, Nancy Mehta, Radu Timofte, Hongyuan Yu, Cheng Wan, Yuxin Hong, Bingnan Han, Zhuoyuan Wu, Yajun Zou, Yuqing Liu, Jizhe Li, Keji He, Chao Fan, Heng Zhang, Xiaolin Zhang, Xuanwu Yin, Kunlong Zuo, Bohao Liao, Peizhe Xia, Long Peng, Zhibo Du, Xin Di, Wangkai Li, Yang Wang, Wei Zhai, Renjing Pei, Jiaming Guo, Songcen Xu, Yang Cao, Zhengjun Zha, Yan Wang, Yi Liu, Qing Wang, Gang Zhang, Liou Zhang, Shijie Zhao, Long Sun, Jinshan Pan, Jiangxin Dong, Jinhui Tang, Xin Liu, Min Yan, Qian Wang, Menghan Zhou, Yiqiang Yan, Yixuan Liu, Wensong Chan, Dehua Tang, Dong Zhou, Li Wang, Lu Tian, Emad Barsoum, Bohan Jia, Junbo Qiao, Yunshuai Zhou, Yun Zhang, Wei Li, Shaohui Lin, Shenglong Zhou, Binbin Chen, Jincheng Liao, Suiyi Zhao, Zhao Zhang, Bo Wang, Yan Luo, Yanyan Wei, Feng Li, Mingshen Wang, Yawei Li, Jinhan Guan, Dehua Hu, Jiawei Yu, Qisheng Xu, Tao Sun, Long Lan, Kele Xu, Xin Lin, Jingtong Yue, Lehan Yang, Shiyi Du, Lu Qi, Chao Ren, Zeyu Han, Yuhan Wang, Chaolin Chen, Haobo Li, Mingjun Zheng, Zhongbao Yang, Lianhong Song, Xingzhuo Yan, Minghan Fu, Jingyi Zhang, Baiang Li, Qi Zhu, Xiaogang Xu, Dan Guo, Chunle Guo, Jiadi Chen, Huanhuan Long, Chunjiang Duanmu, Xiaoyan Lei, Jie Liu, Weilin Jia, Weifeng Cao, Wenlong Zhang, Yanyu Mao, Ruilong Guo, Nihao Zhang, Manoj Pandey, Maksym Chernozhukov, Giang Le, Shuli Cheng, Hongyuan Wang, Ziyan Wei, Qingting Tang, Liejun Wang, Yongming Li, Yanhui Guo, Hao Xu, Akram Khatami-Rizi, Ahmad Mahmoudi-Aznaveh, Chih-Chung Hsu, Chia-Ming Lee, Yi-Shiuan Chou, Amogh Joshi, Nikhil Akalwadi, Sampada Malagi, Palani Yashaswini, Chaitra Desai, Ramesh Ashok Tabib, Ujwala Patil, Uma Mudenagudi
2023 conf
CVPR Workshops
Longguang Wang, Yulan Guo, Yingqian Wang, Juncheng Li, Shuhang Gu, Radu Timofte, Ming Cheng, Haoyu Ma, Qiufang Ma, Xiaopeng Sun, Shijie Zhao, Xuhan Sheng, Yukang Ding, Ming Sun, Xing Wen, Dafeng Zhang, Jia Li, Fan Wang, Zheng Xie, Zongyao He, Zidian Qiu, Zilin Pan, Zhihao Zhan, Xingyuan Xian, Zhi Jin, Yuanbo Zhou, Wei Deng, Ruofeng Nie, Jiajun Zhang, Qinquan Gao, Tong Tong, Kexin Zhang, Junpei Zhang, Rui Peng, Yanbiao Ma, Licheng Jiao, Haoran Bai, Lingshun Kong, Jinshan Pan, Jiangxin Dong, Jinhui Tang, Pu Cao, Tianrui Huang, Lu Yang, Qing Song, Bingxin Chen, Chunhua He, Meiyun Chen, Zijie Guo, Shaojuan Luo, Chengzhi Cao, Kunyu Wang, Fanrui Zhang, Qiang Zhang, Nancy Mehta, Subrahmanyam Murala, Akshay Dudhane, Yujin Wang, Lingen Li, Garas Gendy, Nabil Sabor, Jingchao Hou, Guanghui He, Junyang Chen, Hao Li, Yukai Shi, Zhijing Yang, Wenbin Zou, Yunchen Zhang, Mingchao Jiang, Zhongxin Yu, Ming Tan, Hongxia Gao, Ziwei Luo, Fredrik K. Gustafsson, Zheng Zhao, Jens Sjölund, Thomas B. Schön, Jingxiang Chen, Bo Yang, XiSheryl Zhang, Chenghua Li, Weijun Yuan, Zhan Li, Ruting Deng, Jintao Zeng, Pulkit Mahajan, Sahaj Mistry, Shreyas Chatterjee, Vinit Jakhetiya, Badri N. Subudhi, Sunil Prasad Jaiswal, Zhao Zhang, Huan Zheng, Suiyi Zhao, Yangcheng Gao, Yanyan Wei, Bo Wang, Gen Li, Aijin Li, Lei Sun, Ke Chen, Congling Tang, Yunzhe Li, Jun Chen, Yuan-Chun Chiang, Yi-Chung Chen, Zhi-Kai Huang, Hao-Hsiang Yang, I-Hsiang Chen, Sy-Yen Kuo, Yiheng Wang, Gang Zhu, Xingyi Yang, Songhua Liu, Yongcheng Jing, Xingyu Hu, Jianwen Song, Changming Sun, Arcot Sowmya, Seung Ho Park, Xiaoyan Lei, Jingchao Wang, Chenbo Zhai, Yufei Zhang, Weifeng Cao, Wenlong Zhang
2023 J jnl
IEEE Trans. Veh. Technol.
Bin Li, Zhen Yang, Yulong Zou, Jia Zhu, Weifeng Cao, Chenguang Shi
2022 J jnl
IEEE Trans. Veh. Technol.
Weifeng Cao, Yulong Zou, Zhen Yang, Bin Li, Yun Lin, Yong Li, Wei Wu, Lizhe Liu
2021 J jnl
IEEE Trans. Wirel. Commun.
Bin Li, Yulong Zou, Jia Zhu, Weifeng Cao
2019 J jnl
IEEE Access
Hang Wu, Yulong Zou, Weifeng Cao, Zhong Chen, Theodoros A. Tsiftsis, Manav R. Bhatnagar, Rodrigo C. de Lamare
2019 J jnl
IEEE Trans. Commun.
Bin Li, Yulong Zou, Jianjiang Zhou, Fei Wang, Weifeng Cao, Yu-Dong Yao
2019 J jnl
IEEE Trans. Commun.
Bin Li, Jianjiang Zhou, Yulong Zou, Fei Wang, Weifeng Cao
2019 J jnl
IET Commun.
Bin Li, Jianjiang Zhou, Yulong Zou, Fei Wang, Weifeng Cao
2018 J jnl
IEEE Access
Weifeng Cao, Yulong Zou, Zhen Yang, Jia Zhu
2017 B conf
GLOBECOM
Weifeng Cao, Yulong Zou, Zhen Yang, Jia Zhu
2016 B conf
GLOBECOM
Weifeng Cao, Yulong Zou, Zhen Yang
2004 B conf
PIMRC
Weifeng Cao, Wenbo Wang
redb/extractors/js_extractors/js_xray.py
← Index redb/extractors/js_extractors/js_xray.py python
"""Subprocess wrapper for the bundled js-x-ray Node bridge.

Mirrors `js_deobfuscator.py`: shell out to a Node script with a per-sample
timeout, kill the process group on hang, demote `FileNotFoundError` to debug
(missing tool is routine — the host either has Node + the bundled package
installed or it doesn't), and return a structured result on success.

The bridge lives at `redb/extractors/js_extractors/scripts/js-xray-runner.js`.
Operators install the JS dependency once with `npm install` in that directory
(or override the path with `JS_XRAY_RUNNER_PATH`).

Configuration (env vars):
    JS_XRAY_RUNNER_PATH   Path to the Node bridge script (default: bundled).
    JS_XRAY_TIMEOUT       Seconds before the subprocess is killed. Default: 30.

`run(source, log)` returns `XRayResult(obfuscator, warnings)` on a successful
analysis, or `XRayResult(None, [])` for any non-success path (binary missing,
timeout, parse failure, etc.). The two unsuccessful states are
indistinguishable to the caller on purpose — they all collapse to "no
js-x-ray verdict, fall back to heuristic".
"""

from __future__ import annotations

import json
import os
import signal
import subprocess
import tempfile
from dataclasses import dataclass, field
from typing import List, Optional

# Bundled bridge: redb/extractors/js_extractors/scripts/js-xray-runner.js
_DEFAULT_RUNNER = os.path.join(
    os.path.dirname(__file__), "scripts", "js-xray-runner.js"
)
_DEFAULT_NODE = "node"
_DEFAULT_TIMEOUT_SECS = 30


@dataclass
class XRayResult:
    """Parsed js-x-ray output. `obfuscator` is the recognised family name
    (e.g. "jsfuck", "obfuscator.io") or None when js-x-ray did not flag the
    code. `warnings` carries every {kind, value} pair the analyser produced;
    the heuristic uses it as a corroborating signal. `avg_identifier_length`
    is js-x-ray's own AST-derived figure — used as a fallback for the
    heuristic's `avg_identifier_length<2` strong signal when pyjsparser
    can't parse the source (anything ES2015+ trips it)."""

    obfuscator: Optional[str] = None
    warnings: List[dict] = field(default_factory=list)
    avg_identifier_length: Optional[float] = None

    @property
    def flagged(self) -> bool:
        return self.obfuscator is not None


def _empty() -> XRayResult:
    return XRayResult(obfuscator=None, warnings=[])


def run(source: str, log) -> XRayResult:
    if not source:
        return _empty()

    runner = os.getenv("JS_XRAY_RUNNER_PATH", _DEFAULT_RUNNER)
    node_bin = os.getenv("JS_XRAY_NODE_BIN", _DEFAULT_NODE)
    timeout = int(os.getenv("JS_XRAY_TIMEOUT", str(_DEFAULT_TIMEOUT_SECS)))

    if not os.path.exists(runner):
        log.debug(f"js-x-ray runner not found at {runner}")
        return _empty()

    # Skip the subprocess entirely when the JS dependency isn't installed.
    # Without this, every call to a host that has `node` but never ran
    # `npm install` next to the runner would still fork node, get a require
    # error, and exit nonzero — wasted ~50–200ms per JS sample (and per test).
    runner_dir = os.path.dirname(runner)
    if not os.path.isdir(os.path.join(runner_dir, "node_modules", "@nodesecure", "js-x-ray")):
        log.debug(f"@nodesecure/js-x-ray not installed in {runner_dir}")
        return _empty()

    tmp_path = None
    try:
        with tempfile.NamedTemporaryFile(
            suffix=".js", mode="w", delete=False, encoding="utf-8"
        ) as tmp:
            tmp.write(source)
            tmp_path = tmp.name

        try:
            process = subprocess.Popen(
                [node_bin, runner, tmp_path],
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                preexec_fn=os.setsid,
            )
            try:
                stdout, stderr = process.communicate(timeout=timeout)
            except subprocess.TimeoutExpired:
                # Kill the whole process group so any node helpers die too.
                try:
                    os.killpg(os.getpgid(process.pid), signal.SIGTERM)
                    process.wait(timeout=5)
                except Exception:
                    try:
                        os.killpg(os.getpgid(process.pid), signal.SIGKILL)
                    except Exception:
                        pass
                log.warning(f"js-x-ray timed out after {timeout}s")
                return _empty()

            if process.returncode != 0:
                err = stderr.decode("utf-8", errors="replace").strip()
                log.debug(f"js-x-ray exited {process.returncode}: {err}")
                return _empty()

            text = stdout.decode("utf-8", errors="replace").strip()
            if not text:
                return _empty()

            try:
                payload = json.loads(text)
            except json.JSONDecodeError as e:
                log.warning(f"js-x-ray emitted non-JSON output: {e}")
                return _empty()

            obfuscator = payload.get("obfuscator")
            warnings = payload.get("warnings") or []
            if not isinstance(warnings, list):
                warnings = []

            ids_avg = payload.get("idsLengthAvg")
            if not isinstance(ids_avg, (int, float)):
                ids_avg = None

            return XRayResult(
                obfuscator=obfuscator,
                warnings=warnings,
                avg_identifier_length=ids_avg,
            )
        finally:
            if tmp_path:
                try:
                    os.unlink(tmp_path)
                except Exception:
                    pass
    except FileNotFoundError:
        log.debug(f"node binary not found at {node_bin}")
        return _empty()
    except Exception as e:
        log.error(f"js-x-ray subprocess error: {e}")
        return _empty()