Manjunath V. Joshi

80 papers A 3B 7C 14Misc 4Journal 23Unranked 27
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Supercomput.
Prashant Gohel, Manjunath V. Joshi
2025 J jnl
J. Supercomput.
Prashant Gohel, Manjunath V. Joshi
2025 B conf
SAS
Pooja Garg, Manjunath V. Joshi, Ahlad Kumar, Vinay S. Palaparthy
2025 B conf
SAS
Pooja Garg, Sukruti Shah, Sagar Joshi, Adarsh Gupta, Pooja Yogi, Manjunath V. Joshi, Ahlad Kuamr, Vinay S. Palaparthy
2025 J jnl
SN Comput. Sci.
Shivam Sharma, Rohan Joshi, Shruti Bhilare, Manjunath V. Joshi
2025 B conf
IJCNN
Krishna Veer Singh, Dhiraj Golhar, Manjunath V. Joshi
2023 C conf
ICMV
Prashant Gohel, Manjunath V. Joshi
2023 conf
CAIP (1)
Shivam Sharma, Rohan Joshi, Shruti Bhilare, Manjunath V. Joshi
2022 C conf
ICMV
Jeni Shah, Manjunath V. Joshi
2021 conf
MWSCAS
Rohin Nanavati, Sarathi Shah, Manjunath V. Joshi
2021 Misc conf
COMSNETS
Kamal M. Captain, Manjunath V. Joshi
2021 C conf
IGARSS
Jignesh R. Patel, Manjunath V. Joshi, Jignesh S. Bhatt
2020 C conf
IGARSS
Jignesh R. Patel, Manjunath V. Joshi, Jignesh S. Bhatt
2020 C conf
IGARSS
Jignesh S. Bhatt, Manjunath V. Joshi
2019 conf
VTC Spring
Kamal M. Captain, Manjunath V. Joshi
2019 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Jignesh R. Patel, Manjunath V. Joshi, Jignesh S. Bhatt
2019 Misc conf
COMSNETS
Kamal M. Captain, Manjunath V. Joshi
2019 J jnl
Phys. Commun.
Kamal M. Captain, Manjunath V. Joshi
2018 conf
WHISPERS
Jignesh S. Bhatt, Manjunath V. Joshi, S. S. Vijayashekhar
2018 C conf
IGARSS
Jignesh R. Patel, Manjunath V. Joshi, Jignesh S. Bhatt
2018 ch.
Heritage Preservation
Prathmesh R. Madhu, Manjunath V. Joshi
2018 conf
SPCOM
Mohammedsayeemuddin K. Shaikh, Manjunath V. Joshi
2018 Misc conf
COMSNETS
Kamal M. Captain, Manjunath V. Joshi
2017 J jnl
IPSJ Trans. Comput. Vis. Appl.
Sonam Nahar, Manjunath V. Joshi
2017 C conf
ICMV
Vaibhav Amit Patel, Manjunath V. Joshi
2017 conf
NCVPRIPG
Shrishail S. Gajbhar, Manjunath V. Joshi
2017 J jnl
Signal Image Video Process.
Shrishail S. Gajbhar, Manjunath V. Joshi
2017 C conf
ICMV
Manu Sharma, Jignesh S. Bhatt, Manjunath V. Joshi
2017 J jnl
IEEE Trans. Veh. Technol.
Kamal M. Captain, Manjunath V. Joshi
2016 B conf
ICIP
Sonam Nahar, Manjunath V. Joshi
2016 B conf
ICPR
Sonam Nahar, Manjunath V. Joshi
2016 book
Milind Gajanan Padalkar, Manjunath V. Joshi, Nilay L. Khatri
2016 Misc conf
COMSNETS
Kamal M. Captain, Manjunath V. Joshi
2016 conf
VTC Fall
Kamal M. Captain, Manjunath V. Joshi
2015 conf
ACPR
Sonam Nahar, Manjunath V. Joshi
2015 J jnl
IEEE Trans. Geosci. Remote. Sens.
Kishor P. Upla, Manjunath V. Joshi, Prakash P. Gajjar
2015 J jnl
Mach. Vis. Appl.
Milind Gajanan Padalkar, Manjunath V. Joshi
2015 J jnl
J. Vis. Commun. Image Represent.
Jaladhi P. Vyas, Manjunath V. Joshi, Mehul S. Raval
2015 conf
IWSDA
Kamal M. Captain, Manjunath V. Joshi
2015 A conf
BMVC
Milind Gajanan Padalkar, Manjunath V. Joshi, Nilay L. Khatri
2015 J jnl
IEEE Trans. Geosci. Remote. Sens.
Rakesh C. Patel, Manjunath V. Joshi
2014 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Jignesh S. Bhatt, Manjunath V. Joshi, Mehul S. Raval
2014 C conf
MMSP
Shrishail S. Gajbhar, Manjunath V. Joshi
2014 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
V. Harikumar, Prakash P. Gajjar, Manjunath V. Joshi, Mehul S. Raval
2014 conf
ChinaSIP
Shrishail S. Gajbhar, Manjunath V. Joshi
2014 C conf
IGARSS
Kishor P. Upla, Manjunath V. Joshi, Prakash P. Gajjar
2013 conf
NCVPRIPG
Sonam Nahar, Manjunath V. Joshi
2013 B conf
SMC
Mehul S. Raval, Manjunath V. Joshi, Shubhalaxmi Kher
2013 conf
ICIAP Workshops
Milind Gajanan Padalkar, Manali V. Vora, Manjunath V. Joshi, Mukesh A. Zaveri, Mehul S. Raval
2013 conf
NCVPRIPG
Shrishail S. Gajbhar, Manjunath V. Joshi
2013 conf
NCVPRIPG
Sharad Joshi, Kishor P. Upla, Manjunath V. Joshi
2013 conf
NCVPRIPG
Kishor P. Upla, Prakash P. Gajjar, Manjunath V. Joshi
2012 conf
ICVGIP
Naman Turakhia, Ruchin Shah, Manjunath V. Joshi
2012 conf
ACCV (3)
Nilay L. Khatri, Manjunath V. Joshi
2012 conf
ACCV Workshops (2)
Milind Gajanan Padalkar, Mukesh A. Zaveri, Manjunath V. Joshi
2011 A conf
ICME
Kishor P. Upla, Prakash P. Gajjar, Manjunath V. Joshi, Asim Banerjee, Vineet Singh
2011 conf
IICAI
Sandeep Juneja, Mehul S. Raval, Manjunath V. Joshi
2011 C conf
IGARSS
Kishor P. Upla, Prakash P. Gajjar, Manjunath V. Joshi
2010 J jnl
IEEE Trans. Geosci. Remote. Sens.
Manjunath V. Joshi, André Jalobeanu
2010 C conf
IGARSS
Manjunath V. Joshi, Abhishek Shripat, Pradipta Nanda, Subrahmanyam Ravishankar, K. V. V. Murthy
2010 C conf
IGARSS
Manjunath V. Joshi, Prakash P. Gajjar, Subrahmanyam Ravishankar, K. V. V. Murthy
2010 J jnl
IEEE Trans. Image Process.
Prakash P. Gajjar, Manjunath V. Joshi
2010 C conf
ICISP
Prakash P. Gajjar, Manjunath V. Joshi
2009 conf
IGARSS (3)
Krishna Rudraraju, Manjunath V. Joshi
2008 J jnl
EURASIP J. Adv. Signal Process.
Swati Sharma, Manjunath V. Joshi
2008 conf
IGARSS (2)
Manjunath V. Joshi, André Jalobeanu
2008 conf
ICVGIP
Prakash P. Gajjar, Manjunath V. Joshi
2007 A conf
BMVC
Swati Sharma, Manjunath V. Joshi
2007 conf
IbPRIA (1)
Prakash P. Gajjar, Manjunath V. Joshi, Asim Banerjee, Suman K. Mitra
2007 conf
PReMI
Naresh Manwani, Suman K. Mitra, Manjunath V. Joshi
2006 J jnl
IEEE Trans. Geosci. Remote. Sens.
Manjunath V. Joshi, Lorenzo Bruzzone, Subhasis Chaudhuri
2006 conf
ICVGIP
Prakash P. Gajjar, Manjunath V. Joshi, Asim Banerjee, Suman K. Mitra
2006 J jnl
Comput. Vis. Image Underst.
Manjunath V. Joshi, Subhasis Chaudhuri
2005 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Manjunath V. Joshi, Subhasis Chaudhuri, Rajkiran Panuganti
2004 conf
ICPR (3)
Manjunath V. Joshi, Subhasis Chaudhuri
2004 J jnl
Int. J. Imaging Syst. Technol.
C. V. Jiji, Manjunath V. Joshi, Subhasis Chaudhuri
2004 J jnl
Image Vis. Comput.
Manjunath V. Joshi, Subhasis Chaudhuri, Rajkiran Panuganti
2004 B conf
ICIP
Manjunath V. Joshi, Subhasis Chaudhuri
2003 J jnl
IEEE Signal Process. Mag.
Deepu Rajan, Subhasis Chaudhuri, Manjunath V. Joshi
2002 conf
ICVGIP
Manjunath V. Joshi, Subhasis Chaudhuri
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()