Van Ha Nguyen

12 papers C 2Journal 7Unranked 3
YearRankTypeTitle / Venue / Authors
2022 conf
NEWCAS
Van Ha Nguyen, Xuan-Dien Do, Yves Blaquière, Glenn E. R. Cowan
2022 conf
NEWCAS
Van Ha Nguyen, Nueraimaiti Aimaier, Gabriel Nobert, Tan Pham, Nicolas G. Constantin, Yves Blaquière, Glenn E. R. Cowan
2022 conf
NEWCAS
Van Ha Nguyen, Xuan-Dien Do, Yves Blaquière, Glenn E. R. Cowan
2021 C conf
ISCAS
Van Ha Nguyen, Abdul Hafiz Alameh, Nam Ly, Yves Blaquière, Glenn E. R. Cowan
2021 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Van Ha Nguyen, Nam Ly, Abdul Hafiz Alameh, Yves Blaquière, Glenn E. R. Cowan
2021 C conf
ISCAS
Van Ha Nguyen, Nam Ly, Abdul Hafiz Alameh, Yves Blaquière, Glenn E. R. Cowan
2016 J jnl
IEICE Electron. Express
Van Ha Nguyen, Sanguk Nam, Boo Kang Kim, Keun Yong Sohn, Han Jung Song
2015 J jnl
IEICE Electron. Express
Kil-Soo Seo, Van Ha Nguyen, Nam-Tae Kim, Jusung Park, Han Jung Song
2015 J jnl
IEICE Electron. Express
Boo Kang Kim, Van Ha Nguyen, Nam-Tae Kim, Han Jung Song
2014 J jnl
IEICE Electron. Express
Wonkyeong Park, Van Ha Nguyen, Kil-Soo Seo, Han Jung Song
2014 J jnl
IEICE Electron. Express
Kil-Soo Seo, Van Ha Nguyen, Jinwoo Jung, Jusung Park, Han Jung Song
2013 J jnl
IEICE Electron. Express
Van Ha Nguyen, Wonkyeong Park, Han Jung Song
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())