Nancy S. Pollard

114 papers A* 16A 7B 2C 3Journal 44Unranked 38
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Yiting Chen, Kenneth Kimble, Edward H. Adelson, Tamim Asfour, Podshara Chanrungmaneekul, Sachin Chitta, Yash Chitambar, Ziyang Cheng, Ken Goldberg, Danica Kragic, Hui Li, Xiang Li, Yunzhu Li, Aaron Prather, Nancy S. Pollard, Máximo Alejandro Roa-Garzón, Robert Seney, Shuo Sha, Shihefeng Wang, Yu Xiang, Kaifeng Zhang, Yuke Zhu, Kaiyu Hang
2026 J jnl
CoRR
Kshitij Madhav Bhat, Tom Gao, Abhishek Mathur, Rohit Satishkumar, Francisco Yandún, Dominik Bauer, Nancy S. Pollard
2025 conf
Humanoids
Jonathan P. King, Harnoor Ahluwalia, Michael Zhang, Nancy S. Pollard
2025 J jnl
CoRR
Jonathan P. King, Harnoor Ahluwalia, Michael Zhang, Nancy S. Pollard
2025 J jnl
CoRR
Sunyu Wang, Arjun S. Lakshmipathy, Jean Oh, Nancy S. Pollard
2025 conf
Humanoids
Sunyu Wang, Arjun S. Lakshmipathy, Jean Oh, Nancy S. Pollard
2025 J jnl
ACM Trans. Graph.
Arjun S. Lakshmipathy, Jessica K. Hodgins, Nancy S. Pollard
2025 conf
Humanoids
Sunyu Wang, Jean Oh, Nancy S. Pollard
2024 conf
RoboSoft
Pragna Mannam, Xingyu Liu, Ding Zhao, Jean Oh, Nancy S. Pollard
2024 J jnl
CoRR
Pragna Mannam, Xingyu Liu, Ding Zhao, Jean Oh, Nancy S. Pollard
2024 J jnl
CoRR
Arjun S. Lakshmipathy, Jessica K. Hodgins, Nancy S. Pollard
2024 J jnl
CoRR
Sunyu Wang, Jean H. Oh, Nancy S. Pollard
2023 J jnl
CoRR
Pragna Mannam, Kenneth Shaw, Dominik Bauer, Jean Oh, Deepak Pathak, Nancy S. Pollard
2023 J jnl
CoRR
Arjun S. Lakshmipathy, Nicole Feng, Yu Xi Lee, Moshe Mahler, Nancy S. Pollard
2023 J jnl
ACM Trans. Graph.
Arjun Sriram Lakshmipathy, Nicole Feng, Yu Xi Lee, Moshe Mahler, Nancy S. Pollard
2023 conf
Humanoids
Pragna Mannam, Kenneth Shaw, Dominik Bauer, Jean Oh, Deepak Pathak, Nancy S. Pollard
2023 conf
Humanoids
Cornelia Bauer, Nancy S. Pollard
2022 A* conf
ICRA
Arjun Lakshmipathy, Dominik Bauer, Cornelia Bauer, Nancy S. Pollard
2022 A* conf
ICRA
Cornelia Bauer, Dominik Bauer, Alisa Allaire, Christopher G. Atkeson, Nancy S. Pollard
2022 conf
Humanoids
Chao Li, Nancy S. Pollard
2022 conf
RoboSoft
Dominik Bauer, Cornelia Bauer, Arjun Lakshmipathy, Roberto Shu, Nancy S. Pollard
2021 conf
ICIG (3)
Oscar Dadfar, Nancy S. Pollard
2021 J jnl
Frontiers Robotics AI
Jiatian Sun, Jonathan P. King, Nancy S. Pollard
2021 A conf
IROS
Arjun Lakshmipathy, Dominik Bauer, Nancy S. Pollard
2021 J jnl
CoRR
Arjun Lakshmipathy, Dominik Bauer, Cornelia Bauer, Nancy S. Pollard
2021 conf
HUMANOIDS
Ryan Coulson, Chao Li, Carmel Majidi, Nancy S. Pollard
2021 J jnl
CoRR
Dominik Bauer, Cornelia Bauer, Arjun Lakshmipathy, Roberto Shu, Nancy S. Pollard
2020 J jnl
Int. J. Humanoid Robotics
Christopher Hazard, Nancy S. Pollard, Stelian Coros
2020 J jnl
Int. J. Humanoid Robotics
Dominik Bauer, Cornelia Bauer, Jonathan P. King, Daniele Moro, Kai-Hung Chang, Stelian Coros, Nancy S. Pollard
2019 conf
Humanoids
André Meixner, Christopher Hazard, Nancy S. Pollard
2018 conf
Humanoids
Christopher Hazard, Nancy S. Pollard, Stelian Coros
2018 conf
Humanoids
Cornelia Schlagenhauf, Dominik Bauer, Kai-Hung Chang, Jonathan P. King, Daniele Moro, Stelian Coros, Nancy S. Pollard
2018 conf
Humanoids
Jonathan P. King, Dominik Bauer, Cornelia Schlagenhauf, Kai-Hung Chang, Daniele Moro, Nancy S. Pollard, Stelian Coros
2017 J jnl
IEEE Robotics Autom. Lett.
Kaiyu Hang, Johannes A. Stork, Nancy S. Pollard, Danica Kragic
2017 conf
Humanoids
Yuzuko C. Nakamura, Daniel M. Troniak, Alberto Rodriguez, Matthew T. Mason, Nancy S. Pollard
2017 A* conf
ICRA
Michael C. Koval, Matthew Klingensmith, Siddhartha S. Srinivasa, Nancy S. Pollard, Michael Kaess
2016 C conf
WAFR
Michael C. Koval, David Hsu, Nancy S. Pollard, Siddhartha S. Srinivasa
2016 J jnl
CoRR
Michael C. Koval, David Hsu, Nancy S. Pollard, Siddhartha S. Srinivasa
2016 J jnl
Int. J. Robotics Res.
Michael C. Koval, Nancy S. Pollard, Siddhartha S. Srinivasa
2016 J jnl
Comput. Animat. Virtual Worlds
Se-Joon Chung, Nancy S. Pollard
2016 J jnl
CoRR
Matthew Klingensmith, Michael C. Koval, Siddhartha S. Srinivasa, Nancy S. Pollard, Michael Kaess
2015 J jnl
Int. J. Robotics Res.
Michael C. Koval, Nancy S. Pollard, Siddhartha S. Srinivasa
2015 conf
Eurographics (Short Papers)
Se-Joon Chung, Junggon Kim, Shangchen Han, Nancy S. Pollard
2015 A conf
IROS
Michael C. Koval, Jennifer E. King, Nancy S. Pollard, Siddhartha S. Srinivasa
2014 conf
Humanoids
Jia Liu, Fangxiaoyu Feng, Yuzuko C. Nakamura, Nancy S. Pollard
2014 conf
Dance Notations and Robot Motion
Jia Liu, Fangxiaoyu Feng, Yuzuko C. Nakamura, Nancy S. Pollard
2014 A conf
IROS
Boris Illing, Tamim Asfour, Nancy S. Pollard
2014 J jnl
Auton. Robots
Moslem Kazemi, Jean-Sebastien Valois, J. Andrew Bagnell, Nancy S. Pollard
2014 conf
Robotics: Science and Systems
Michael C. Koval, Nancy S. Pollard, Siddhartha S. Srinivasa
2014 ch.
The Human Hand as an Inspiration for Robot Hand Development
Lillian Y. Chang, Nancy S. Pollard
2014 J jnl
ACM Trans. Appl. Percept.
Laura C. Trutoiu, Elizabeth J. Carter, Nancy S. Pollard, Jeffrey F. Cohn, Jessica K. Hodgins
2013 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Gayatri Mehta, Krunalkumar Patel, Natalie Parde, Nancy S. Pollard
2013 A* conf
ICRA
Shervin Javdani, Matthew Klingensmith, J. Andrew Bagnell, Nancy S. Pollard, Siddhartha S. Srinivasa
2013 C conf
ISRR
Michael C. Koval, Nancy S. Pollard, Siddhartha S. Srinivasa
2013 J jnl
IEEE Trans. Robotics
Junggon Kim, Kunihiro Iwamoto, James J. Kuffner, Yasuhiro Ota, Nancy S. Pollard
2013 A conf
IROS
Michael C. Koval, Mehmet Remzi Dogar, Nancy S. Pollard, Siddhartha S. Srinivasa
2013 conf
Robotics: Science and Systems
Jennifer E. King, Matthew Klingensmith, Christopher M. Dellin, Mehmet Remzi Dogar, Prasanna Velagapudi, Nancy S. Pollard, Siddhartha S. Srinivasa
2013 conf
Humanoids
Junggon Kim, Nancy S. Pollard, Christopher G. Atkeson
2012 A conf
IROS
J. Andrew Bagnell, Felipe Cavalcanti, Lei Cui, Thomas Galluzzo, Martial Hebert, Moslem Kazemi, Matthew Klingensmith, Jacqueline Libby, Tian Yu Liu, Nancy S. Pollard, Mihail Pivtoraiko, Jean-Sebastien Valois, Ranqi Zhu
2012 conf
Humanoids
Yue Peng Toh, Shan Huang, Joy Lin, Maria Bajzek, Garth Zeglin, Nancy S. Pollard
2012 J jnl
CoRR
Shervin Javdani, Matthew Klingensmith, Drew Bagnell, Nancy S. Pollard, Siddhartha S. Srinivasa
2012 A* conf
ICRA
Junggon Kim, Kunihiro Iwamoto, James J. Kuffner, Yasuhiro Ota, Nancy S. Pollard
2012 conf
Robotics: Science and Systems
Moslem Kazemi, Jean-Sebastien Valois, J. Andrew Bagnell, Nancy S. Pollard
2012 conf
Symposium on Computer Animation
Alfred Barnat, Nancy S. Pollard
2012 J jnl
Comput. Graph. Forum
James McCann, Nancy S. Pollard
2012 J jnl
Robotics Auton. Syst.
Daniel Kappler, Lillian Y. Chang, Nancy S. Pollard, Tamim Asfour, Rüdiger Dillmann
2011 J jnl
IEEE Computer Graphics and Applications
Junggon Kim, Nancy S. Pollard
2011 J jnl
ACM Trans. Graph.
Junggon Kim, Nancy S. Pollard
2011 A* conf
ICRA
Gurdayal S. Koonjul, Garth Zeglin, Nancy S. Pollard
2011 B conf
Graphics Interface
Alfred Barnat, Zeyang Li, James McCann, Nancy S. Pollard
2010 conf
Symposium on Computer Animation
Lei Li, James McCann, Nancy S. Pollard, Christos Faloutsos
2010 conf
SIGGRAPH Talks
Lillian Y. Chang, Nancy S. Pollard
2010 A* conf
ICRA
Lillian Y. Chang, Siddhartha S. Srinivasa, Nancy S. Pollard
2010 conf
Humanoids
Daniel Kappler, Lillian Y. Chang, Markus Przybylski, Nancy S. Pollard, Tamim Asfour, Rüdiger Dillmann
2009 A* conf
KDD
Lei Li, James McCann, Nancy S. Pollard, Christos Faloutsos
2009 J jnl
ACM Trans. Graph.
James McCann, Nancy S. Pollard
2008 J jnl
Comput. Graph. Forum
Paul S. A. Reitsma, James Andrews, Nancy S. Pollard
2008 conf
Eurographics (Short Papers)
Lei Li, James McCann, Christos Faloutsos, Nancy S. Pollard
2008 J jnl
IEEE Computer Graphics and Applications
Remco Chang, Thomas Butkiewicz, Caroline Ziemkiewicz, Zachary Wartell, Nancy S. Pollard, William Ribarsky
2008 J jnl
IEEE Trans. Biomed. Eng.
Lillian Y. Chang, Nancy S. Pollard
2008 conf
Humanoids
Lillian Y. Chang, Garth Zeglin, Nancy S. Pollard
2008 J jnl
ACM Trans. Graph.
James McCann, Nancy S. Pollard
2007 J jnl
IEEE Trans. Vis. Comput. Graph.
Ying Li, Jiaxin L. Fu, Nancy S. Pollard
2007 conf
SIGGRAPH Courses
Christos Faloutsos, Jessica K. Hodgins, Nancy S. Pollard
2007 J jnl
ACM Trans. Graph.
Paul S. A. Reitsma, Nancy S. Pollard
2007 A conf
IROS
Lillian Y. Chang, Nancy S. Pollard, Tom M. Mitchell, Eric P. Xing
2007 A* conf
ICRA
Jiaxin L. Fu, Siddhartha S. Srinivasa, Nancy S. Pollard, Bart C. Nabbe
2007 J jnl
ACM Trans. Graph.
James McCann, Nancy S. Pollard
2006 conf
SIGGRAPH Sketches
Remco Chang, Thomas Butkiewicz, Caroline Ziemkiewicz, Zachary Wartell, Nancy S. Pollard, William Ribarsky
2006 A conf
IROS
Jiaxin L. Fu, Nancy S. Pollard
2006 conf
Symposium on Computer Animation
James McCann, Nancy S. Pollard, Siddhartha S. Srinivasa
2005 conf
Humanoids
Ying Li, Nancy S. Pollard
2005 ch.
Multi-point Interaction with Real and Virtual Objects
Nancy S. Pollard, Alon Wolf
2005 conf
Symposium on Computer Animation
Nancy S. Pollard, Victor B. Zordan
2004 J jnl
Int. J. Robotics Res.
Nancy S. Pollard
2004 conf
Symposium on Computer Animation
Paul S. A. Reitsma, Nancy S. Pollard
2004 B conf
Graphics Interface
Jernej Barbic, Alla Safonova, Jia-Yu Pan, Christos Faloutsos, Jessica K. Hodgins, Nancy S. Pollard
2004 J jnl
ACM Trans. Graph.
Alla Safonova, Jessica K. Hodgins, Nancy S. Pollard
2003 J jnl
ACM Trans. Graph.
Anthony C. Fang, Nancy S. Pollard
2003 J jnl
ACM Trans. Graph.
Paul S. A. Reitsma, Nancy S. Pollard
2002 A* conf
ICRA
Nancy S. Pollard, Jessica K. Hodgins, Marcia Riley, Christopher G. Atkeson
2002 C conf
WAFR
Nancy S. Pollard, Jessica K. Hodgins
2002 J jnl
ACM Trans. Graph.
Jehee Lee, Jinxiang Chai, Paul S. A. Reitsma, Jessica K. Hodgins, Nancy S. Pollard
2002 ed.
Symposium on Computer Animation
Jessica K. Hodgins, Michiel van de Panne, Michael F. Cohen, Nancy S. Pollard
2002 conf
SIGGRAPH Abstracts and Applications
Michael Gleicher, Michael F. Cohen, Nancy S. Pollard, Jessica K. Hodgins, Michiel van de Panne
2002 A* conf
ICRA
Nancy S. Pollard, Richards C. Gilbert
2000 A* conf
ICRA
Nancy S. Pollard, Fareed Behmaram-Mosavat
1999 conf
Computer Animation and Simulation
Nancy S. Pollard
1997 A* conf
SIGGRAPH
Jessica K. Hodgins, Nancy S. Pollard
1997 A* conf
ICRA
Nancy S. Pollard
1996 A* conf
ICRA
Nancy S. Pollard
1994
Nancy S. Pollard
1993 conf
ICRA (3)
Nancy S. Pollard
1990 A* conf
ICRA
Nancy S. Pollard, Tomás Lozano-Pérez
redb/extractors/pe_extractors/pe_extra_findings.py
← Index redb/extractors/pe_extractors/pe_extra_findings.py python
from hashlib import md5, sha1, sha256
import inspect
import pefile
from magika import Magika
import json
from datetime import datetime, timezone
from typing import List, Optional, Any
from asn1crypto import cms, pem, x509, core
from dataclasses import asdict

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PEExtraFinding, PECertificate


class PEExtraFindings(PEExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        pe=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            pe,
        )
        self.elastic_index = self.index_prefix + "-pe_extrafindings"
        self.log.debug(inspect.currentframe().f_code.co_name)
        self.has_binary_overlay = False
        self.has_binary_resource = False
        self.findings = []

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

    """
    The section below triggers in case of a binary which is not signed.
    It trigger the scan for Certificates inside the binary, for example
    inside a resource or an overlay.
    """

    def _scan_for_certificates(self):
        """
        Comprehensive scan for certificate data in PE file.
        Returns list of tuples (location_description, certificate_data)
        """
        self.log.debug(inspect.currentframe().f_code.co_name)

        # 1. Scan resources for embedded PE files
        self._scan_resources_for_certificates()

        # 3. Scan overlay
        overlay_data = self.pe.get_overlay()
        if overlay_data:
            self._scan_overlay_for_certificates(overlay_data)


    def _extract_certificate_info(self, cert_data):
        self.log.debug(inspect.currentframe().f_code.co_name)

        certificate = x509.Certificate.load(cert_data)
        certificate_serial_number = format(certificate.serial_number, "x").upper()
        grouped_serial_number = ":".join(
            [
                certificate_serial_number[i : i + 2]
                for i in range(0, len(certificate_serial_number), 2)
            ]
        )
        return PECertificate(
            certificate_serial_number=grouped_serial_number,
            certificate_issuer=certificate.issuer.human_friendly,
            certificate_subject=certificate.subject.human_friendly,
            certificate_valid_from=certificate["tbs_certificate"]["validity"][
                "not_before"
            ].native.strftime("%Y-%m-%d %H:%M:%S"),
            certificate_valid_to=certificate["tbs_certificate"]["validity"][
                "not_after"
            ].native.strftime("%Y-%m-%d %H:%M:%S"),
            certificate_thumbprint=sha1(cert_data).hexdigest().upper(),
            certificate_algorithm=None,
        )

    def _extract_standard_certificates(self, pe):
        self.log.debug(inspect.currentframe().f_code.co_name)
        address = pe.OPTIONAL_HEADER.DATA_DIRECTORY[
            pefile.DIRECTORY_ENTRY["IMAGE_DIRECTORY_ENTRY_SECURITY"]
        ].VirtualAddress
        size = pe.OPTIONAL_HEADER.DATA_DIRECTORY[
            pefile.DIRECTORY_ENTRY["IMAGE_DIRECTORY_ENTRY_SECURITY"]
        ].Size

        addr_8 = address + 8
        signature_data = bytes(
            pe.write()[addr_8 : addr_8 + size]  # noqa E203
        )  # Ensure this is a bytes object
        if pem.detect(signature_data):
            signature_data = pem.unarmor(signature_data)

        content_info = cms.ContentInfo.load(signature_data)
        signed_data = content_info["content"]
        certificates = signed_data["certificates"]

        certificates_list = []
        for cert in certificates:
            cert_info = self._extract_certificate_info(cert.chosen.dump())
            certificates_list.append(cert_info)

        return certificates_list

    def _is_signed(self, pedata):
        address = pedata.OPTIONAL_HEADER.DATA_DIRECTORY[
            pefile.DIRECTORY_ENTRY["IMAGE_DIRECTORY_ENTRY_SECURITY"]
        ].VirtualAddress
        if address == 0:
            return False
        return True

    def _scan_resources_for_certificates(self):
        """Scan resources for embedded PE files and their certificates"""
        self.log.debug(inspect.currentframe().f_code.co_name)

        try:
            if hasattr(self.pe, "DIRECTORY_ENTRY_RESOURCE"):
                for entry in self.pe.DIRECTORY_ENTRY_RESOURCE.entries:
                    for resource in self._get_resource_data(entry):
                        # Check if resource data might be a PE file
                        resource_magika = Magika().identify_bytes(resource).output.label
                        if resource.startswith(b"MZ") or resource_magika == "pebin":
                            try:
                                embedded_pe = pefile.PE(data=resource)
                                if self._is_signed(embedded_pe):
                                    cert_data = self._extract_standard_certificates(
                                        embedded_pe
                                    )
                                    if cert_data:
                                        # certificates.append(
                                        #     (f"Resource_{entry.id}", cert_data)
                                        # )
                                        self.findings.append(
                                            PEExtraFinding(
                                                context=f"Resource ({sha256(resource).hexdigest()}) is a PE file. Found Code Signing Certificates information inside.",
                                                finding=cert_data,
                                            )
                                        )
                            except Exception as e:
                                self.log.warning(
                                    f"Resource {sha256(resource).hexdigest()} is not a valid PE: {e}"
                                )

                        # Direct certificate pattern matching in resource
                        cert_data = self._find_certificate_patterns(resource)
                        if cert_data:
                            # certificates.append((f"Resource_{entry.id}", cert_data))
                            self.findings.append(
                                PEExtraFinding(
                                    context=f"Resource ({sha256(resource).hexdigest()}) is a PE file.\
                                    Found Code Signing Certificates information inside.",
                                    finding=cert_data,
                                )
                            )

        except Exception as e:
            self.log.error(f"Failed to scan resources: {e}")


    def _scan_overlay_for_certificates(self, overlay_data) -> List[bytes]:
        """Scan PE overlay for certificate data"""
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            # Check if overlay is a PE file
            overlay_magika = Magika().identify_bytes(overlay_data).output.ct_label
            if overlay_data.startswith(b"MZ") or overlay_magika == "pebin":
                try:
                    overlay_pe = pefile.PE(data=overlay_data)
                    if self._is_signed(overlay_pe):
                        cert_data = self._extract_standard_certificates(overlay_data)
                        if cert_data:
                            self.findings.append(
                                PEExtraFinding(
                                    context=f"Overlay data ({sha256(overlay_data).hexdigest()}) is a PE file.\
                                    Found Code Signing Certificates information inside.",
                                    finding=cert_data,
                                )
                            )
                except Exception as e:
                    self.log.warning(f"Error looking for certificates in Overlay: {e}")
                    pass

            # Direct certificate pattern matching in overlay
            cert_data = self._find_certificate_patterns(overlay_data)
            if cert_data:
                self.findings.append(
                    PEExtraFinding(
                        context=f"Overlay data ({sha256(overlay_data).hexdigest()}) is a PE file.\
                        Found Code Signing Certificates information inside.",
                        finding=cert_data,
                    )
                )
        except Exception as e:
            self.log.error(f"Failed to scan overlay: {e}")


    def _get_resource_data(self, entry) -> List[bytes]:
        """Recursively get resource data"""
        resources = []
        try:
            if hasattr(entry, "directory"):
                for subentry in entry.directory.entries:
                    resources.extend(self._get_resource_data(subentry))
            else:
                data = self.pe.get_data(
                    entry.data.struct.OffsetToData, entry.data.struct.Size
                )
                resources.append(data)
        except Exception as e:
            self.log.error(f"Failed to get resource data: {e}")
        return resources

    def _find_certificate_patterns(self, data: bytes) -> Optional[bytes]:
        """Find certificate patterns in binary data"""
        # PKCS#7 SignedData OID pattern
        PKCS7_PATTERN = b"\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x07\x02"

        try:
            idx = data.find(PKCS7_PATTERN)
            if idx != -1:
                # Search backwards for ASN.1 sequence marker
                for i in range(idx, max(0, idx - 50), -1):
                    if data[i] == 0x30:  # ASN.1 SEQUENCE
                        try:
                            # Try to parse as X.509 certificate
                            cert = x509.load_der_x509_certificate(
                                data[i:], default_backend()
                            )
                            return data[i:]
                        except Exception:
                            continue
        except Exception as e:
            self.log.error(f"Failed to find certificate patterns: {e}")
        return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        self.log.debug(inspect.currentframe().f_code.co_name)
        if exporter_type == "ElasticsearchExporter":
            return self.findings
        elif exporter_type == "ClickHouseExporter":
            current_time = datetime.now(timezone.utc)
            
            data = [
                [
                    self.sha256,
                    self.md5,
                    self.sha1,
                    finding.context,
                    [asdict(cert) for cert in finding.finding] if finding.finding else None,
                    current_time
                ]
                for finding in self.findings
            ]
            
            column_names = [
                'sha256', 'md5', 'sha1', 'context', 'finding', 'analysis_date'
            ]
            
            if not data:
                return None

            column_type_names = [
                'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                'String', 'Array(JSON)', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

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

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            self._scan_for_certificates()
            if len(self.findings) > 0:
                return self.findings
            return None
        except Exception as e:
            self.log.error(f"Error extracting PE Extras: {e}")
            return None