Veena Goswami

41 papers Misc 1Journal 36Unranked 4
YearRankTypeTitle / Venue / Authors
2026 J jnl
Perform. Evaluation
Veena Goswami
2025 J jnl
Comput.
Hemant Kumar Apat, Veena Goswami, Bibhudatta Sahoo, Rabindra K. Barik, Manob Jyoti Saikia
2025 J jnl
Int. J. Networked Distributed Comput.
Soubhagya Ranjan Mallick, Veena Goswami, Rakesh Kumar Lenka, Rabindra K. Barik, Ram Soorat, Niranjan Kumar Ray
2024 J jnl
ISPRS Int. J. Geo Inf.
Meenakshi Kandpal, Veena Goswami, Yash Pritwani, Rabindra K. Barik, Manob Jyoti Saikia
2024 conf
OCIT
Ayashkant Mishra, Veena Goswami, Meenakshi Kandpal, Rojalina Priyadarshini, Ganga Bishnu Mund, Rabindra Kumar Barik
2024 J jnl
SN Comput. Sci.
Sunil K. Panigrahi, Veena Goswami, Ganga Bishnu Mund, Rabindra K. Barik
2023 J jnl
IEEE Access
Soubhagya Ranjan Mallick, Rakesh K. Lenka, Veena Goswami, Suraj Sharma, Asish Kumar Dalai, Himansu Das, Rabindra K. Barik
2023 conf
OCIT
Satyaban Behera, Meenakshi Kandpal, Veena Goswami, Nachiketa Tarasia, Ganga Bishnu Mund, Rabindra Kumar Barik
2023 J jnl
Data
Meenakshi Kandpal, Veena Goswami, Rojalina Priyadarshini, Rabindra Kumar Barik
2022 conf
IC3
Veena Goswami, Bibhuti Bhusan Dash, Subhranshu Sekhar Tripathy, Barun Bikram Dash, Sudhansu Shekhar Patra, Rabindra Kumar Barik
2022 J jnl
J. Supercomput.
Veena Goswami, Gopinath Panda
2022 J jnl
J. Inf. Technol. Res.
Sudhansu Shekhar Patra, Veena Goswami
2018 J jnl
Int. J. Knowl. Eng. Data Min.
Choudhury Nishkanta Sahoo, Veena Goswami
2017 J jnl
RAIRO Oper. Res.
Veena Goswami, Ganga Bishnu Mund
2017 J jnl
Int. J. Commun. Networks Distributed Syst.
Choudhury Nishkanta Sahoo, Veena Goswami
2017 J jnl
RAIRO Oper. Res.
Gopinath Panda, Veena Goswami, Abhijit Datta Banik
2016 J jnl
Asia Pac. J. Oper. Res.
Gopinath Panda, Veena Goswami, Abhijit Datta Banik
2015 J jnl
Perform. Evaluation
Dibyajyoti Guha, Veena Goswami, Abhijit Datta Banik
2014 J jnl
Comput. Ind. Eng.
Anuradha Banerjee, U. C. Gupta, Veena Goswami
2014 Misc conf
ICDCIT
Dibyajyoti Guha, Abhijit Datta Banik, Veena Goswami, Souvik Ghosh
2013 J jnl
Int. J. Strateg. Decis. Sci.
P. Vijaya Laxmi, Veena Goswami, Kanithi Jyothsna
2013 J jnl
Int. J. Commun. Networks Distributed Syst.
Veena Goswami, Chinmaya Misra
2013 J jnl
Int. J. Cloud Appl. Comput.
Veena Goswami, Choudhury Nishkanta Sahoo
2013 J jnl
Int. J. Math. Oper. Res.
P. Vijaya Laxmi, Veena Goswami, Demie Seleshi
2012 J jnl
J. Syst. Sci. Complex.
Veena Goswami, Ganga Bishnu Mund
2012 J jnl
Int. J. Cloud Appl. Comput.
Veena Goswami, Sudhansu Shekhar Patra, Ganga Bishnu Mund
2012 J jnl
Int. J. Cloud Appl. Comput.
Veena Goswami, Sudhansu Shekhar Patra, Ganga Bishnu Mund
2012 conf
RAIT
Veena Goswami, Sudhansu Shekhar Patra, Ganga Bishnu Mund
2011 J jnl
Comput. Ind. Eng.
Veena Goswami, Ganga Bishnu Mund
2011 J jnl
Int. J. Strateg. Decis. Sci.
Veena Goswami, Ganga Bishnu Mund
2011 J jnl
Int. J. Wirel. Mob. Comput.
Veena Goswami, Prasanta Kumar Swain
2010 J jnl
Int. J. Math. Oper. Res.
Veena Goswami, K. Sikdar
2010 J jnl
Int. J. Appl. Decis. Sci.
Veena Goswami, P. Vijaya Laxmi
2009 J jnl
Comput. Ind. Eng.
Veena Goswami, Sujit Kumar Samanta
2009 J jnl
Comput. Math. Appl.
Veena Goswami, Ganga Bishnu Mund
2007 J jnl
Comput. Math. Appl.
Veena Goswami, Sujit Kumar Samanta
2006 J jnl
RAIRO Oper. Res.
Veena Goswami, Umesh Chandra Gupta, Sujit Kumar Samanta
2006 J jnl
Appl. Math. Comput.
Veena Goswami, Jnyana Ranjan Mohanty, Sujit Kumar Samanta
2004 J jnl
Comput. Oper. Res.
Mohan L. Chaudhry, Umesh Chandra Gupta, Veena Goswami
2002 J jnl
Comput. Oper. Res.
Umesh Chandra Gupta, Veena Goswami
2001 J jnl
INFORMS J. Comput.
Mohan L. Chaudhry, Umesh Chandra Gupta, Veena Goswami
redb/extractors/js_extractors/js_deobfuscation.py
← Index redb/extractors/js_extractors/js_deobfuscation.py python
import hashlib
import inspect
import re
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.js_extractor import JSExtractor
from redb.extractors.js_extractors.js_patterns import PATTERNS

# String literals of 4+ characters; only used by the deobfuscation diff to count
# strings revealed after deobfuscation. Compiled once at module load.
_STRING_LITERAL_4PLUS_RE = re.compile(r"[\"\']([^\"\']{4,})[\"\']")


class JSDeobfuscationExtractor(JSExtractor):
    """Compute pre/post-deobfuscation metrics for a JS sample.

    The actual deobfuscation pass (external tool with jsbeautifier fallback)
    lives on `JSContext.deobfuscated` and is cached per sample, so any other
    extractor that needs the deobfuscated text reads the same value without
    re-running the subprocess. Configure the external tool via env vars:
        JS_DEOBFUSCATOR_PATH    Path or name (default: webcrack)
        JS_DEOBFUSCATE_TIMEOUT  Seconds (default: 60)
    """

    def __init__(
        self, filepath, log, exporters=None, index_prefix=None,
        known_benign=False, known_malicious=False, source=None, context=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix,
            known_benign, known_malicious, source, context=context,
        )
        self.deobfuscation_result = None
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.JS_DEOBFUSCATION.value

    def extract(self):
        src = self.js_source
        if not src:
            return None

        deobfuscated, deobfuscator_used = self._context.deobfuscated
        if deobfuscated is None:
            return None

        original_size = len(src)
        original_entropy = self._context.text_entropy
        deobfuscated_size = len(deobfuscated)
        deobfuscated_entropy = self._calculate_text_entropy(deobfuscated)
        size_change_ratio = round(deobfuscated_size / original_size, 4) if original_size else 0.0

        # Strings revealed by deobfuscation: matched literals are extracted from
        # both versions and the set difference is the count of "new" strings.
        original_strings = set(_STRING_LITERAL_4PLUS_RE.findall(src))
        deobfuscated_strings = set(_STRING_LITERAL_4PLUS_RE.findall(deobfuscated))
        new_strings = deobfuscated_strings - original_strings

        # Suspicious APIs revealed by deobfuscation. Both sides of the diff
        # come from JSContext caches: the raw scan is computed once for the
        # whole pipeline; the deobfuscated scan is computed once and reused
        # by JSSuspiciousAPIsExtractor's revealed_by_deobf rows.
        original_apis = {n for n in self._context.scan if n in PATTERNS}
        deobfuscated_apis = set(self._context.scan_deobfuscated)
        new_apis = deobfuscated_apis - original_apis

        deobfuscated_sha256 = hashlib.sha256(deobfuscated.encode('utf-8')).hexdigest()

        self.deobfuscation_result = {
            'deobfuscator_used': deobfuscator_used,
            'deobfuscation_successful': True,
            'original_size': original_size,
            'deobfuscated_size': deobfuscated_size,
            'size_change_ratio': size_change_ratio,
            'original_entropy': original_entropy,
            'deobfuscated_entropy': deobfuscated_entropy,
            'new_strings_found': len(new_strings),
            'new_apis_found': len(new_apis),
            'deobfuscated_sha256': deobfuscated_sha256,
        }
        return self.deobfuscation_result

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ClickHouseExporter":
            if not self.deobfuscation_result:
                return None

            r = self.deobfuscation_result
            current_time = datetime.now(timezone.utc)
            data = [[
                self.sha256,
                r['deobfuscator_used'],
                int(r['deobfuscation_successful']),
                r['original_size'],
                r['deobfuscated_size'],
                r['size_change_ratio'],
                r['original_entropy'],
                r['deobfuscated_entropy'],
                r['new_strings_found'],
                r['new_apis_found'],
                r['deobfuscated_sha256'],
                current_time,
            ]]

            column_names = [
                "sha256", "deobfuscator_used", "deobfuscation_successful",
                "original_size", "deobfuscated_size", "size_change_ratio",
                "original_entropy", "deobfuscated_entropy",
                "new_strings_found", "new_apis_found",
                "deobfuscated_sha256", "analysis_date",
            ]

            column_type_names = [
                "FixedString(64)", "LowCardinality(String)", "UInt8",
                "UInt64", "UInt64", "Float64",
                "Float64", "Float64",
                "UInt32", "UInt32",
                "FixedString(64)", "DateTime64(3, 'UTC')",
            ]

            return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_js_deobfuscation"