Wai-Tian Tan

117 papers A* 4A 12B 26C 3Misc 10Journal 44Unranked 18
YearRankTypeTitle / Venue / Authors
2023 J jnl
IEEE Trans. Inf. Theory
Gustavo Kasper Facenda, M. Nikhil Krishnan, Elad Domanovitz, Silas L. Fong, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2023 J jnl
IEEE Trans. Commun.
Gustavo Kasper Facenda, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2023 J jnl
IEEE Trans. Inf. Theory
Gustavo Kasper Facenda, Elad Domanovitz, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2023 B conf
ISIT
Gustavo Kasper Facenda, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2022 J jnl
CoRR
Gustavo Kasper Facenda, M. Nikhil Krishnan, Elad Domanovitz, Silas L. Fong, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2022 J jnl
IEEE Trans. Inf. Theory
Silas L. Fong, Ashish Khisti, Baochun Li, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2022 J jnl
CoRR
Gustavo Kasper Facenda, Elad Domanovitz, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2022 J jnl
IEEE Trans. Multim.
Salma Emara, Silas L. Fong, Baochun Li, Ashish Khisti, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2022 B conf
ISIT
Gustavo Kasper Facenda, Elad Domanovitz, M. Nikhil Krishnan, Ashish Khisti, Silas L. Fong, Wai-Tian Tan, John G. Apostolopoulos
2022 J jnl
IEEE Trans. Inf. Theory
Elad Domanovitz, Ashish Khisti, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2021 J jnl
IEEE Trans. Commun.
Shi Su, Wai-Tian Tan, Xiaoqing Zhu, Rob Liston, Behnaam Aazhang
2021 J jnl
IEEE Trans. Wirel. Commun.
Yi Zhang, Akash S. Doshi, Rob Liston, Wai-Tian Tan, Xiaoqing Zhu, Jeffrey G. Andrews, Robert W. Heath Jr.
2021 Misc conf
ICASSP
Fen Wang, Gene Cheung, Yongchao Wang, Wai-Tian Tan
2021 B conf
ITW
Elad Domanovitz, Gustavo Kasper Facenda, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2021 B conf
ITW
M. Nikhil Krishnan, Gustavo Kasper Facenda, Elad Domanovitz, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2021 J jnl
IEEE Trans. Netw. Serv. Manag.
Shi Su, Wai-Tian Tan, Xiaoqing Zhu, Rob Liston, Herb Wildfeuer, Behnaam Aazhang
2021 J jnl
IEEE J. Sel. Areas Inf. Theory
Mahdi Haghifam, M. Nikhil Krishnan, Ashish Khisti, Xiaoqing Zhu, Wai-Tian Tan, John G. Apostolopoulos
2021 J jnl
CoRR
Cheng Yang, Gene Cheung, Wai-Tian Tan, Guangtao Zhai
2021 B conf
ISIT
Gustavo Kasper Facenda, Elad Domanovitz, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2021 J jnl
CoRR
Gustavo Kasper Facenda, Elad Domanovitz, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2021 J jnl
CoRR
Cheng Yang, Gene Cheung, Wai-Tian Tan, Guangtao Zhai
2020 J jnl
CoRR
Yi Zhang, Akash S. Doshi, Rob Liston, Wai-Tian Tan, Xiaoqing Zhu, Jeffrey G. Andrews, Robert W. Heath Jr.
2020 J jnl
IEEE Trans. Inf. Theory
Silas L. Fong, Ashish Khisti, Baochun Li, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2020 J jnl
IEEE Trans. Inf. Theory
Silas L. Fong, Ashish Khisti, Baochun Li, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2020 B conf
ISIT
Elad Domanovitz, Ashish Khisti, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2020 J jnl
CoRR
Elad Domanovitz, Ashish Khisti, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2019 A* conf
INFOCOM
Shi Su, Wai-Tian Tan, Xiaoqing Zhu, Rob Liston
2019 B conf
ICIP
Yaqi Wang, Mehdi Nikkhah, Xiaoqing Zhu, Wai-Tian Tan, Rob Liston
2019 A* conf
ACM Multimedia
Silas L. Fong, Salma Emara, Baochun Li, Ashish Khisti, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2019 J jnl
CoRR
Silas L. Fong, Salma Emara, Baochun Li, Ashish Khisti, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2019 B conf
ISIT
Silas L. Fong, Ashish Khisti, Baochun Li, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2019 J jnl
CoRR
Silas L. Fong, Ashish Khisti, Baochun Li, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2019 J jnl
IEEE Trans. Inf. Theory
Silas L. Fong, Ashish Khisti, Baochun Li, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2019 B conf
ISIT
Silas L. Fong, Ashish Khisti, Baochun Li, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2018 conf
MIPR
Fanyi Duanmu, Xin Feng, Xiaoqing Zhu, Wai-Tian Tan, Yao Wang
2018 B conf
ICIP
Sen-ching Samson Cheung, Herb Wildfeuer, Mehdi Nikkhah, Xiaoqing Zhu, Wai-Tian Tan
2018 J jnl
IEEE Trans. Inf. Theory
Ahmed Badr, Devin Lui, Ashish Khisti, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2018 B conf
ISIT
Silas L. Fong, Ashish Khisti, Baochun Li, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2018 J jnl
CoRR
Silas L. Fong, Ashish Khisti, Baochun Li, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2018 conf
WIFS
Sen-Ching S. Cheung, Muhammad Usman Rafique, Wai-Tian Tan
2018 J jnl
ACM Trans. Multim. Comput. Commun. Appl.
Tuo Yu, Haiming Jin, Wai-Tian Tan, Klara Nahrstedt
2017 A* conf
INFOCOM
Ahmed Badr, Ashish Khisti, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2017 J jnl
IEEE Trans. Inf. Theory
Ahmed Badr, Pratik Patil, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2017 B conf
ISIT
Ahmed Badr, Devin Lui, Ashish Khisti, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2017 J jnl
IEEE Signal Process. Mag.
Ahmed Badr, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2017 B conf
ICIP
Zheng Jiang, Xiaoqing Zhu, Wai-Tian Tan, Rob Liston
2016 B conf
ICIP
Xiaoqing Zhu, Wai-Tian Tan, John G. Apostolopoulos, Ahmed Badr, Ashish Khisti
2016 conf
GLOBECOM Workshops
Devin Lui, Ahmed Badr, Ashish Khisti, Wai-Tian Tan, Xiaoqing Zhu, John G. Apostolopoulos
2015 B conf
ICIP
Wai-Tian Tan, Herb Wildfeuer, John G. Apostolopoulos
2015 J jnl
IEEE J. Sel. Top. Signal Process.
Ahmed Badr, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2014 J jnl
IEEE Trans. Multim.
Bruno Macchiavello, Camilo C. Dorea, Edson M. Hung, Gene Cheung, Wai-Tian Tan
2013 Misc conf
ACSSC
Pratik Patil, Ahmed Badr, Ashish Khisti, Wai-Tian Tan
2013 Misc conf
ICASSP
Wai-Tian Tan, Ramin Samadani, Bowon Lee, Mary Baker
2013 A conf
ICME
Ju Shen, Wai-Tian Tan
2013 J jnl
IEEE Commun. Mag.
Ivan V. Bajic, Gene Cheung, Pascal Frossard, Jörn Ostermann, Wai-Tian Tan
2013 J jnl
CoRR
Ahmed Badr, Pratik Patil, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2013 J jnl
CoRR
Bruno Macchiavello, Camilo C. Dorea, Edson M. Hung, Gene Cheung, Wai-Tian Tan
2013 J jnl
IEEE Trans. Multim.
Yunlong Feng, Gene Cheung, Wai-Tian Tan, Patrick Le Callet, Yusheng Ji
2013 J jnl
CoRR
Ahmed Badr, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2013 B conf
ISIT
Ahmed Badr, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2013 conf
CWIT
Ahmed Badr, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2013 B conf
ICIP
Bruno Macchiavello, Camilo C. Dorea, Edson M. Hung, Gene Cheung, Wai-Tian Tan
2013 A conf
MobiSys
Wai-Tian Tan, Mary Baker, Bowon Lee, Ramin Samadani
2013 A* conf
INFOCOM
Ahmed Badr, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2013 Misc conf
SenSys
Wai-Tian Tan, Mary Baker, Bowon Lee, Ramin Samadani
2012 C conf
VCIP
Yunlong Feng, Gene Cheung, Wai-Tian Tan, Yusheng Ji
2012 conf
Visual Information Processing and Communication
Bruno Macchiavello, Camilo C. Dorea, Edson M. Hung, Gene Cheung, Wai-Tian Tan
2012 B conf
ICIP
Bruno Macchiavello, Camilo C. Dorea, Edson M. Hung, Gene Cheung, Wai-Tian Tan
2012 Misc conf
ICASSP
Mina Makar, Wai-Tian Tan
2012 J jnl
CoRR
Ahmed Badr, Ashish Khisti, Wai-Tian Tan, John G. Apostolopoulos
2011 A conf
MMSys
David P. Varodayan, Wai-Tian Tan
2011 B conf
ICIP
Wai-Tian Tan, Gene Cheung, Yi Ma
2011 A conf
ICME
Yunlong Feng, Gene Cheung, Wai-Tian Tan, Yusheng Ji
2010 conf
Visual Information Processing and Communication
Wai-Tian Tan
2010 Misc conf
ICASSP
Wai-Tian Tan, Andrew J. Patti
2010 Misc conf
ICASSP
Debargha Mukherjee, Wai-Tian Tan
2010 Misc conf
ICASSP
Gene Cheung, Wai-Tian Tan
2009 J jnl
IEEE Trans. Multim.
Wai-Tian Tan, Gene Cheung, Antonio Ortega, Bo Shen
2009 Misc conf
ICASSP
Chuohao Yeo, Wai-Tian Tan, Debargha Mukherjee
2009 B conf
ICIP
Ramin Samadani, Wai-Tian Tan
2008 J jnl
IEEE Multim.
Bo Shen, Wai-Tian Tan, Frederic Huve
2008 B conf
ICIP
Wai-Tian Tan, Bo Shen, Andrew J. Patti, Gene Cheung
2007 conf
ICIP (4)
Wai-Tian Tan, Eric Setton, John G. Apostolopoulos
2007 conf
ICC
Gene Cheung, Wai-Tian Tan
2007 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Gene Cheung, Wai-Tian Tan, Connie Chan
2006 A conf
ICME
Songqing Chen, Bo Shen, Wai-Tian Tan, Susie J. Wee, Xiaodong Zhang
2006 B conf
ICIP
Wai-Tian Tan, Bo Shen
2006 A conf
ICME
Gene Cheung, Wai-Tian Tan
2006 B conf
ICIP
Wai-Tian Tan, Gene Cheung
2005 conf
ICIP (3)
Wai-Tian Tan, Bo Shen
2005 conf
USENIX ATC, General Track
Weidong Cui, Randy H. Katz, Wai-Tian Tan
2005 A conf
ACSAC
Weidong Cui, Randy H. Katz, Wai-Tian Tan
2005 A conf
ICME
John G. Apostolopoulos, Mitchell D. Trott, Ton Kalker, Wai-Tian Tan
2005 A conf
ICME
Gene Cheung, Wai-Tian Tan
2005 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Jacob Chakareski, John G. Apostolopoulos, Susie J. Wee, Wai-Tian Tan, Bernd Girod
2005 J jnl
IEEE Trans. Multim.
Gene Cheung, Wai-Tian Tan, Takeshi Yoshimura
2005 C conf
ISM
Wai-Tian Tan, Gene Cheung
2004 J jnl
Adv. Comput.
Stan McClellan, Stephen Low, Wai-Tian Tan
2004 conf
ICASSP (5)
Jacob Chakareski, John G. Apostolopoulos, Wai-Tian Tan, Susie J. Wee, Bernd Girod
2004 J jnl
IEEE Trans. Multim.
Gene Cheung, Wai-Tian Tan, Takeshi Yoshimura
2004 B conf
ICIP
Gene Cheung, Takashi Sakamoto, Wai-Tian Tan
2004 A conf
ICME
Jacob Chakareski, John G. Apostolopoulos, Susie J. Wee, Wai-Tian Tan, Bernd Girod
2003 B conf
WCNC
Gene Cheung, Wai-Tian Tan, Takeshi Yoshimura
2003 A conf
ICME
Allen Miu, John G. Apostolopoulos, Wai-Tian Tan, Mitchell D. Trott
2003 A conf
ICME
Susie J. Wee, John G. Apostolopoulos, Wai-Tian Tan, Sumit Roy
2002 conf
ICME (2)
Gene Cheung, Wai-Tian Tan
2002 Misc conf
ICASSP
John G. Apostolopoulos, Wai-Tian Tan, Susie J. Wee, Gregory W. Wornell
2002 conf
ICME (2)
Susie J. Wee, Wai-Tian Tan, John G. Apostolopoulos, Minoru Etoh
2002 conf
ICIP (2)
John G. Apostolopoulos, Susie J. Wee, Wai-Tian Tan
2002 conf
ICIP (1)
Gene Cheung, Wai-Tian Tan, Takeshi Yoshimura
2002 C conf
IEEE Workshop on Multimedia Signal Processing
Gene Cheung, Wai-Tian Tan, Takeshi Yoshimura
2001 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Wai-Tian Tan, Avideh Zakhor
1999 conf
ICIP (1)
Wai-Tian Tan, Avideh Zakhor
1999 J jnl
IEEE Trans. Multim.
Wai-Tian Tan, Avideh Zakhor
1998 conf
ICIP (3)
Wai-Tian Tan, Avideh Zakhor
1997 B conf
Image Processing
Anindo Banerjea, Wai-Tian Tan, Avideh Zakhor
1996 conf
ICIP (1)
Wai-Tian Tan, E. Chan, Avideh Zalchor
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()