Rama Shankar Yadav

45 papers C 2Misc 1Journal 32Unranked 9
YearRankTypeTitle / Venue / Authors
2025 J jnl
Concurr. Comput. Pract. Exp.
Medha Kirti, Ashish Kumar Maurya, Rama Shankar Yadav
2025 J jnl
Int. J. Intell. Transp. Syst. Res.
Abhay Katiyar, Dinesh Singh, Rama Shankar Yadav
2025 J jnl
Comput. Electr. Eng.
Naveen Kumar Gupta, Garima, Rama Shankar Yadav, Rajendra Kumar Nagaria
2025 Misc conf
COMSNETS
Naveen Kumar Gupta, Apeksha Aggarwal, Rama Shankar Yadav, Rajendra Kumar Nagaria
2024 J jnl
Concurr. Comput. Pract. Exp.
Medha Kirti, Ashish Kumar Maurya, Rama Shankar Yadav
2024 J jnl
Softw. Pract. Exp.
Prateek Verma, Ashish Kumar Maurya, Rama Shankar Yadav
2024 J jnl
Multim. Tools Appl.
Anil Kumar, Dinesh Singh, Rama Shankar Yadav
2024 J jnl
Concurr. Comput. Pract. Exp.
Anil Kumar, Dinesh Singh, Rama Shankar Yadav
2024 J jnl
Expert Syst. J. Knowl. Eng.
Anil Kumar, Dinesh Singh, Rama Shankar Yadav
2024 J jnl
Concurr. Comput. Pract. Exp.
Medha Kirti, Ashish Kumar Maurya, Rama Shankar Yadav
2024 J jnl
Clust. Comput.
Medha Kirti, Ashish Kumar Maurya, Rama Shankar Yadav
2024 J jnl
Multim. Tools Appl.
Avaneesh Kumar Yadav, Ranvijay, Rama Shankar Yadav, Ashish Kumar Maurya
2023 J jnl
J. Ambient Intell. Humaniz. Comput.
Dinesh Singh, Ashish Kumar Maurya, Ranvijay, Rama Shankar Yadav
2023 J jnl
Comput. Networks
Naveen Kumar Gupta, Rama Shankar Yadav, Rajendra Kumar Nagaria, Deepak Gupta, Achyut Mani Tripathi, Om Jee Pandey
2023 J jnl
Int. J. Commun. Networks Distributed Syst.
Dinesh Singh, Ashish Kumar Maurya, Ranvijay, Rama Shankar Yadav
2023 conf
ICCCNT
Medha Kirti, Ashish Kumar Maurya, Rama Shankar Yadav
2023 J jnl
Multim. Tools Appl.
Avaneesh Kumar Yadav, Ranvijay, Rama Shankar Yadav, Ashish Kumar Maurya
2022 J jnl
Wirel. Networks
Abhay Katiyar, Dinesh Singh, Rama Shankar Yadav
2021 J jnl
Open Comput. Sci.
Naveen Kumar Gupta, Rama Shankar Yadav, Rajendra Kumar Nagaria, Deepak Gupta
2021 J jnl
Ingénierie des Systèmes d Inf.
Avaneesh Kumar Yadav, Ashish Kumar Maurya, Ranvijay, Rama Shankar Yadav
2020 J jnl
Wirel. Networks
Naveen Kumar Gupta, Rama Shankar Yadav, Rajendra Kumar Nagaria
2020 conf
ICCCNT
Abhay Katiyar, Satyam Kumar Gupta, Dinesh Singh, Rama Shankar Yadav
2020 conf
ICSCA
Naveen Kumar Gupta, Rama Shankar Yadav, Rajendra Kumar Nagaria
2020 J jnl
J. High Speed Networks
Dinesh Singh, Ranvijay, Rama Shankar Yadav
2020 J jnl
Wirel. Networks
Abhay Katiyar, Dinesh Singh, Rama Shankar Yadav
2019 conf
SICE
Naveen Kumar Gupta, Rama Shankar Yadav, Rajendra Kumar Nagaria
2018 J jnl
Int. J. Ad Hoc Ubiquitous Comput.
Dinesh Singh, Ranvijay, Rama Shankar Yadav
2018 J jnl
IET Commun.
Hari Mohan Singh, Rama Shankar Yadav
2018 J jnl
Int. J. Strateg. Decis. Sci.
Praveen Ranjan Srivastava, Anand Sharma, Rama Shankar Yadav, Satyendra Kumar Sharma, Inderjeet Kaur
2017 J jnl
Photonic Netw. Commun.
Hari Mohan Singh, Rama Shankar Yadav
2016 J jnl
Wirel. Networks
Sarika Yadav, Rama Shankar Yadav
2016 conf
ICIIS
Shruti Jadon, Rama Shankar Yadav
2016 conf
ICTCS
Dinesh Singh, Ranvijay, Rama Shankar Yadav
2014 J jnl
Wirel. Pers. Commun.
Karan Singh, Rama Shankar Yadav
2014 J jnl
Int. J. Comput. Intell. Stud.
Anil Yadav, Rama Shankar Yadav, Raghuraj Singh, Ashutosh Kumar Singh
2013 C conf
QSHINE
Karan Singh, Rama Shankar Yadav
2013 C conf
QSHINE
Rudra Pratap Ojha, Rama Shankar Yadav, Sarsij Tripathi
2012 J jnl
Photonic Netw. Commun.
Raghav Yadav, Rama Shankar Yadav, Hari Mohan Singh
2011 J jnl
Int. J. Distributed Syst. Technol.
Sarsij Tripathi, Rama Shankar Yadav, Ranvijay, Rajib L. Jana
2011 conf
SocProS (1)
Anil Yadav, Raghuraj Singh, Rama Shankar Yadav
2010 J jnl
JOCN
Raghav Yadav, Rama Shankar Yadav, Hari Mohan Singh
2010 J jnl
SIGBED Rev.
Ranvijay, Rama Shankar Yadav, Smriti Agrawal
2009 conf
ARTCom
Raghav Yadav, Rama Shankar Yadav, Hari Mohan Singh
2008 ch.
Software Engineering, Artificial Intelligence, Networking and Parallel/Distributed Computing
Smriti Agrawal, Rama Shankar Yadav, Ranvijay
2007 conf
ICIT
Smriti Agrawal, Rama Shankar Yadav, Nabanita Das
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"