Rachael D. Seidler

17 papers Journal 16Unranked 1
YearRankTypeTitle / Venue / Authors
2025 J jnl
NeuroImage
Sumire D. Sato, Valay A. Shah, Tyler Fettrow, Kristina G. Hall, Grant D. Tays, Erta Cenko, Arkaprava Roy, David J. Clark, Daniel P. Ferris, Chris J. Hass, Todd M. Manini, Rachael D. Seidler
2023 J jnl
NeuroImage
Heather R. McGregor, Jessica K. Lee, Edwin R. Mulder, Yiri E. De Dios, Nichole E. Beltran, Scott J. Wood, Jacob J. Bloomberg, Ajitkumar P. Mulavara, Rachael D. Seidler
2022 J jnl
Sensors
Tian Bao, Fatemeh Noohi, Catherine Kinnaird, Wendy Carender, Vincent J. Barone, Geeta Peethambaran, Susan L. Whitney, Rachael D. Seidler, Kathleen H. Sienko
2021 J jnl
NeuroImage
Heather R. McGregor, Jessica K. Lee, Edwin R. Mulder, Yiri De Dios, Nichole E. Beltran, Igor Kofman, Jacob J. Bloomberg, Ajitkumar P. Mulavara, Rachael D. Seidler
2020 J jnl
NeuroImage
Kaitlin Cassady, Holly C. Gagnon, Erin Freiburger, Poortata Lalwani, Molly Simmonite, Denise C. Park, Scott J. Peltier, Stephan F. Taylor, Daniel H. Weissman, Rachael D. Seidler, Thad A. Polk
2019 J jnl
NeuroImage
Poortata Lalwani, Holly C. Gagnon, Kaitlin Cassady, Molly Simmonite, Scott Peltier, Rachael D. Seidler, Stephan F. Taylor, Daniel H. Weissman, Thad A. Polk
2019 J jnl
NeuroImage
Kaitlin Cassady, Holly C. Gagnon, Poortata Lalwani, Molly Simmonite, Bradley Foerster, Denise C. Park, Scott J. Peltier, Myria Petrou, Stephan F. Taylor, Daniel H. Weissman, Rachael D. Seidler, Thad A. Polk
2016 J jnl
NeuroImage
Kaitlin Cassady, Vincent Koppelmans, Patricia A. Reuter-Lorenz, Yiri De Dios, Nichole Gadd, Scott J. Wood, Roy Riascos Castenada, Igor Kofman, Jacob J. Bloomberg, Ajitkumar P. Mulavara, Rachael D. Seidler
2015 J jnl
NeuroImage
Rachael D. Seidler, Burak Erdeniz, Vincent Koppelmans, Sarah Hirsiger, Susan Mérillat, Lutz Jäncke
2014 J jnl
Brain Connect.
Jin Bo, Chi-Mei Lee, Youngbin Kwak, Scott Peltier, Jessica A. Bernard, Martin Buschkuehl, Susanne M. Jaeggi, Jillian Lee Wiggins, John Jonides, Christopher S. Monk, Rachael D. Seidler
2013 J jnl
NeuroImage
Jessica A. Bernard, Scott Peltier, Jillian Lee Wiggins, Susanne M. Jaeggi, Martin Buschkuehl, Brett W. Fling, Youngbin Kwak, John Jonides, Christopher S. Monk, Rachael D. Seidler
2013 conf
World Haptics
Dongwon Kim, Brandon J. Johnson, R. Brent Gillespie, Rachael D. Seidler
2011 J jnl
J. Cogn. Neurosci.
Brett W. Fling, Christine M. Walsh, Ashley S. Bangert, Patricia A. Reuter-Lorenz, Robert C. Welsh, Rachael D. Seidler
2011 J jnl
J. Cogn. Neurosci.
Joaquin A. Anguera, Patricia A. Reuter-Lorenz, Daniel T. Willingham, Rachael D. Seidler
2011 J jnl
NeuroImage
Jin Bo, S. J. Peltier, Douglas C. Noll, Rachael D. Seidler
2010 J jnl
J. Cogn. Neurosci.
Joaquin A. Anguera, Patricia A. Reuter-Lorenz, Daniel T. Willingham, Rachael D. Seidler
2004 J jnl
NeuroImage
Rachael D. Seidler, Douglas C. Noll, G. Thiers
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"