Osamu Abe

48 papers A* 1Misc 1Journal 40Unranked 6
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Imaging Inform. Medicine
Koichiro Yasaka, Takuto Nomura, Jun Kamohara, Hiroshi Hirakawa, Takatoshi Kubo, Shigeru Kiryu, Osamu Abe
2025 J jnl
J. Imaging Inform. Medicine
Koichiro Yasaka, Jun Kanzawa, Noriko Kanemaru, Saori Koshino, Osamu Abe
2025 J jnl
CoRR
Yosuke Yamagishi, Tomohiro Kikuchi, Shouhei Hanaoka, Takeharu Yoshikawa, Osamu Abe
2025 conf
Agentic AI/CREATE/Clinical MLLMs@MICCAI
Yosuke Yamagishi, Shouhei Hanaoka, Yuta Nakamura, Tomohiro Kikuchi, Akinobu Shimizu, Takeharu Yoshikawa, Osamu Abe
2025 J jnl
J. Imaging Inform. Medicine
Noriko Kanemaru, Koichiro Yasaka, Nana Fujita, Jun Kanzawa, Osamu Abe
2024 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Shouhei Hanaoka, Yukihiro Nomura, Takeharu Yoshikawa, Takahiro Nakao, Tomomi Takenaga, Hirotaka Matsuzaki, Nobutake Yamamichi, Osamu Abe
2024 J jnl
CoRR
Yosuke Yamagishi, Yuta Nakamura, Tomohiro Kikuchi, Yuki Sonoda, Hiroshi Hirakawa, Shintaro Kano, Satoshi Nakamura, Shouhei Hanaoka, Takeharu Yoshikawa, Osamu Abe
2024 J jnl
J. Imaging Inform. Medicine
Koichiro Yasaka, Hiroyuki Saigusa, Osamu Abe
2024 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Md. Ashraful Alam, Shouhei Hanaoka, Yukihiro Nomura, Tomohiro Kikuchi, Takahiro Nakao, Tomomi Takenaga, Naoto Hayashi, Takeharu Yoshikawa, Osamu Abe
2024 J jnl
J. Imaging Inform. Medicine
Koichiro Yasaka, Hiroyuki Akai, Shimpei Kato, Taku Tajima, Naoki Yoshioka, Toshihiro Furuta, Hajime Kageyama, Yui Toda, Masaaki Akahane, Kuni Ohtomo, Osamu Abe, Shigeru Kiryu
2024 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Yukihiro Nomura, Shouhei Hanaoka, Naoto Hayashi, Takeharu Yoshikawa, Saori Koshino, Chiaki Sato, Momoko Tatsuta, Yuya Tanaka, Shintaro Kano, Moto Nakaya, Shohei Inui, Masashi Kusakabe, Takahiro Nakao, Soichiro Miki, Takeyuki Watadani, Ryusuke Nakaoka, Akinobu Shimizu, Osamu Abe
2024 conf
IVSP
Shogo Kodera, Wahyu Rahmaniar, Hiroko Oshibe, Ze Jin, Takeyuki Watadani, Osamu Abe, Kenji Suzuki
2024 J jnl
J. Imaging Inform. Medicine
Koichiro Yasaka, Shunichi Uehara, Shimpei Kato, Yusuke Watanabe, Taku Tajima, Hiroyuki Akai, Naoki Yoshioka, Masaaki Akahane, Kuni Ohtomo, Osamu Abe, Shigeru Kiryu
2024 J jnl
CoRR
Yosuke Yamagishi, Shouhei Hanaoka, Tomohiro Kikuchi, Takahiro Nakao, Yuta Nakamura, Yukihiro Nomura, Soichiro Miki, Takeharu Yoshikawa, Osamu Abe
2023 J jnl
BMC Medical Imaging
Hiroyuki Akai, Koichiro Yasaka, Haruto Sugawara, Taku Tajima, Masaru Kamitani, Toshihiro Furuta, Masaaki Akahane, Naoki Yoshioka, Kuni Ohtomo, Osamu Abe, Shigeru Kiryu
2022 J jnl
CoRR
Hisaichi Shibata, Shouhei Hanaoka, Yukihiro Nomura, Naoto Hayashi, Osamu Abe
2022 J jnl
CoRR
Hisaichi Shibata, Shouhei Hanaoka, Yang Cao, Masatoshi Yoshikawa, Tomomi Takenaga, Yukihiro Nomura, Naoto Hayashi, Osamu Abe
2022 J jnl
NeuroImage
Shiori Amemiya, Hidemasa Takao, Yusuke Watanabe, Satoru Miyawaki, Satoshi Koizumi, Nobuhito Saito, Osamu Abe
2022 J jnl
NeuroImage
Shohei Fujita, Akifumi Hagiwara, Naoyuki Takei, Issei Fukunaga, Yasuhiro Hagiwara, Takashi Ogawa, Taku Hatano, Dan Rettmann, Suchandrima Banerjee, Ken-Pin Hwang, Shiori Amemiya, Koji Kamagata, Nobutaka Hattori, Osamu Abe, Shigeki Aoki
2021 J jnl
BMC Medical Imaging
Haruto Sugawara, Hirokazu Watanabe, Akira Kunimatsu, Osamu Abe, Shun-ichi Watanabe, Yasushi Yatabe, Masahiko Kusumoto
2021 J jnl
BMC Medical Informatics Decis. Mak.
Yuta Nakamura, Shouhei Hanaoka, Yukihiro Nomura, Takahiro Nakao, Soichiro Miki, Takeyuki Watadani, Takeharu Yoshikawa, Naoto Hayashi, Osamu Abe
2021 conf
MedInfo
Yuta Nakamura, Shouhei Hanaoka, Yukihiro Nomura, Naoto Hayashi, Osamu Abe, Shunrato Yada, Shoko Wakamiya, Eiji Aramaki
2021 J jnl
NeuroImage
Ryo Kurokawa, Kouhei Kamiya, Shinsuke Koike, Moto Nakaya, Akiko Uematsu, Saori C. Tanaka, Koji Kamagata, Naohiro Okada, Kentaro Morita, Kiyoto Kasai, Osamu Abe
2021 conf
Computer-Aided Diagnosis
Zhongyang Lu, Masahiro Oda, Yuichiro Hayashi, Tao Hu, Hayato Itoh, Takeyuki Watadani, Osamu Abe, Masahiro Hashimoto, Masahiro Jinzaki, Kensaku Mori
2021 J jnl
CoRR
Yuta Nakamura, Shouhei Hanaoka, Yukihiro Nomura, Naoto Hayashi, Osamu Abe, Shuntaro Yada, Shoko Wakamiya, Eiji Aramaki
2021 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Tomomi Takenaga, Shouhei Hanaoka, Yukihiro Nomura, Takahiro Nakao, Hisaichi Shibata, Soichiro Miki, Takeharu Yoshikawa, Naoto Hayashi, Osamu Abe
2021 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Yukihiro Nomura, Shouhei Hanaoka, Tomomi Takenaga, Takahiro Nakao, Hisaichi Shibata, Soichiro Miki, Takeharu Yoshikawa, Takeyuki Watadani, Naoto Hayashi, Osamu Abe
2021 J jnl
J. Digit. Imaging
Takahiro Nakao, Shouhei Hanaoka, Yukihiro Nomura, Masaki Murata, Tomomi Takenaga, Soichiro Miki, Takeyuki Watadani, Takeharu Yoshikawa, Naoto Hayashi, Osamu Abe
2021 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Hisaichi Shibata, Shouhei Hanaoka, Yukihiro Nomura, Takahiro Nakao, Issei Sato, Daisuke Sato, Naoto Hayashi, Osamu Abe
2021 J jnl
CoRR
Hisaichi Shibata, Shouhei Hanaoka, Yukihiro Nomura, Takahiro Nakao, Tomomi Takenaga, Naoto Hayashi, Osamu Abe
2020 J jnl
CoRR
Hisaichi Shibata, Shouhei Hanaoka, Yukihiro Nomura, Takahiro Nakao, Issei Sato, Naoto Hayashi, Osamu Abe
2020 J jnl
J. Supercomput.
Yukihiro Nomura, Issei Sato, Toshihiro Hanawa, Shouhei Hanaoka, Takahiro Nakao, Tomomi Takenaga, Tetsuya Hoshino, Yuji Sekiya, Soichiro Miki, Takeharu Yoshikawa, Naoto Hayashi, Osamu Abe
2020 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Yukihiro Nomura, Soichiro Miki, Naoto Hayashi, Shouhei Hanaoka, Issei Sato, Takeharu Yoshikawa, Yoshitaka Masutani, Osamu Abe
2020 J jnl
CoRR
Hisaichi Shibata, Shouhei Hanaoka, Yukihiro Nomura, Naoto Hayashi, Osamu Abe
2019 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Tomomi Takenaga, Shouhei Hanaoka, Yukihiro Nomura, Mitsutaka Nemoto, Masaki Murata, Takahiro Nakao, Soichiro Miki, Takeharu Yoshikawa, Naoto Hayashi, Osamu Abe
2019 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Shouhei Hanaoka, Yukihiro Nomura, Tomomi Takenaga, Masaki Murata, Takahiro Nakao, Soichiro Miki, Takeharu Yoshikawa, Naoto Hayashi, Osamu Abe, Akinobu Shimizu
2018 conf
Computer-Aided Diagnosis
Daisuke Sato, Shouhei Hanaoka, Yukihiro Nomura, Tomomi Takenaga, Soichiro Miki, Takeharu Yoshikawa, Naoto Hayashi, Osamu Abe
2018 A* conf
KDD
Issei Sato, Yukihiro Nomura, Shouhei Hanaoka, Soichiro Miki, Naoto Hayashi, Osamu Abe, Yoshitaka Masutani
2014 J jnl
NeuroImage
Satoshi Hirose, Koji Jimura, Akira Kunimatsu, Osamu Abe, Kuni Ohtomo, Yasushi Miyashita, Seiki Konishi
2012 J jnl
Int. J. Autom. Technol.
Osamu Abe, Tetsuhiro Tsukiji, Takeshi Hara, Kazutoshi Yasunaga
2012 J jnl
J. Digit. Imaging
Masami Goto, Tosiaki Miyati, Osamu Abe, Hidemasa Takao, Tomomi Kurosu, Naoto Hayashi, Shigeki Aoki, Harushi Mori, Akira Kunimatsu, Kenji Ino, Keiichi Yano, Kuni Ohtomo
2010 J jnl
NeuroImage
Hiroko M. Kimura, Satoshi Hirose, Akira Kunimatsu, Junichi Chikazoe, Koji Jimura, Takamitsu Watanabe, Osamu Abe, Kuni Ohtomo, Yasushi Miyashita, Seiki Konishi
2009 J jnl
NeuroImage
Hiroki Sasaki, Osamu Abe, Hidenori Yamasue, Rin Fukuda, Haruyasu Yamada, Kunio Takei, Motomu Suga, Hidemasa Takao, Kiyoto Kasai, Shigeki Aoki, Kuni Ohtomo
2006 conf
ISBI
Yoshitaka Masutani, Shigeki Aoki, Osamu Abe, Kuni Ohtomo
2005 J jnl
NeuroImage
Tsuyoshi Araki, Kiyoto Kasai, Hidenori Yamasue, Nobumasa Kato, Noriko Kudo, Toshiyuki Ohtani, Kazuyuki Nakagome, Kenji Kirihara, Haruyasu Yamada, Osamu Abe, Akira Iwanami
2005 Misc conf
ISVC
Yoshitaka Masutani, Shigeki Aoki, Osamu Abe, Mariko Yoshida, Haruyasu Yamada, Harushi Mori, Kenji Ino, Kuni Ohtomo
2004 J jnl
NeuroImage
Hidenori Yamasue, Haruyasu Yamada, Masato Yumoto, Satoru Kamio, Noriko Kudo, Miki Uetsuki, Osamu Abe, Rin Fukuda, Shigeki Aoki, Kuni Ohtomo, Akira Iwanami, Nobumasa Kato, Kiyoto Kasai
1986 J jnl
IEEE Trans. Syst. Man Cybern.
Sadaaki Miyamoto, Ko Oi, Osamu Abe, Atsuo Katsuya, Kazuhiko Nakayama
redb/extractors/malcontent.py
← Index redb/extractors/malcontent.py python
import inspect
import json
import subprocess
from typing import Any
from datetime import datetime, timezone

from redb.extractors.enum import Tag
from redb.models.dataclasses import Malcontent
from redb.extractors.extractor import Extractor
from dotenv import load_dotenv
import os

load_dotenv(override=True)


class MalcontentExtractor(Extractor):
    """
    Extractor for malcontent tool from chainguard-dev/malcontent.

    Malcontent discovers supply-chain compromises through context, differential
    analysis, and 14,000+ YARA rules. It analyzes binaries and code to detect
    malicious content and suspicious behavioral patterns.

    Binary can be extracted from Docker image:
        docker cp $(docker create cgr.dev/chainguard/malcontent:latest):/usr/bin/mal /usr/local/bin/mal

    Stores full JSON output for materialized view extraction.
    """

    # Cache version at class level to avoid repeated subprocess calls
    _cached_version = None

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious
        )
        self.malcontent = None

    @classmethod
    def _get_malcontent_version(cls, log) -> str:
        """Get malcontent version, cached at class level."""
        if cls._cached_version is not None:
            return cls._cached_version

        malcontent_path = os.getenv("MALCONTENT_PATH", "/usr/local/bin/mal")
        try:
            result = subprocess.run(
                [malcontent_path, "--version"],
                capture_output=True,
                text=True,
                timeout=10
            )
            version_output = result.stdout.strip()
            if result.returncode == 0 and version_output:
                # Parse "malcontent version v1.21.5" -> "1.21.5"
                if version_output.startswith("malcontent version v"):
                    version_output = version_output[len("malcontent version v"):]
                elif version_output.startswith("malcontent version "):
                    version_output = version_output[len("malcontent version "):]
                cls._cached_version = version_output
            else:
                cls._cached_version = "unknown"
        except Exception as e:
            log.warning(f"Could not get malcontent version: {e}")
            cls._cached_version = "unknown"

        return cls._cached_version

    def _extract_malcontent(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        TIMEOUT = int(os.getenv("MALCONTENT_TIMEOUT", "300"))
        malcontent_path = os.getenv("MALCONTENT_PATH", "/usr/local/bin/mal")

        malcontent_command = [malcontent_path, "analyze", "--format=json", self.filepath]

        import signal

        try:
            process = subprocess.Popen(
                malcontent_command,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True,
                preexec_fn=os.setsid
            )

            try:
                stdout, stderr = process.communicate(timeout=TIMEOUT)
                if process.returncode != 0:
                    self.log.error(f"Error running malcontent, return code: {process.returncode}, stderr: {stderr}")
                    return {}
            except subprocess.TimeoutExpired:
                self.log.warning(f"The malcontent command timed out after {TIMEOUT} seconds, terminating process group")
                try:
                    os.killpg(process.pid, signal.SIGTERM)
                    try:
                        process.wait(timeout=3)
                    except subprocess.TimeoutExpired:
                        self.log.warning("Process didn't terminate with SIGTERM, sending SIGKILL")
                        os.killpg(process.pid, signal.SIGKILL)
                    process.wait()
                except (ProcessLookupError, OSError) as e:
                    self.log.warning(f"Error while killing process: {e}")
                return {}

            try:
                malcontent_output = json.loads(stdout)
            except json.JSONDecodeError as e:
                self.log.error(f"Error parsing malcontent output: {e}")
                return {}

            # Unwrap the Files/<path> structure to get the inner content
            # Structure is: {"Files": {"/path/to/file": {<actual content>}}}
            files_dict = malcontent_output.get("Files", {})
            if not files_dict:
                self.log.warning("Malcontent output has no 'Files' key")
                return {}

            # Get the first (and only) file's content
            file_content = next(iter(files_dict.values()), {})
            if not file_content:
                self.log.warning("Malcontent output has empty file content")
                return {}

            # Extract risk score and level from the unwrapped content
            risk_score = file_content.get("RiskScore", 0)
            risk_level = file_content.get("RiskLevel", "")

            version = self._get_malcontent_version(self.log)

            self.malcontent = Malcontent(
                malcontent_dump=json.dumps(file_content),
                version=version,
                risk_score=risk_score,
                risk_level=risk_level
            )
            self.log.debug(f"Malcontent analysis complete, version={version}, risk={risk_level}({risk_score})")

        except Exception as e:
            self.log.error(f"Unexpected error in malcontent extraction: {str(e)}")
            if 'process' in locals() and process.poll() is None:
                try:
                    os.killpg(process.pid, signal.SIGKILL)
                    process.wait()
                except:
                    pass
            return {}

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ClickHouseExporter":
            current_time = datetime.now(timezone.utc)

            data = [[
                self.sha256,
                current_time,
                self.malcontent.version,
                self.malcontent.risk_score,
                self.malcontent.risk_level,
                self.malcontent.malcontent_dump
            ]]

            column_names = [
                'sha256', 'analysis_date',
                'malcontent_version', 'malcontent_risk_score', 'malcontent_risk_level',
                'malcontent_json'
            ]

            column_type_names = [
                'FixedString(64)',
                'DateTime64(3, \'UTC\')',
                'LowCardinality(String)', 'UInt8', 'LowCardinality(String)',
                'JSON'
            ]

            return (data, column_names, column_type_names)

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

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            self._extract_malcontent()
            return self.malcontent
        except Exception as e:
            self.log.error(f"Error extracting malcontent: {e}")
            return None

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