Osamu Fukuda

75 papers A* 2A 6B 6C 1Journal 28Unranked 32
YearRankTypeTitle / Venue / Authors
2026 conf
SII
Tomoe Tsuji, Wen Liang Yeoh, Osamu Fukuda
2026 conf
SII
Nanami Ishizu, Rei Taguchi, Wen Liang Yeoh, Osamu Fukuda
2025 J jnl
Knowl. Eng. Data Sci.
Muhammad Zaki Wirawan, Achmad Afif, Anik Nur Handayani, Imanuel Hitipeuw, Osamu Fukuda
2025 J jnl
Artif. Life Robotics
Wendy Cahya Kurniawan, Wen Liang Yeoh, Hiroshi Okumura, Osamu Fukuda
2025 conf
SII
Jin Yien Lee, Taiga Eguchi, Nanami Ishizu, Tatsuya Kawakami, Wen Liang Yeoh, Hiroshi Okumura, Osamu Fukuda
2025 J jnl
Artif. Life Robotics
Jin Yien Lee, Taiga Eguchi, Wen Liang Yeoh, Hiroshi Okumura, Osamu Fukuda
2025 conf
SII
Taiga Eguchi, Wen Liang Yeoh, Hiroshi Okumura, Osamu Fukuda
2025 J jnl
J. Adv. Comput. Intell. Intell. Informatics
Nobuhiko Yamaguchi, Hiroshi Okumura, Osamu Fukuda, Wen Liang Yeoh, Tamami Satoh, Rika Nakano, Asuka Sakamoto
2025 A* conf
ICRA
Shunya Hara, Osamu Fukuda, Mitsuru Higashimori
2025 conf
CANDARW
Kosei Kishimoto, Nobuhiko Yamaguchi, Sakiko Kimura, Masatomo Miura, Osamu Fukuda, Wen Liang Yeoh
2025 J jnl
Inf.
Fisilmi Azizah Rahman, Ferina Ayu Pusparani, Wen Liang Yeoh, Osamu Fukuda
2024 conf
SII
Miharu Kawasaki, Wen Liang Yeoh, Hiroshi Okumura, Nobuhiko Yamaguchi, Osamu Fukuda
2024 conf
SII
Yui Ogishi, Wen Liang Yeoh, Fisilmi Azizah Rahman, Hiroshi Okumura, Nobuhiko Yamaguchi, Osamu Fukuda
2024 conf
CANDARW
Makoto Eguchi, Nobuhiko Yamaguchi, Osamu Fukuda, Hiroshi Okumura, Wen Liang Yeoh
2024 J jnl
IEEE Access
Osamu Fukuda, Wen Liang Yeoh, Kyohei Yoshida, Naoki Matsumoto, Nobuhiko Yamaguchi, Hiroshi Okumura
2024 conf
SII
Shuhei Kawaguchi, Osamu Fukuda, Sakiko Kimura, Wen Liang Yeoh, Nobuhiko Yamaguchi, Hiroshi Okumura
2024 J jnl
J. Adv. Comput. Intell. Intell. Informatics
Nobuhiko Yamaguchi, Hiroshi Okumura, Osamu Fukuda, Wen Liang Yeoh, Munehiro Tanaka
2024 conf
CANDARW
Nobuhiko Yamaguchi, Osamu Fukuda, Hiroshi Okumura, Wen Liang Yeoh, Munehiro Tanaka
2024 J jnl
IEEE Access
Taiga Eguchi, Masashi Yamada, Wen Liang Yeoh, Hiroshi Okumura, Nobuhiko Yamaguchi, Osamu Fukuda
2024 J jnl
Artif. Life Robotics
Kyohei Yoshida, Wen Liang Yeoh, Hiroshi Okumura, Nobuhiko Yamaguchi, Osamu Fukuda
2024 conf
CANDARW
Ryuki Mutsu, Kosei Kishimoto, Hiroshi Okumura, Wen Liang Yeoh, Osamu Fukuda, Masatomo Miura, Sakiko Kimura, Nobuhiko Yamaguchi
2024 conf
SII
Yuta Esaki, Osamu Fukuda, Wen Liang Yeoh, Hiroshi Okumura, Nobuhiko Yamaguchi
2024 conf
ICIT
Taiga Eguchi, Osamu Fukuda, Wen Liang Yeoh, Hiroshi Okumura, Nobuhiko Yamaguchi
2024 conf
SII
Nanami Ishizu, Wen Liang Yeoh, Hiroshi Okumura, Nobuhiko Yamaguchi, Osamu Fukuda
2024 J jnl
IEEE Access
Taiga Eguchi, Jin Yien Lee, Tomoya Sato, Teruo Suzuki, Osamu Fukuda, Kazuya Kikunaga
2023 conf
SICE
Taiga Eguchi, Kazuya Kikunaga, Osamu Fukuda
2023 conf
CANDARW
Makoto Eguchi, Nobuhiko Yamaguchi, Osamu Fukuda, Hiroshi Okumura, Wen Liang Yeoh
2023 J jnl
Artif. Life Robotics
Wen Liang Yeoh, Ryosuke Miyata, Osamu Fukuda, Nobuhiko Yamaguchi, Hiroshi Okumura
2023 conf
SICE
Wen Liang Yeoh, Kyohei Yoshida, Naoki Matsumoto, Nobuhiko Yamaguchi, Hiroshi Okumura, Osamu Fukuda
2023 J jnl
IEEE Access
Taiga Eguchi, Wen Liang Yeoh, Hiroshi Okumura, Nobuhiko Yamaguchi, Osamu Fukuda
2023 J jnl
J. Robotics Mechatronics
Wen Liang Yeoh, Jeewon Choi, Ping Yeap Loh, Osamu Fukuda, Satoshi Muraki
2022 conf
CANDARW
Nobuhiko Yamaguchi, Hiroki Tokumaru, Osamu Fukuda, Hiroshi Okumura, Wen Liang Yeoh
2021 J jnl
IEEE Access
Osamu Fukuda, Daisuke Sakaguchi, Yunan He, Nobuhiko Yamaguchi, Hiroshi Okumura
2021 conf
LifeTech
Nan Bu, Masanori Fukami, Osamu Fukuda
2020 conf
CANDAR (Workshops)
Nobuhiko Yamaguchi, Osamu Fukuda, Hiroshi Okumura
2020 conf
CANDAR (Workshops)
Katsutoshi Soejima, Nobuhiko Yamaguchi, Osamu Fukuda, Hiroshi Okumura
2020 J jnl
IEEE Access
Yunan He, Ryusuke Kubozono, Osamu Fukuda, Nobuhiko Yamaguchi, Hiroshi Okumura
2019 J jnl
IEEE Access
Yunan He, Ryusei Shima, Osamu Fukuda, Nan Bu, Nobuhiko Yamaguchi, Hiroshi Okumura
2019 conf
CANDAR Workshops
Nobuhiko Yamaguchi, Osamu Fukuda, Hiroshi Okumura
2018 conf
GECCO (Companion)
Yunan He, Ikushi Sawada, Osamu Fukuda, Ryusei Shima, Nobuhiko Yamaguchi, Hiroshi Okumura
2018 conf
SCIS&ISIS
Nobuhiko Yamaguchi, Kazuya Ihara, Osamu Fukuda, Hiroshi Okumura
2018 conf
EMBC
Yunan He, Osamu Fukuda, Nan Bu, Hiroshi Okumura, Nobuhiko Yamaguchi
2017 J jnl
J. Robotics Mechatronics
Osamu Fukuda, Yuta Takahashi, Nan Bu, Hiroshi Okumura, Kohei Arai
2017 conf
ROBIO
Yunan He, Osamu Fukuda, Shunsuke Ide, Hiroshi Okumura, Nobuhiko Yamaguchi, Nan Bu
2016 C conf
HealthCom
Osamu Fukuda, Tatsuma Shimizu, Hiroshi Okumura, Kohei Arai, Satoshi Muraki, Kiyotaka Fukumoto
2013 conf
Human Vision and Electronic Imaging
Hiroshi Okumura, Shoichiro Takubo, Shoichi Ozaki, Takeru Kawasaki, Indra N. Abdullah, Kohei Arai, Osamu Fukuda
2013 B conf
SMC
Osamu Fukuda, Natsuko Nabeoka, Tsuneharu Miyajima
2012 B conf
IJCNN
Osamu Fukuda, Jonghwan Kim, Isao Nakai, Yasunori Ichikawa
2011 J jnl
IEEE Trans. Biomed. Eng.
Kiyotaka Fukumoto, Osamu Fukuda, Masayoshi Tsubai, Satoshi Muraki
2011 J jnl
Artif. Life Robotics
Osamu Fukuda, Jonghwan Kim, Isao Nakai, Yasunori Ichikawa
2011 conf
ICEEI
Harutoyo Hirano, Hiromi Maruyama, Abdugheni Kutluk, Toshio Tsuji, Osamu Fukuda, Naohiro Ueno, Teiji Ukawa, Ryuji Nakamura, Noboru Saeki, Masashi Kawamoto, Masao Yoshizumi
2010 B conf
SMC
Osamu Fukuda, Nan Bu, Naohiro Ueno
2009 conf
ROBIO
Nan Bu, Osamu Fukuda, Naohiro Ueno, Masahiro Inoue
2009 J jnl
J. Digit. Content Technol. its Appl.
Osamu Fukuda, Masayoshi Tsubai, Masahiro Inoue, Nan Bu, Naohiro Ueno, Hiroshi Okumura, Kohei Arai
2006 J jnl
Syst. Comput. Jpn.
Osamu Fukuda, Jun Arita, Toshio Tsuji
2006 conf
EMBC
Masayoshi Tsubai, Naoshi Mitoda, Osamu Fukuda, Naohiro Ueno
2004 A conf
IROS
Yoshiyuki Tanaka, Satoshi Noda, Toshio Tsuji, Masaharu Maruishi, Osamu Fukuda
2004 A conf
IROS
Keiko Homma, Osamu Fukuda, Yoshihiko Nagata, Mariko Usuba
2003 J jnl
IEEE Trans. Robotics Autom.
Osamu Fukuda, Toshio Tsuji, Makoto Kaneko, Akira Otsuka
2003 J jnl
IEEE Trans. Neural Networks
Toshio Tsuji, Nan Bu, Osamu Fukuda, Makoto Kaneko
2003 B conf
IJCNN
Osamu Fukuda, Jun Arita, Toshio Tsuji
2003 J jnl
J. Intell. Inf. Syst.
Nan Bu, Osamu Fukuda, Toshio Tsuji
2003 B conf
IJCNN
Nan Bu, Toshio Tsuji, Osamu Fukuda
2002 J jnl
J. Robotics Mechatronics
Keiko Homma, Osamu Fukuda, Yoshihiko Nagata
2002 J jnl
J. Robotics Mechatronics
Osamu Fukuda
2002 J jnl
J. Robotics Mechatronics
Osamu Fukuda, Yoshihiko Nagata, Keiko Homma, Toshio Tsuji
2002 A conf
IROS
Osamu Fukuda, Toshio Tsuji, Kousuke Takahashi, Makoto Kaneko
2002 A conf
IROS
Keiko Homma, Osamu Fukuda, Yoshihiko Nagata
2000 A conf
IROS
Toshio Tsuji, Osamu Fukuda, Hiroki Shigeyoshi, Makoto Kaneko
1999 B conf
KES
Osamu Fukuda, Toshio Tsuji, Akira Otsuka, Makoto Kaneko
1999 J jnl
IEEE Trans. Syst. Man Cybern. Part C
Toshio Tsuji, Osamu Fukuda, Hiroyuki Ichinobe, Makoto Kaneko
1999 A conf
IROS
Osamu Fukuda, Toshio Tsuji, Hiroki Shigeyoshi, Makoto Kaneko
1998 A* conf
ICRA
Osamu Fukuda, Toshio Tsuji, Akira Otsuka, Makoto Kaneko
1995 conf
ICNN
Toshio Tsuji, Hiroyuki Ichinobe, Osamu Fukuda, Makoto Kaneko
1995 conf
ICNN
Osamu Fukuda, Toshio Tsuji, Makoto Kaneko
redb/extractors/macho_extractor.py
← Index redb/extractors/macho_extractor.py python
import logging
from abc import ABCMeta, abstractmethod
import inspect
import sys
import os

import machofile

from redb.extractors.extractor import Extractor

logger = logging.getLogger(__name__)


@abstractmethod
class MachOExtractor(Extractor, metaclass=ABCMeta):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        # Read binary and parse machofile BEFORE calling super().__init__
        # This avoids reading the file twice
        with open(filepath, "rb") as f:
            binary_data = f.read()

        # Parse machofile with binary data
        self.macho = macho if macho else self._generate_machofile_object(binary_data)

        # Extract hashes from machofile to pass to parent
        precomputed_hashes = None
        if self.macho:
            try:
                general_info = self.macho.get_general_info()
                if general_info:
                    # For FAT binaries, get_general_info() returns dict with 'fat' key
                    # For single-arch, it returns the info directly
                    if 'fat' in general_info:
                        fat_info = general_info['fat']
                        precomputed_hashes = {
                            'MD5': fat_info.get('MD5'),
                            'SHA1': fat_info.get('SHA1'),
                            'SHA256': fat_info.get('SHA256'),
                        }
                    else:
                        precomputed_hashes = {
                            'MD5': general_info.get('MD5'),
                            'SHA1': general_info.get('SHA1'),
                            'SHA256': general_info.get('SHA256'),
                        }
            except Exception as e:
                logger.debug(f"Could not get hashes from machofile: {e}")

        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            precomputed_hashes=precomputed_hashes,
        )

        # Store binary data so base class doesn't re-read
        self._binary_data = binary_data

    @property
    def binary(self):
        """Override to use already-read binary data."""
        return self._binary_data

    def _generate_machofile_object(self, binary_data):
        """Generate and parse a machofile object from binary data."""
        macho = None
        try:
            macho = machofile.UniversalMachO(data=binary_data)
            if not macho:
                raise Exception("Empty file?")

            # Parse the MachO object once during initialization
            macho.parse()

        except Exception as e:
            logger.error(f"Format error parsing MachO: {e}")
        return macho

    # def _is_macho_file(self):
    #     """Check if the file is a valid Mach-O binary."""
    #     try:
    #         if not self.macho:
    #             return False
            
    #         # For Universal/FAT binaries, check if any architecture is valid
    #         if hasattr(self.macho, 'is_fat') and self.macho.is_fat:
    #             return len(self.macho.architectures) > 0
    #         else:
    #             # Single architecture binary
    #             return hasattr(self.macho, 'macho') and self.macho.macho is not None
    #     except Exception as e:
    #         self.log.error(f"Error checking Mach-O file: {e}")
    #         return False

    def _is_signed(self):
        """Check if the Mach-O binary is code signed using new API."""
        try:
            if not self.macho:
                return False

            # Get architectures using new API
            architectures = self.macho.get_architectures()

            # For each architecture, check if signed
            for arch in architectures:
                try:
                    signature_info = self.macho.get_code_signature_info(arch=arch)
                    if signature_info and signature_info.get('signed', False):
                        return True
                except Exception:
                    continue

            return False
        except Exception as e:
            self.log.error(f"Error checking Mach-O signature: {e}")
            return False

    def _get_architectures(self):
        """Get list of architectures in the Mach-O binary using new API."""
        try:
            if not self.macho:
                return []

            # Use new API method
            architectures = self.macho.get_architectures()
            return architectures if architectures else []
        except Exception as e:
            self.log.error(f"Error getting architectures: {e}")
            return []

    # def _get_macho_for_arch(self, arch_name=None):
    #     """Get MachO instance for specific architecture or default."""
    #     try:
    #         if not self.macho:
    #             return None
            
    #         if hasattr(self.macho, 'is_fat') and self.macho.is_fat:
    #             if arch_name:
    #                 return self.macho.architectures.get(arch_name)
    #             else:
    #                 # Return first available architecture
    #                 return next(iter(self.macho.architectures.values())) if self.macho.architectures else None
    #         else:
    #             # Single architecture binary
    #             return self.macho.macho if hasattr(self.macho, 'macho') else None
    #     except Exception as e:
    #         self.log.error(f"Error getting MachO for architecture: {e}")
    #         return None

    # def _get_formatted_header_values(self, header):
    #     """Get both raw and human-readable header values."""
    #     try:
    #         macho_instance = self._get_macho_for_arch()
    #         if not macho_instance:
    #             return None
            
    #         # Parse the MachO if not already parsed
    #         if not hasattr(macho_instance, 'header') or not macho_instance.header:
    #             macho_instance.parse()
            
    #         # Get human-readable values using machofile's formatting methods
    #         magic_str = macho_instance.format_magic_value(header.get('magic', 0))
            
    #         # Simple CPU type mapping since CPU_TYPE_MAP is not exposed
    #         cputype = header.get('cputype', 0)
    #         if cputype == 0x7:
    #             cputype_str = "x86"
    #         elif cputype == 0x1000007:
    #             cputype_str = "x86_64"
    #         elif cputype == 0xC:
    #             cputype_str = "ARM"
    #         elif cputype == 0x100000C:
    #             cputype_str = "ARM 64-bit"
    #         else:
    #             cputype_str = str(cputype)
            
    #         cpusubtype_str = macho_instance.decode_cpusubtype(header.get('cputype', 0), header.get('cpusubtype', 0))
    #         filetype_str = macho_instance.format_file_type(header.get('filetype', 0))
    #         flags_str = macho_instance.decode_flags(header.get('flags', 0))
            
    #         return {
    #             'raw': {
    #                 'magic': header.get('magic', 0),
    #                 'cputype': header.get('cputype', 0),
    #                 'cpusubtype': header.get('cpusubtype', 0),
    #                 'filetype': header.get('filetype', 0),
    #                 'flags': header.get('flags', 0),
    #             },
    #             'formatted': {
    #                 'magic_str': magic_str,
    #                 'cputype_str': cputype_str,
    #                 'cpusubtype_str': cpusubtype_str,
    #                 'filetype_str': filetype_str,
    #                 'flags_str': flags_str,
    #             }
    #         }
    #     except Exception as e:
    #         self.log.error(f"Error formatting header values: {e}")
    #         return None