Kaloyan Yovchev

16 papers C 1Misc 4Journal 2Unranked 9
YearRankTypeTitle / Venue / Authors
2024 Misc conf
SoftCOM
Ivan Chavdarov, Kaloyan Yovchev, Bozhidar Naydenov, Vladislav Hrosinkov
2024 conf
CompSysTech
Kaloyan Yovchev, Lyubomira Miteva
2023 J jnl
Sensors
Ivan Chavdarov, Kaloyan Yovchev, Lyubomira Miteva, Aleksander Aleksiev Stefanov, Dimitar Nedanovski
2022 conf
CompSysTech
Lyubomira Miteva, Kaloyan Yovchev, Ivan Chavdarov
2022 conf
CompSysTech
Kaloyan Yovchev, Lyubomira Miteva
2022 Misc conf
SoftCOM
Ivan Chavdarov, Bozhidar Naydenov, Kaloyan Yovchev, Lyubomira Miteva
2021 Misc conf
SoftCOM
Lyubomira Miteva, Ivan Chavdarov, Kaloyan Yovchev, Bozhidar Naydenov
2021 conf
CompSysTech
Lyubomira Miteva, Kaloyan Yovchev, Ivan Chavdarov
2020 conf
CompSysTech
Lyubomira Miteva, Galya Pavlova, Roumen Trifonov, Kaloyan Yovchev
2020 Misc conf
SoftCOM
Lyubomira Miteva, Ivan Chavdarov, Kaloyan Yovchev
2019 J jnl
Comput. Informatics
Nayden Chivarov, Denis Chikurtev, Stefan Chivarov, Matús Pleva, Stanislav Ondás, Jozef Juhár, Kaloyan Yovchev
2019 conf
RAAD
Denis Chikurtev, Kaloyan Yovchev, Nayden Chivarov, Ivaylo Rangelov
2019 C conf
CoDIT
Stefan Chivarov, Denis Chikurtev, Kaloyan Yovchev, Nayden Chivarov
2017 conf
RAAD
Kaloyan Yovchev, Denis Chikurtev, Nayden Chivarov, Nedko Shivarov
2016 conf
RAAD
Kaloyan Yovchev, Kamen Delchev, Evgeniy Krustev
2014 conf
RAAD
Nayden Chivarov, Stefan Shivarov, Kaloyan Yovchev, Denis Chikurtev, Nedko Shivarov
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())