Jack Y. B. Lee

95 papers A* 2A 3B 26C 1Journal 44Unranked 19
YearRankTypeTitle / Venue / Authors
2025 B conf
IWQoS
Jiaqi Yao, Ke Liu, Guanghui Zhang, Jack Y. B. Lee, Theophilus A. Benson, Yungang Bao, Mingyu Chen
2025 J jnl
IEEE Trans. Mob. Comput.
Yuming Zhang, Shengtong Zhu, Yan Liu, Lingfeng Guo, Ji Li, Jack Y. B. Lee
2024 B conf
ICNP
Jupeng Zhang, Yan Liu, Jack Y. B. Lee, Shengtong Zhu
2024 J jnl
IEEE Trans. Mob. Comput.
Shengtong Zhu, Yan Liu, Lingfeng Guo, Yuming Zhang, Jack Y. B. Lee
2023 B conf
IWQoS
Jiaqi Yao, Ke Liu, Ting Liang, Theophilus A. Benson, Jack Y. B. Lee, Vaneet Aggarwal, Yungang Bao, Mingyu Chen
2023 J jnl
IEEE Trans. Mob. Comput.
Guanghui Zhang, Jie Zhang, Yan Liu, Haibo Hu, Jack Y. B. Lee, Vaneet Aggarwal
2023 J jnl
IEEE Trans. Serv. Comput.
Guanghui Zhang, Jie Zhang, Ke Liu, Jing Guo, Jack Y. B. Lee, Haibo Hu, Vaneet Aggarwal
2023 J jnl
IEEE Trans. Mob. Comput.
Yuming Zhang, Yan Liu, Lingfeng Guo, Jack Y. B. Lee
2023 J jnl
IEEE Trans. Mob. Comput.
Guanghui Zhang, Ke Liu, Haibo Hu, Vaneet Aggarwal, Jack Y. B. Lee
2023 B conf
ICNP
Shengtong Zhu, Yan Liu, Lingfeng Guo, Rudolf K. H. Ngan, Jack Y. B. Lee
2022 J jnl
IEEE Access
Nan Zhou, Jack Y. B. Lee
2021 J jnl
IEEE Trans. Parallel Distributed Syst.
Guanghui Zhang, Jack Y. B. Lee, Ke Liu, Haibo Hu, Vaneet Aggarwal
2021 B conf
IWQoS
Lingfeng Guo, Yan Liu, Wenzheng Yang, Yuming Zhang, Jack Y. B. Lee
2021 J jnl
IEEE Access
Lingfeng Guo, Jack Y. B. Lee
2020 J jnl
IEEE Access
Guanghui Zhang, Rudolf K. H. Ngan, Jack Y. B. Lee
2020 J jnl
IEEE Trans. Mob. Comput.
Guanghui Zhang, Jack Y. B. Lee
2020 J jnl
IEEE Open J. Commun. Soc.
Lioba Heimbach, Lingfeng Guo, Rudolf K. H. Ngan, Jack Y. B. Lee
2020 J jnl
IEEE Access
Lingfeng Guo, Jack Y. B. Lee
2019 J jnl
IEEE Trans. Commun.
Lei Deng, Yinghui He, Ying Zhang, Minghua Chen, Zongpeng Li, Jack Y. B. Lee, Ying Jun Zhang, Lingyang Song
2019 B conf
WCNC
Guanghui Zhang, Jack Y. B. Lee
2018 conf
Q2SWinet@MSWiM
Lingfeng Guo, Jack Y. B. Lee
2018 B conf
WCNC
Guanghui Zhang, Jack Y. B. Lee
2017 J jnl
CoRR
Lei Deng, Yinghui He, Ying Zhang, Minghua Chen, Zongpeng Li, Jack Y. B. Lee, Ying Jun Zhang, Lingyang Song
2017 J jnl
IEEE Trans. Mob. Comput.
Yan Liu, Jack Y. B. Lee
2016 A* conf
INFOCOM
Yan Liu, Jack Y. B. Lee
2016 B conf
IWQoS
Ke Liu, Zhuang Wang, Jack Y. B. Lee, Mingyu Chen, Lixin Zhang
2016 conf
BigMM
Victor K. C. Wu, Yan Liu, Jack Y. B. Lee
2016 J jnl
Multim. Tools Appl.
K. M. Chan, Jack Y. B. Lee
2016 C conf
CLUSTER
Zhuang Wang, Ke Liu, Yifan Shen, Jack Y. B. Lee, Mingyu Chen, Lixin Zhang
2016 J jnl
IEEE Trans. Mob. Comput.
Ke Liu, Jack Y. B. Lee
2016 B conf
WCNC
Yan Liu, Jack Y. B. Lee
2015 conf
Conf. Computing Frontiers
Ke Liu, Jack Y. B. Lee
2015 B conf
GLOBECOM
Yan Liu, Jack Y. B. Lee
2015 B conf
MASS
Lei Deng, Ying Zhang, Minghua Chen, Zongpeng Li, Jack Y. B. Lee, Ying Jun Zhang, Lingyang Song
2015 B conf
WiMob
Victor K. C. Wu, Yan Liu, Jack Y. B. Lee
2014 B conf
WiMob
Ke Liu, Jack Y. B. Lee
2014 J jnl
IEEE Trans. Mob. Comput.
Stanley C. F. Chan, K. M. Chan, Ke Liu, Jack Y. B. Lee
2014 B conf
GLOBECOM
Yan Liu, Jack Y. B. Lee
2014 conf
ICC
Yan Liu, Jack Y. B. Lee
2014 B conf
ICCCN
Ke Liu, Jack Y. B. Lee
2013 B conf
WiOpt
Ke Liu, Jack Y. B. Lee
2013 B conf
WCNC
Ke Liu, Jack Y. B. Lee
2011 B conf
WiMob
Stanley C. F. Chan, Jack Y. B. Lee
2011 B conf
IWCMC
Ke Liu, Jack Y. B. Lee
2010 conf
ICC
Yuan Pan, Jack Y. B. Lee
2010 conf
Peer-to-Peer Computing
M. L. Ma, Jack Y. B. Lee
2010 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Yang Y. Lin, Jack Y. B. Lee
2008 J jnl
Int. J. Embed. Syst.
P. H. Chan, Jack Y. B. Lee
2007 J jnl
Comput. Networks
Patrick P. Lam, Soung C. Liew, Jack Y. B. Lee
2007 J jnl
Multim. Tools Appl.
S. C. Hui, Jack Y. B. Lee
2007 J jnl
Comput. Networks
Ka Ki To, Jack Y. B. Lee
2007 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Ying Wai Wong, Jack Y. B. Lee, Victor O. K. Li, S.-H. Gary Chan
2006 conf
ICPP Workshops
V. T. Sam, P. Y. Ho, Jack Y. B. Lee
2006 B conf
GLOBECOM
P. Y. Ho, Jack Y. B. Lee
2006 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Chun Wai Kong, Jack Y. B. Lee, Mounir Hamdi, Victor O. K. Li
2005 A conf
MSWiM
Patrick P. Lam, Soung C. Liew, Jack Y. B. Lee
2005 J jnl
IEEE Trans. Multim.
Jack Y. B. Lee
2005 A conf
ICME
Ka Ki To, Jack Y. B. Lee, S.-H. Gary Chan
2005 conf
ICC
C. Y. Chan, Jack Y. B. Lee, Mounir Hamdi
2004 conf
ICC
Qixiang Pang, Soung Chang Liew, Jack Y. B. Lee, Shueng-Han Gary Chan
2004 conf
AINA (1)
L. S. Lam, Jack Y. B. Lee, Soung C. Liew, Wei Wang
2004 B conf
CCGRID
C. Y. Chan, Jack Y. B. Lee
2004 B conf
WCNC
Wei Wang, Soung C. Liew, Jack Y. B. Lee
2004 conf
ICC
Zhemin Ding, Mounir Hamdi, Jack Y. B. Lee, Victor O. K. Li
2004 conf
ICC
K.-W. Roger Cheuk, Shueng-Han Gary Chan, Jack Y. B. Lee
2004 J jnl
Wirel. Commun. Mob. Comput.
Qixiang Pang, Soung C. Liew, Jack Y. B. Lee, Victor C. M. Leung
2004 B conf
ICIP
Peter H. W. Wong, R. T. W. Hung, Jack Y. B. Lee, Soung C. Liew, C. S. Kim, R. T. Chin
2003 B conf
CCGRID
Tsz Kin Ho, Jack Y. B. Lee
2003 conf
Peer-to-Peer Computing
Tsz Kin Ho, Jack Y. B. Lee
2003 conf
ASAP
P. H. Chan, Jack Y. B. Lee
2003 A conf
ICME
Nera W. C. Liu, Jack Y. B. Lee
2003 conf
Euro-Par
C. Y. Chan, Jack Y. B. Lee
2003 conf
ICEIS (1)
Y. W. Wong, Jack Y. B. Lee
2003 J jnl
J. Inf. Sci. Eng.
Chun Wai Kong, Jack Y. B. Lee
2002 J jnl
IEEE J. Sel. Areas Commun.
Ho-pong Sze, Soung Chang Liew, Jack Y. B. Lee, D. C. S. Yip
2002 J jnl
IEEE Trans. Parallel Distributed Syst.
Jack Y. B. Lee, John C. S. Lui
2002 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Jack Y. B. Lee
2002 B conf
ICPADS
Jack Y. B. Lee, Raymond W. T. Leung
2002 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Jack Y. B. Lee, C. H. Lee
2002 J jnl
IEEE Trans. Multim.
Jack Y. B. Lee
2002 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Jack Y. B. Lee
2002 B conf
ICPADS
Chun Wai Kong, Jack Y. B. Lee
2002 J jnl
IEEE Trans. Multim.
Jack Y. B. Lee
2002 conf
ICME (1)
Jack Y. B. Lee, Raymond W. T. Leung
2001 J jnl
IEEE Commun. Lett.
Ho-pong Sze, Soung Chang Liew, Jack Y. B. Lee
2001 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Jack Y. B. Lee
2001 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Jack Y. B. Lee
2000 J jnl
IEEE Trans. Parallel Distributed Syst.
Jack Y. B. Lee, P. C. Wong
1999 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Jack Y. B. Lee
1999 J jnl
IEEE Commun. Lett.
Jack Y. B. Lee
1998 J jnl
J. Vis. Commun. Image Represent.
Jack Y. B. Lee, P. C. Wong
1998 J jnl
IEEE Multim.
Jack Y. B. Lee
1997 conf
ICC (2)
P. C. Wong, Jack Y. B. Lee
1996 A* conf
INFOCOM
Jack Y. B. Lee, P. C. Wong
1994 conf
Evo Workshops
Jack Y. B. Lee, P. C. Wong
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()