Makoto Imase

80 papers A* 1B 9C 3Journal 30Unranked 37
YearRankTypeTitle / Venue / Authors
2013 J jnl
Inf. Media Technol.
Yusuke Sakumoto, Hiroyuki Ohsaki, Makoto Imase
2013 J jnl
J. Inf. Process.
Yusuke Sakumoto, Hiroyuki Ohsaki, Makoto Imase
2013 J jnl
Inf. Media Technol.
Takamichi Nishijima, Hiroyuki Ohsaki, Makoto Imase
2013 J jnl
J. Inf. Process.
Takamichi Nishijima, Hiroyuki Ohsaki, Makoto Imase
2013 J jnl
J. Commun.
Yusuke Sakumoto, Shinpei Kuribayashi, Hiroyuki Ohsaki, Satoshi Hasegawa, Makoto Imase
2013 conf
ICC
Masato Ohtani, Keiichiro Tsukamoto, Yuki Koizumi, Hiroyuki Ohsaki, Makoto Imase, Kunio Hato, Junichi Murayama
2012 conf
SAINT
Yusuke Sakumoto, Hiroyuki Ohsaki, Makoto Imase
2012 J jnl
IEICE Trans. Commun.
Masao Tanabe, Hirofumi Akaike, Masaki Aida, Masayuki Murata, Makoto Imase
2012 J jnl
Inf. Media Technol.
Sho Tsugawa, Hiroyuki Ohsaki, Makoto Imase
2012 J jnl
J. Inf. Process.
Sho Tsugawa, Hiroyuki Ohsaki, Makoto Imase
2012 conf
CCNC
Hideyuki Kanai, Yuki Koizumi, Hiroyuki Ohsaki, Makoto Imase
2012 conf
AINA Workshops
Hiroyuki Ohsaki, Yosuke Yamada, Dimitri Perrin, Makoto Imase
2012 conf
AINA Workshops
Sho Tsugawa, Hiroyuki Ohsaki, Makoto Imase
2012 J jnl
IEICE Trans. Commun.
Sho Tsugawa, Hiroyuki Ohsaki, Makoto Imase
2012 conf
SCIS&ISIS
Yuki Koizumi, Hideyuki Kanai, Hiroyuki Ohsaki, Makoto Imase
2012 B conf
GLOBECOM
Hirofumi Ichihara, Yuki Koizumi, Hiroyuki Ohsaki, Kunio Hato, Junichi Murayama, Makoto Imase
2012 J jnl
IEICE Trans. Commun.
Yusuke Sakumoto, Hiroyuki Ohsaki, Makoto Imase
2012 J jnl
IEICE Trans. Commun.
Chisa Takano, Masaki Aida, Masayuki Murata, Makoto Imase
2012 conf
UIC/ATC
Masaki Aida, Chisa Takano, Masayuki Murata, Makoto Imase
2012 A* conf
VR
Sho Tsugawa, Hiroyuki Ohsaki, Yuichi Itoh, Naoaki Ono, Keiichiro Kagawa, Kazuki Takashima, Makoto Imase
2011 conf
SAINT
Chisa Takano, Masaki Aida, Masayuki Murata, Makoto Imase
2011 conf
SAINT
Yusuke Sakumoto, Hiroyuki Ohsaki, Makoto Imase
2011 conf
SAINT
Shinpei Kuribayashi, Yusuke Sakumoto, Hiroyuki Ohsaki, Satoshi Hasegawa, Makoto Imase
2011 conf
Advances in Computer Entertainment Technology
Sho Tsugawa, Hiroyuki Ohsaki, Yuichi Itoh, Naoaki Ono, Keiichiro Kagawa, Kazuki Takashima, Makoto Imase
2010 C conf
BROADNETS
Harumasa Tada, Makoto Imase, Masayuki Murata
2010 J jnl
IEICE Trans. Commun.
Yusuke Sakumoto, Hiroyuki Ohsaki, Makoto Imase
2010 conf
SAINT
Yusuke Sakumoto, Hiroyuki Ohsaki, Makoto Imase
2010 conf
SAINT
Takamichi Nishijima, Hiroyuki Ohsaki, Yoshihiro Nomoto, Makoto Imase
2010 conf
SAINT
Sho Tsugawa, Kazuya Takahashi, Hiroyuki Ohsaki, Makoto Imase
2009 J jnl
IEICE Trans. Commun.
Satoshi Hasegawa, Yusuke Sakumoto, Mirai Wakabayashi, Hiroyuki Ohsaki, Makoto Imase
2009 conf
SAINT
Takeaki Nishioka, Yusuke Sakumoto, Hiroyuki Ohsaki, Makoto Imase
2009 conf
SAINT
Tomoyasu Ogasa, Yousuke Takahashi, Hiroyuki Ohsaki, Takeshi Yagi, Junichi Murayama, Makoto Imase
2009 J jnl
IEICE Trans. Commun.
Kouhei Sugiyama, Hiroyuki Ohsaki, Makoto Imase
2009 conf
SAINT
Takamichi Nishijima, Fumito Inoue, Hiroyuki Ohsaki, Yoshihiro Nomoto, Makoto Imase
2009 conf
ISPAN
Shinpei Kuribayashi, Yusuke Sakumoto, Satoshi Hasegawa, Hiroyuki Ohsaki, Makoto Imase
2009 J jnl
IEICE Trans. Commun.
Yusuke Sakumoto, Hiroyuki Ohsaki, Makoto Imase
2008 conf
ICN
Masaki Aida, Chisa Takano, Masayuki Murata, Makoto Imase
2008 J jnl
IEICE Trans. Commun.
Masaki Aida, Chisa Takano, Masayuki Murata, Makoto Imase
2008 J jnl
IEICE Trans. Commun.
Takeshi Ito, Hiroyuki Ohsaki, Makoto Imase
2008 B conf
ICCCN
Yousuke Takahashi, Kouhei Sugiyama, Hiroyuki Ohsaki, Makoto Imase, Takeshi Yagi, Junichi Murayama
2008 conf
SERVICES II
Kouhei Sugiyama, Hiroyuki Ohsaki, Makoto Imase, Takeshi Yagi, Junichi Murayama
2008 conf
IMCSIT
Harumasa Tada, Makoto Imase, Masayuki Murata
2008 conf
WSAN
Mirai Wakabayashi, Naoki Wakamiya, Masayuki Murata, Makoto Imase, Harumasa Tada
2007 B conf
GLOBECOM
Masaki Aida, Chisa Takano, Masayuki Murata, Makoto Imase
2007 B conf
MASCOTS
Yusuke Sakumoto, Ryouta Asai, Hiroyuki Ohsaki, Makoto Imase
2007 B conf
GLOBECOM
Yusuke Sakumoto, Hiroyuki Ohsaki, Makoto Imase
2007 C conf
ISCC
Yusuke Sakumoto, Hiroyuki Ohsaki, Makoto Imase
2007 conf
SAINT
Hiroyuki Ohsaki, Koutaro Yagi, Makoto Imase
2007 conf
ICN
Osamu Honda, Hiroyuki Ohsaki, Makoto Imase, Kazuhiro Matsuda
2007 conf
SAINT
Hiroyuki Ohsaki, Hideyuki Yamamoto, Makoto Imase
2006 conf
ICWMC
Taro Maekawa, Harumasa Tada, Naoki Wakamiya, Makoto Imase, Masayuki Murata
2006 conf
SAINT
Takeshi Ito, Hiroyuki Ohsaki, Makoto Imase
2006 B conf
CCGRID
Takeshi Ito, Hiroyuki Ohsaki, Makoto Imase
2006 B conf
MASCOTS
Hiroyuki Ohsaki, Gomez Oscar, Makoto Imase
2006 conf
ICC
Osamu Honda, Hiroyuki Ohsaki, Makoto Imase, Junichi Murayama, Kazuhiro Matsuda
2006 J jnl
IEICE Trans. Commun.
Yoshitaka Ohtaki, Naoki Wakamiya, Masayuki Murata, Makoto Imase
2005 B conf
DCOSS
Naoki Wakamiya, Yoshitaka Ohtaki, Masayuki Murata, Makoto Imase
2005 conf
IMSA
Osamu Honda, Hiroyuki Ohsaki, Makoto Imase, Yoshihiro Hara, Masahiro Maruyoshi, Kazuhiro Matsuda
2005 conf
ICN (1)
Hiroyuki Ohsaki, Shinpei Yoshida, Makoto Imase
2005 conf
SAINT
Hiroyuki Ohsaki, Juñya Ujiie, Makoto Imase
2005 C conf
CCA
Hiroyuki Ohsaki, Soushi Watanabe, Makoto Imase
2005 B conf
ICCCN
Osamu Honda, Hiroyuki Ohsaki, Makoto Imase, Junichi Murayama, Kazuhiro Matsuda
2004 conf
ICOIN
Yoshihiro Hara, Hiroyuki Ohsaki, Makoto Imase, Yoshitake Tajima, Masahiro Maruyoshi, Junichi Murayama
2004 conf
SAINT Workshops
Hiroyuki Ohsaki, Makoto Imase
2004 conf
Communications, Internet, and Information Technology
Yoshitaka Ohtaki, Naoki Wakamiya, Masayuki Murata, Makoto Imase
2003 conf
SAINT
Makoto Imase
2002 conf
NETWORKING Workshops
Keisuke Ishibashi, Masaki Aida, Makoto Imase
1996 J jnl
Discret. Appl. Math.
Terunao Soneoka, Makoto Imase, Yoshifumi Manabe
1995 conf
ICSM
Kouki Nakanishi, Takashi Arano, Makoto Imase
1992 J jnl
J. Parallel Distributed Comput.
Yoshifumi Manabe, Makoto Imase
1991 J jnl
SIAM J. Discret. Math.
Makoto Imase, Bernard M. Waxman
1990 J jnl
Discret. Appl. Math.
Terunao Soneoka, Hiroshi Nakada, Makoto Imase
1988 J jnl
Inf. Process. Lett.
Makoto Imase, Yoshifumi Manabe
1988 J jnl
Inf. Process. Lett.
Bernard M. Waxman, Makoto Imase
1987 J jnl
Discret. Math.
Terunao Soneoka, Hiroshi Nakada, Makoto Imase, Claudine Peyrat
1986 J jnl
Syst. Comput. Jpn.
Makoto Imase, Terunao Soneoka, Keiji Okada
1985 J jnl
IEEE Trans. Computers
Makoto Imase, Terunao Soneoka, Keiji Okada
1983 J jnl
IEEE Trans. Computers
Makoto Imase, Masaki Itoh
1982 J jnl
IEEE Trans. Commun.
Kenichi Mase, Makoto Imase
1981 J jnl
IEEE Trans. Computers
Makoto Imase, Masaki Itoh
redb/extractors/pe_extractors/pe_resources.py
← Index redb/extractors/pe_extractors/pe_resources.py python
from hashlib import sha256
import inspect
from datetime import datetime, timezone
from typing import Any

import magic
from magika import Magika
import pefile
from pefile import UnicodeStringWrapperPostProcessor

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PEResource


class PEResourceExtractor(PEExtractor):

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

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

    def _extract_resources(self):
        """
        Returns:
        resources: a list of dictionaries, one per each resources type found.
                    each dictionary the key represents the name of the content,
                    which is the value itself.
                    Empty list if no resources present.
        """
        self.log.debug(inspect.currentframe().f_code.co_name)
        resources_list = []
        try:
            if hasattr(self.pe, "DIRECTORY_ENTRY_RESOURCE"):
                for resource_type in self.pe.DIRECTORY_ENTRY_RESOURCE.entries:
                    # if resource_type.name is not None:
                    #     name = resource_type.name
                    # else:
                    #     name = pefile.RESOURCE_TYPE.get(resource_type.struct.Id)
                    # if not name:
                    #     name = resource_type.struct.Id
                    name = (
                        resource_type.name
                        if resource_type.name is not None
                        else pefile.RESOURCE_TYPE.get(resource_type.struct.Id)
                    )
                    if isinstance(name, UnicodeStringWrapperPostProcessor):
                        name = name.decode()
                    try:
                        if hasattr(resource_type, "directory"):
                            for resource_id in resource_type.directory.entries:
                                if hasattr(resource_id, "directory"):
                                    for resource_lang in resource_id.directory.entries:
                                        rsrc_data = self.pe.get_data(
                                            resource_lang.data.struct.OffsetToData,
                                            resource_lang.data.struct.Size,
                                        )
                                        file_type = magic.from_buffer(rsrc_data)
                                        magik = Magika().identify_bytes(rsrc_data).output.label

                                        rsrc_entropy = (
                                            "%.2f"
                                            % pefile.SectionStructure.entropy_H(
                                                self.pe, rsrc_data
                                            )
                                        )
                                        rsrc_sha256 = sha256(rsrc_data).hexdigest()
                                        lang = pefile.LANG.get(
                                            resource_lang.data.lang, "*unknown*"
                                        )
                                        sublang = pefile.get_sublang_name_for_lang(
                                            resource_lang.data.lang,
                                            resource_lang.data.sublang,
                                        )
                                        pe_resource = PEResource(
                                            _id=rsrc_sha256,
                                            resource_type=name,
                                            resource_entropy=rsrc_entropy,
                                            resource_sha256=rsrc_sha256,
                                            resource_filetype=file_type,
                                            resource_magika=magik,
                                            resource_language=lang,
                                            resource_rva=resource_lang.data.struct.OffsetToData,
                                            resource_size=resource_lang.data.struct.Size,
                                            resource_sub_lang=sublang,
                                        )
                                        resources_list.append(pe_resource)
                    except Exception as e:
                        self.log.warning(
                            f"Continue after Error in {self.hash.sha256}: {resource_type.name} "
                            f"Exception: {e}",
                            stack_info=True,
                        )
                        # resources_list.append({f"{e} - {resource_type.name}"})
                        continue
        except Exception as e:
            self.log.exception(
                f"Extract exports error {self.hash.sha256} Exception: {e}"
            )
        self.log.debug(f"Resource list {resources_list}")
        return resources_list

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            resources = self._extract_resources()
            # self.export_to_elastic(resources)  # Let the exporters handle this
            return resources
        except Exception as e:
            self.log.error(f"Extract resources error {self.hash.sha256} Exception: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            resources = self.extract()
            if resources is None:
                return None
            
            data = []
            current_time = datetime.now(timezone.utc)
            
            for resource in resources:
                data.append([
                    self.sha256,                    # sha256
                    self.md5,                       # md5
                    self.sha1,                      # sha1
                    resource.resource_type,         # resource_type
                    resource.resource_entropy,      # resource_entropy
                    resource.resource_sha256,       # resource_sha256
                    resource.resource_filetype,     # resource_filetype
                    resource.resource_magika,       # resource_magika
                    resource.resource_language,     # resource_language
                    resource.resource_sub_lang,     # resource_sub_lang
                    resource.resource_size,         # resource_size
                    resource.resource_rva,          # resource_rva
                    current_time                    # analysis_date
                ])
            
            column_names = [
                'sha256', 'md5', 'sha1', 'resource_type', 'resource_entropy',
                'resource_sha256', 'resource_filetype', 'resource_magika',
                'resource_language', 'resource_sub_lang', 'resource_size',
                'resource_rva', 'analysis_date'
            ]
            
            if not data:
                return None

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

            return (data, column_names, column_type_names)

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