Jagath Samarabandu

76 papers A* 2A 3B 8C 3Misc 1Journal 22Unranked 37
YearRankTypeTitle / Venue / Authors
2025 J jnl
Multim. Tools Appl.
Iroshan Pathirannahalage, Vidura Jayasooriya, Jagath Samarabandu, Akila Subasinghe
2025 J jnl
Expert Syst. Appl.
Premjeet Singh, Rashinda Wijethunga, Ayan Sadhu, Jagath Samarabandu
2025 J jnl
J. Cybersecur. Priv.
Vinura Galwaduge, Jagath Samarabandu
2025 J jnl
CoRR
Vinura Galwaduge, Jagath Samarabandu
2022 J jnl
SIGKDD Explor.
Sunanda Gamage, Benjamin Klöpper, Jagath Samarabandu
2022 J jnl
Comput. Methods Programs Biomed.
Hasitha Wimalarathna, Sangamanatha Ankmnal Veeranna, Chris Allan, Sumit K. Agrawal, Jagath Samarabandu, Hanif M. Ladak, Prudence Allen
2022 conf
DSC
Spencer Vecile, Kyle Lacroix, Katarina Grolinger, Jagath Samarabandu
2022 J jnl
J. Comput. Civ. Eng.
Sandeep Sony, Sunanda Gamage, Ayan Sadhu, Jagath Samarabandu
2021 J jnl
Comput. Methods Programs Biomed.
Hasitha Wimalarathna, Sangamanatha Ankmnal Veeranna, Chris Allan, Sumit K. Agrawal, Prudence Allen, Jagath Samarabandu, Hanif M. Ladak
2020 J jnl
IEEE Trans. Ind. Informatics
Pirathayini Srikantha, Jingyuan Liu, Jagath Samarabandu
2020 J jnl
J. Netw. Comput. Appl.
Sunanda Gamage, Jagath Samarabandu
2018 conf
CCECE
Wafaa Anani, Jagath Samarabandu
2018 conf
CCECE
Nadun Rajasinghe, Jagath Samarabandu, Xianbin Wang
2018 B conf
GLOBECOM
Gobinath Loganathan, Jagath Samarabandu, Xianbin Wang
2018 conf
CCECE
Gobinath Loganathan, Jagath Samarabandu, Xianbin Wang
2017 J jnl
IEEE Trans. Medical Imaging
Tharindu De Silva, Derek W. Cool, Jing Yuan, Cesare Romagnoli, Jagath Samarabandu, Aaron Fenster, Aaron D. Ward
2016 conf
CCECE
Jagath Samarabandu, Kamal P. Ranaweera
2016 J jnl
F1000Research
Akila Subasinghe Arachchige, Jagath Samarabandu, Yanxin Li, Ruth Wilkins, Farrah Flegal, Joan Knoll, Peter K. Rogan
2016 J jnl
CoRR
Udaya Sampath K. Perera Miriya Thanthrige, Jagath Samarabandu, Xianbin Wang
2016 conf
CCECE
Udaya Sampath K. Perera Miriya Thanthrige, Jagath Samarabandu, Xianbin Wang
2016 conf
CCECE
Hettiarachchige Don Rasika Lakmal, Jagath Samarabandu
2016 J jnl
CoRR
Rasika Lakmal Hettiarachchige Don, Jagath Samarabandu
2016 conf
CCECE
Hettiarachchige Don Rasika Lakmal, Jagath Samarabandu
2015 C conf
CSCWD
Xizhe Yin, Weiming Shen, Jagath Samarabandu, Xianbin Wang
2014 conf
VTC Fall
Kai Liu, Xianbin Wang, Jagath Samarabandu, Auon Muhammad Akhtar
2014 B conf
IWCMC
Mohamad Kalil, Jagath Samarabandu, Abdallah Shami, Arafat Al-Dweik
2014 conf
CCECE
Omar Kayal, Jagath Samarabandu
2013 J jnl
IEEE Trans. Biomed. Eng.
Akila Subasinghe Arachchige, Jagath Samarabandu, Joan Knoll, Peter K. Rogan
2012 conf
Image-Guided Procedures
Tharindu De Silva, Aaron Fenster, Jeffrey S. Bax, Lori Gardi, Cesare Romagnoli, Jagath Samarabandu, Aaron D. Ward
2012 conf
VISAPP (1)
Rajeev Ranjan, Akila Subasinghe Arachchige, Jagath Samarabandu, Peter K. Rogan, Joan Knoll
2012 conf
CCECE
Akila Subasinghe Arachchige, Jagath Samarabandu, Peter K. Rogan, Joan Knoll
2012 J jnl
Mach. Vis. Appl.
Eranga Ukwatta, Jagath Samarabandu, Mike Hall
2012 conf
CCECE
Afshan Samani, Hamada H. Ghenniwa, Jagath Samarabandu
2011 conf
CCECE
Edwin Christopher, Muhammad Ajmal Khan, Xianbin Wang, Jagath Samarabandu
2011 conf
CCECE
Edwin Christopher, Gejie Liu, Xianbin Wang, Jagath Samarabandu
2011 conf
Computer-Aided Diagnosis
Eranga Ukwatta, Joseph Awad, Aaron D. Ward, Jagath Samarabandu, A. Krasinski, Grace Parraga, Aaron Fenster
2010 conf
CRV
Subasinghe A. Akila Akila, Jagath Samarabandu, Joan Knoll, Wahab Khan, Peter K. Rogan
2010 B conf
ICIP
Akila Subasinghe Arachchige, Jagath Samarabandu, Joan Knoll, Wahab Khan, Peter K. Rogan
2010 conf
CRV
Mehrnaz Zouqi, Jagath Samarabandu, Yanbo Zhou
2010 B conf
ICIP
Mehrnaz Zouqi, Jagath Samarabandu, Yanbo Zhou
2010 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Xiaoqing Liu, Olga Veksler, Jagath Samarabandu
2010 conf
MICCAI (3)
Tharindu De Silva, Aaron Fenster, Jagath Samarabandu, Aaron D. Ward
2009 conf
CIIP
Mehrnaz Zouqi, Jagath Samarabandu
2009 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Ranga Rodrigo, Mehrnaz Zouqi, Zhenhe Chen, Jagath Samarabandu
2009 conf
CRV
Eranga Ukwatta, Jagath Samarabandu
2008 J jnl
IEEE Trans. Medical Imaging
Nuwan D. Nanayakkara, Bernard Chiu, Afshan Samani, John David Spence, Jagath Samarabandu, Aaron Fenster
2008 B conf
Image Processing
Xiaoqing Liu, Jagath Samarabandu, Gregory J. Garvin, Rethy Chhem, Shuo Li
2008 J jnl
Inf. Sci.
Faheem Ahmed, Luiz Fernando Capretz, Jagath Samarabandu
2008 A* conf
CVPR
Xiaoqing Liu, Olga Veksler, Jagath Samarabandu
2008 B conf
Image Processing
Nuwan D. Nanayakkara, Bernard Chiu, Abbas Samani, John David Spence, Grace Parraga, Jagath Samarabandu, Aaron Fenster
2008 conf
CRV
Mehrnaz Zouqi, Jagath Samarabandu
2008 conf
CRV
Eranga Ukwatta, Ranga Rodrigo, Jagath Samarabandu, Mike Hall
2007 B conf
Image Processing
Xiaoqing Liu, Jagath Samarabandu, Shuo Li, Ian G. Ross, Gregory J. Garvin
2007 B conf
SMC
Duane J. Jacques, Ranga Rodrigo, Kenneth A. McIsaac, Jagath Samarabandu
2007 J jnl
Adv. Robotics
Zhenhe Chen, Jagath Samarabandu, Ranga Rodrigo
2006 conf
EMBC
Nuwan D. Nanayakkara, Bernard Chiu, Abbas Samani, John David Spence, Jagath Samarabandu, Aaron Fenster
2006 conf
CCECE
Zhenhe Chen, Jagath Samarabandu
2006 C conf
Image Processing: Algorithms and Systems
Xiaoqing Liu, Jagath Samarabandu
2006 conf
CCECE
Wenxia Shi, Jagath Samarabandu
2006 conf
CCECE
Ranga Rodrigo, Wenxia Shi, Jagath Samarabandu
2006 C conf
Image Processing: Algorithms and Systems
Jagath Samarabandu, Ranga Rodrigo
2006 A conf
ICME
Xiaoqing Liu, Jagath Samarabandu
2005 A* conf
ICRA
Duane J. Jacques, Ranga Rodrigo, Kenneth A. McIsaac, Jagath Samarabandu
2004 conf
Image Processing: Algorithms and Systems
Ranga Rodrigo, Kamal P. Ranaweera, Jagath Samarabandu
2004 conf
Image Processing: Algorithms and Systems
Kamal P. Ranaweera, Jagath Samarabandu
2004 conf
Image Processing: Algorithms and Systems
Zhang John Chen, Jagath Samarabandu
2004 conf
WSE
Manpreet Sagoo, Miriam A. M. Capretz, Jagath Samarabandu
2003 conf
Image Processing: Algorithms and Systems
Kamal P. Ranaweera, Jagath Samarabandu
2003 conf
Image Processing: Algorithms and Systems
Nuwan D. Nanayakkara, Jagath Samarabandu
2003 A conf
ICME
Zhang John Chen, Jagath Samarabandu
2003 conf
CISST
Kamal P. Ranaweera, Jagath Samarabandu
2003 A conf
ICME
Nuwan D. Nanayakkara, Jagath Samarabandu
2003 conf
CISST
Nuwan D. Nanayakkara, Jagath Samarabandu
1994 conf
ICIP (3)
Jagath Samarabandu, Raj Acharya
1993 J jnl
IEEE Trans. Medical Imaging
Jagath Samarabandu, Raj Acharya, Ernest Hausmann, Kristin M. Allen
1992 Misc conf
ICASSP
Jagath Samarabandu, Raj Acharya, Ernest Hausmann, Kristin M. Allen
redb/extractors/js_extractors/js_deobfuscator.py
← Index redb/extractors/js_extractors/js_deobfuscator.py python
"""Subprocess-driven JavaScript deobfuscator with jsbeautifier fallback.

Owns the heavy lifting that was previously embedded inside
`JSDeobfuscationExtractor` (`_run_deobfuscator` + `_try_jsbeautifier`). Exposed
as a single module-level entry point `deobfuscate(source, log)` so it can be
called from `JSContext.deobfuscated` (cached per sample) without dragging
extractor state through the call.

Configuration (env vars):
    JS_DEOBFUSCATOR_PATH    Path or name of the external tool (default: webcrack).
    JS_DEOBFUSCATE_TIMEOUT  Seconds before the external tool is killed
                            (process-group SIGTERM, then SIGKILL). Default: 60.

If the external tool produces non-empty output and exits 0, that wins. Otherwise
the source is run through jsbeautifier (which only normalises formatting, but
already exposes strings hidden by minification). If neither path produces
output, returns (None, None).

`FileNotFoundError` for the external tool is treated as routine — the analysis
server is either provisioned with the tool or it isn't — and demoted to a
debug-level log.
"""

import os
import signal
import subprocess
import tempfile
from typing import Optional, Tuple

DEFAULT_DEOBFUSCATOR = "webcrack"
DEFAULT_TIMEOUT_SECS = 60


def _run_external(
    source: str, deobfuscator_path: str, timeout: int, log
) -> Tuple[Optional[str], int]:
    """Run the configured external deobfuscator over `source` and capture stdout.

    Returns (text, returncode). `text` is `None` and `returncode` is `-1` when
    the binary is missing, the run timed out, or any other unexpected failure
    occurred. Missing-binary is logged at debug; timeouts and unexpected errors
    surface at warning/error.
    """
    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(
                [deobfuscator_path, tmp_path],
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                preexec_fn=os.setsid,
            )

            try:
                stdout, _ = process.communicate(timeout=timeout)
                return stdout.decode("utf-8", errors="replace"), process.returncode
            except subprocess.TimeoutExpired:
                # Kill the entire process group so spawned helpers (e.g. node
                # subprocesses webcrack itself launches) get cleaned up 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"Deobfuscation timed out after {timeout}s")
                return None, -1
        finally:
            try:
                os.unlink(tmp_path)
            except Exception:
                pass
    except FileNotFoundError:
        log.debug(f"Deobfuscator binary not found at {deobfuscator_path}")
        return None, -1
    except Exception as e:
        log.error(f"Error running deobfuscator: {e}")
        return None, -1


def _try_jsbeautifier(source: str, log) -> Tuple[Optional[str], Optional[str]]:
    """Fallback path: format the source with jsbeautifier. Returns
    `(text, "jsbeautifier")` or `(None, None)` if jsbeautifier isn't installed
    or the call raised."""
    try:
        import jsbeautifier
        opts = jsbeautifier.default_options()
        opts.indent_size = 2
        return jsbeautifier.beautify(source, opts), "jsbeautifier"
    except ImportError:
        log.debug("jsbeautifier not available")
        return None, None
    except Exception as e:
        log.warning(f"jsbeautifier failed: {e}")
        return None, None


def deobfuscate(source: str, log) -> Tuple[Optional[str], Optional[str]]:
    """Run the configured external deobfuscator, falling back to jsbeautifier.

    Returns `(text, normalizer_used)` on success, or `(None, None)` when neither
    path produced non-empty output. `normalizer_used` is the basename of the
    external tool (e.g. `"webcrack"`) or the literal `"jsbeautifier"`.
    """
    if not source:
        return None, None

    deobfuscator_path = os.getenv("JS_DEOBFUSCATOR_PATH", DEFAULT_DEOBFUSCATOR)
    timeout = int(os.getenv("JS_DEOBFUSCATE_TIMEOUT", str(DEFAULT_TIMEOUT_SECS)))

    text, returncode = _run_external(source, deobfuscator_path, timeout, log)
    if text and returncode == 0 and text.strip():
        return text, os.path.basename(deobfuscator_path)

    return _try_jsbeautifier(source, log)