Negar Koochakzadeh

18 papers A* 1A 1B 1C 2Misc 1Journal 4Unranked 6
YearRankTypeTitle / Venue / Authors
2014 conf
EDBT/ICDT Workshops
Omid Ardakanian, Negar Koochakzadeh, Rayman Preet Singh, Lukasz Golab, Srinivasan Keshav
2014 J jnl
Knowl. Based Syst.
Ali Rahmani, Salim Afra, Omar Zarour, Omar Addam, Negar Koochakzadeh, Keivan Kianmehr, Reda Alhajj, Jon G. Rokne
2013
Negar Koochakzadeh
2012 A* conf
ICDE
Keivan Kianmehr, Negar Koochakzadeh, Reda Alhajj
2012 J jnl
Int. J. Bus. Intell. Data Min.
Keivan Kianmehr, Negar Koochakzadeh
2012 conf
EDBT/ICDT Workshops
Keivan Kianmehr, Negar Koochakzadeh
2012 B conf
ASONAM
Negar Koochakzadeh, Keivan Kianmehr, Atieh Sarraf, Reda Alhajj
2011 C conf
IDEAL
Osama Alhawsawi, Mayad Al-Saidi, Michael Phi, Tamer N. Jarada, Mohammad Khabbaz, Negar Koochakzadeh, Keivan Kianmehr, Reda Alhajj, Jon G. Rokne
2011 conf
ICDM Workshops
Negar Koochakzadeh, Atieh Sarraf, Keivan Kianmehr, Jon G. Rokne, Reda Alhajj
2011 C conf
HPCC
Negar Koochakzadeh, Reda Alhajj
2011 conf
ISMIS Industrial Session
Negar Koochakzadeh, Fatemeh Keshavarz, Atieh Sarraf, Ali Rahmani, Keivan Kianmehr, Mohammad Rifaie, Reda Alhajj, Jon G. Rokne
2010 J jnl
Adv. Softw. Eng.
Negar Koochakzadeh, Vahid Garousi
2010 conf
TAIC PART
Vahid Garousi, Negar Koochakzadeh
2010 ch.
Data Mining for Social Network Data
Iltae Lee, Negar Koochakzadeh, Keivan Kianmehr, Reda Alhajj, Jon G. Rokne
2010 J jnl
Int. J. Softw. Eng. Knowl. Eng.
Negar Koochakzadeh, Keivan Kianmehr, Jamal Jida, Iltae Lee, Reda Alhajj, Jon G. Rokne
2010 conf
TAIC PART
Negar Koochakzadeh, Vahid Garousi
2009 Misc conf
IRI
Iltae Lee, Keivan Kianmehr, Negar Koochakzadeh, Reda Alhajj, Jon G. Rokne
2009 A conf
ICST
Negar Koochakzadeh, Vahid Garousi, Frank Maurer
redb/extractors/js_extractors/js_content.py
← Index redb/extractors/js_extractors/js_content.py python
"""Persists raw + normalised text into the generic `code_text_content` table.

Reads the raw source and the deobfuscation result directly from the shared
JSContext so no extra compute happens here — both values are computed once
per sample (the source at JSContext construction, the deobfuscation lazily
on first access) and reused by any extractor that needs them.

`text_normalized` is left NULL when the deobfuscation pass produced no
output, so analysts can distinguish "we tried and got nothing" from
"normalisation succeeded".
"""

import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.js_extractor import JSExtractor


class JSContentExtractor(JSExtractor):

    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.content_row = None
        self.log.debug(inspect.currentframe().f_code.co_name)

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

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

        deobfuscated, normalizer_used = self._context.deobfuscated

        self.content_row = {
            "content_type": self._context.content_type,
            "text_raw": src,
            "text_normalized": deobfuscated,  # may be None
            "normalizer_used": normalizer_used,  # may be None
        }
        return self.content_row

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

        r = self.content_row
        data = [[
            self.sha256,
            r["content_type"],
            r["text_raw"],
            r["text_normalized"],
            r["normalizer_used"],
            datetime.now(timezone.utc),
        ]]

        column_names = [
            "sha256",
            "content_type",
            "text_raw",
            "text_normalized",
            "normalizer_used",
            "analysis_date",
        ]

        column_type_names = [
            "FixedString(64)",
            "LowCardinality(String)",
            "String",
            "Nullable(String)",
            "Nullable(String)",
            "DateTime64(3, 'UTC')",
        ]

        return (data, column_names, column_type_names)

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