Makoto Haraguchi

80 papers B 18C 7Journal 15Unranked 40
YearRankTypeTitle / Venue / Authors
2018 conf
IIAI-AAI
Makoto Haraguchi, Yoshiaki Okubo
2018 conf
CLA
Hongjie Zhai, Makoto Haraguchi, Yoshiaki Okubo, Heyu Liu
2017 conf
MLDM
Yoshiaki Okubo, Makoto Haraguchi
2016 conf
PAKDD (1)
Hongjie Zhai, Makoto Haraguchi, Yoshiaki Okubo, Etsuji Tomita
2016 J jnl
Int. J. Data Sci. Anal.
Hongjie Zhai, Makoto Haraguchi, Yoshiaki Okubo, Etsuji Tomita
2016 conf
MLDM
Yoshiaki Okubo, Makoto Haraguchi, Etsuji Tomita
2015 B conf
Discovery Science
Hongjie Zhai, Makoto Haraguchi, Yoshiaki Okubo, Etsuji Tomita
2015 conf
JSAI-isAI Workshops
Koichi Furukawa, Keita Kinjo, Tomonobu Ozaki, Makoto Haraguchi
2014 B conf
Discovery Science
Yoshiaki Okubo, Masanobu Matsudaira, Makoto Haraguchi
2014 J jnl
J. Robotics Mechatronics
Junji Furusho, Makoto Haraguchi
2013 J jnl
Trans. Mach. Learn. Data Min.
Makoto Haraguchi
2013 conf
ISIP
Koichi Furukawa, Keita Kinjo, Tomonobu Ozaki, Makoto Haraguchi
2013 conf
ICORR
Makoto Haraguchi, Junji Furusho
2013 conf
EMBC
Makoto Haraguchi, Junji Furusho
2013 conf
MIWAI
Yoshiaki Okubo, Makoto Haraguchi, Etsuji Tomita
2013 conf
MLDM
Hongjie Zhai, Makoto Haraguchi, Yoshiaki Okubo, Kiyota Hashimoto, Sachio Hirokawa
2012 J jnl
J. Robotics Mechatronics
Makoto Haraguchi, Junji Furusho, Ryoji Kawatani
2012 J jnl
J. Robotics Mechatronics
Makoto Haraguchi, Junji Furusho
2012 J jnl
Trans. Mach. Learn. Data Min.
Aixiang Li, Makoto Haraguchi, Yoshiaki Okubo
2012 C conf
ICFCA
Yoshiaki Okubo, Makoto Haraguchi
2012 conf
IIAI-AAI
Aixiang Li, Makoto Haraguchi, Yoshiaki Okubo, Etsuji Tomita
2012 B conf
Discovery Science
Yoshiaki Okubo, Makoto Haraguchi, Etsuji Tomita
2012 conf
MLDM
Aixiang Li, Makoto Haraguchi, Yoshiaki Okubo
2011 conf
MLDM
Aixiang Li, Makoto Haraguchi, Yoshiaki Okubo
2011 conf
KES (2)
Yoshiaki Okubo, Makoto Haraguchi, Sachio Hirokawa
2010 C conf
ICFCA
Yoshiaki Okubo, Makoto Haraguchi
2010 conf
ICDM Workshops
Yoshiaki Okubo, Makoto Haraguchi, Takeshi Nakajima
2009 conf
MLDM
Yoshiaki Okubo, Makoto Haraguchi
2008 conf
Web Intelligence/IAT Workshops
Aixiang Li, Makoto Haraguchi, Yoshiaki Okubo
2007 conf
ICAT
Makoto Haraguchi, Takehito Kikuchi, Ying Jin, Kazuki Fukushima, Junji Furusho, Akio Inoue, Kunihiko Oda
2007 conf
ROBIO
Makoto Haraguchi, Takehito Kikuchi, Ying Jin, Akio Inoue
2007 conf
KES (2)
Kenji Sato, Yoshiaki Okubo, Makoto Haraguchi, Susumu Kunifuji
2006 conf
JSAI
Makoto Haraguchi, Yoshiaki Okubo
2006 J jnl
Eng. Appl. Artif. Intell.
Tsuyoshi Taniguchi, Makoto Haraguchi
2006 conf
Web Intelligence
Yoshiaki Okubo, Makoto Haraguchi
2005 conf
Federation over the Web
Makoto Haraguchi, Yoshiaki Okubo
2005 B conf
Discovery Science
Tsuyoshi Taniguchi, Makoto Haraguchi
2005 conf
WIRI
Masaharu Yoshioka, Makoto Haraguchi
2005 conf
MLDM
Tsuyoshi Taniguchi, Makoto Haraguchi, Yoshiaki Okubo
2005 B conf
Discovery Science
Yoshiaki Okubo, Makoto Haraguchi, Bin Shi
2005 J jnl
ACM Trans. Asian Lang. Inf. Process.
Masaharu Yoshioka, Makoto Haraguchi
2004 conf
NTCIR
Masaharu Yoshioka, Makoto Haraguchi
2004 conf
NTCIR
Masaharu Yoshioka, Makoto Haraguchi
2004 conf
Intuitive Human Interfaces for Organizing and Accessing Intellectual Assets
Masaharu Yoshioka, Makoto Haraguchi, Akihito Mizoe
2003 B conf
Discovery Science
Yoshiaki Okubo, Makoto Haraguchi
2003 J jnl
Theor. Comput. Sci.
Yoshimitsu Kudoh, Makoto Haraguchi, Yoshiaki Okubo
2002 C conf
IDEAL
Masaaki Narita, Makoto Haraguchi, Yoshiaki Okubo
2002 B conf
Discovery Science
Makoto Haraguchi, Shigetora Nakano, Masaharu Yoshioka
2002 conf
Progress in Discovery Science
Makoto Haraguchi, Yoshimitsu Kudoh
2001 conf
INAP
Yoshiaki Okubo, Yoshimitsu Kudoh, Makoto Haraguchi
2001 conf
INAP (LNCS Volume)
Yoshiaki Okubo, Yoshimitsu Kudoh, Makoto Haraguchi
2001 B conf
Discovery Science
Kouta Kanda, Makoto Haraguchi, Yoshiaki Okubo
2001 J jnl
Parallel Comput.
Yuto Komeiji, Makoto Haraguchi, Umpei Nagashima
2000 J jnl
Electron. Trans. Artif. Intell.
Makoto Haraguchi, Yoshiaki Okubo, Tokuyasu Kakuta
2000 conf
SARA
Yoshiaki Okubo, Makoto Haraguchi, Yan Fang Zheng
2000 B conf
Discovery Science
Yoshimitsu Kudoh, Makoto Haraguchi
2000 B conf
ALT
Yuhsuke Itoh, Makoto Haraguchi
2000 C conf
IDEAL
Yoshimitsu Kudoh, Makoto Haraguchi
1999 B conf
ALT
Nobuhiro Morita, Makoto Haraguchi, Yoshiaki Okubo
1999 C conf
ICAIL
Tokuyasu Kakuta, Makoto Haraguchi
1999 B conf
Discovery Science
Yoshimitsu Kudoh, Makoto Haraguchi
1998 B conf
Discovery Science
Makoto Haraguchi, Tokuyasu Kakuta
1998 J jnl
Ann. Math. Artif. Intell.
Yoshiaki Okubo, Makoto Haraguchi
1997 J jnl
Artif. Intell. Law
Tokuyasu Kakuta, Makoto Haraguchi, Yoshiaki Okubo
1997 C conf
ICAIL
Yoshiaki Okubo, Makoto Haraguchi
1997 J jnl
J. Adv. Comput. Intell. Intell. Informatics
Yoshiaki Okubo, Makoto Haraguchi
1997 B conf
ILP
Ken Sadohara, Makoto Haraguchi
1996 conf
Description Logics
Makoto Haraguchi
1995 B conf
ALT
Ken Sadohara, Makoto Haraguchi
1995 conf
ECML
Ken Sadohara, Makoto Haraguchi
1994 conf
AII/ALT
Yoshiaki Okubo, Makoto Haraguchi
1994 J jnl
New Gener. Comput.
Yoshiaki Okubo, Makoto Haraguchi
1993 conf
Machine Intelligence 14
Makoto Haraguchi
1993 C conf
ICAIL
Hajime Yoshino, Makoto Haraguchi, Seiichiro Sakurai, Sigeru Kagayama
1992 B conf
ALT
Yoshiaki Okubo, Makoto Haraguchi
1991 B conf
ALT
Makoto Haraguchi
1991 B conf
ALT
Seiichiro Sakurai, Makoto Haraguchi
1986 conf
LP
Makoto Haraguchi, Setsuo Arikawa
1986 conf
AII
Makoto Haraguchi, Setsuo Arikawa
1985 conf
LP
Makoto Haraguchi
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()