Majid Masoumi

11 papers Journal 8Unranked 3
YearRankTypeTitle / Venue / Authors
2020 J jnl
CoRR
Majid Masoumi, Marcel Marcoux, Laurence Maignel, Candido Pomar
2019 J jnl
CoRR
Majid Masoumi, Mina Rajabi
2018 conf
3DOR@Eurographics
Florent Langenfeld, Apostolos Axenopoulos, Anargyros Chatzitofis, Daniela Craciun, Petros Daras, Bowen Du, Andrea Giachetti, Yu-Kun Lai, Haisheng Li, Yingbin Li, Majid Masoumi, Yuxu Peng, Paul L. Rosin, Jeremy Sirugue, Li Sun, Spyridon Thermos, Matthew Toews, Yang Wei, Yujuan Wu, Yujia Zhai, Tianyu Zhao, Yanping Zheng, Matthieu Montès
2017 conf
3DOR@Eurographics
Emanuele Rodolà, Luca Cosmo, Or Litany, Michael M. Bronstein, Alexander M. Bronstein, Nicolas Audebert, A. Ben Hamza, Alexandre Boulch, Umberto Castellani, Minh N. Do, Duc Anh Duong, Takahiko Furuya, Andrea Gasparetto, Y. Hong, J. Kim, Bertrand Le Saux, Roee Litman, Majid Masoumi, Giorgia Minello, Hai-Dang Nguyen, V.-T. Nguyen, Ryutarou Ohbuchi, Viet-Khoi Pham, Thuyen V. Phan, M. Rezaei, Andrea Torsello, Minh-Triet Tran, Q. T. Tran, Bao Truong, L. Wan, Changqing Zou
2017 J jnl
CoRR
Majid Masoumi, A. Ben Hamza
2017 conf
3DOR@Eurographics
Silvia Biasotti, Elia Moscoso Thompson, Masaki Aono, A. Ben Hamza, Benjamin Bustos, Shuilong Dong, Bowen Du, Amin Fehri, Haisheng Li, Frederico A. Limberger, Majid Masoumi, Mahsa Rezaei, Ivan Sipiran, Li Sun, Atsushi Tatsuma, Santiago Velasco-Forero, Richard C. Wilson, Yujuan Wu, Junjie Zhang, Tianyu Zhao, Francesco Fornasa, Andrea Giachetti
2017 J jnl
CoRR
Majid Masoumi, A. Ben Hamza
2017 J jnl
Appl. Intell.
Majid Masoumi, A. Ben Hamza
2017 J jnl
J. Vis. Commun. Image Represent.
Majid Masoumi, A. Ben Hamza
2016 J jnl
Pattern Recognit. Lett.
Majid Masoumi, Chunyuan Li, A. Ben Hamza
2014 J jnl
Int. Arab J. Inf. Technol.
Majid Masoumi, Shervin Amiri
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())