Rami Ezzine

29 papers B 9Journal 16Unranked 3
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Trans. Inf. Theory
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2025 B conf
ISIT
Wafa Labidi, Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2025 ed.
Information Theory and Related Fields
Christian Deppe, Andreas J. Winter, Raymond W. Yeung, Holger Boche, Ingo Althöfer, Jens Stoye, Ulrich Tamm, Rami Ezzine
2025 conf
Information Theory and Related Fields
Rami Ezzine, Wafa Labidi, Christian Deppe, Holger Boche
2025 J jnl
IEEE Trans. Inf. Theory
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2025 conf
Information Theory and Related Fields
Christian Deppe, Holger Boche, Rami Ezzine, Wafa Labidi
2024 B conf
ISIT
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2024 J jnl
CoRR
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2024 J jnl
CoRR
Wafa Labidi, Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2024 J jnl
IEEE Trans. Inf. Theory
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2024 J jnl
CoRR
Christian Deppe, Holger Boche, Rami Ezzine, Wafa Labidi
2023 B conf
ISIT
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2023 J jnl
CoRR
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2023 J jnl
IEEE Trans. Inf. Theory
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2023 conf
ICC
Wafa Labidi, Rami Ezzine, Christian Deppe, Moritz Wiese, Holger Boche
2022 B conf
ITW
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2022 J jnl
CoRR
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2022 B conf
ISIT
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2022 J jnl
CoRR
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2022 J jnl
CoRR
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2022 B conf
ISIT
Wafa Labidi, Rami Ezzine, Christian Deppe, Holger Boche
2022 J jnl
CoRR
Wafa Labidi, Rami Ezzine, Christian Deppe, Holger Boche
2022 J jnl
CoRR
Wafa Labidi, Rami Ezzine, Christian Deppe, Moritz Wiese, Holger Boche
2022 J jnl
CoRR
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2021 B conf
ISIT
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2021 J jnl
CoRR
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2021 B conf
ITW
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2021 J jnl
CoRR
Rami Ezzine, Moritz Wiese, Christian Deppe, Holger Boche
2020 B conf
GLOBECOM
Rami Ezzine, Wafa Labidi, Holger Boche, Christian Deppe
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())