Ingo Neumann

26 papers C 6Journal 14Unranked 5
YearRankTypeTitle / Venue / Authors
2023 C conf
IPIN
Dominik Ernst, Sören Vogel, Ingo Neumann, Hamza Alkhatib
2022 C conf
FUSION
Dominik Ernst, Hamza Alkhatib, Ingo Neumann, Sören Vogel
2022 J jnl
Remote. Sens.
Frederic Hake, Leonard Göttert, Ingo Neumann, Hamza Alkhatib
2021 J jnl
Remote. Sens.
Rozhin Moftizadeh, Sören Vogel, Ingo Neumann, Johannes Bureick, Hamza Alkhatib
2021 J jnl
Remote. Sens.
Bahareh Mohammadivojdan, Marco Brockmeyer, Cord-Hinrich Jahn, Ingo Neumann, Hamza Alkhatib
2020 J jnl
Remote. Sens.
Wei Xu, Ingo Neumann
2020 J jnl
Remote. Sens.
Ulrich Stenz, Jens Hartmann, Jens-André Paffenholz, Ingo Neumann
2020 C conf
FUSION
Rozhin Moftizadeh, Johannes Bureick, Sören Vogel, Ingo Neumann, Hamza Alkhatib
2020 J jnl
Sensors
Wei Xu, Xiangyu Bao, Genglin Chen, Ingo Neumann
2019 J jnl
Sensors
Sören Vogel, Hamza Alkhatib, Johannes Bureick, Rozhin Moftizadeh, Ingo Neumann
2019 J jnl
Reliab. Eng. Syst. Saf.
Yi Zhang, António Topa Gomes, Michael Beer, Ingo Neumann, Udo Nackenhorst, Chul-Woo Kim
2018 C conf
FUSION
Ligang Sun, Hamza Alkhatib, Jens-André Paffenholz, Ingo Neumann
2018 J jnl
Sensors
Steffen Schön, Claus Brenner, Hamza Alkhatib, Max Coenen, Hani Dbouk, Nicolas Garcia Fernandez, Colin Fischer, Christian Heipke, Katja Lohmann, Ingo Neumann, Uyen Nguyen, Jens-André Paffenholz, Torben Peters, Franz Rottensteiner, Julia Schachtschneider, Monika Sester, Ligang Sun, Sören Vogel, Raphael Voges, Bernardo Wagner
2018 C conf
FUSION
Sören Vogel, Hamza Alkhatib, Ingo Neumann
2018 J jnl
Sensors
Gaël Kermarrec, Hamza Alkhatib, Ingo Neumann
2018 conf
ECONVN
Michael Beer, Zitong Gong, Ingo Neumann, Songsak Sriboonchitta, Vladik Kreinovich
2018 conf
ECONVN
Stephen Schön, Gaël Kermarrec, Boris Kargoll, Ingo Neumann, Olga Kosheleva, Vladik Kreinovich
2017 J jnl
Sensors
Ulrich Stenz, Jens Hartmann, Jens-André Paffenholz, Ingo Neumann
2017 J jnl
Sensors
Dirk Dennig, Johannes Bureick, Johannes Link, Dmitri Diener, Christian Hesse, Ingo Neumann
2017 conf
NAFIPS
Hamza Alkhatib, Boris Kargoll, Ingo Neumann, Vladik Kreinovich
2017 J jnl
J. Sensors
Xiangyang Xu, Xin Zhao, Hao Yang, Ingo Neumann
2017 conf
NAFIPS
Ligang Sun, Hani Dbouk, Ingo Neumann, Steffen Schön, Vladik Kreinovich
2016 C conf
IPIN
Sören Vogel, Hamza Alkhatib, Ingo Neumann
2014 J jnl
Sensors
Hao Yang, Xiangyang Xu, Ingo Neumann
2007 conf
EUSIPCO
Ingo Neumann, Hansjörg Kutterer
1981
Ingo Neumann
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"