Ippei Torii

64 papers B 5C 10Misc 1Journal 7Unranked 41
YearRankTypeTitle / Venue / Authors
2019 conf
IIAI-AAI
Naohiro Ishii, Ippei Torii, Kazunori Iwata, Kazuya Odagiri, Toyoshiro Nakashima, Tokuro Matsuo
2019 J jnl
J. Comput.
Ippei Torii, Takahito Niwa
2018 J jnl
J. Comput.
Ippei Torii, Kaoruko Ohtani, Takahito Niwa, Naohiro Ishii
2018 conf
KES-IDT
Ryotaro Kodera, Ippei Torii, Naohiro Ishii
2018 conf
UKCI
Naohiro Ishii, Ippei Torii, Kazunori Iwata, Kazuya Odagiri, Toyoshiro Nakashima
2018 conf
CSII
Naohiro Ishii, Ippei Torii, Kazunori Iwata, Kazuya Ogagiri, Toyoshiro Nakashima
2018 conf
KES-IDT
Mateus Yudi Ogikubo, Ippei Torii, Naohiro Ishii
2018 conf
KES-IDT
Ippei Torii, Takahito Niwa, Naohiro Ishii
2018 conf
CSII
Takahito Niwa, Ippei Torii, Naohiro Ishii
2018 conf
KES-IDT
Takahito Niwa, Ippei Torii, Naohiro Ishii
2018 conf
KES-IDT
Kazuya Yonemoto, Ippei Torii, Naohiro Ishii
2017 conf
ACIT/CSII/BCD
Naohiro Ishii, Ippei Torii, Kazunori Iwata, Kazuya Ogagiri, Toyoshiro Nakashima
2017 conf
ACIT/CSII/BCD
Naohiro Ishii, Ippei Torii, Kazunori Iwata, Kazuya Odagiri, Toyoshiro Nakashima
2017 conf
ACIT/CSII/BCD
Takahito Niwa, Ippei Torii, Naohiro Ishii
2017 conf
ACIT/CSII/BCD
Takahito Niwa, Ippei Torii, Naohiro Ishii
2017 conf
ACIT/CSII/BCD
Emi Aihara, Ippei Torii, Naohiro Ishii
2017 Misc conf
HAIS
Naohiro Ishii, Ippei Torii, Kazunori Iwata, Kazuya Odagiri, Toyoshiro Nakashima
2017 conf
UKCI
Naohiro Ishii, Ippei Torii, Kazunori Iwata, Kazuya Odagiri, Toyoshiro Nakashima
2017 C conf
IDEAL
Naohiro Ishii, Ippei Torii, Kazunori Iwata, Kazuya Odagiri, Toyoshiro Nakashima
2017 C conf
SERA
Naohiro Ishii, Ippei Torii, Kazunori Iwata, Kazuya Odagiri, Toyoshiro Nakashima
2017 conf
ACIT/CSII/BCD
Shunsuke Kawatake, Ippei Torii, Naohiro Ishii
2017 J jnl
Int. J. Softw. Innov.
Takahito Niwa, Ippei Torii, Naohiro Ishii
2017 conf
ACIT/CSII/BCD
Ippei Torii, Kaoruko Ohtani, Naohiro Ishii
2016 conf
HCI (9)
Ippei Torii, Kaoruko Ohtani, Takahito Niwa, Naohiro Ishii
2015 C conf
ICIS
Naohiro Ishii, Ippei Torii, Naoto Mukai, Kazunori Iwata, Toyoshiro Nakashima
2015 conf
ACIT-CSI
Ippei Torii, Kaoruko Ohtani, Naohiro Ishii
2015 conf
ACIT-CSI
Takahito Niwa, Shota Murayama, Ippei Torii, Naohiro Ishii
2015 conf
ACIT-CSI
Naohiro Ishii, Ippei Torii, Naoto Mukai, Kazunori Iwata, Toyoshiro Nakashima
2015 conf
ACIT-CSI
Takuya Itabashi, Junpei Itastu, Ippei Torii, Naohiro Ishii
2015 conf
IISA
Ippei Torii, Takahito Niwa, Kaoruko Ohtani, Naohiro Ishii
2014 conf
Software Engineering Research, Management and Applications
Ippei Torii, Kaoruko Ohtani, Shunki Takami, Naohiro Ishii
2014 conf
IIAI-AAI
Shunki Takami, Ippei Torii, Naohiro Ishii
2014 C conf
IDEAL
Ippei Torii, Kaoruko Ohtani, Shunki Takami, Naohiro Ishii
2014 conf
IIAI-AAI
Momoko Saida, Naoto Hasegawa, Ippei Torii, Naohiro Ishii
2014 conf
IIAI-AAI
Shota Murayama, Ippei Torii, Naohiro Ishii
2014 conf
IIAI-AAI
Takumi Niwa, Ippei Torii, Naohiro Ishii
2014 B conf
KES
Shunki Takami, Ippei Torii, Naohiro Ishii
2014 conf
SIGGRAPH Studio
Ippei Torii, Kaoruko Ohtani
2014 conf
IISA
Ippei Torii, Shunki Takami, Kaoruko Ohtani, Naohiro Ishii
2014 J jnl
Int. J. Networked Distributed Comput.
Naohiro Ishii, Ippei Torii, Toyoshiro Nakashima, Hidekazu Tanaka
2014 C conf
IDEAL
Naohiro Ishii, Ippei Torii, Kazunori Iwata, Toyoshiro Nakashima
2014 C conf
SNPD
Naohiro Ishii, Ippei Torii, Toyoshiro Nakashima, Kazunori Iwata
2014 B conf
KES
Ippei Torii, Kaoruko Ohtani, Naohiro Ishii
2013 C conf
SNPD
Ippei Torii, Kaoruko Ohtani, Takahito Niwa, Naohiro Ishii
2013 conf
HCI (28)
Ippei Torii, Kaoruko Ohtani, Takahito Niwa, Naohiro Ishii
2013 C conf
ICIS
Naohiro Ishii, Ippei Torii, Yongguang Bao, Hidekazu Tanaka
2013 conf
IIAI-AAI
Ippei Torii, Takahito Niwa, Kaoruko Ohtani, Naohiro Ishii
2013 B conf
ICTAI
Ippei Torii, Kaoruko Ohtani, Takahito Niwa, Naohiro Ishii
2012 conf
ESPA
Ippei Torii, Kaoruko Ohtani, Takahito Niwa, Ayuki Yamamoto, Naohiro Ishii
2012 J jnl
Inf. Media Technol.
Ippei Torii, Kaoruko Ohtani, Takahito Niwa, Naohiro Ishii
2012 J jnl
J. Inf. Process.
Ippei Torii, Kaoruko Ohtani, Takahito Niwa, Naohiro Ishii
2012 conf
ACIS-ICIS
Naohiro Ishii, Ippei Torii, Yongguang Bao, Hidekazu Tanaka
2012 C conf
IDEAL
Naohiro Ishii, Ippei Torii, Yongguang Bao, Hidekazu Tanaka
2012 conf
ACIS-ICIS
Ippei Torii, Kaoruko Ohtani, Nahoko Shirahama, Takahito Niwa, Naohiro Ishii
2010 conf
KES (3)
Masashi Okada, Naohiro Ishii, Ippei Torii
2010 conf
ACIS-ICIS
Ippei Torii, Yousuke Okada, Takahito Niwa, Manabu Onogi, Naohiro Ishii
2010 conf
KES (3)
Ippei Torii, Yousuke Okada, Takahito Niwa, Manabu Onogi, Naohiro Ishii
2009 B conf
ICTAI
Ippei Torii, Yousuke Okada, Masayuki Mizutani, Naohiro Ishii
2009 conf
KES (2)
Ippei Torii, Yousuke Okada, Masayuki Mizutani, Naohiro Ishii
2009 J jnl
J. Digit. Content Technol. its Appl.
Ippei Torii, Yousuke Okada, Masayuki Mizutani, Naohiro Ishii
2009 conf
KES IIMSS
Ippei Torii, Yousuke Okada, Manabu Onogi, Naohiro Ishii
2009 C conf
SNPD
Ippei Torii, Yousuke Okada, Manabu Onogi, Naohiro Ishii
2009 B conf
ICTAI
Naohiro Ishii, Yusaku Tokuda, Ippei Torii, Tomomi Kanda
2009 conf
KES (2)
Naohiro Ishii, Yusaku Tokuda, Ippei Torii, Tomomi Kanda
redb/extractors/macho_extractors/macho_exports.py
← Index redb/extractors/macho_extractors/macho_exports.py python
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor
from redb.models.dataclasses import MachOExport


class MachOExportExtractor(MachOExtractor):

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

    def tag(self):
        return Tag.MACHO_EXPORT.value

    def _extract_exports(self, arch_name=None):
        """Extract export information from the MachO binary for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Get exported symbols using new API for specific architecture
            exported_symbols = self.macho.get_exported_symbols(arch=arch_name)

            # Extract all exported symbols (may be empty for some binaries)
            # Handle None or empty dict
            if not exported_symbols:
                exported_symbols = {}
            all_symbols = []
            for dylib_name, symbols in exported_symbols.items():
                # Process symbol names
                for symbol in symbols:
                    if isinstance(symbol, bytes):
                        symbol = symbol.decode('utf-8', errors='replace')
                    all_symbols.append(symbol)

            # Create export dataclass
            macho_export = MachOExport(
                macho_exports_total=len(all_symbols),
                macho_export_symbols=all_symbols  # Empty list is fine, but None is not allowed for Array type
            )

            return macho_export

        except Exception as e:
            self.log.error(f"Error extracting MachO exports for arch {arch_name}: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            # Get architectures (macho is already parsed in base class)
            architectures = self.macho.get_architectures()
            if len(architectures) > 1:
                # FAT binary - return list of exports for each architecture
                results = []
                for arch_name in architectures:
                    exports = self._extract_exports(arch_name)
                    if exports:
                        exports.arch_identifier = arch_name
                        results.append(exports)
                return results
            else:
                # Single architecture - return single result
                return self._extract_exports(architectures[0] if architectures else None)
        except Exception as e:
            self.log.error(f"Error extracting MachO exports: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            if not self.macho:
                return None

            # Get architectures (macho is already parsed in base class)
            try:
                architectures = self.macho.get_architectures()
                is_fat = len(architectures) > 1
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # Loop through each architecture (1 for single, multiple for FAT)
            for arch_name in architectures:
                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_header_raw = self.macho.get_macho_header(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                    arch_cputype_raw = arch_header_raw.get('cputype', 0) if arch_header_raw else 0
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific data for {arch_name}: {e}")
                    arch_sha256 = self.sha256
                    arch_cputype_raw = 0

                # Get exports for this architecture
                macho_export = self._extract_exports(arch_name)
                if not macho_export:
                    continue

                data.append([
                    arch_sha256,                          # sha256 (arch-specific)
                    macho_export.macho_exports_total,     # macho_exports_total
                    macho_export.macho_export_symbols,    # macho_export_symbols (keep as array!)
                    current_time,                         # analysis_date
                ])

            column_names = [
                'sha256',
                'macho_exports_total', 'macho_export_symbols',
                'analysis_date'
            ]

            if not data:
                return None

            column_type_names = [
                'FixedString(64)',
                'UInt32', 'Array(Nullable(String))',
                'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

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