Kashaf Khan

15 papers B 2C 1Misc 1Journal 5Unranked 6
YearRankTypeTitle / Venue / Authors
2025 J jnl
Data Min. Knowl. Discov.
Lingkai Yang, Sally I. McClean, Malcolm J. Faddy, Mark P. Donnelly, Kashaf Khan, Kevin Burke
2025 J jnl
Data Knowl. Eng.
Lingkai Yang, Sally I. McClean, Kevin Burke, Mark P. Donnelly, Kashaf Khan
2024 J jnl
ACM Trans. Knowl. Discov. Data
Lingkai Yang, Sally I. McClean, Mark P. Donnelly, Kashaf Khan, Kevin Burke
2022 J jnl
Expert Syst. Appl.
Lingkai Yang, Sally I. McClean, Mark P. Donnelly, Kevin Burke, Kashaf Khan
2022 J jnl
Algorithms
Lingkai Yang, Sally I. McClean, Mark P. Donnelly, Kevin Burke, Kashaf Khan
2021 B conf
COMPSAC
Hamed Hamzeh, Sofia Meacham, Kashaf Khan, Angelos Stefanidis, Keith Phalp
2021 conf
SmartWorld/SCALCOM/UIC/ATC/IOP/SCI
Lingkai Yang, Sally I. McClean, Mark P. Donnelly, Kevin Burke, Kashaf Khan
2020 conf
HPCC/DSS/SmartCity
Lingkai Yang, Sally I. McClean, Mark P. Donnelly, Kashaf Khan, Kevin Burke
2020 B conf
COMPSAC
Hamed Hamzeh, Sofia Meacham, Kashaf Khan, Keith Phalp, Angelos Stefanidis
2019 conf
SmartWorld/SCALCOM/UIC/ATC/CBDCom/IOP/SCI
Hamed Hamzeh, Sofia Meacham, Kashaf Khan, Keith Phalp, Angelos Stefanidis
2019 conf
ICCCS
Hamed Hamzeh, Sofia Meacham, Botond Virginas, Kashaf Khan, Keith Phalp
2018 conf
SGAI Conf.
Sally I. McClean, Naveed Khan, Adam R. Currie, Kashaf Khan
2017 conf
ISPAN-FCST-ISCC
Adam R. Currie, Sally I. McClean, Philip J. Morrow, Gerard P. Parr, Kashaf Khan
2014 Misc conf
UCC
Adam R. Currie, Aaron McConnell, Gerard P. Parr, Sally I. McClean, Kashaf Khan
2000 C conf
EGVE
Evangelos Pappas-Katsiafas, Alan Smith, Kashaf Khan
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())