Caio Ponte

14 papers C 1Journal 9Unranked 4
YearRankTypeTitle / Venue / Authors
2025 conf
BRACIS (1)
Uriel Anderson Lasheras, Elioenai Alves, Caio Ponte, Carlos Caminha, Diego Silva, Vládia Pinheiro
2025 J jnl
J. Braz. Comput. Soc.
Uriel Anderson Lasheras, Elioenai Alves, Caio Ponte, Carlos Caminha, Vládia Pinheiro
2025 C conf
ICAIL
Raquel Silveira, João Víctor López Matias, Caio Ponte, Isadora Donza Corrêa, André Câmara, Vasco Furtado
2023 conf
BRACIS (3)
Raquel Silveira, Caio Ponte, Vitor Almeida, Vládia Pinheiro, Vasco Furtado
2021 J jnl
CoRR
Gabriel L. Maia, Caio Ponte, Carlos Caminha, Lara Furtado, Hygor P. M. Melo, Vasco Furtado
2019 conf
BRACIS
Caio Ponte, Carlos Caminha, Rafael Bomfim, Ronaldo S. Moreira, Vasco Furtado
2019 J jnl
CoRR
Caio Ponte, Carlos Caminha, Rafael Bomfim, Ronaldo S. Moreira, Vasco Furtado
2018 J jnl
J. Internet Serv. Appl.
Carlos Caminha, Vasco Furtado, Vládia Pinheiro, Caio Ponte
2018 J jnl
EPJ Data Sci.
Caio Ponte, Hygor Piaget Monteiro Melo, Carlos Caminha, José S. Andrade Jr., Vasco Furtado
2017 conf
IEEE BigData
Vasco Furtado, Elizabeth Furtado, Carlos Caminha, André Lopes, Victor Dantas, Caio Ponte, Sofia Cavalcante
2017 J jnl
CoRR
Vasco Furtado, Carlos Caminha, Elizabeth Furtado, André Lopes, Victor Dantas, Caio Ponte, Sofia Cavalcante
2016 J jnl
CoRR
Carlos Caminha, Vasco Furtado, Tarcisio H. C. Pequeno, Caio Ponte, Hygor P. M. Melo, Erneson A. Oliveira, José S. Andrade Jr.
2016 J jnl
CoRR
Carlos Caminha, Vasco Furtado, Vládia Pinheiro, Caio Ponte
2016 J jnl
CoRR
Carlos Caminha, Vasco Furtado, Vládia Pinheiro, Caio Ponte
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())