Kan Yu

14 papers C 1Misc 1Journal 7Unranked 5
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Shenao Wang, Junjie He, Yanjie Zhao, Yayi Wang, Kan Yu, Haoyu Wang
2026 J jnl
CoRR
Yayi Wang, Shenao Wang, Jian Zhao, Shaosen Shi, Ting Li, Yan Cheng, Lizhong Bian, Kan Yu, Yanjie Zhao, Haoyu Wang
2025 J jnl
J. Circuits Syst. Comput.
Fang Wang, Kan Yu, Lei Yang
2025 J jnl
Health Informatics J.
Daniel Busch, Choiru Za'in, Hei Man Chan, Agnes Haryanto, Wahyudi Agustiono, Kan Yu, Kyra Hamilton, Jeroen Kroon, Wei Xiang
2025 J jnl
Inf. Sci.
Bao Chen, Kan Yu, Yuchao Tang, Xiaohua Ding
2025 conf
MeditCom
Huanfei Yan, Xiaoling Zhang, Shuhao Qiang, Kan Yu
2025 J jnl
Proc. ACM Softw. Eng.
Yuan Li, Peisen Yao, Kan Yu, Chengpeng Wang, Yaoyang Ye, Song Li, Meng Luo, Yepang Liu, Kui Ren
2023 conf
TALE
Gang Lu, Kan Yu, Yimin Lu
2020 Misc conf
DICTA
Wencheng Yang, Song Wang, Kan Yu, James Jin Kang, Michael N. Johnstone
2019 conf
ICPS
Meng Wang, Ming Zhan, Kan Yu, Yi Deng, Yaqin Shi, Jie Zeng
2019 conf
ICC Workshops
Lijun Wang, Jia Yan, Kan Yu, Dexiang Deng
2018 C conf
IECON
Ming Zhang, Kan Yu
2014 J jnl
J. Comb. Optim.
Kan Yu, Mei Lu
2011 conf
NEMS
Yongjun Zheng, Xiaomei Yu, Mingquan Yuan, Kan Yu
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())