Xiangtian Yuan

12 papers C 3Journal 4Unranked 5
YearRankTypeTitle / Venue / Authors
2024 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Xiangtian Yuan, Jiaojiao Tian, Peter Reinartz
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Yuxing Xie, Xiangtian Yuan, Xiao Xiang Zhu, Jiaojiao Tian
2023 C conf
IGARSS
Marc Wieland, Nina Merkle, Anne Schneibel, Corentin Henry, Konstanze Lechner, Xiangtian Yuan, Seyed Majid Azimi, Veronika Gstaiger, Sandro Martinis
2023 conf
ICCV (Workshops)
Nina Merkle, Reza Bahmanyar, Corentin Henry, Seyed Majid Azimi, Xiangtian Yuan, Simon Schopferer, Veronika Gstaiger, Stefan Auer, Anne Schneibel, Marc Wieland, Thomas Kraft
2023 J jnl
CoRR
Nina Merkle, Reza Bahmanyar, Corentin Henry, Seyed Majid Azimi, Xiangtian Yuan, Simon Schopferer, Veronika Gstaiger, Stefan Auer, Anne Schneibel, Marc Wieland, Thomas Kraft
2023 J jnl
Sensors
Xiangtian Yuan, Jiaojiao Tian, Peter Reinartz
2023 conf
JURSE
Xiangtian Yuan, Jiaojiao Tian, Thomas Krauß, Xiangyu Zhuo, Peter Reinartz
2022 conf
GHTC
Anne Schneibel, Nina Merkle, Marc Wieland, Konstanze Lechner, Seyemajid Azimi, Fabian Henkel, Corentin Henry, Ralph Kiefl, Xiangtian Yuan, Monika Gähler
2020 C conf
IGARSS
Daniele Cerra, Nina Merkle, Corentin Henry, Kevin Alonso, Pablo d'Angelo, Stefan Auer, Reza Bahmanyar, Xiangtian Yuan, Ksenia Bittner, Maximilian Langheinrich, Guichen Zhang, Miguel Pato, Jiaojiao Tian, Peter Reinartz
2020 C conf
IGARSS
Daniele Cerra, Nina Merkle, Corentin Henry, Kevin Alonso, Pablo d'Angelo, Stefan Auer, Reza Bahmanyar, Xiangtian Yuan, Ksenia Bittner, Maximilian Langheinrich, Guichen Zhang, Miguel Pato, Jiaojiao Tian, Peter Reinartz
2019 conf
JURSE
Xiangtian Yuan, Jiaojiao Tian, Peter Reinartz
2018 conf
WHISPERS
Xiangtian Yuan, Jiaojiao Tian, Daniele Cerra, Oliver Meynberg, Christian Kempf, Peter Reinartz
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())