Randy C. Paffenroth

91 papers A* 1A 1B 6C 22Misc 6Journal 42Unranked 13
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Quincy Hershey, Randy C. Paffenroth
2025 J jnl
CoRR
Nachiket Bapat, Randy C. Paffenroth, Raghvendra V. Cowlagi
2025 B conf
IEEE Big Data
Shiquan He, Randy C. Paffenroth
2025 C conf
ICMLA
Shiquan He, Randy C. Paffenroth
2025 conf
IEEECONF
Simeon Krastev, Randy C. Paffenroth, Olivia Cava
2025 J jnl
CoRR
Harsh Nilesh Pathak, Randy C. Paffenroth
2025 J jnl
CoRR
Harsh Nilesh Pathak, Randy C. Paffenroth
2025 C conf
ICMLA
Quincy Hershey, Randy C. Paffenroth
2025 conf
ECC
Nachiket Bapat, Randy C. Paffenroth, Raghvendra V. Cowlagi
2025 J jnl
CoRR
Nachiket Bapat, Randy C. Paffenroth, Raghvendra V. Cowlagi
2025 C conf
ICMLA
Steven Tate, Randy C. Paffenroth
2024 C conf
ACC
Nachiket Bapat, Randy C. Paffenroth, Raghvendra V. Cowlagi
2024 C conf
ICMLA
Shiquan He, Randy C. Paffenroth, Olivia Cava, Cate Dunham
2024 C conf
ICMLA
Cate Dunham, Maria Barger, Randy C. Paffenroth, Joshua R. Uzarski, Chia-Wei Tsai
2024 J jnl
CoRR
Quincy Hershey, Randy C. Paffenroth, Harsh Nilesh Pathak, Simon Tavener
2024 C conf
ICMLA
Zheyi Qin, Anura P. Jayasumana, Randy C. Paffenroth
2023 J jnl
Mach. Learn. Knowl. Extr.
Brian Lewandowski, Randy C. Paffenroth
2023 J jnl
CoRR
Alexander M. Moore, Randy C. Paffenroth, Kenneth T. Ngo, Joshua R. Uzarski
2023 C conf
ICMLA
Alexander M. Moore, Randy C. Paffenroth, Ken T. Ngo, Joshua R. Uzarski
2023 J jnl
CoRR
Alexander M. Moore, Randy C. Paffenroth, Ken T. Ngo, Joshua R. Uzarski
2023 C conf
ICMLA
Maria Barger, Randy C. Paffenroth, Harsh Nilesh Pathak
2023 J jnl
J. Cheminformatics
David H. Kenney, Randy C. Paffenroth, Michael T. Timko, Andrew R. Teixeira
2023 Misc conf
ACSSC
Maria Barger, Evan C. Witz, Randy C. Paffenroth
2023 C conf
ICMLA
Quincy Hershey, Randy C. Paffenroth, Harsh Nilesh Pathak
2023 B conf
IEEE Big Data
Zheyi Qin, Randy C. Paffenroth, Anura P. Jayasumana
2023 J jnl
CoRR
Zheyi Qin, Randy C. Paffenroth, Anura P. Jayasumana
2023 B conf
ICCCN
Brian Lewandowski, Randy C. Paffenroth
2023 C conf
ICMLA
Maria Barger, Patrick Bidigare, D. Richard Brown, Ilana Heintz, Randy C. Paffenroth, Evan C. Witz
2023 C conf
ICMLA
Harsh Nilesh Pathak, Randy C. Paffenroth, Quincy Hershey
2022 C conf
ICMLA
Alexander M. Moore, Randy C. Paffenroth, Ken T. Ngo, Joshua R. Uzarski
2022 C conf
ICMLA
Brian Lewandowski, Randy C. Paffenroth
2022 conf
ICDIS
Brian Lewandowski, Randy C. Paffenroth, Kayleigh Campbell
2022 J jnl
Pattern Recognit.
Kelum Gajamannage, Yonggi Park, Randy C. Paffenroth, Anura P. Jayasumana
2021 conf
IEEE BigData
Gunjan Mahindre, Rasika Karkare, Randy C. Paffenroth, Anura P. Jayasumana
2021 J jnl
CoRR
Gunjan Mahindre, Randy C. Paffenroth, Anura P. Jayasumana, Rasika Karkare
2021 J jnl
CoRR
Rasika Karkare, Randy C. Paffenroth, Gunjan Mahindre
2021 J jnl
Pattern Recognit.
Kelum Gajamannage, Randy C. Paffenroth
2021 conf
HPEC
F. Patricia Medina, Randy C. Paffenroth
2021 C conf
ICMLA
Evan C. Witz, Maria Barger, Randy C. Paffenroth
2021 conf
IEEE BigData
Nitish Bahadur, Randy C. Paffenroth
2021 J jnl
CoRR
F. Patricia Medina, Randy C. Paffenroth
2021 J jnl
CoRR
Wenjing Li, Randy C. Paffenroth, David Berthiaume
2021 J jnl
CoRR
Kelum Gajamannage, Yonggi Park, Randy C. Paffenroth, Anura P. Jayasumana
2021 J jnl
CoRR
Matthew L. Weiss, Nathan C. Frey, Siddharth Samsi, Randy C. Paffenroth, Vijay Gadepally
2021 C conf
ICMLA
Wenjing Li, Randy C. Paffenroth, Michael T. Timko, Matthew P. Rando, Avery B. Brown, N. Aaron Deskins
2020 J jnl
CoRR
Kelum Gajamannage, Randy C. Paffenroth, Anura P. Jayasumana
2020 conf
HEALTHINF
Erin Teeple, Caitlin Kuhlman, Brandon Werner, Randy C. Paffenroth, Elke A. Rundensteiner
2020 conf
IEEE BigData
Nitish Bahadur, Randy C. Paffenroth
2020 J jnl
Int. J. Comput. Biol. Drug Des.
Hongzhu Cui, Chong Zhou, Xinyu Dai, Yuting Liang, Randy C. Paffenroth, Dmitry Korkin
2020 C conf
ICMLA
Nitish Bahadur, Randy C. Paffenroth
2020 B conf
LCN
Gunjan Mahindre, Rasika Karkare, Randy C. Paffenroth, Anura P. Jayasumana
2020 Misc conf
ICASSP
Kirty Vedula, Randy C. Paffenroth, D. Richard Brown
2020 Misc conf
ACSSC
Kirty Vedula, Matthew L. Weiss, Randy C. Paffenroth, Joshua R. Uzarski, D. Richard Brown
2020 conf
IEEE BigData
Les Servi, Randy C. Paffenroth, Melanie Jutras, Deon Burchett
2020 C conf
ICMLA
M. L. Tlachac, Adam Sargent, Ermal Toto, Randy C. Paffenroth, Elke A. Rundensteiner
2020 J jnl
Frontiers Appl. Math. Stat.
David Berthiaume, Randy C. Paffenroth, Lei Guo
2019 J jnl
Pattern Recognit.
Kelum Gajamannage, Randy C. Paffenroth, Erik M. Bollt
2019 J jnl
CoRR
Kelum Gajamannage, Randy C. Paffenroth
2019 Misc conf
ACSSC
Haitao Liu, Randy C. Paffenroth, Louis Scharf, Fangzheng Sun
2019 C conf
ICMLA
Matthew L. Weiss, Randy C. Paffenroth, Jacob Whitehill, Joshua R. Uzarski
2019 J jnl
Decis. Support Syst.
Mina Shojaeizadeh, Soussan Djamasbi, Randy C. Paffenroth, Andrew C. Trapp
2019 J jnl
CoRR
Nitish Bahadur, Randy C. Paffenroth
2019 conf
IEEE BigData
Nitish Bahadur, Randy C. Paffenroth, Kelum Gajamannage
2019 J jnl
IEEE/ACM Trans. Netw.
Anura P. Jayasumana, Randy C. Paffenroth, Gunjan Mahindre, Sridhar Ramasamy, Kelum Gajamannage
2019 B conf
LCN
Gunjan Mahindre, Anura P. Jayasumana, Kelum Gajamannage, Randy C. Paffenroth
2019 C conf
ICMLA
Wenjing Li, Randy C. Paffenroth
2019 C conf
ICMLA
Harsh Nilesh Pathak, Randy C. Paffenroth
2019 conf
IEEE BigData
Kelum Gajamannage, Randy C. Paffenroth
2019 J jnl
IEEE Commun. Mag.
Paulo Victor Rodrigues Ferreira, Randy C. Paffenroth, Alexander M. Wyglinski, Timothy M. Hackett, Sven G. Bilén, Richard C. Reinhart, Dale J. Mortensen
2019 Misc conf
ACSSC
Matthew L. Weiss, Randy C. Paffenroth, Joshua R. Uzarski
2018 J jnl
CoRR
Haitao Liu, Randy C. Paffenroth, Jian Zou, Chong Zhou
2018 J jnl
IEEE J. Sel. Areas Commun.
Paulo Victor Rodrigues Ferreira, Randy C. Paffenroth, Alexander M. Wyglinski, Timothy M. Hackett, Sven G. Bilén, Richard C. Reinhart, Dale J. Mortensen
2018 J jnl
CoRR
Anura P. Jayasumana, Randy C. Paffenroth, Gunjan Mahindre, Sridhar Ramasamy, Kelum Gajamannage
2018 B conf
HCOMP
Michael Giancola, Randy C. Paffenroth, Jacob Whitehill
2018 J jnl
Comput. Chem. Eng.
Behnam Partopour, Randy C. Paffenroth, Anthony G. Dixon
2018 J jnl
CoRR
Randy C. Paffenroth, Kathleen Kay, Les Servi
2017 J jnl
CoRR
Kelum Gajamannage, Randy C. Paffenroth, Erik M. Bollt
2017 A* conf
KDD
Chong Zhou, Randy C. Paffenroth
2017 J jnl
IEEE Access
Paulo Victor Rodrigues Ferreira, Randy C. Paffenroth, Alexander M. Wyglinski
2016 J jnl
Symmetry
Tyler Reese, Randy C. Paffenroth, Joseph D. Fehribach
2016 J jnl
Signal Process.
Vidarshana W. Bandara, Louis L. Scharf, Randy C. Paffenroth, Anura P. Jayasumana, Philip du Toit
2016 Misc conf
ACSSC
Randy C. Paffenroth, Nan Li, Louis L. Scharf
2016 conf
ICC
Anura P. Jayasumana, Randy C. Paffenroth, Sridhar Ramasamy
2015 conf
SciPy
Randy C. Paffenroth, Xiangnan Kong
2013 J jnl
IEEE J. Sel. Top. Signal Process.
Randy C. Paffenroth, Philip du Toit, Ryan Nong, Louis Scharf, Anura P. Jayasumana, Vidarshana W. Bandara
2010 C conf
FUSION
Scott M. Lundberg, Randy C. Paffenroth, Jason Yosinski
2009 J jnl
J. Comput. Phys.
Oscar P. Bruno, Tim Elling, Randy C. Paffenroth, Catalin Turc
2007 J jnl
Int. J. Bifurc. Chaos
Eusebius J. Doedel, Volodymyr A. Romanov, Randy C. Paffenroth, Herbert B. Keller, D. J. Dichmann, Jorge Galán-Vioque, André Vanderbauwhede
2003 J jnl
Int. J. Bifurc. Chaos
Eusebius J. Doedel, Randy C. Paffenroth, Herbert B. Keller, D. J. Dichmann, Jorge Galán-Vioque, André Vanderbauwhede
2002 J jnl
SIAM J. Appl. Dyn. Syst.
Kathleen A. Hoffman, Robert S. Manning, Randy C. Paffenroth
1994 A conf
IEEE Visualization
Gábor Domokos, Randy C. Paffenroth
redb/extractors/macho_extractors/macho_similarity_hashes.py
← Index redb/extractors/macho_extractors/macho_similarity_hashes.py python
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor


class MachOSimilarityHashExtractor(MachOExtractor):
    """Extract Mach-O similarity hashes using machofile API.

    Similarity hashes are MD5 fingerprints of sorted, deduplicated binary components:
    - dylib_hash: MD5 of dynamic library names
    - import_hash: MD5 of imported function names
    - export_hash: MD5 of exported symbol names
    - entitlement_hash: MD5 of entitlement names and array values
    - symhash: MD5 of external undefined symbols

    For FAT binaries:
    - Inserts one row per architecture slice with per-slice hashes
    - Inserts one row for the FAT container with combined hashes

    For single-arch binaries:
    - Inserts one row with that architecture's hashes

    Note: parent_sha256 and architecture relationships are tracked in redb_basic_properties,
    not duplicated here. Use JOIN with redb_basic_properties when needed.
    """

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

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

    def _extract_similarity_hashes(self, arch_name=None):
        """Extract similarity hashes for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            similarity_hashes = self.macho.get_similarity_hashes(arch=arch_name)
            return similarity_hashes if similarity_hashes else None
        except Exception as e:
            self.log.error(f"Error extracting similarity hashes for arch {arch_name}: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            if not self.macho:
                return None

            architectures = self.macho.get_architectures()
            if not architectures:
                return None

            if len(architectures) > 1:
                # FAT binary - return combined hashes + per-arch hashes
                results = []

                # First add combined hashes for the FAT container
                all_hashes = self.macho.get_similarity_hashes()
                combined_hashes = all_hashes.get('combined', {}) if all_hashes else {}
                if combined_hashes:
                    combined_hashes['arch_identifier'] = 'fat'
                    results.append(combined_hashes)

                # Then add per-arch hashes
                for arch_name in architectures:
                    hashes = self._extract_similarity_hashes(arch_name)
                    if hashes:
                        hashes['arch_identifier'] = arch_name
                        results.append(hashes)
                return results
            else:
                # Single architecture - return single result
                return self._extract_similarity_hashes(architectures[0])
        except Exception as e:
            self.log.error(f"Error extracting similarity hashes: {e}")
            return None

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

            try:
                architectures = self.macho.get_architectures()
                is_fat = len(architectures) > 1
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # For FAT binaries, first insert a row for the container with combined hashes
            if is_fat:
                all_hashes = self.macho.get_similarity_hashes()  # Without arch returns all including 'combined'
                combined_hashes = all_hashes.get('combined', {}) if all_hashes else {}
                if combined_hashes:
                    data.append([
                        self.sha256,                                    # sha256 (FAT container)
                        combined_hashes.get('dylib_hash'),              # dylib_hash
                        combined_hashes.get('import_hash'),             # import_hash
                        combined_hashes.get('export_hash'),             # export_hash
                        combined_hashes.get('entitlement_hash'),        # entitlement_hash
                        combined_hashes.get('symhash'),                 # symhash
                        current_time,                                   # analysis_date
                    ])

            # Insert rows for each architecture slice
            for arch_name in architectures:
                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific sha256 for {arch_name}: {e}")
                    arch_sha256 = self.sha256

                # Get similarity hashes for this architecture
                similarity_hashes = self._extract_similarity_hashes(arch_name)
                if not similarity_hashes:
                    continue

                data.append([
                    arch_sha256,                                    # sha256 (arch-specific)
                    similarity_hashes.get('dylib_hash'),            # dylib_hash
                    similarity_hashes.get('import_hash'),           # import_hash
                    similarity_hashes.get('export_hash'),           # export_hash
                    similarity_hashes.get('entitlement_hash'),      # entitlement_hash
                    similarity_hashes.get('symhash'),               # symhash
                    current_time,                                   # analysis_date
                ])

            if not data:
                return None

            column_names = [
                'sha256',
                'macho_dylib_hash', 'macho_import_hash', 'macho_export_hash',
                'macho_entitlement_hash', 'macho_symhash',
                'analysis_date'
            ]

            column_type_names = [
                'FixedString(64)',
                'Nullable(FixedString(32))', 'Nullable(FixedString(32))', 'Nullable(FixedString(32))',
                'Nullable(FixedString(32))', 'Nullable(FixedString(32))',
                'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

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