Ikuo Oka

66 papers B 14C 14Misc 2Journal 16Unranked 20
YearRankTypeTitle / Venue / Authors
2020 B conf
NOMS
Yuki Imamura, Nobuyuki Nakamura, Taketsugu Yao, Shingo Ata, Ikuo Oka
2019 conf
ISPACS
Taiga Okutate, Ikuo Oka, Shingo Ata
2019 conf
ISPACS
Koki Samoto, Ikuo Oka, Shingo Ata
2018 C conf
ISITA
Tadashi Tomizuka, Riku Iwanaga, Ikuo Oka, Shingo Ata
2017 B conf
CNSM
Hiroki Kawai, Shingo Ata, Nobuyuki Nakamura, Ikuo Oka
2017 C conf
APNOMS
Shingo Ata, Yusuke Iemura, Nobuyuki Nakamura, Ikuo Oka
2017 conf
IEA/AIE (2)
Kuniko Yamada, Hiroshi Ueda, Harumi Murakami, Ikuo Oka
2016 conf
CCNC
Masami Nawa, Kenzo Okuda, Shingo Ata, Yasuto Kuroda, Yuji Yano, Hisashi Iwamoto, Kazunari Inoue, Ikuo Oka
2016 C conf
ISITA
Shinji Nishijima, Ikuo Oka, Shingo Ata
2016 C conf
ISITA
Hodaka Tashiro, Yu Morishima, Ikuo Oka, Shingo Ata
2015 B conf
CNSM
Tatsuya Sato, Shingo Ata, Ikuo Oka, Yasuhiro Sato
2015 B conf
IM
Hiroki Nakayama, Shingo Ata, Ikuo Oka
2015 conf
NTMS
Yuichi Kumano, Shingo Ata, Nobuyuki Nakamura, Yoshihiro Nakahira, Ikuo Oka
2014 B conf
NOMS
Yuki Kawai, Yasuhiro Sato, Shingo Ata, Dijiang Huang, Deep Medhi, Ikuo Oka
2014 C conf
ISITA
Daiki Hato, Yu Morishima, Ikuo Oka, Shingo Ata
2014 Misc conf
ICNC
Yuichi Kumano, Shingo Ata, Nobuyuki Nakamura, Yoshihiro Nakahira, Ikuo Oka
2013 conf
CCNC
Kenzo Okuda, Shingo Ata, Yasuto Kuroda, Yuji Yano, Hisashi Iwamoto, Kazunari Inoue, Ikuo Oka
2013 J jnl
IEICE Trans. Electron.
Hisashi Iwamoto, Yuji Yano, Yasuto Kuroda, Koji Yamamoto, Kazunari Inoue, Ikuo Oka
2013 B conf
IM
Akira Wada, Yasuhiro Sato, Xuan Liu, Tianyi Xing, Shingo Ata, Deep Medhi, Dijiang Huang, Ikuo Oka
2013 J jnl
ACM SIGOPS Oper. Syst. Rev.
Sou Koyano, Shingo Ata, Hisashi Iwamoto, Yuji Yano, Yasuto Kuroda, Kazunari Inoue, Ikuo Oka
2013 conf
IIH-MSP
Thi Thi Zin, Ikuo Oka, Takuya Sasayama, Shingo Ata, Hitoshi Watanabe, Hiroshi Sasano
2013 C conf
APCC
Shogo Nakanishi, Yu Morishima, Ikuo Oka, Shingo Ata
2013 conf
M&N
Hiroki Nakayama, Shingo Ata, Ikuo Oka
2013 conf
ICOIN
Yutaka Yasuda, Shingo Ata, Ikuo Oka
2012 Misc conf
UCC
Sou Koyano, Shingo Ata, Ikuo Oka, Kazunari Inoue
2012 J jnl
IEICE Trans. Commun.
Takafumi Kinugasa, Ikuo Oka, Shingo Ata
2012 conf
ISPACS
Ikuo Oka, Takafumi Kinugasa, Shingo Ata
2012 B conf
NOMS
Yasuhiro Sato, Hirona Shimokawa, Shingo Ata, Ikuo Oka
2012 conf
ISPACS
Yu Morishima, Ikuo Oka, Shingo Ata
2012 J jnl
IEICE Trans. Commun.
Kazuya Zaitsu, Koji Yamamoto, Yasuto Kuroda, Kazunari Inoue, Shingo Ata, Ikuo Oka
2012 conf
ICOIN
Hiroomi Isozaki, Shingo Ata, Ikuo Oka
2012 conf
SCIS&ISIS
Kuniko Yamada, Hiroshi Ueda, Harumi Murakami, Ikuo Oka
2012 C conf
ISITA
Chiaki Honda, Ikuo Oka, Shingo Ata
2012 conf
SocialCom/PASSAT
Yasuhiro Sato, Hirona Shimokawa, Shingo Ata, Ikuo Oka
2011 conf
ICMLA (2)
Yohei Okada, Shingo Ata, Nobuyuki Nakamura, Yoshihiro Nakahira, Ikuo Oka
2011 J jnl
IEICE Trans. Commun.
Kazutaka Nishino, Shinji Tani, Ikuo Oka, Shingo Ata
2011 J jnl
IEICE Trans. Commun.
Yasuhiro Sato, Shin'ichiro Kitano, Shingo Ata, Ikuo Oka
2011 B conf
ICCCN
Aki Kaizu, Yu Morishima, Ikuo Oka, Shingo Ata
2011 conf
ICOIN
Shin'ichiro Higashi, Shingo Ata, Akihiro Nakao, Ikuo Oka
2010 C conf
ISITA
Daisuke Shimbo, Ikuo Oka
2010 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
Ikuo Oka
2010 conf
ICECS
Kazuya Zaitsu, Koji Yamamoto, Yasuto Kuroda, Kazunari Inoue, Shingo Ata, Ikuo Oka
2010 C conf
ISITA
Yu Morishima, Ikuo Oka, Shingo Ata
2009 J jnl
J. Netw. Syst. Manag.
Yasuhiro Sato, Shingo Ata, Ikuo Oka
2009 C conf
APNOMS
Masato Doi, Shingo Ata, Ikuo Oka
2009 conf
ICOIN
Hiroomi Isozaki, Shingo Ata, Ikuo Oka
2009 B conf
ICCCN
Junpei Oshio, Shingo Ata, Ikuo Oka
2009 J jnl
IEICE Trans. Commun.
Yasuhiro Sato, Shingo Ata, Ikuo Oka, Chikato Fujiwara
2008 B conf
NOMS
Yasuhiro Sato, Shingo Ata, Ikuo Oka
2008 conf
ICNS
Masaki Tai, Shingo Ata, Ikuo Oka
2008 C conf
APNOMS
Yasuhiro Sato, Shin'ichiro Kitano, Shingo Ata, Ikuo Oka
2007 J jnl
IEICE Trans. Commun.
Gang Qin, Shingo Ata, Ikuo Oka, Chikato Fujiwara
2007 B conf
PAM
Masaki Tai, Shingo Ata, Ikuo Oka
2007 C conf
APNOMS
Yusuke Toji, Shingo Ata, Ikuo Oka
2007 C conf
APNOMS
Junpei Oshio, Shingo Ata, Ikuo Oka
2006 J jnl
IEEE Trans. Commun.
Ikuo Oka, Marc P. C. Fossorier
2006 C conf
APNOMS
Shingo Ata, Koichi Nagai, Ikuo Oka
2006 B conf
GLOBECOM
Yasuhiro Sato, Shingo Ata, Ikuo Oka, Chikato Fujiwara
2005 J jnl
IEEE Commun. Lett.
Hideki Yoshikawa, Ikuo Oka, Chikato Fujiwara
2005 conf
CCNC
Yoshinori Higashi, Shingo Ata, Ikuo Oka, Chikato Fujiwara
2002 B conf
GLOBECOM
Gang Qin, Shingo Ata, Ikuo Oka, Chikato Fujiwara
2002 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
Hideki Yoshikawa, Ikuo Oka, Chikato Fujiwara, Yoshimasa Daido
2001 B conf
GLOBECOM
Hideki Yoshikawa, Ikuo Oka, Chikato Fujiwara
1992 J jnl
IEEE J. Sel. Areas Commun.
Jaidev Kaniyil, Jun Takei, Shigeru Shimamoto, Yoshikuni Onozato, Tomonori Usui, Ikuo Oka, Tsutomu Kawabata
1990 J jnl
IEEE Trans. Inf. Theory
Yow-Jong Liu, Ikuo Oka, Ezio Biglieri
1986 J jnl
IEEE Trans. Commun.
Kazuhito Ishida, Ikuo Oka, Ichiro Endo
redb/extractors/elf_extractors/elf_relocations.py
← Index redb/extractors/elf_extractors/elf_relocations.py python
import inspect
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 ELFRelocation


class ELFRelocationExtractor(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_relocations = []
        self.elastic_index = self.index_prefix + "-elf_relocations"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _get_relocation_type_string(self, reloc_type: int, machine_arch: str) -> str:
        """Convert relocation type number to human-readable string based on architecture."""
        # This is a simplified mapping - real implementation would need comprehensive
        # architecture-specific relocation type mappings

        common_types = {
            0: "R_NONE",
            1: "R_DIRECT",
            2: "R_PC_RELATIVE",
            3: "R_GOT",
            4: "R_PLT",
            5: "R_COPY",
            6: "R_GLOB_DAT",
            7: "R_JMP_SLOT",
            8: "R_RELATIVE"
        }

        # Architecture-specific mappings could be added here
        if machine_arch == "x86_64":
            x86_64_types = {
                1: "R_X86_64_64",
                2: "R_X86_64_PC32",
                3: "R_X86_64_GOT32",
                4: "R_X86_64_PLT32",
                5: "R_X86_64_COPY",
                6: "R_X86_64_GLOB_DAT",
                7: "R_X86_64_JUMP_SLOT",
                8: "R_X86_64_RELATIVE"
            }
            return x86_64_types.get(reloc_type, f"R_X86_64_{reloc_type}")
        elif machine_arch == "x86":
            i386_types = {
                1: "R_386_32",
                2: "R_386_PC32",
                3: "R_386_GOT32",
                4: "R_386_PLT32",
                5: "R_386_COPY",
                6: "R_386_GLOB_DAT",
                7: "R_386_JMP_SLOT",
                8: "R_386_RELATIVE"
            }
            return i386_types.get(reloc_type, f"R_386_{reloc_type}")

        return common_types.get(reloc_type, f"R_UNKNOWN_{reloc_type}")

    def _extract_relocation_data(self, relocation, section_name: str, machine_arch: str) -> Dict:
        """Extract data from a single relocation entry."""
        try:
            # Get relocation offset
            relocation_offset = relocation.entry.get('r_offset', 0)

            # Get relocation type
            relocation_type = relocation.entry.get('r_info_type', 0)

            # Get symbol index
            relocation_symbol_index = relocation.entry.get('r_info_sym', 0)

            # Get addend (only present in RELA sections)
            relocation_addend = None
            if hasattr(relocation.entry, 'r_addend'):
                relocation_addend = relocation.entry.get('r_addend', 0)

            # Get symbol name if available
            relocation_symbol_name = ""
            if hasattr(relocation, 'symbol') and relocation.symbol:
                relocation_symbol_name = relocation.symbol.name or f"<symbol_{relocation_symbol_index}>"
            else:
                relocation_symbol_name = f"<symbol_{relocation_symbol_index}>"

            # Get type string mapping
            relocation_type_str = self._get_relocation_type_string(relocation_type, machine_arch)

            return ELFRelocation(
                relocation_offset=relocation_offset,
                relocation_type=relocation_type,
                relocation_type_str=relocation_type_str,
                relocation_symbol_index=relocation_symbol_index,
                relocation_symbol_name=relocation_symbol_name,
                relocation_section=section_name,
                relocation_addend=relocation_addend
            )

        except Exception as e:
            self.log.error(f"Error extracting relocation data: {e}")
            return None

    def _extract_relocations_from_section(self, section, machine_arch: str) -> List[Dict]:
        """Extract all relocations from a relocation section."""
        relocations = []

        try:
            if not hasattr(section, 'iter_relocations'):
                return relocations

            section_name = section.name or f"<unnamed_section>"

            for relocation in section.iter_relocations():
                reloc_data = self._extract_relocation_data(relocation, section_name, machine_arch)
                if reloc_data:
                    relocations.append(reloc_data)

        except Exception as e:
            self.log.error(f"Error extracting relocations from section {section.name}: {e}")

        return relocations

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

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

            def extract_data(elf):
                # Get architecture for relocation type mapping
                machine_arch = self._get_architecture()
                all_relocations = []

                # Iterate through all sections looking for relocation sections with per-section error handling
                for section_index, section in enumerate(elf.iter_sections()):
                    try:
                        # Check if this is a relocation section (.rel or .rela)
                        if (section.name and
                            (section.name.startswith('.rel') or section.name.startswith('.rela')) and
                            hasattr(section, 'iter_relocations')):

                            section_relocations = self._extract_relocations_from_section(section, machine_arch)
                            all_relocations.extend(section_relocations)
                            self.log.debug(f"Extracted {len(section_relocations)} relocations from section {section.name}")
                    except Exception as e:
                        section_name = getattr(section, 'name', f'section_{section_index}')
                        self.log.warning(f"Error processing relocation section {section_name}: {e}")
                        # Continue processing other sections

                return all_relocations

            if not self._is_elf_file():
                return None

            result = self._with_elf_file(extract_data)
            if result is None:
                return None

            self.elf_relocations = result
            return self.elf_relocations

        except Exception as e:
            self.log.error(f"Error extracting ELF relocations {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_relocations
        elif exporter_type == "ClickHouseExporter":
            try:
                # Return valid empty structure if no relocations (e.g., statically linked binary)
                # None is reserved for actual errors

                # Prepare data arrays for all relocations
                data = []
                current_time = datetime.now(timezone.utc)
                for reloc in self.elf_relocations:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        reloc.relocation_offset,
                        reloc.relocation_type,
                        reloc.relocation_type_str,
                        reloc.relocation_symbol_index,
                        reloc.relocation_symbol_name,
                        reloc.relocation_addend,
                        reloc.relocation_section,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'relocation_offset', 'relocation_type', 'relocation_type_str',
                    'relocation_symbol_index', 'relocation_symbol_name',
                    'relocation_addend', 'relocation_section',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'UInt64', 'UInt32', 'LowCardinality(String)',
                    'UInt32', 'LowCardinality(String)',
                    'Nullable(Int64)', 'LowCardinality(String)',
                    'DateTime64(3, \'UTC\')'
                ]

                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_relocations"