Cao Van Kien

19 papers Journal 17Unranked 2
YearRankTypeTitle / Venue / Authors
2023 J jnl
Expert Syst. Appl.
Ho Pham Huy Anh, Cao Van Kien
2022 J jnl
Appl. Soft Comput.
Nguyen Ngoc Son, Cao Van Kien, Ho Pham Huy Anh
2022 J jnl
Appl. Soft Comput.
Nguyen Ngoc Son, Cao Van Kien, Ho Pham Huy Anh
2022 J jnl
IEEE Access
Nguyen Ngoc Son, Cao Van Kien, Tran Minh Chinh
2021 J jnl
Appl. Intell.
Cao Van Kien, Ho Pham Huy Anh, Nguyen Ngoc Son
2021 conf
ICSSE
Tran Thai Thong, Tran Thien Huan, Cao Van Kien, Ho Pham Huy Anh
2021 J jnl
Int. J. Comput. Intell. Syst.
Ho Pham Huy Anh, Cao Van Kien
2021 J jnl
Int. J. Intell. Syst.
Nguyen Ngoc Son, Cao Van Kien, Ho Pham Huy Anh
2021 J jnl
Int. J. Comput. Intell. Syst.
Nguyen Tien Dat, Cao Van Kien, Ho Pham Huy Anh
2021 conf
ICSSE
Tran Thien Huan, Le Vinh Thinh, Cao Van Kien, Ho Pham Huy Anh
2020 J jnl
Soft Comput.
Cao Van Kien, Ho Pham Huy Anh, Nguyen Ngoc Son
2020 J jnl
Eng. Appl. Artif. Intell.
Nguyen Ngoc Son, Cao Van Kien, Ho Pham Huy Anh
2019 J jnl
Int. J. Fuzzy Syst.
Cao Van Kien, Nguyen Ngoc Son, Ho Pham Huy Anh
2018 J jnl
J. Intell. Robotic Syst.
Ho Pham Huy Anh, Nguyen Ngoc Son, Cao Van Kien
2018 J jnl
Neurocomputing
Tran Thien Huan, Cao Van Kien, Ho Pham Huy Anh, Nguyen Thanh Nam
2018 J jnl
Robotica
Ho Pham Huy Anh, Cao Van Kien, Nguyen Thanh Nam
2018 J jnl
Int. J. Fuzzy Syst.
Cao Van Kien, Ho Pham Huy Anh, Nguyen Thanh Nam
2018 J jnl
Appl. Soft Comput.
Ho Pham Huy Anh, Nguyen Ngoc Son, Cao Van Kien, Vinh Ho-Huu
2017 J jnl
Robotics Auton. Syst.
Nguyen Ngoc Son, Cao Van Kien, Ho Pham Huy Anh
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())