Mahmoud Jazzar

12 papers C 1Journal 1Unranked 9
YearRankTypeTitle / Venue / Authors
2025 C conf
ISNCC
Leena Nazzal, Mahmoud Jazzar, Amna Eleyan, Tarek Bejaoui
2023 conf
SmartNets
Rasheed Yousef, Mahmoud Jazzar, Amna Eleyan, Tarek Bejaoui
2023 conf
SmartNets
Tasneem Duridi, Derar Eleyan, Amna Eleyan, Tarek Bejaoui, Mahmoud Jazzar
2023 conf
SmartNets
Ruwa F. Abu Hweidi, Mahmoud Jazzar, Amna Eleyan, Tarek Bejaoui
2023 conf
SmartNets
Ruwa F. Abu Hweidi, Mahmoud Jazzar, Amna Eleyan, Tarek Bejaoui
2022 conf
SmartNets
Ammar Dawabsheh, Mahmoud Jazzar, Amna Eleyan, Tarek Bejaoui, Segun I. Popoola
2022 conf
SmartNets
Zaina AlSaed, Mahmoud Jazzar, Amna Eleyan, Tarek Bejaoui, Segun I. Popoola
2022 conf
SmartNets
Paul Samuel Christopherson, Amna Eleyan, Tarek Bejaoui, Mahmoud Jazzar
2022 conf
SmartNets
Raghad Khweiled, Mahmoud Jazzar, Amna Eleyan, Tarek Bejaoui
2017 J jnl
J. Cases Inf. Technol.
Mahmoud Jazzar
2008 ch.
Software Engineering, Artificial Intelligence, Networking and Parallel/Distributed Computing
Mahmoud Jazzar, Aman Jantan
2008 conf
Asia International Conference on Modelling and Simulation
Mahmoud Jazzar, Aman Bin Jantan
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())