Xiao Peng

67 papers A* 1A 4B 2C 6Misc 2Journal 31Unranked 20
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Lei Wei, Xu Dong, Xiao Peng, Niantao Xie, Bin Wang
2026 J jnl
Trans. Inst. Meas. Control
Xiao Peng, Huaiqin Wu
2026 J jnl
Clust. Comput.
Xiao Peng, Zeng Saifeng
2026 J jnl
J. Comput. Appl. Math.
Xiao Peng, Yijing Wang, Zhiqiang Zuo
2026 J jnl
CoRR
Lei Wei, Jinpeng Ou, Xiao Peng, Bin Wang
2025 J jnl
Robotics Auton. Syst.
Yiming Zhao, Fenglei Han, Duanfeng Han, Xiao Peng, Wangyuan Zhao, Guihua Xia
2025 J jnl
IEEE Trans. Multim.
Xuan Yao, Xiao Peng, Junyu Gao, Zhaoquan Yuan, Xiao Wu, Changsheng Xu
2025 A conf
CP
Xiao Peng, Christine Solnon
2025 J jnl
CoRR
Xinyue Liu, Xiao Peng, Shuyue Yan, Yuntian Chen, Dongxiao Zhang, Zhixiao Niu, Hui-Min Wang, Xiaogang He
2025 J jnl
Frontiers Comput. Sci.
Dawei Yuan, Xiao Peng, Zijie Chen, Tao Zhang, Ruijia Lei
2025 J jnl
Int. J. Intell. Syst.
Qian Sun, Xiangyue Meng, Xiao Peng, Zhiyao Zhao, Jiping Xu, Huiyan Zhang, Li Wang, Jiabin Yu, Xianglan Guo
2025 J jnl
IEEE Robotics Autom. Lett.
Xiao Peng, François Schwarzentruber, Olivier Simonin, Christine Solnon
2025 C conf
DSD
Bastien Barbe, Xiao Peng, Anastasia Volkova, Florent de Dinechin
2024 J jnl
CoRR
Xiao Peng, Liang Chen
2024 conf
HICSS
Xiao Peng, Xixian Peng, Jingjun (David) Xu
2024 J jnl
CoRR
Xiao Peng, Tao Liu, Ying Wang
2024 C conf
SEKE
Xiao Peng, Xuefeng Zhang, Hanyu Zhao, Liangyu Chen
2024
Xiao Peng
2024 J jnl
CoRR
Xiao Peng, Xufan Geng
2023 conf
PACIS
Xiao Peng, Xixian Peng, David (Jingjun) Xu
2023 conf
SPCNC
Xiao Peng, Chaobing Huang
2023 conf
ICBEA
Xiao Peng, Yiran Kong, Zihan Yan, Yidi Zhu, Yi Xin
2023 J jnl
J. Ambient Intell. Humaniz. Comput.
Ximu Zeng, Xue Chen, Xiao Peng, Xiaoshan Zhang, Hao Wang, Zhengquan Xu
2023 J jnl
J. Artif. Intell. Res.
Xiao Peng, Olivier Simonin, Christine Solnon
2023 J jnl
Int. J. Intell. Syst.
Qian Sun, Xiao Peng, Xiaoyi Wang, Zhiyao Zhao, Jiping Xu, Li Wang, Huiyan Zhang, Jiabin Yu, Yuting Bai
2023 A conf
CP
Xiao Peng, Christine Solnon
2023 C conf
ICIS
Xiao Peng, Xixian Peng, David (Jingjun) Xu
2022 J jnl
Comput. Environ. Urban Syst.
Xiao Peng, Yihang Li, Yutian Si, Liyan Xu, Xinyi Liu, Dihua Li, Yu Liu
2022 conf
CSAI
Xiao Peng, Jixian Zhang
2022 J jnl
Frontiers Comput. Sci.
Hao Wang, Zhengquan Xu, Xiaoshan Zhang, Xiao Peng, Kaiju Li
2022 J jnl
Appl. Math. Comput.
Xiao Peng, Yijing Wang, Zhiqiang Zuo
2022 J jnl
Complex Intell. Syst.
Hao Wang, Xiao Peng, Yihang Xiao, Zhengquan Xu, Xian Chen
2022 conf
PETRA
Thijs Reuter, Hani Alers, Xiao Peng
2021 C conf
QRS
Zijie Chen, Tao Zhang, Xiao Peng
2021 conf
ESEC/SIGSOFT FSE
Nengwen Zhao, Honglin Wang, Zeyan Li, Xiao Peng, Gang Wang, Zhu Pan, Yong Wu, Zhen Feng, Xidao Wen, Wenchi Zhang, Kaixin Sui, Dan Pei
2021 conf
MMM (1)
Huan Shao, Zhaoquan Yuan, Xiao Peng, Xiao Wu
2021 A* conf
ACM Multimedia
Zhaoquan Yuan, Xiao Peng, Xiao Wu, Changsheng Xu
2021 A conf
ICME
Zhaoquan Yuan, Xiao Peng, Xiao Wu, Bing-Kun Bao, Changsheng Xu
2021 J jnl
Algorithms
Zhichao Sun, Kang Zhou, Xinzheng Yang, Xiao Peng, Rui Song
2021 A conf
CP
Xiao Peng, Christine Solnon, Olivier Simonin
2020 B conf
ICTAI
Weiqing Huang, Xiao Peng, Zhixin Shi, Yuru Ma
2020 conf
CSERC
Marcella Veldthuis, Hani Alers, Aleksandra Malinowska, Xiao Peng
2020 conf
ESEC/SIGSOFT FSE
Nengwen Zhao, Junjie Chen, Zhou Wang, Xiao Peng, Gang Wang, Yong Wu, Fang Zhou, Zhen Feng, Xiaohui Nie, Wenchi Zhang, Kaixin Sui, Dan Pei
2020 J jnl
IEEE Access
Ningfang Song, Fu Ma, Xiaxiao Wang, Wanqing Chen, Jia Yu, Xiao Peng
2020 conf
CIPAE
Rong Zhu, Xiao Peng, Qionghui Mei
2020 J jnl
Sensors
Keyi Li, Lintong Li, Nanlin Xu, Xiao Peng, Yingxin Zhou, Yufeng Yuan, Jun Song, Junle Qu
2020 conf
ICSE (SEIP)
Nengwen Zhao, Junjie Chen, Xiao Peng, Honglin Wang, Xinya Wu, Yuanzong Zhang, Zikai Chen, Xiangzhong Zheng, Xiaohui Nie, Gang Wang, Yong Wu, Fang Zhou, Wenchi Zhang, Kaixin Sui, Dan Pei
2020 conf
ICSE (Companion Volume)
Nengwen Zhao, Junjie Chen, Xiao Peng, Honglin Wang, Xinya Wu, Yuanzong Zhang, Zikai Chen, Xiangzhong Zheng, Xiaohui Nie, Gang Wang, Yong Wu, Fang Zhou, Wenchi Zhang, Kaixin Sui, Dan Pei
2019 Misc conf
Inscrypt
Weiqing Huang, Xiao Peng, Zhixin Shi
2019 B conf
ICTAI
Xiao Peng, Weiqing Huang, Zhixin Shi
2019 J jnl
Complex.
Huixin Tian, Minwei Shuai, Kun Li, Xiao Peng
2019 Misc conf
ICMLC
Kang Zhou, Xiao Peng, Zhong Guo
2019 J jnl
Int. J. Inf. Technol. Manag.
Xiao Peng
2019 conf
CF
Jianguo Jiang, Qiwen Wang, Zhixin Shi, Bin Lv, Wei Fan, Xiao Peng
2019 conf
ICSLT
Ren Ling, Xiao Peng
2017 conf
WSA
Martin Kurras, Lars Thiele, Xiao Peng, Naoto Ishii
2017 J jnl
Int. J. Inf. Commun. Technol.
Xiao Peng, Runtong Chen, Xilong Qu
2017 conf
5GWN
Ruichen Xu, Xiao Peng, Xiaobo Wang, Ji Fang, Bo Yuan
2016 conf
VTC Fall
Martin Kurras, Lars Thiele, Thomas Haustein, Xiao Peng, Masayuki Ariyoshi
2015 J jnl
Int. J. Grid Util. Comput.
Xilong Qu, Xiao Peng
2015 C conf
APCC
Xiao Peng, Toshiki Takeuchi, Masao Ikekawa
2014 J jnl
EURASIP J. Wirel. Commun. Netw.
Chenglin Zhao, Mengwei Sun, Bin Li, Long Zhao, Xiao Peng
2014 J jnl
Int. J. Internet Protoc. Technol.
Xiao Peng, Runtong Chen
2014 C conf
ICCC
Xiaofan Li, Qizhu Song, Hongbo Tao, Xiaoyong Liu, Sha Zhang, Xiaobo Wang, Qun Luo, Xiao Peng
2013 J jnl
J. Softw.
Rongliang Luo, Xiao Peng, Qianxi Lv, Minghui Wu, Bin Peng, Shuoping Wang, Ming Guo
2009 conf
WKDD
Xiao Peng, YuanYuan Li, Wu Deng
2003 conf
Storage and Retrieval for Media Databases
Xiao Peng, Shaoping Ma, Zhong Su, Liyun Ru
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()