Oskar Taubert

12 papers A 1C 2Journal 7Unranked 1
YearRankTypeTitle / Venue / Authors
2024 J jnl
CoRR
Stefan Meisenbacher, Kaleb Phipps, Oskar Taubert, Marie Weiel, Markus Götz, Ralf Mikut, Veit Hagenmeyer
2024
Oskar Taubert
2024 conf
CAI
Arvid Weyrauch, Thomas Steens, Oskar Taubert, Benedikt Hanke, Aslan Eqbal, Ewa Götz, Achim Streit, Markus Götz, Charlotte Debus
2024 J jnl
CoRR
Arvid Weyrauch, Thomas Steens, Oskar Taubert, Benedikt Hanke, Aslan Eqbal, Ewa Götz, Achim Streit, Markus Götz, Charlotte Debus
2023 C conf
ISC
Oskar Taubert, Marie Weiel, Daniel Coquelin, Anis Farshian, Charlotte Debus, Alexander Schug, Achim Streit, Markus Götz
2023 J jnl
CoRR
Oskar Taubert, Marie Weiel, Daniel Coquelin, Anis Farshian, Charlotte Debus, Alexander Schug, Achim Streit, Markus Götz
2022 J jnl
CoRR
James Kahn, Ilias Tsaklidis, Oskar Taubert, Lea Reuter, Giulio Dujany, Tobias Boeckh, Arthur Thaller, Pablo Goldenzweig, Florian U. Bernlochner, Achim Streit, Markus Götz
2022 J jnl
Mach. Learn. Sci. Technol.
James Kahn, Ilias Tsaklidis, Oskar Taubert, Lea Reuter, Giulio Dujany, Tobias Boeckh, Arthur Thaller, Pablo Goldenzweig, Florian U. Bernlochner, Achim Streit, Markus Götz
2020 C conf
ICMLA
Oskar Taubert, Markus Götz, Alexander Schug, Achim Streit
2019 J jnl
Bioinform.
Oskar Taubert, Ines Reinartz, Henning Meyerhenke, Alexander Schug
2017 A conf
ESA
Michael Wegner, Oskar Taubert, Alexander Schug, Henning Meyerhenke
2017 J jnl
CoRR
Michael Wegner, Oskar Taubert, Alexander Schug, Henning Meyerhenke
redb/extractors/decompiler/bninja/analysis/strings.py
← Index redb/extractors/decompiler/bninja/analysis/strings.py python
from collections import Counter
import math

class StringAnalysis:
    def __init__(self, bv, functions):
        self.bv = bv
        self.functions = functions

    def entropy(self, s: str) -> float:
        """Compute Shannon entropy of a string."""
        if not s:
            return 0.0
        freq = Counter(s)
        length = len(s)
        return -sum((count / length) * math.log2(count / length) for count in freq.values())

    def analyze(self):
        """
        Extract unique strings from the binary.

        Deduplicates by (string, encoding) within the same binary, keeping the
        first occurrence (lowest offset). Cross-binary deduplication and
        aggregation is handled by ClickHouse materialized views.
        """
        strings = {}

        # Sort strings by their starting address
        sorted_entries = sorted(self.bv.strings, key=lambda e: e.start)

        for entry in sorted_entries:
            # Key is the string and its encoding
            key = (entry.value, entry.type.name)

            # Skip if this string (value + encoding) was already added.
            # Because entries are sorted by address, the first one is always kept.
            if key in strings:
                continue

            # Store only the first occurrence with schema-matching field names
            # entry.length is the raw byte length, len(entry.value) is decoded string length
            string_entry = {
                "string": entry.value,
                "string_raw": entry.raw,
                "string_encoding": entry.type.name,
                "string_offset": entry.start,
                "string_length": len(entry.value),
                "string_raw_length": entry.length,
                "string_entropy": self.entropy(entry.value),
            }

            strings[key] = string_entry

        # Return as list for export compatibility
        return list(strings.values())