Makoto Murakami

31 papers A 1B 1C 1Misc 5Journal 8Unranked 15
YearRankTypeTitle / Venue / Authors
2025 conf
IVSP
Makoto Murakami, Kazuki Yamamoto
2023 conf
PCCNT
Wataru Yaguchi, Makoto Murakami
2022 conf
ICDSP
Makoto Murakami, Takahiro Ikezawa
2021 conf
ICDSP
Ayumi Shiobara, Makoto Murakami
2019 conf
ICBSP
Makoto Murakami, Haruki Kawanaka, Koji Oguri
2018 conf
ICOIN
Masafumi Katoh, Masahiko Murakami, Akiko Yamada, Masaaki Kawai, Motoyoshi Sekiya, Sumie Morita, Makoto Murakami
2016 conf
SITIS
Yuma Hijioka, Makoto Murakami, Tadahiko Kimoto
2014 J jnl
Int. J. Autom. Technol.
Ryo Koike, Ryo Kumakura, Takashi Arai, Eishiro Uchishiba, Makoto Murakami, Takahisa Sagara, Yasuhiro Kakinuma
2013 B conf
ICMI
Reina Aramaki, Makoto Murakami
2012 J jnl
Inf. Media Technol.
Futoshi Sugimoto, Makoto Murakami, Chieko Kato
2012 J jnl
J. Inf. Process.
Futoshi Sugimoto, Makoto Murakami, Chieko Kato
2011 conf
NBiS
Motoi Yamagiwa, Katsuyoshi Matsumoto, Makoto Murakami, Minoru Uehara
2011 J jnl
Int. J. Space Based Situated Comput.
Motoi Yamagiwa, Makoto Murakami, Minoru Uehara
2010 conf
NBiS
Motoi Yamagiwa, Makoto Murakami, Minoru Uehara
2010 J jnl
Comput. Syst. Sci. Eng.
Motoi Yamagiwa, Minoru Uehara, Makoto Murakami
2010 J jnl
J. Networks
Makoto Murakami
2010 conf
ACIS-ICIS
Yoshito Ogawa, Jungo Katsuyama, Takahiro Miyajima, Katsuhiko Shirai, Makoto Murakami
2010 J jnl
Comput. Syst. Sci. Eng.
Makoto Murakami, Motoi Yamagiwa, Minoru Uehara
2010 J jnl
JOCN
Makoto Murakami, Takeshi Seki, Kazuhiro Oda
2009 conf
NBiS
Akihiro Tomono, Minoru Uehara, Makoto Murakami, Motoi Yamagiwa
2009 conf
NBiS
Motoi Yamagiwa, Minoru Uehara, Makoto Murakami
2009 Misc conf
CISIS
Satoshi Ushiyama, Kazunori Matsui, Motoi Yamagiwa, Makoto Murakami, Minoru Uehara, Katsuhiko Shirai
2009 conf
NBiS
Makoto Murakami, Motoi Yamagiwa, Minoru Uehara, Satoshi Ushiyama, Katsuhiko Shirai
2009 Misc conf
CISIS
Kenichi Tanaka, Minoru Uehara, Makoto Murakami, Motoi Yamagiwa
2009 Misc conf
CISIS
Erianto Chai, Minoru Uehara, Makoto Murakami, Motoi Yamagiwa
2009 Misc conf
CISIS
Katsuyoshi Matsumoto, Minoru Uehara, Motoi Yamagiwa, Makoto Murakami, Hideki Mori
2009 Misc conf
CISIS
Motoi Yamagiwa, Eiji Kikuchi, Minoru Uehara, Makoto Murakami, Masahide Yoneyama
2009 conf
NBiS
Kenichi Tanaka, Minoru Uehara, Makoto Murakami, Motoi Yamagiwa
2005 conf
EuroIMSA
Takehiro Morino, Daiki Osafune, Takayuki Itano, Katsuhiko Shirai, Makoto Murakami
2002 C conf
HIS
Makoto Murakami, Masahide Yoneyama, Katsuhiko Shirai
2000 A conf
IEEE International Conference on Multimedia and Expo (I)
Makoto Murakami, Masahide Yoneyama, Katsuhiko Shirai
redb/extractors/apk_extractors/apk_native_libs.py
← Index redb/extractors/apk_extractors/apk_native_libs.py python
import fnmatch
import hashlib
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.apk_extractor import APKExtractor
from redb.models.dataclasses import APKNativeLib

# Known packer/protector native library names
KNOWN_PACKER_LIBS = {
    # Jiagu (360/Qihoo)
    "libjiagu.so", "libjiagu_a64.so", "libjiagu_x86.so", "libjiagu_x64.so",
    # Bangcle/SecNeo
    "libsecexe.so", "libsecmain.so", "libSecShell.so",
    # Baidu
    "libbaiduprotect.so",
    # Tencent (Legu)
    "libtxAppProtect.so", "libBugly.so",
    # iJiami
    "libexec.so", "libexecmain.so",
    # Alibaba
    "libmobisec.so", "libaliprotect.so",
    # APKProtect
    "libAPKProtect.so",
    # Pangxie (Pangolin)
    "libdexjni.so",
    # DexProtector
    "libdexprotector.so",
    # AppSolid
    "libAppSolid.so",
    # Kiwisec
    "libkwscmm.so",
    # DingXiang
    "libx3g.so",
    # NQ Shield
    "libnqshield.so",
    # Generic / other
    "libprotectClass.so",
    "libDexHelper.so",
    "libdexloader.so",
    "libfdog.so",
}

# Glob-style patterns for packer libs (e.g. libshella-*.so)
KNOWN_PACKER_PATTERNS = [
    "libshella-*.so",
    "libshell-super.*.so",
]


def is_known_packer_lib(filename):
    """Check if a native library filename matches known packer signatures."""
    if filename in KNOWN_PACKER_LIBS:
        return True
    for pattern in KNOWN_PACKER_PATTERNS:
        if fnmatch.fnmatch(filename, pattern):
            return True
    return False


class APKNativeLibExtractor(APKExtractor):

    def __init__(
        self, filepath, log, exporters=None, index_prefix=None,
        known_benign=False, known_malicious=False,
        apk=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix,
            known_benign, known_malicious, apk,
        )
        self.native_libs = []
        self.abis = set()
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def extract(self):
        if not self._is_valid_apk():
            self.log.error(f"Invalid APK for {self.hash.sha256}")
            return None

        self.native_libs = []
        self.abis = set()

        zf = self._get_zip_file()
        if not zf:
            return None

        with zf:
            for info in zf.infolist():
                if not (info.filename.startswith("lib/") and info.filename.endswith(".so")):
                    continue
                parts = info.filename.split("/")
                if len(parts) < 3:
                    continue

                abi = parts[1]
                filename = parts[-1]
                self.abis.add(abi)

                try:
                    data = zf.read(info.filename)
                    lib_sha256 = hashlib.sha256(data).hexdigest()
                except Exception as e:
                    self.log.warning(f"Error reading native lib {info.filename}: {e}")
                    continue

                self.native_libs.append(APKNativeLib(
                    abi=abi,
                    filename=filename,
                    size=info.file_size,
                    sha256=lib_sha256,
                    is_known_packer=is_known_packer_lib(filename),
                ))

        if not self.native_libs:
            return None

        return {
            "native_lib_count": len(self.native_libs),
            "abis": sorted(self.abis),
            "native_libs": self.native_libs,
            "known_packer_libs": [
                lib for lib in self.native_libs if lib.is_known_packer
            ],
        }

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

            current_time = datetime.now(timezone.utc)
            data = []
            for lib in self.native_libs:
                data.append([
                    self.sha256,
                    lib.abi,
                    lib.filename,
                    lib.size,
                    lib.sha256,
                    int(lib.is_known_packer),
                    current_time,
                ])

            column_names = [
                'sha256', 'lib_abi', 'lib_filename', 'lib_size',
                'lib_sha256', 'lib_is_known_packer', 'analysis_date',
            ]

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

            return (data, column_names, column_type_names)

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