Naohisa Takahashi

66 papers A* 1A 2B 6C 10Misc 1Journal 23Unranked 22
YearRankTypeTitle / Venue / Authors
2021 conf
GCCE
Shinsuke Kajioka, Takanori Saito, Daisuke Yamamoto, Naohisa Takahashi
2019 conf
ISPA/BDCloud/SocialCom/SustainCom
Xue Zhang, Yi Yin, Wei Liu, Zhizhen Peng, Guoqiang Zhang, Yun Wang, Yuichiro Tateiwa, Naohisa Takahashi
2019 conf
LocalRec@SIGSPATIAL
Yonghwan Kim, Hiroaki Fukuyasu, Daisuke Yamamoto, Naohisa Takahashi
2019 conf
HPCC/SmartCity/DSS
Yi Yin, Yuichiro Tateiwa, Yun Wang, Guoqiang Zhang, Yoshiaki Katayama, Naohisa Takahashi, Chao Zhang
2019 J jnl
IEICE Trans. Inf. Syst.
Daisuke Yamamoto, Masaki Murase, Naohisa Takahashi
2018 B conf
AINA
Yuichiro Tateiwa, Naohisa Takahashi
2018 J jnl
IEICE Trans. Inf. Syst.
Daisuke Yamamoto, Masaki Murase, Naohisa Takahashi
2018 conf
SIGSPATIAL/GIS
Daisuke Yamamoto, Ryosuke Tanaka, Shinsuke Kajioka, Hiroshi Matsuo, Naohisa Takahashi
2017 conf
ICCCS (2)
Yi Yin, Yuichiro Tateiwa, Yun Wang, Yoshiaki Katayama, Naohisa Takahashi
2017 C conf
ICFEM
Yi Yin, Yuichiro Tateiwa, Yun Wang, Yoshiaki Katayama, Naohisa Takahashi
2016 conf
ICCSE
Yuichiro Tateiwa, Naohisa Takahashi
2016 conf
IIMSS
Yuichiro Tateiwa, Naohisa Takahashi
2015 C conf
ICIS
Tomohiro Yanagi, Daisuke Yamamoto, Naohisa Takahashi
2015 C conf
W2GIS
Masaki Murase, Daisuke Yamamoto, Naohisa Takahashi
2014 J jnl
IEICE Trans. Inf. Syst.
Pablo Martinez Lerin, Daisuke Yamamoto, Naohisa Takahashi
2014 conf
CANDAR
Yi Yin, Yun Wang, Naohisa Takahashi
2013 J jnl
Int. J. Knowl. Web Intell.
Hiroya Mizutani, Daisuke Yamamoto, Naohisa Takahashi
2013 J jnl
Int. J. Knowl. Web Intell.
Pablo Martinez Lerin, Daisuke Yamamoto, Naohisa Takahashi
2013 C conf
SSS
Koichi Ito, Yoshiaki Katayama, Koichi Wada, Naohisa Takahashi
2013 conf
IIMSS
Yuichiro Tateiwa, Junya Noumi, Daisuke Yamamoto, Naohisa Takahashi
2012 conf
IIMSS
Hiroya Mizutani, Daisuke Yamamoto, Naohisa Takahashi
2012 conf
IIMSS
Pablo Martinez Lerin, Daisuke Yamamoto, Naohisa Takahashi
2012 ed.
IIMSS
Toyohide Watanabe, Junzo Watada, Naohisa Takahashi, Robert J. Howlett, Lakhmi C. Jain
2012 C conf
W2GIS
Pablo Martinez Lerin, Daisuke Yamamoto, Naohisa Takahashi
2011 J jnl
Int. J. Commun. Netw. Syst. Sci.
Subana Thanasegaran, Yi Yin, Yuichiro Tateiwa, Yoshiaki Katayama, Naohisa Takahashi
2011 J jnl
J. Next Gener. Inf. Technol.
Subana Thanasegaran, Yuichiro Tateiwa, Yoshiaki Katayama, Naohisa Takahashi
2011 C conf
W2GIS
Pablo Martinez Lerin, Daisuke Yamamoto, Naohisa Takahashi
2010 conf
AINA Workshops
Daisuke Yamamoto, Kohei Hukuhara, Naohisa Takahashi
2010 B conf
ICCCN
Subana Thanasegaran, Yuichiro Tateiwa, Yoshiaki Katayama, Naohisa Takahashi
2010 J jnl
Int. J. Knowl. Web Intell.
Yuichiro Tateiwa, Tomohiro Iwasaki, Takami Yasuda, Naohisa Takahashi
2010 Misc conf
ICNC
Yi Yin, Xiaodong Xu, Yoshiaki Katayama, Naohisa Takahashi
2010 C conf
CIT
Subana Thanasegaran, Yuichiro Tateiwa, Yoshiaki Katayama, Naohisa Takahashi
2009 A conf
IPDPS
Subana Thanasegaran, Yi Yin, Yuichiro Tateiwa, Yoshiaki Katayama, Naohisa Takahashi
2009 J jnl
Int. J. Wirel. Mob. Comput.
Fang Jing, Raghuvel S. Bhuvaneswaran, Yoshiaki Katayama, Naohisa Takahashi
2009 conf
GIS
Daisuke Yamamoto, Shotaro Ozeki, Naohisa Takahashi
2009 C conf
W2GIS
Daisuke Yamamoto, Shotaro Ozeki, Naohisa Takahashi
2008 J jnl
J. Networks
Fang Jing, Raghuvel S. Bhuvaneswaran, Yoshiaki Katayama, Naohisa Takahashi
2008 J jnl
Inf. Media Technol.
Yi Yin, Yoshiaki Katayama, Naohisa Takahashi
2008 J jnl
J. Inf. Process.
Yi Yin, Yoshiaki Katayama, Naohisa Takahashi
2008 J jnl
J. Convergence Inf. Technol.
Yi Yin, Kazuaki Hida, Yoshiaki Katayama, Naohisa Takahashi
2007 J jnl
IEICE Trans. Commun.
Raghuvel S. Bhuvaneswaran, Yoshiaki Katayama, Naohisa Takahashi
2007 J jnl
Syst. Comput. Jpn.
Hideki Nakajima, Naohisa Takahashi, Yoshihide Hosokawa
2007 J jnl
Syst. Comput. Jpn.
Yoshiaki Katayama, Toshiyuki Hasegawa, Naohisa Takahashi
2007 conf
AINA Workshops (2)
Fang Jing, Raghuvel S. Bhuvaneswaran, Yoshiaki Katayama, Naohisa Takahashi
2006 A conf
ICSOC
Raghuvel S. Bhuvaneswaran, Yoshiaki Katayama, Naohisa Takahashi
2006 conf
AINA (2)
Fang Jing, Raghuvel S. Bhuvaneswaran, Yoshiaki Katayama, Naohisa Takahashi
2006 conf
ACSW
Raghuvel S. Bhuvaneswaran, Yoshiaki Katayama, Naohisa Takahashi
2005 B conf
Mobile Data Management
Yoshihide Hosokawa, Naoki Kimura, Naohisa Takahashi
2005 conf
SKG
Raghuvel S. Bhuvaneswaran, Yoshiaki Katayama, Naohisa Takahashi
2005 C conf
ICICS
Yi Yin, Raghuvel S. Bhuvaneswaran, Yoshiaki Katayama, Naohisa Takahashi
2004 conf
ICDCS Workshops
Yoshihide Hosokawa, Naohisa Takahashi, Hiroyasu Taga
2000 B conf
NOMS
Osamu Akashi, Toshiharu Sugawara, Ken Murakami, Mitsuru Maruyama, Naohisa Takahashi
1999 conf
ASA/MA
Osamu Akashi, Toshiharu Sugawara, Ken-ichiro Murakami, Mitsuru Maruyama, Naohisa Takahashi
1999 J jnl
Syst. Comput. Jpn.
Kuniaki Naoi, Naohisa Takahashi
1999 J jnl
Syst. Comput. Jpn.
Kuniaki Naoi, Naohisa Takahashi
1997 J jnl
Syst. Comput. Jpn.
Kuniaki Naoi, Naohisa Takahashi
1996 B conf
COMPSAC
Kuniaki Naoi, Naohisa Takahashi
1996 J jnl
Syst. Comput. Jpn.
Kuniaki Naoi, Naohisa Takahashi
1994 C conf
SEKE
Hideaki Suzuki, Naohisa Takahashi
1994 J jnl
Syst. Comput. Jpn.
Kuniaki Naoi, Naohisa Takahashi
1990 J jnl
Syst. Comput. Jpn.
Naohisa Takahashi, Satoshi Ono
1988 J jnl
Syst. Comput. Jpn.
Satoshi Ono, Naohisa Takahashi
1986 B conf
ICPP
Satoshi Ono, Naohisa Takahashi, Makoto Amamiya
1984 conf
RIMS Symposia on Software Science and Engineering
Satoshi Ono, Naohisa Takahashi, Makoto Amamiya
1983 A* conf
ISCA
Naohisa Takahashi, Makoto Amamiya
1980 conf
AFIPS National Computer Conference
Makoto Amamiya, Naohisa Takahashi, Yutaka Ogawa, Kenji Koyama
redb/extractors/elf_extractors/elf_segments.py
← Index redb/extractors/elf_extractors/elf_segments.py python
import inspect
import hashlib
import math
from collections import Counter
from datetime import datetime, timezone
from typing import Any, List, Dict

from elftools.elf.elffile import ELFFile
from elftools.common.exceptions import ELFError

from redb.extractors.enum import Tag
from redb.extractors.elf_extractor import ELFExtractor
from redb.models.dataclasses import ELFSegment


class ELFSegmentExtractor(ELFExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        elf=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            elf,
        )
        self.elf_segments = []
        self.elastic_index = self.index_prefix + "-elf_segments"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _is_empty_result(self, extracted_data) -> bool:
        """
        Override: Empty segments is an ERROR, not a valid empty case.
        A valid ELF file must have segments (program headers).
        """
        # Always return False - empty segments should be treated as an error
        return False

    def _calculate_entropy(self, data: bytes) -> float:
        """Calculate Shannon entropy of data."""
        if not data:
            return 0.0

        try:
            # Count frequency of each byte
            byte_counts = Counter(data)
            data_len = len(data)

            # Calculate entropy
            entropy = 0.0
            for count in byte_counts.values():
                if count > 0:
                    frequency = count / data_len
                    entropy -= frequency * math.log2(frequency)

            return entropy
        except Exception as e:
            self.log.error(f"Error calculating entropy: {e}")
            return 0.0

    def _map_segment_type(self, p_type_str: str) -> int:
        """Map segment type string to enum value."""
        type_map = {
            'PT_NULL': 0,
            'PT_LOAD': 1,
            'PT_DYNAMIC': 2,
            'PT_INTERP': 3,
            'PT_NOTE': 4,
            'PT_SHLIB': 5,
            'PT_PHDR': 6,
            'PT_TLS': 7
        }
        return type_map.get(p_type_str, 0)

    def _decode_segment_flags(self, flags: int) -> List[str]:
        """Decode segment flags to human-readable strings."""
        flag_strings = []

        if flags & 0x1:  # PF_X
            flag_strings.append('EXECUTE')
        if flags & 0x2:  # PF_W
            flag_strings.append('WRITE')
        if flags & 0x4:  # PF_R
            flag_strings.append('READ')

        return flag_strings if flag_strings else ['NONE']

    def _extract_segment_data(self, segment) -> ELFSegment:
        """Extract data from a single segment with granular error handling."""
        # Initialize with safe defaults
        segment_type = 0
        segment_type_str = 'unknown'
        segment_flags = 0
        segment_flags_str = ['NONE']
        segment_offset = 0
        segment_vaddr = 0
        segment_paddr = 0
        segment_filesz = 0
        segment_memsz = 0
        segment_align = 0
        segment_entropy = 0.0
        segment_sha256 = ""
        segment_md5 = ""

        # Try to get segment header
        header = None
        try:
            header = segment.header
        except Exception as e:
            self.log.warning(f"Could not access segment header: {e}")
            return ELFSegment(
                segment_type=segment_type, segment_type_str=segment_type_str,
                segment_flags=segment_flags, segment_flags_str=segment_flags_str,
                segment_offset=segment_offset, segment_vaddr=segment_vaddr,
                segment_paddr=segment_paddr, segment_filesz=segment_filesz,
                segment_memsz=segment_memsz, segment_align=segment_align,
                segment_entropy=segment_entropy, segment_sha256=segment_sha256,
                segment_md5=segment_md5
            )

        # Extract segment type
        try:
            p_type_str = header.get('p_type', 'PT_NULL')
            segment_type = self._map_segment_type(p_type_str)
            segment_type_str = p_type_str.replace('PT_', '') if p_type_str.startswith('PT_') else p_type_str
        except Exception as e:
            self.log.warning(f"Could not extract segment type: {e}")

        # Extract segment flags
        try:
            segment_flags = header.get('p_flags', 0)
            segment_flags_str = self._decode_segment_flags(segment_flags)
        except Exception as e:
            self.log.warning(f"Could not extract segment flags: {e}")

        # Extract segment addresses and sizes
        try:
            segment_offset = header.get('p_offset', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment offset: {e}")

        try:
            segment_vaddr = header.get('p_vaddr', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment vaddr: {e}")

        try:
            segment_paddr = header.get('p_paddr', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment paddr: {e}")

        try:
            segment_filesz = header.get('p_filesz', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment filesz: {e}")

        try:
            segment_memsz = header.get('p_memsz', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment memsz: {e}")

        try:
            segment_align = header.get('p_align', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment align: {e}")

        # Calculate entropy and hashes for segment data (most likely to fail)
        try:
            if segment_filesz > 0:
                segment_data = segment.data()
                if segment_data:
                    # Calculate entropy
                    segment_entropy = self._calculate_entropy(segment_data)

                    # Calculate hashes
                    segment_sha256 = hashlib.sha256(segment_data).hexdigest()
                    segment_md5 = hashlib.md5(segment_data).hexdigest()
        except Exception as e:
            self.log.warning(f"Could not read segment data for hashing: {e}")
            # Keep defaults (0.0, "", "")

        return ELFSegment(
            segment_type=segment_type,
            segment_type_str=segment_type_str,
            segment_flags=segment_flags,
            segment_flags_str=segment_flags_str,
            segment_offset=segment_offset,
            segment_vaddr=segment_vaddr,
            segment_paddr=segment_paddr,
            segment_filesz=segment_filesz,
            segment_memsz=segment_memsz,
            segment_align=segment_align,
            segment_entropy=segment_entropy,
            segment_sha256=segment_sha256,
            segment_md5=segment_md5
        )

    def tag(self):
        return Tag.ELF_SEGMENTS.value if hasattr(Tag, 'ELF_SEGMENTS') else "elf_segments"

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)

            def extract_segments(elf):
                segments_data = []

                # Iterate through all segments with per-segment error handling
                for segment_index, segment in enumerate(elf.iter_segments()):
                    try:
                        segment_data = self._extract_segment_data(segment)
                        if segment_data:
                            segments_data.append(segment_data)
                        else:
                            self.log.warning(f"Failed to extract data for segment {segment_index}")
                    except Exception as e:
                        self.log.warning(f"Error processing segment {segment_index}: {e}")
                        # Continue processing other segments

                return segments_data

            # Check if file is valid ELF
            if not self._is_elf_file():
                self.log.error(f"No valid ELF file for {self.hash.sha256}")
                return None

            segments_data = self._with_elf_file(extract_segments)
            if segments_data is None:
                return None

            self.elf_segments = segments_data
            return self.elf_segments

        except Exception as e:
            self.log.error(f"Error extracting ELF segments {self.hash.sha256}: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        self.log.debug(inspect.currentframe().f_code.co_name)

        if exporter_type == "ElasticsearchExporter":
            return self.elf_segments
        elif exporter_type == "ClickHouseExporter":
            try:
                if not self.elf_segments:
                    return None

                # Prepare data arrays for all segments
                data = []
                current_time = datetime.now(timezone.utc)
                for segment in self.elf_segments:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        segment.segment_type,
                        segment.segment_type_str,
                        segment.segment_flags,
                        segment.segment_flags_str,
                        segment.segment_offset,
                        segment.segment_vaddr,
                        segment.segment_paddr,
                        segment.segment_filesz,
                        segment.segment_memsz,
                        segment.segment_align,
                        segment.segment_entropy,
                        segment.segment_sha256,
                        segment.segment_md5,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'segment_type', 'segment_type_str', 'segment_flags', 'segment_flags_str',
                    'segment_offset', 'segment_vaddr', 'segment_paddr',
                    'segment_filesz', 'segment_memsz', 'segment_align',
                    'segment_entropy', 'segment_sha256', 'segment_md5',
                    'analysis_date'
                ]

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    "Enum8('NULL'=0, 'LOAD'=1, 'DYNAMIC'=2, 'INTERP'=3, 'NOTE'=4, 'SHLIB'=5, 'PHDR'=6, 'TLS'=7)",
                    'LowCardinality(String)',
                    'UInt32',
                    'Array(LowCardinality(String))',
                    'UInt64', 'UInt64', 'UInt64', 'UInt64', 'UInt64', 'UInt64',
                    'Float64',
                    'FixedString(64)', 'FixedString(32)',
                    'DateTime64(3, \'UTC\')'
                ]

                if not data:
                    return None

                return (data, column_names, column_type_names)

            except Exception as e:
                self.log.error(f"Error preparing export data: {e}")
                raise

    def get_clickhouse_table(self) -> str:
        return "redb_elf_segments"