Ralf Isenmann

35 papers Journal 1Unranked 33
YearRankTypeTitle / Venue / Authors
2015 conf
GI-Jahrestagung
Ralf Isenmann, Remmer Sassen, Sascha Zinn
2015 conf
GI-Jahrestagung
Ralf Isenmann, Jorge Marx Gómez
2014 conf
EnviroInfo
Andreas Solsbach, Ralf Isenmann, Jorge Marx Gómez, Frank Teuteberg
2013 conf
BUIS-Tage
Ralf Isenmann
2013 conf
EnviroInfo
Ralf Isenmann
2011 conf
HICSS
Ralf Isenmann, Jorge Marx Gómez, Daniel Süpke
2011 conf
EnviroInfo
Andreas Solsbach, Ralf Isenmann, Jorge Marx Gómez
2010 conf
EnviroInfo
Ralf Isenmann
2010 conf
MKWI
Jorge Marx Gómez, Ralf Isenmann
2009 conf
EnviroInfo (2)
Ralf Isenmann
2009 conf
ITEE
Daniel Süpke, Jorge Marx Gómez, Ralf Isenmann
2009 conf
EnviroInfo (1)
Jorge Marx Gómez, Ralf Isenmann, Gerlinde Knetsch
2009 conf
EnviroInfo (1)
Andreas Solsbach, Jorge Marx Gómez, Ralf Isenmann
2009 conf
EnviroInfo (2)
Ralf Isenmann, Konstantin Chernykh
2009 conf
EnviroInfo (1)
Daniel Süpke, Jorge Marx Gómez, Ralf Isenmann
2008 conf
EnviroInfo
Ralf Isenmann
2008 conf
EnviroInfo
Ralf Isenmann, Jorge Marx Gómez, Daniel Süpke
2008 conf
Multikonferenz Wirtschaftsinformatik
Jorge Marx Gómez, Ralf Isenmann
2008 conf
Multikonferenz Wirtschaftsinformatik
Ralf Isenmann, Hans-Knud Arndt, Christoph Bey, Jorge Marx Gómez, Andreas Solsbach
2007 conf
ITEE
Ralf Isenmann
2007 ch.
Encyclopedia of Information Ethics and Security
Ralf Isenmann
2007 conf
ITEE
Ralf Isenmann
2007 conf
EnviroInfo (1)
Ralf Isenmann, Hans-Knud Arndt, Jan Brosowski, Jorge Marx Gómez, Monika Schappert
2006 conf
EnviroInfo
Werner Pillmann, Werner Geiger, Ralf Isenmann
2006 conf
EnviroInfo
Hans-Knud Arndt, Ralf Isenmann, Jan Brosowski, Inke Thiessen, Jorge Marx Gómez
2006 conf
EnviroInfo
Ralf Isenmann, Tobias Jordan, Jorge Marx Gómez
2005 conf
EnviroInfo
Ralf Isenmann, Jan Brosowski, Monika Schappert, Jorge Marx Gómez
2005 conf
EnviroInfo
Ralf Isenmann, Ki-Cheol Kim
2004 conf
EnviroInfo (2)
Ralf Isenmann, Monika Beisel, Jan Brosowski, Jorge Marx Gómez
2004 conf
EnviroInfo (2)
Jan Brosowski, Ralf Isenmann, Monika Beisel, Jorge Marx Gómez
2003 conf
EnviroInfo
Jorge Marx Gómez, Claus Rautenstrauch, Ralf Isenmann
2003 conf
EnviroInfo
Ralf Isenmann, Jan Brosowski, Jorge Marx Gómez, Hans-Knud Arndt
2003 conf
EnviroInfo
Ralf Isenmann, Jan Brosowski, Christian Lenz
2001 J jnl
HMD Prax. Wirtsch.
Ralf Isenmann, Christian Lenz, Heiner Müller-Merbach
2001 conf
Wirtschaftsinformatik
Ralf Isenmann, Christian Lenz, Heiner Müller-Merbach, Christian Reitz
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"