Carlos Lopes

20 papers B 2Journal 5Unranked 13
YearRankTypeTitle / Venue / Authors
2025 conf
ECIL
Carlos Lopes, Maria da Luz Antunes, Tatiana Sanches
2024 conf
ICE/ITMC
Fabio A. Seixas-Lopes, Carlos Lopes, Maria Marques, Carlos Agostinho
2024 J jnl
Sensors
Fabio A. Seixas-Lopes, Carlos Lopes, Maria Marques, Carlos Agostinho, Ricardo Jardim-Gonçalves
2023 J jnl
Sensors
Majid Zamiri, João Sarraipa, José Ferreira, Carlos Lopes, Tal Soffer, Ricardo Jardim-Gonçalves
2022 conf
I-ESA Workshops
Lisa Pereira Michel, Carlos Lopes, Carlos Agostinho, Raquel Melo de Almeida
2022 conf
I-ESA Workshops
Fabio A. Seixas-Lopes, Carlos Lopes, Maria Marques, Carlos Agostinho
2022 conf
I-ESA Workshops
Fábio Januário, Carlos Lopes, Vasco Delgado-Gomes, Carlos Agostinho, Maria Marques
2021 J jnl
Aslib J. Inf. Manag.
María Pinto, Rosaura Fernández-Pascual, Carlos Lopes, Maria da Luz Antunes, Tatiana Sanches
2020 J jnl
Künstliche Intell.
Vedran Kasalica, Matthias Knorr, João Leite, Carlos Lopes
2020 conf
I-ESA Workshops
Artem A. Nazarenko, Carlos Lopes, José Ferreira, Philip Usher, João Sarraipa
2019 conf
ISD
Paulo E. Melo, Paulo Rupino da Cunha, Ricardo Amaro, Carlos Lopes, Ricardo Madeira, Pedro Miguel Antunes
2018 conf
ECIL
Carlos Lopes, Maria da Luz Antunes, Tatiana Sanches
2017 B conf
LPNMR
Carlos Lopes, Matthias Knorr, João Leite
2014 J jnl
Inf. Resour. Manag. J.
Teresa Costa, Carlos Lopes, Francisco António Lourenço Vaz
2013 conf
TEEM
Teresa Costa, Carlos Lopes, Francisco António Lourenço Vaz
2011 B conf
PIMRC
Michal Mackowiak, Carla Oliveira, Carlos Lopes, Luís M. Correia
2011 conf
IWAAL
Carlos Lopes, Rui José, Ana Aguiar
2011 conf
BODYNETS
Carla Oliveira, Carlos Lopes, Michal Mackowiak, Luís M. Correia
2008 conf
AGI
Ben Goertzel, Cassio Pennachin, Nil Geisweiller, Moshe Looks, Andre Senna, Welter Silva, Ari Heljakka, Carlos Lopes
1999 conf
RSFDGrC
Carlos Lopes, Marco Aurélio Cavalcanti Pacheco, Marley M. B. R. Vellasco, Emmanuel L. P. Passos
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"