Majid Khabbazian

95 papers A* 3A 3B 10C 4Misc 3Journal 58Unranked 14
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Majid Khabbazian
2026 J jnl
IEEE Trans. Netw. Serv. Manag.
Sajjad Alizadeh, Majid Khabbazian
2026 J jnl
Cybersecur.
Alireza Hafez, Dorsa Nahid, Majid Khabbazian
2025 conf
BCCA
Amin Bashiri, Majid Khabbazian
2025 J jnl
CoRR
Majid Khabbazian
2025 J jnl
Discret. Math.
Majid Khabbazian, Muriel Médard
2025 B conf
AFT
Sajjad Alizadeh, Majid Khabbazian
2024 J jnl
ACM Trans. Priv. Secur.
Yan Qiao, Kui Wu, Majid Khabbazian
2024 conf
FC (2)
Amin Bashiri, Majid Khabbazian
2023 B conf
AFT
Mohammad Amin Vafadar, Majid Khabbazian
2023 J jnl
CoRR
Mohammad Amin Vafadar, Majid Khabbazian
2023 B conf
AFT
Alireza Arjmand, Majid Khabbazian
2023 J jnl
IEEE Internet Things J.
Ahmad Shabani Baghani, Majid Khabbazian
2022 J jnl
Nat. Comput. Sci.
Majid Khabbazian, Hosna Jabbari
2022 C conf
ICBC
Tejaswi Nadahalli, Majid Khabbazian, Roger Wattenhofer
2022 J jnl
IACR Cryptol. ePrint Arch.
Tejaswi Nadahalli, Majid Khabbazian, Roger Wattenhofer
2022 J jnl
IEEE Internet Things J.
Ahmad Shabani Baghani, Sonbol Rahimpour, Majid Khabbazian
2022 C conf
ICBC
Sonbol Rahimpour, Majid Khabbazian
2021 conf
IEEE ICBC
Sonbol Rahimpour, Majid Khabbazian
2021 A conf
AsiaCCS
Yan Qiao, Kui Wu, Majid Khabbazian
2021 J jnl
IEEE Open J. Comput. Soc.
Afshin Arefi, Majid Khabbazian
2021 B conf
AFT
Sonbol Rahimpour, Majid Khabbazian
2021 conf
Financial Cryptography (1)
Tejaswi Nadahalli, Majid Khabbazian, Roger Wattenhofer
2020 J jnl
CoRR
Alireza Hafez, Dorsa Nahid, Majid Khabbazian
2020 J jnl
IEEE Access
Naghmeh Sadat Moayedian, Shirin Salehi, Majid Khabbazian
2020 J jnl
CoRR
Sonbol Rahimpour, Majid Khabbazian
2020 Misc conf
SoftCOM
Ahmad Shabani Baghani, Sonbol Rahimpour, Majid Khabbazian
2020 J jnl
CoRR
Ahmad Shabani Baghani, Sonbol Rahimpour, Majid Khabbazian
2020 J jnl
IACR Cryptol. ePrint Arch.
Majid Khabbazian, Tejaswi Nadahalli, Roger Wattenhofer
2019 B conf
AFT
Majid Khabbazian, Tejaswi Nadahalli, Roger Wattenhofer
2019 J jnl
IACR Cryptol. ePrint Arch.
Majid Khabbazian, Tejaswi Nadahalli, Roger Wattenhofer
2019 J jnl
CoRR
Majid Khabbazian, Afshin Arefi
2019 J jnl
EPJ Data Sci.
Sajjad Alizadeh, Majid Khabbazian
2019 J jnl
IEEE/ACM Trans. Netw.
Majid Khabbazian, Keyvan Gharouni Saffar
2019 J jnl
CoRR
Majid Khabbazian, Keyvan Gharouni Saffar
2018 J jnl
IEEE Trans. Wirel. Commun.
Afshin Arefi, Majid Khabbazian, Masoud Ardakani, Gaurav Bansal
2018 J jnl
IEEE Trans. Commun.
Mehrtash Mehrabi, Mostafa Shahabinejad, Masoud Ardakani, Majid Khabbazian
2018 J jnl
CoRR
Majid Khabbazian
2018 J jnl
IEEE Trans. Commun.
Mostafa Shahabinejad, Majid Khabbazian, Masoud Ardakani
2017 Misc conf
ICNC
Mostafa Shahabinejad, Masoud Ardakani, Majid Khabbazian
2017 J jnl
IEEE Trans. Parallel Distributed Syst.
Yan Liu, Di Niu, Majid Khabbazian
2017 Misc conf
SoftCOM
Keyvan Gharouni Saffar, Majid Khabbazian
2017 B conf
ISIT
Mostafa Shahabinejad, Majid Khabbazian, Masoud Ardakani
2017 conf
VTC Fall
Mehrtash Mehrabi, Masoud Ardakani, Majid Khabbazian
2017 J jnl
CoRR
Mostafa Shahabinejad, Majid Khabbazian, Masoud Ardakani
2017 J jnl
IEEE Commun. Lett.
Afshin Arefi, Majid Khabbazian
2016 J jnl
IEEE Trans. Commun.
Mostafa Shahabinejad, Majid Khabbazian, Masoud Ardakani
2016 J jnl
IEEE Trans. Parallel Distributed Syst.
Majid Khabbazian, Di Niu
2016 J jnl
IEEE Trans. Wirel. Commun.
Zahra Mobini, Majid Khabbazian
2016 J jnl
CoRR
Mehrtash Mehrabi, Mostafa Shahabinejad, Masoud Ardakani, Majid Khabbazian
2015 J jnl
IEEE/ACM Trans. Netw.
Majid Khabbazian, Stephane Durocher, Alireza Haghnegahdar, Fabian Kuhn
2015 J jnl
CoRR
Majid Khabbazian
2015 conf
Allerton
Majid Khabbazian
2015 conf
ICC
Majid Ghanbarinejad, Christian Schlegel, Majid Khabbazian
2015 J jnl
Distributed Comput.
Mohsen Ghaffari, Bernhard Haeupler, Majid Khabbazian
2015 J jnl
J. Inf. Secur. Appl.
Shreelatha Bhadravati, Pradeep K. Atrey, Majid Khabbazian
2014 A conf
ICDCS
Majid Khabbazian, Di Niu
2014 J jnl
IEEE Commun. Lett.
Mostafa Shahabinejad, Majid Khabbazian, Masoud Ardakani
2014 A* conf
SODA
Noga Alon, Mohsen Ghaffari, Bernhard Haeupler, Majid Khabbazian
2014 J jnl
Ad Hoc Networks
Majid Khabbazian, Dariusz R. Kowalski, Fabian Kuhn, Nancy A. Lynch
2014 J jnl
IEEE Wirel. Commun. Lett.
Alireza Haghnegahdar, Majid Khabbazian, Vijay K. Bhargava
2014 B conf
GLOBECOM
Majid Ghanbarinejad, Christian Schlegel, Majid Khabbazian
2014 J jnl
CoRR
Mohsen Ghaffari, Bernhard Haeupler, Majid Khabbazian
2013 J jnl
CoRR
Mohsen Ghaffari, Bernhard Haeupler, Majid Khabbazian
2013 conf
ICSC
Shreelatha Bhadravati, Majid Khabbazian, Pradeep K. Atrey
2013 A* conf
PODC
Mohsen Ghaffari, Bernhard Haeupler, Majid Khabbazian
2013 J jnl
Int. J. Robotics Res.
Alejandro Cornejo, Andrew J. Lynch, Elizabeth Fudge, Siegfried Bilstein, Majid Khabbazian, James McLurkin
2012 B conf
SIROCCO
Majid Khabbazian, Stephane Durocher, Alireza Haghnegahdar
2012 J jnl
IEEE Trans. Mob. Comput.
Majid Khabbazian, Ian F. Blake, Vijay K. Bhargava
2012 J jnl
IEEE Trans. Veh. Technol.
Zahra Mobini, Parastoo Sadeghi, Majid Khabbazian, Saadan Zokaei
2012 C conf
WAFR
Alejandro Cornejo, Andrew J. Lynch, Elizabeth Fudge, Siegfried Bilstein, Majid Khabbazian, James McLurkin
2012 J jnl
CoRR
Mohsen Ghaffari, Bernhard Haeupler, Majid Khabbazian
2011 J jnl
CoRR
Majid Khabbazian, Stephane Durocher, Alireza Haghnegahdar
2011 A conf
DISC
Shlomi Dolev, Seth Gilbert, Majid Khabbazian, Calvin C. Newport
2011 conf
FOMC
Majid Khabbazian, Fabian Kuhn, Nancy A. Lynch, Muriel Médard, Ali ParandehGheibi
2011 A* conf
PODC
Majid Khabbazian, Dariusz R. Kowalski
2010 conf
DIALM-PODC
Majid Khabbazian, Fabian Kuhn, Dariusz R. Kowalski, Nancy A. Lynch
2010 J jnl
IEEE Trans. Wirel. Commun.
Praveen Kaligineedi, Majid Khabbazian, Vijay K. Bhargava
2010 J jnl
IEEE Trans. Inf. Theory
Kin Kwong Leung, Chi Wan Sung, Majid Khabbazian, Mohammad Ali Safari
2009 J jnl
IEEE Trans. Mob. Comput.
Majid Khabbazian, Vijay K. Bhargava
2009 J jnl
IEEE Trans. Commun.
Majid Khabbazian, Md. Jahangir Hossain, Mohamed-Slim Alouini, Vijay K. Bhargava
2009 J jnl
IEEE Trans. Wirel. Commun.
Majid Khabbazian, Hugues Mercier, Vijay K. Bhargava
2008 J jnl
IEEE Trans. Computers
Majid Khabbazian, Vijay K. Bhargava
2008 J jnl
IEEE Trans. Inf. Theory
Hugues Mercier, Majid Khabbazian, Vijay K. Bhargava
2008 conf
ICC
Praveen Kaligineedi, Majid Khabbazian, Vijay K. Bhargava
2007 conf
ISSPA
Rouhollah Dianat, Shohreh Kasaei, Majid Khabbazian
2007 J jnl
IEEE Trans. Computers
Majid Khabbazian, T. Aaron Gulliver, Vijay K. Bhargava
2007 B conf
GLOBECOM
Majid Khabbazian, Vijay K. Bhargava
2006 conf
COMSWARE
Mohammad M. Rashid, Ekram Hossain, Majid Khabbazian, Vijay K. Bhargava
2006 conf
ICC
Majid Khabbazian, Kin Kwong Leung, Mohammad Ali Safari
2006 B conf
GLOBECOM
Majid Khabbazian, Hugues Mercier, Vijay K. Bhargava
2005 J jnl
IEEE Trans. Computers
Majid Khabbazian, T. Aaron Gulliver, Vijay K. Bhargava
2005 J jnl
IACR Cryptol. ePrint Arch.
Majid Khabbazian, T. Aaron Gulliver, Vijay K. Bhargava
2004 J jnl
IACR Cryptol. ePrint Arch.
Majid Khabbazian, T. Aaron Gulliver
2000 C conf
RoboCup
Jafar Habibi, Ehsan Chiniforooshan, Majid Khabbazian, Mahdi Mirzazade, Mohammad Ali Safari, HamidReza Younesi
redb/extractors/js_extractor.py
← Index redb/extractors/js_extractor.py python
import logging
import re
from abc import ABCMeta, abstractmethod

from redb.extractors.extractor import Extractor
from redb.extractors.js_extractors.js_context import JSContext, _text_entropy

logger = logging.getLogger(__name__)

# ESM is recognised by line-anchored `import ... from "..."` / bare side-effect
# `import "..."` / top-level `export ...`. Anchored at line start to avoid
# matching the substring inside string literals or comments.
_ESM_PATTERN = re.compile(
    r'(?m)^\s*(?:'
    r'import\s+[^;\n]*?\bfrom\s+[\'"]'
    r'|import\s+[\'"][^\'"]+[\'"]'
    r'|export\s+(?:default\b|\{|\*|const\b|let\b|var\b|function\b|class\b|async\b)'
    r')'
)


@abstractmethod
class JSExtractor(Extractor, metaclass=ABCMeta):
    """Base class for JavaScript file extractors.

    Every JSExtractor reads its raw materials (bytes / decoded source / line
    list / scan_source results / pyjsparser AST / text entropy) from a shared
    `JSContext`. When workers.py drives the JS pipeline it builds one context
    per sample and threads it into every extractor via `context=`. When tests
    or other callers instantiate an extractor directly, the constructor builds
    a fresh context from `(filepath, source=...)`.

    All historical instance attributes (`self.binary`, `self.js_source`,
    `self.lines`) and helpers (`self._decode_source`, `self._parse_ast`,
    `self._calculate_text_entropy`) are preserved as thin delegators so
    existing extractor code keeps working unchanged.
    """

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        known_benign=False,
        known_malicious=False,
        source=None,
        context=None,
    ):
        if context is None:
            context = JSContext.from_path(filepath, log=log, source=source)
        elif source is not None and context.source != source:
            log.warning(
                "JSExtractor received both `source=` and `context=` with "
                "differing source; ignoring source kwarg"
            )
        self._context = context

        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            known_benign=known_benign,
            known_malicious=known_malicious,
        )

    @property
    def binary(self):
        return self._context.raw_bytes

    @property
    def js_source(self):
        return self._context.source

    @property
    def lines(self):
        return self._context.lines

    def _decode_source(self):
        """Back-compat shim — the context already decoded once at construction.

        Kept so any external caller using the historical method name keeps
        working without touching the underlying bytes again.
        """
        return self._context.source

    def _parse_ast(self):
        """Return the shared pyjsparser AST (or None if unavailable)."""
        return self._context.ast

    def _calculate_text_entropy(self, text):
        """Shannon text entropy for `text`.

        When `text` is the context's own source we read the cached value;
        otherwise we compute fresh. JSStringsExtractor calls this on arbitrary
        decoded substrings, so the fresh-compute path must remain available.
        """
        if text is self._context.source:
            return self._context.text_entropy
        return _text_entropy(text)

    def _detect_environment(self):
        """Detect the target JS runtime environment."""
        src = self.js_source
        if not src:
            return "unknown"

        # WScript/WSH indicators
        wscript_patterns = [
            'WScript.', 'WSH.', 'ActiveXObject', 'Scripting.FileSystemObject',
            'WScript.Shell', 'ADODB.Stream',
        ]
        for p in wscript_patterns:
            if p in src:
                return "wscript"

        # Browser-extension APIs — checked before generic browser/worker because
        # `chrome.*` and `browser.runtime` are distinctive of MV2/MV3 extensions
        extension_patterns = [
            'chrome.runtime', 'chrome.tabs', 'chrome.storage',
            'chrome.webRequest', 'browser.runtime', 'browser.tabs',
        ]
        for p in extension_patterns:
            if p in src:
                return "browser_extension"

        # Service / Web Workers — worker-only APIs that don't appear in regular
        # browser pages (a generic browser script would use `window.` or
        # `document.`, never `self.importScripts` or `caches.match`)
        worker_patterns = [
            "self.addEventListener('fetch'", 'self.addEventListener("fetch"',
            'self.importScripts', 'self.skipWaiting',
            'caches.match', 'caches.open',
        ]
        for p in worker_patterns:
            if p in src:
                return "service_worker"

        # Deno runtime
        if 'Deno.' in src:
            return "deno"

        # Node.js indicators
        node_patterns = [
            'require(', 'module.exports', 'process.env', '__dirname',
            '__filename', 'Buffer.', 'child_process',
        ]
        for p in node_patterns:
            if p in src:
                return "node"

        # Browser indicators
        browser_patterns = [
            'document.', 'window.', 'navigator.', 'localStorage',
            'sessionStorage', 'XMLHttpRequest', 'addEventListener',
        ]
        for p in browser_patterns:
            if p in src:
                return "browser"

        return "unknown"

    def _detect_script_type(self):
        """Detect the script type/format."""
        src = self.js_source
        if not src:
            return "unknown"

        stripped = src.lstrip()

        # JScript.Encode payload — must be checked first since the encoded
        # body can't be classified any other way
        if stripped.startswith('#@~^'):
            return "jse"

        # WSF / HTA live in the first few KB of an HTML-ish wrapper
        head_lower = stripped[:4096].lower()

        # Windows Script File — XML wrapper around one or more <script> blocks
        if ('<job' in head_lower or '<package' in head_lower) and '<script' in head_lower:
            return "wsf"

        # HTML Application — distinct from generic embedded_html because HTAs
        # run under mshta.exe with full WSH/ActiveX access
        if '<hta:application' in head_lower or 'application/hta' in head_lower:
            return "hta"

        if stripped.startswith('<!') or stripped.startswith('<html') or '<script' in stripped[:2000]:
            return "embedded_html"

        if 'WScript.' in src or 'WSH.' in src:
            return "wscript"

        if _ESM_PATTERN.search(src):
            return "esm"

        if 'require(' in src or 'module.exports' in src:
            return "node_module"

        return "standalone"