Haewoon Nam

100 papers B 6C 2Journal 50Unranked 42
YearRankTypeTitle / Venue / Authors
2026 conf
ICAIIC
Bingxin Wei, Haewoon Nam
2026 J jnl
IEEE Open J. Commun. Soc.
Dost Muhammad Saqib Bhatti, Dongho Seo, Yifang Shi, Haewoon Nam
2026 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Xintao Duan, Sen Li, Zhao Wang, Bingxin Wei, Haewoon Nam, Chuan Qin
2026 conf
ICAIIC
Shivani Sanjay Kolekar, Jisoo Shin, Haewoon Nam, Kyungbaek Kim
2026 J jnl
IEEE Trans Autom. Sci. Eng.
Weidong Huang, Xiaobin Xu, Haewoon Nam, Ziqian Kong, Zehui Zhang, Jianfang Meng
2026 conf
ICAIIC
Zhiyuan Nan, Yifang Shi, Haewoon Nam
2025 conf
ICAIIC
Donghyun Kim, Jaerock Kwon, Haewoon Nam
2025 J jnl
IEEE Access
Muhammad Haris, Haewoon Nam
2025 J jnl
IEEE Access
Jaehyeok Yoon, Siho Lee, Woojin Yun, Haewoon Nam
2025 conf
ICAIIC
Zhiyuan Nan, Haewoon Nam
2025 J jnl
Frontiers Inf. Technol. Electron. Eng.
Xintao Duan, Chun Li, Bingxin Wei, Guoming Wu, Chuan Qin, Haewoon Nam
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Jaehyeok Yoon, Haewoon Nam
2024 conf
ICTC
Sukhyun Jung, Zhiyuan Nan, Haewoon Nam
2024 J jnl
Neurocomputing
Xintao Duan, Chun Li, Bingxin Wei, Guoming Wu, Chuan Qin, Haewoon Nam
2024 conf
ICTC
Kyuhan Kim, Kiwan Park, Haewoon Nam
2024 J jnl
IEEE Internet Things J.
Hyeongyun Kim, Adnan Shahid, Jaron Fontaine, Eli De Poorter, Ingrid Moerman, Haewoon Nam
2024 J jnl
CoRR
Donghyun Kim, Aws Khalil, Haewoon Nam, Jaerock Kwon
2024 J jnl
IEEE Access
Ju Yuan, Guoqi Liu, Haewoon Nam
2023 conf
ICAIIC
Dost Muhammad Saqib Bhatti, Haewoon Nam
2023 conf
ICUFN
Dost Muhammad Saqib Bhatti, Haewoon Nam
2023 J jnl
IEEE Access
Sewoong Min, Haewoon Nam
2023 conf
ICTC
Yuan Ju, Bingxin Wei, Haewoon Nam
2023 J jnl
IEEE Trans. Netw. Serv. Manag.
Dost Muhammad Saqib Bhatti, Haewoon Nam
2023 conf
ICTC
Siho Lee, Haewoon Nam
2023 J jnl
IEEE Access
Donghyun Kim, Aws Khalil, Haewoon Nam, Jaerock Kwon
2023 J jnl
IEEE Wirel. Commun. Lett.
Mohsin Ali, Muhammad Naveed Yasir, Dost Muhammad Saqib Bhatti, Haewoon Nam
2023 conf
ICTC
Hyeongyu Kim, Byung Chan Choi, Haewoon Nam
2023 conf
ICTC
Zhiyuan Nan, Haewoon Nam
2022 conf
ICTC
Dost Muhammad Saqib Bhatti, Muhammad Haris, Haewoon Nam
2022 conf
ICTC
Muhammad Haris, Dost Muhammad Saqib Bhatti, Haewoon Nam
2022 conf
ICTC
Hyeongyun Kim, Adnan Shahid, Jaron Fontaine, Eli De Poorter, Ingrid Moerman, Haewoon Nam
2022 J jnl
Big Data
Dost Muhammad Saqib Bhatti, Ruhul Amin Khalil, Nasir Saeed, Haewoon Nam
2022 conf
ICAIIC
Byung Chan Choi, Jaerock Kwon, Haewoon Nam
2022 conf
ICTC
Bingxin Wei, Xintao Duan, Haewoon Nam
2022 J jnl
IEEE Access
Jaerock Kwon, Aws Khalil, Donghyun Kim, Haewoon Nam
2022 conf
ICTC
Jun Hur, Haewoon Nam
2022 J jnl
IEEE Access
InSung Kang, Haewoon Nam
2021 conf
ICTC
Dongho Seo, Jiyeon Park, Sreeraj Rajendran, Sofie Pollin, Haewoon Nam
2021 conf
ICTC
Donghyun Kim, Jaerock Kwon, Haewoon Nam
2021 conf
ICTC
Woojin Yun, Jiyeon Park, Hyeongyun Kim, Haewoon Nam
2021 J jnl
IEEE Trans. Wirel. Commun.
Hyungkook Oh, Haewoon Nam
2021 conf
ICTC
Jaehyeok Yoon, Hyeongyun Kim, Dongho Seo, Haewoon Nam
2020 conf
ICTC
Dongho Seo, Junil Ahn, Haewoon Nam
2020 J jnl
IEEE Access
Dongho Seo, Haewoon Nam
2020 J jnl
Sensors
Hyungkook Oh, Dongho Seo, Haewoon Nam
2020 conf
EIT
Nikhil Prabhu, Sewoong Min, Haewoon Nam, Girma S. Tewolde, Jaerock Kwon
2020 conf
ICTC
InSung Kang, Haewoon Nam
2020 conf
ICTC
Hyeongyun Kim, Junil Ahn, Haewoon Nam
2019 J jnl
IEEE Commun. Surv. Tutorials
Nasir Saeed, Haewoon Nam, Tareq Y. Al-Naffouri, Mohamed-Slim Alouini
2019 J jnl
IEEE Signal Process. Lett.
Hyungkook Oh, Haewoon Nam
2019 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
Minhwan Choi, Hoojin Lee, Haewoon Nam
2019 J jnl
Sensors
Mohsin Ali, Haewoon Nam
2019 J jnl
Sensors
Nasir Saeed, Haewoon Nam, Tareq Y. Al-Naffouri, Mohamed-Slim Alouini
2018 J jnl
ACM Comput. Surv.
Nasir Saeed, Haewoon Nam, Mian Imtiaz Ul Haq, Dost Muhammad Saqib Bhatti
2017 J jnl
IEEE Trans. Veh. Technol.
Hyungkook Oh, Haewoon Nam
2017 J jnl
IET Commun.
Mohsin Ali, Haewoon Nam
2017 J jnl
IEEE Commun. Lett.
Nasir Saeed, Haewoon Nam
2017 J jnl
IEEE Trans. Veh. Technol.
Dae Young Kim, Haewoon Nam, Hu Jin
2017 conf
ICTC
Dongho Seo, Hyeongyun Kim, Haewoon Nam
2017 B conf
WCNC
Hyungkook Oh, Haewoon Nam
2017 J jnl
IET Commun.
Dost Muhammad Saqib Bhatti, Haewoon Nam
2016 conf
URAI
InSung Kang, Haewoon Nam
2016 conf
URAI
Sewoong Min, Haewoon Nam
2016 J jnl
IEEE Trans. Signal Process.
Nasir Saeed, Haewoon Nam
2016 conf
URAI
Minhwan Choi, Hoojin Lee, Haewoon Nam
2016 conf
RWS
Hyungkook Oh, Haewoon Nam
2016 J jnl
Sensors
Dost Muhammad Saqib Bhatti, Nasir Saeed, Haewoon Nam
2016 conf
ICTC
Hyungkook Oh, Haewoon Nam
2015 conf
ICTC
Minhwan Choi, Haewoon Nam, Hoojin Lee
2015 conf
ICTC
Hyungkook Oh, Haewoon Nam
2015 J jnl
IET Commun.
Haewoon Nam, Nasir Saeed, Mahdi Ben Ghorbel, Mohamed-Slim Alouini
2015 J jnl
IEEE Trans. Veh. Technol.
Nasir Saeed, Haewoon Nam
2015 J jnl
IEEE Commun. Lett.
Mahdi Ben Ghorbel, Haewoon Nam, Mohamed-Slim Alouini
2014 C conf
IPCCC
Shakeel S. Abdulla, Haewoon Nam, Jacob A. Abraham
2014 conf
VTC Spring
Dost Muhammad Saqib Bhatti, Haewoon Nam
2014 J jnl
IEEE Trans. Mob. Comput.
Haewoon Nam, Mohamed-Slim Alouini
2014 conf
VTC Spring
Nasir Saeed, Haewoon Nam
2013 conf
VTC Fall
Mahdi Ben Ghorbel, Haewoon Nam, Mohamed-Slim Alouini
2013 J jnl
IEICE Trans. Commun.
Haewoon Nam, Mohamed-Slim Alouini
2012 J jnl
Int. J. Commun. Syst.
Haewoon Nam, Youngok Kim
2012 B conf
WCNC
Mahdi Ben Ghorbel, Haewoon Nam, Mohamed-Slim Alouini
2012 J jnl
IEEE Trans. Signal Process.
Seung-Sik Eom, Haewoon Nam, Young-Chai Ko
2012 conf
SPAWC
Faraan Rashid, Haewoon Nam, Mohamed-Slim Alouini
2011 J jnl
IEEE Commun. Lett.
Haewoon Nam, Mohamed-Slim Alouini
2010 J jnl
IEEE Trans. Commun.
Haewoon Nam, Mohamed-Slim Alouini
2010 conf
ISWCS
Mahdi Ben Ghorbel, Haewoon Nam, Mohamed-Slim Alouini
2010 conf
SoCC
Shakeel S. Abdulla, Haewoon Nam, Earl E. Swartzlander Jr., Jacob A. Abraham
2010 J jnl
IEEE Commun. Lett.
Haewoon Nam
2010 conf
CrownCom
Haewoon Nam, Mahdi Ben Ghorbel, Mohamed-Slim Alouini
2010 J jnl
IEEE Trans. Commun.
Haewoon Nam, Mohamed-Slim Alouini
2010 B conf
ISIT
Haewoon Nam, Mohamed-Slim Alouini
2009 B conf
WiOpt
Haewoon Nam, Gustavo de Veciana, Mohamed-Slim Alouini
2009 C conf
ICCD
Shakeel S. Abdulla, Haewoon Nam, Mark McDermot, Jacob A. Abraham
2009 J jnl
IEEE Trans. Commun.
Haewoon Nam, Mohamed-Slim Alouini
2008 J jnl
IEEE Trans. Wirel. Commun.
Haewoon Nam, Young-Chai Ko, Mohamed-Slim Alouini
2008 J jnl
IEEE Trans. Wirel. Commun.
Haewoon Nam, Young-Chai Ko, Mohamed-Slim Alouini
2007 B conf
WCNC
Haewoon Nam, Young-Chai Ko, Mohamed-Slim Alouini
2007 B conf
ISIT
Haewoon Nam, Young-Chai Ko, Mohamed-Slim Alouini
2006 J jnl
IEEE Trans. Veh. Technol.
Haewoon Nam, Young-Chai Ko, Baxter F. Womack
2005 J jnl
IEEE Trans. Veh. Technol.
Thomas Zwick, Troy J. Beukema, Haewoon Nam
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()