Radouane Ouladsine

14 papers C 4Journal 5Unranked 5
YearRankTypeTitle / Venue / Authors
2025 J jnl
Math. Comput. Simul.
Youssef Alidrissi, Houda El Ouadoud, Serge Pierfederici, Matthieu Urbain, Radouane Ouladsine, Mohamed Bakhouya
2019 conf
ISC2
Abdellatif Elmouatamid, Radouane Ouladsine, Mohamed Bakhouya, Najib El Kamoun, Khalid Zine-Dine, Mohammed Khaidar
2019 C conf
CoDIT
Anass Berouine, E. Akssas, Youssef NaitMalek, Fadwa Lachhab, Mohamed Bakhouya, Radouane Ouladsine, Mohammed Essaaidi
2019 J jnl
J. Syst. Control. Eng.
Fadwa Lachhab, Mohamed Bakhouya, Radouane Ouladsine, Mohammed Essaaidi
2019 J jnl
J. Syst. Control. Eng.
Abdellatif Elmouatamid, Youssef NaitMalek, Mohamed Bakhouya, Radouane Ouladsine, Najib Elkamoun, Khalid Zine-Dine, Mohammed Khaidar
2019 J jnl
J. Syst. Control. Eng.
Fadwa Lachhab, Mohamed Bakhouya, Radouane Ouladsine, Mohammed Essaaidi
2018 C conf
CoDIT
Fadwa Lachhab, Youssef Nait Malek, Mohamed Bakhouya, Radouane Ouladsine, Mohammed Essaaidi
2018 J jnl
Concurr. Comput. Pract. Exp.
Fadwa Lachhab, Mohamed Bakhouya, Radouane Ouladsine, Mohammed Essaaidi
2018 C conf
CoDIT
Abdellatif Elmouatamid, Y. Nait Malek, Radouane Ouladsine, Mohamed Bakhouya, Najib Elkamoun, Khalid Zine-Dine, Mohammed Khaidar, R. Abid
2018 conf
ANT/SEIT
Fadwa Lachhab, Mohamed Bakhouya, Radouane Ouladsine, Mohammed Essaaidi
2017 C conf
CoDIT
Fadwa Lachhab, Mohamed Bakhouya, Radouane Ouladsine, Mohamed Essaaidi
2016 conf
ICSC
Radouane Ouladsine, Rachid Outbib, Younes Chhiti
2016 conf
HPCS
Fadwa Lachhab, Mohammed Essaaidi, Mohamed Bakhouya, Radouane Ouladsine
2011 conf
ICCA
Radouane Ouladsine, Rachid Outbib, Marta Basualdo
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())