Maiya Hori

24 papers B 2C 2Misc 2Journal 3Unranked 15
YearRankTypeTitle / Venue / Authors
2021 J jnl
IEEE Access
Mohamed A. Abdelwahab, Shizuo Kaji, Maiya Hori, Shigeru Takano, Yutaka Arakawa, Rin-Ichiro Taniguchi
2020 conf
TALE
Takuro Owatari, Atsushi Shimada, Tsubasa Minematsu, Maiya Hori, Rin-Ichiro Taniguchi
2020 J jnl
IEEE Access
Mohamed A. Abdelwahab, Mohamed Abdel-Nasser, Maiya Hori
2020 Misc conf
SenSys
Shigeru Takano, Maiya Hori, Yutaka Arakawa, Rin-Ichiro Taniguchi
2018 conf
UbiComp/ISWC Adjunct
Akira Onoue, Maiya Hori, Atsushi Shimada, Rin-Ichiro Taniguchi
2018 conf
HCI (21)
Maiya Hori, Keita Nakayama, Atsushi Shimada, Rin-Ichiro Taniguchi
2017 C conf
ICPRAM
Maiya Hori, Tatsuro Harada, Rin-Ichiro Taniguchi
2017 C conf
ICPRAM
Shigeru Takano, Maiya Hori, Takayuki Goto, Seiichi Uchida, Ryo Kurazume, Rin-Ichiro Taniguchi
2016 conf
CPSNA
Maiya Hori, Takayuki Goto, Shigeru Takano, Rin-Ichiro Taniguchi
2015 B conf
AVSS
Etienne Pot, Maiya Hori, Atsushi Shimada, Hajime Nagahara, Rin-Ichiro Taniguchi
2014 conf
HCI (16)
Hirosuke Murata, Maiya Hori, Hiroki Yoshimura, Yoshio Iwai
2014 conf
HCI (2)
Yu Tsuruda, Maiya Hori, Hiroki Yoshimura, Yoshio Iwai
2014 conf
HCI (2)
Kensyo Kinugasa, Hiroki Yoshimura, Maiya Hori, Satoru Kishida, Yoshio Iwai
2014 conf
FFER@ICPR
Maiya Hori, Shogo Kawai, Hiroki Yoshimura, Yoshio Iwai
2014 J jnl
IEICE Trans. Inf. Syst.
Alparslan Yildiz, Noriko Takemura, Maiya Hori, Yoshio Iwai, Kosuke Sato
2013 conf
HCI (5)
Yu Tsuruda, Maiya Hori, Hiroki Yoshimura, Yoshio Iwai
2012 conf
MPRSS
Maiya Hori, Hideki Takakura, Hiroki Yoshimura, Yoshio Iwai
2012 conf
ISPACS
Asumi Ikeda, Hiroki Yoshimura, Maiya Hori, Tadaaki Shimizu, Yoshio Iwai, Satoru Kishida
2010 B conf
ICPR
Maiya Hori, Masayuki Kanbara, Naokazu Yokoya
2010 Misc conf
DCAI
Ismail Arai, Maiya Hori, Norihiko Kawai, Yohei Abe, Masahiro Ichikawa, Yusuke Satonaka, Tatsuki Nitta, Tomoyuki Nitta, Harumitsu Fujii, Masaki Mukai, Soichiro Horimi, Koji Makita, Masayuki Kanbara, Nobuhiko Nishio, Naokazu Yokoya
2010 conf
ACCV Workshops (2)
Maiya Hori, Hideyuki Takahashi, Masayuki Kanbara, Naokazu Yokoya
2009 conf
Advances in Computer Entertainment Technology
Maiya Hori, Masayuki Kanbara, Naokazu Yokoya
2009 conf
3DUI
Maiya Hori, Masayuki Kanbara, Naokazu Yokoya
2007 conf
SCIA
Maiya Hori, Masayuki Kanbara, Naokazu Yokoya
tests/unit/test_decompile_strings.py
← Index tests/unit/test_decompile_strings.py python
"""Unit tests for bninja/analysis/strings.py — StringAnalysis."""
import pytest
import math
from unittest.mock import MagicMock


# StringAnalysis has no binaryninja imports, just collections and math
from redb.extractors.decompiler.bninja.analysis.strings import StringAnalysis


# ============================================================================
# Helper mocks
# ============================================================================

class MockStringEntry:
    """Mock for a Binary Ninja string reference."""
    def __init__(self, value, raw=None, start=0, length=0, type_name="Utf8String"):
        self.value = value
        self.raw = raw if raw is not None else (value.encode("utf-8") if isinstance(value, str) else value)
        self.start = start
        self.length = length if length else len(self.raw)
        self.type = MagicMock()
        self.type.name = type_name


class MockBinaryView:
    """Mock binary view with a strings list."""
    def __init__(self, strings=None):
        self.strings = strings or []


# ============================================================================
# 6a. StringAnalysis
# ============================================================================


class TestStringAnalysisEntropy:
    def setup_method(self):
        self.sa = StringAnalysis(bv=MockBinaryView(), functions=[])

    def test_entropy_empty_string(self):
        assert self.sa.entropy("") == 0.0

    def test_entropy_single_char(self):
        assert self.sa.entropy("aaaa") == 0.0

    def test_entropy_uniform_distribution(self):
        # "abcd" -> 4 unique chars, each p=1/4, entropy = log2(4) = 2.0
        result = self.sa.entropy("abcd")
        assert result == pytest.approx(2.0)

    def test_entropy_binary_string(self):
        # "ab" -> 2 unique chars, each p=1/2, entropy = log2(2) = 1.0
        result = self.sa.entropy("ab")
        assert result == pytest.approx(1.0)


class TestStringAnalysisAnalyze:
    def test_analyze_deduplication(self):
        """Duplicate (string, encoding) pairs -> only first kept."""
        entries = [
            MockStringEntry("hello", start=100, type_name="Utf8String"),
            MockStringEntry("hello", start=200, type_name="Utf8String"),
        ]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        assert result[0]["string_offset"] == 100

    def test_analyze_sorted_by_address(self):
        """First occurrence (lowest offset) is the one kept."""
        entries = [
            MockStringEntry("world", start=500, type_name="Utf8String"),
            MockStringEntry("world", start=100, type_name="Utf8String"),
        ]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        # The analyze() sorts by start, so 100 comes first
        assert result[0]["string_offset"] == 100

    def test_analyze_empty_bv(self):
        bv = MockBinaryView(strings=[])
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert result == []

    def test_analyze_output_schema(self):
        entries = [MockStringEntry("test_string", start=0, type_name="Utf8String")]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        r = result[0]
        required_keys = [
            "string",
            "string_raw",
            "string_encoding",
            "string_offset",
            "string_length",
            "string_raw_length",
            "string_entropy",
        ]
        for key in required_keys:
            assert key in r, f"Missing key: {key}"