Viany Utami Tjhin

16 papers C 4Unranked 12
YearRankTypeTitle / Venue / Authors
2024 conf
IC3INA
Any Sayekti, Mts Arief, Viany Utami Tjhin
2022 conf
ICIT
Viany Utami Tjhin, Regina Eka Riantini, Jenia Nur Soelistyoningrum
2022 conf
ICEEG
Viany Utami Tjhin, Regina Eka Riantini
2022 conf
ICEEG
Cindy Lie, Regina Eka Riantini, Viany Utami Tjhin
2021 conf
ICIT
Andi Wiliam, Mts Arief, Agustinus Bandur, Viany Utami Tjhin
2021 conf
ICIT
Viany Utami Tjhin, Regina Eka Riantini
2021 conf
ICIT
Dagdo Dhamar Bagus Prasetyo, Regina Eka Riantini, Viany Utami Tjhin
2021 conf
ICIT
Dwi Listriana Kusumastuti, Viany Utami Tjhin, Regina Eka Riantini, Enni Juliani
2021 conf
ICIT
Andrianto Susilo, Harjanto Prabowo, Wibowo Kosasih, Rano Kartono, Viany Utami Tjhin
2020 conf
ICIT
Viany Utami Tjhin, Regina Eka Riantini, Dwi Listriana Kusumastuti, Ellynia Ellynia
2019 conf
ICEMC
Viany Utami Tjhin, Siti Rahmah Nurul Aini
2018 conf
ICCSCI
Febrianti Widyahastuti, Viany Utami Tjhin
2017 C conf
HSI
Viany Utami Tjhin, Anita Rahayu, Kiky Soraya
2017 C conf
HSI
Wella, Viany Utami Tjhin
2017 C conf
HSI
Febrianti Widyahastuti, Dendy Fransiskus, Viany Utami Tjhin
2017 C conf
HSI
Febrianti Widyahastuti, Viany Utami Tjhin
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())