V. Rajkumar Dare

51 papers B 2C 5Misc 1Journal 22Unranked 18
YearRankTypeTitle / Venue / Authors
2022 C conf
IWCIA
K. Janaki, R. Arulprakasam, Meenakshi Paramasivan, V. Rajkumar Dare
2022 Misc conf
ISAIM
R. Krishna Kumari, R. Arulprakasam, Meenakshi Paramasivan, V. Rajkumar Dare
2022 C conf
IWCIA
Meenakshi Paramasivan, R. Krishna Kumari, R. Arulprakasam, V. Rajkumar Dare
2017 J jnl
CoRR
N. Mohana, Kalyani Desikan, V. Rajkumar Dare
2013 J jnl
J. Discrete Algorithms
R. Arulprakasam, V. Rajkumar Dare, S. Gnanasekaran
2013 conf
SocProS (1)
V. Devi Rajaselvi, T. Kalyani, V. Rajkumar Dare, D. Gnanaraj Thomas
2012 conf
BIC-TA (2)
C. Annal Deva Priya Darshini, V. Rajkumar Dare
2012 C conf
IWOCA
R. Arulprakasam, V. Rajkumar Dare, S. Gnanasekaran
2011 conf
BIC-TA
N. Jansirani, V. Rajkumar Dare
2011 conf
BIC-TA
V. Rajkumar Dare, C. Annal Deva Priya Darshini
2011 conf
IWCIA Special Track on Applications
N. Jansirani, V. Rajkumar Dare, K. G. Subramanian
2010 conf
CompIMAGE
S. Annadurai, V. Rajkumar Dare, T. Kalyani, D. Gnanaraj Thomas
2010 conf
CompIMAGE
Mary Jemima Samuel, V. Rajkumar Dare, T. Kalyani
2010 conf
BIC-TA
Mary Jemima Samuel, V. Rajkumar Dare
2009 conf
IICAI
S. Annadurai, V. Rajkumar Dare, T. Kalyani, D. Gnanaraj Thomas
2009 J jnl
Int. J. Imaging Syst. Technol.
T. Kalyani, V. Rajkumar Dare, D. Gnanaraj Thomas
2009 conf
NaBIC
S. Annadurai, T. Kalyani, V. Rajkumar Dare, D. Gnanaraj Thomas
2008 conf
IWCIA Special Track on Applications
Durairaj Gnanaraj Thomas, F. Sweety, V. Rajkumar Dare, T. Kalyani
2008 conf
IWCIA Special Track on Applications
T. Kalyani, V. Rajkumar Dare, Durairaj Gnanaraj Thomas
2008 C conf
IWCIA
S. Annadurai, D. Gnanaraj Thomas, V. Rajkumar Dare, T. Kalyani
2007 J jnl
Eng. Lett.
K. Sasikala, V. Rajkumar Dare, D. Gnanaraj Thomas
2007 conf
Formal Models, Languages and Applications
T. Kalyani, K. Sasikala, V. Rajkumar Dare, P. J. Abisha, T. Robinson
2006 conf
ICGI
T. Kalyani, V. Rajkumar Dare, D. Gnanaraj Thomas, T. Robinson
2005 conf
IICAI
D. Gnanaraj Thomas, V. Rajkumar Dare, T. Robinson, M. Humrosia Begam
2004 B conf
ICONIP
T. Kalyani, V. Rajkumar Dare, D. Gnanaraj Thomas
2004 C conf
IWCIA
S. Gnanasekaran, V. Rajkumar Dare
2003 J jnl
Electron. Notes Discret. Math.
S. Gnanasekaran, V. Rajkumar Dare
2003 J jnl
Electron. Notes Discret. Math.
K. Sasikala, T. Kalyani, V. Rajkumar Dare, P. J. Abisha
2001 J jnl
Inf. Process. Lett.
Ahmad Kadrie, V. Rajkumar Dare, D. Gnanaraj Thomas, K. G. Subramanian
2000 J jnl
Int. J. Pattern Recognit. Artif. Intell.
V. Rajkumar Dare, K. G. Subramanian, D. Gnanaraj Thomas, Rani Siromoney, B. Le Saec
1999 J jnl
Int. J. Pattern Recognit. Artif. Intell.
T. Robinson, K. G. Subramanian, Rani Siromoney, V. Rajkumar Dare
1999 J jnl
Pattern Recognit.
Rani Siromoney, K. G. Subramanian, V. Rajkumar Dare, D. Gnanaraj Thomas
1995 J jnl
Int. J. Pattern Recognit. Artif. Intell.
K. G. Subramanian, Rani Siromoney, V. Rajkumar Dare
1994 J jnl
Inf. Process. Lett.
Rani Siromoney, Lisa Mathew, V. Rajkumar Dare, K. G. Subramanian
1994 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Rani Siromoney, Lisa Mathew, K. G. Subramanian, V. Rajkumar Dare
1993 B conf
ALT
Rani Siromoney, D. Gnanaraj Thomas, K. G. Subramanian, V. Rajkumar Dare
1992 J jnl
Int. J. Pattern Recognit. Artif. Intell.
K. G. Subramanian, Rani Siromoney, V. Rajkumar Dare, Ahmed Saoudi
1992 conf
ICPIA
Rani Siromoney, K. G. Subramanian, V. Rajkumar Dare
1992 conf
ICPIA
Rani Siromoney, Lisa Mathew, K. G. Subramanian, V. Rajkumar Dare
1991 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Maurice Nivat, Ahmed Saoudi, K. G. Subramanian, Rani Siromoney, V. Rajkumar Dare
1990 J jnl
Int. J. Comput. Math.
Maurice Nivat, Ahmed Saoudi, V. Rajkumar Dare
1989 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Ahmed Saoudi, K. Rangarajan, V. Rajkumar Dare
1989 ch.
Array Grammars, Patterns and Recognizers
Ahmed Saoudi, K. Rangarajan, V. Rajkumar Dare
1989 ch.
A Perspective in Theoretical Computer Science
Gift Siromoney, Rani Siromoney, K. G. Subramanian, V. Rajkumar Dare, P. J. Abisha
1989 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Maurice Nivat, Ahmed Saoudi, V. Rajkumar Dare
1989 ch.
Array Grammars, Patterns and Recognizers
Maurice Nivat, Ahmed Saoudi, V. Rajkumar Dare
1986 J jnl
Theor. Comput. Sci.
V. Rajkumar Dare, Rani Siromoney
1985 conf
FSTTCS
Rani Siromoney, V. Rajkumar Dare
1985 J jnl
Theor. Comput. Sci.
Rani Siromoney, V. Rajkumar Dare
1984 J jnl
Theor. Comput. Sci.
Rani Siromoney, K. G. Subramanian, V. Rajkumar Dare
1983 J jnl
Theor. Comput. Sci.
Rani Siromoney, V. Rajkumar Dare, K. G. Subramanian
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)