Nagender Aneja

36 papers C 1Misc 1Journal 28Unranked 6
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Netw. Sci. Eng.
Zizheng Liu, Bharat K. Bhargava, Nagender Aneja
2025 J jnl
Intell. Syst. Appl.
Azryl Elmy Sarih, Nagender Aneja, Ong Wee Hong
2025 J jnl
Multim. Tools Appl.
Nishtha Jatana, Mansehej Singh, Charu Gupta, Geetika Dhand, Shaily Malik, Pankaj Dadheech, Nagender Aneja, Sandhya Aneja
2025 J jnl
CoRR
Kartikeya Aneja, Manasvi Srivastava, Subhayan Das, Nagender Aneja
2025 J jnl
CoRR
Kartikeya Aneja, Nagender Aneja, Murat Kantarcioglu
2024 C conf
TENCON
Hassaan Haider Syed, Nagender Aneja, Owais Ahmed Malik, Mohammed Abdul Rahman Minhaj
2024 J jnl
CoRR
Nishtha Jatana, Mansehej Singh, Charu Gupta, Geetika Dhand, Shaily Malik, Pankaj Dadheech, Nagender Aneja, Sandhya Aneja
2024 J jnl
Appl. Artif. Intell.
Chour Singh Rajpoot, Gajanand Sharma, Praveen Gupta, Pankaj Dadheech, Umar Yahya, Nagender Aneja
2024 conf
UEMCON
Sandhya Aneja, Nagender Aneja
2024 J jnl
CoRR
Sandhya Aneja, Nagender Aneja
2023 J jnl
Appl. Artif. Intell.
Ajay Kumar Bansal, Virendra Swaroop Sangtani, Pankaj Dadheech, Nagender Aneja, Umar Yahya
2023 J jnl
Int. J. Intell. Networks
Wang Xin Hui, Nagender Aneja, Sandhya Aneja, Abdul Ghani Naim
2023 J jnl
IEEE Access
Priyanka Sharma, Pankaj Dadheech, Nagender Aneja, Sandhya Aneja
2023 J jnl
IEEE Access
Kavita Sheoran, Arpit Bajgoti, Rishik Gupta, Nishtha Jatana, Geetika Dhand, Charu Gupta, Pankaj Dadheech, Umar Yahya, Nagender Aneja
2022 Misc conf
COMSNETS
Sandhya Aneja, Melanie Ang Xuan En, Nagender Aneja
2022 J jnl
CoRR
Sandhya Aneja, Nagender Aneja, Pg Emeroylariffion Abas, Abdul Ghani Naim
2022 J jnl
Int. J. Commun. Networks Distributed Syst.
Sandhya Aneja, Nagender Aneja, Bharat K. Bhargava, Rajarshi Roy Chowdhury
2022 J jnl
CoRR
Sandhya Aneja, Nagender Aneja, Ponnurangam Kumaraguru
2021 J jnl
CoRR
Sandhya Aneja, Melanie Ang Xuan En, Nagender Aneja
2021 J jnl
CoRR
Kaustubh D. Dhole, Varun Gangal, Sebastian Gehrmann, Aadesh Gupta, Zhenhao Li, Saad Mahamood, Abinaya Mahendiran, Simon Mille, Ashish Srivastava, Samson Tan, Tongshuang Wu, Jascha Sohl-Dickstein, Jinho D. Choi, Eduard H. Hovy, Ondrej Dusek, Sebastian Ruder, Sajant Anand, Nagender Aneja, Rabin Banjade, Lisa Barthe, Hanna Behnke, Ian Berlot-Attwell, Connor Boyle, Caroline Brun, Marco Antonio Sobrevilla Cabezudo, Samuel Cahyawijaya, Emile Chapuis, Wanxiang Che, Mukund Choudhary, Christian Clauss, Pierre Colombo, Filip Cornell, Gautier Dagan, Mayukh Das, Tanay Dixit, Thomas Dopierre, Paul-Alexis Dray, Suchitra Dubey, Tatiana Ekeinhor, Marco Di Giovanni, Tanya Goyal, Rishabh Gupta, Louanes Hamla, Sang Han, Fabrice Harel-Canada, Antoine Honore, Ishan Jindal, Przemyslaw K. Joniak, Denis Kleyko, Venelin Kovatchev, Kalpesh Krishna, Ashutosh Kumar, Stefan Langer, Seungjae Ryan Lee, Corey James Levinson, Hualou Liang, Kaizhao Liang, Zhexiong Liu, Andrey Lukyanenko, Vukosi Marivate, Gerard de Melo, Simon Meoni, Maxime Meyer, Afnan Mir, Nafise Sadat Moosavi, Niklas Muennighoff, Timothy Sum Hon Mun, Kenton Murray, Marcin Namysl, Maria Obedkova, Priti Oli, Nivranshu Pasricha, Jan Pfister, Richard Plant, Vinay Prabhu, Vasile Pais, Libo Qin, Shahab Raji, Pawan Kumar Rajpoot, Vikas Raunak, Roy Rinberg, Nicholas Roberts, Juan Diego Rodriguez, Claude Roux, Paulo Henrique Santos Vasconcellos, Ananya B. Sai, Robin M. Schmidt, Thomas Scialom, Tshephisho Sefara, Saqib Shamsi, Xudong Shen, Yiwen Shi, Haoyue Shi, Anna Shvets, Nick Siegel, Damien Sileo, Jamie Simon, Chandan Singh, Roman Sitelew, Priyank Soni, Taylor Sorensen, William Soto Martinez, Aman Srivastava, KV Aditya Srivatsa, Tony Sun, Mukund Varma T., A. Tabassum, Fiona Anting Tan, Ryan Teehan, Mo Tiwari, Marie Tolkiehn, Athena Wang, Zijian Wang, Zijie J. Wang, Gloria Wang, Fuxuan Wei, Bryan Wilie, Genta Indra Winata, Xinyi Wu, Witold Wydmanski, Tianbao Xie, Usama Yaseen, Michael A. Yee, Jing Zhang, Yue Zhang
2021 J jnl
Wirel. Pers. Commun.
Nagender Aneja, Sapna Gambhir
2021 J jnl
CoRR
Sandhya Aneja, Nagender Aneja, Pg Emeroylariffion Abas, Abdul Ghani Naim
2020 conf
BDIOT
Rajarshi Roy Chowdhury, Sandhya Aneja, Nagender Aneja, Pg Emeroylariffion Abas
2020 J jnl
CoRR
Rajarshi Roy Chowdhury, Sandhya Aneja, Nagender Aneja, Pg Emeroylariffion Abas
2020 conf
SSPS
Sandhya Aneja, Siti Nur Afikah Bte Abdul Mazid, Nagender Aneja
2020 J jnl
CoRR
Sandhya Aneja, Siti Nur Afikah Bte Abdul Mazid, Nagender Aneja
2019 J jnl
CoRR
Sandhya Aneja, Nagender Aneja, Md. Shohidul Islam
2019 J jnl
CoRR
Amit Kumar Jaiswal, Ivan Panshin, Dimitrij Shulkin, Nagender Aneja, Samuel Abramov
2019 J jnl
CoRR
Nagender Aneja, Sandhya Aneja
2018 conf
IOTAIS
Sandhya Aneja, Nagender Aneja, Md. Shohidul Islam
2018 J jnl
CoRR
Nagender Aneja, Sapna Gambhir
2018 J jnl
Mob. Inf. Syst.
Nagender Aneja, Sapna Gambhir
2017 J jnl
Wirel. Pers. Commun.
Sapna Gambhir, Nagender Aneja, Liyanage Chandratilake De Silva
2017 J jnl
Wirel. Pers. Commun.
Nagender Aneja, Sapna Gambhir
2007 conf
ICN
Sandhya Khurana, Neelima Gupta, Nagender Aneja
2006 conf
ICN/ICONS/MCL
Sandhya Khurana, Neelima Gupta, Nagender Aneja
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)