Ha Duyen Trung

14 papers C 3Journal 5Unranked 5
YearRankTypeTitle / Venue / Authors
2021 C conf
HIS
Hoang Thi Huong Tra, Ha Duyen Trung, Nguyen Huu Trung
2020 C conf
HIS
Ha Duyen Trung, Nguyen Xuan Dung, Nguyen Huu Trung
2020 J jnl
J. Inf. Telecommun.
Duong Huu Ai, Ha Duyen Trung, Do Trong Tuan
2020 C conf
ISDA
Ha Duyen Trung, Nguyen Huu Trung
2019 conf
ICCSAMA
Ha Duyen Trung, Tai Hung Nguyen, Nguyen Huu Trung
2018 J jnl
Phys. Commun.
Ha Duyen Trung, Nguyen Tien Hoa, Nguyen Huu Trung, Tomoaki Ohtsuki
2016 conf
ACIIDS (2)
Duong Huu Ai, Ha Duyen Trung, Do Trong Tuan
2014 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
Ha Duyen Trung, Anh T. Pham
2013 conf
RIVF
Ha Duyen Trung, Dinh V. Ngo, Hung T. Pham, Dung V. Hoang, Luong N. Nguyen
2013 conf
ICC
Ha Duyen Trung, Bach T. Vu, Anh T. Pham
2011 conf
ICUMT
Ha Duyen Trung, Nguyen Van Duc
2008 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
Ha Duyen Trung, Watit Benjapolakul, Kiyomichi Araki
2008 ch.
Encyclopedia of Wireless and Mobile Communications
Watit Benjapolakul, Ha Duyen Trung
2007 J jnl
Comput. Commun.
Ha Duyen Trung, Watit Benjapolakul, Phan Minh Duc
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())