Xiaolang Yan

93 papers A* 2A 4B 3C 6Misc 2Journal 51Unranked 25
YearRankTypeTitle / Venue / Authors
2024 J jnl
J. Circuits Syst. Comput.
Chunqiang Li, Zhiwei Liu, Yunhai Shang, Lenian He, Xiaolang Yan
2023 J jnl
ACM Trans. Design Autom. Electr. Syst.
Kai Huang, Bowen Li, Dongliang Xiong, Haitian Jiang, Xiaowen Jiang, Xiaolang Yan, Luc Claesen, Dehong Liu, Junjian Chen, Zhili Liu
2023 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Kai Huang, Bowen Li, Siang Chen, Luc Claesen, Wei Xi, Junjian Chen, Xiaowen Jiang, Zhili Liu, Dongliang Xiong, Xiaolang Yan
2022 B conf
ICPADS
Zhaoyang Du, Yijin Guan, Tianchan Guan, Dimin Niu, Nianxiong Tan, Xiaopeng Yu, Hongzhong Zheng, Jianyi Meng, Xiaolang Yan, Yuan Xie
2022 J jnl
CoRR
Zhaoyang Du, Yijin Guan, Tianchan Guan, Dimin Niu, Nianxiong Tan, Xiaopeng Yu, Hongzhong Zheng, Jianyi Meng, Xiaolang Yan, Yuan Xie
2021 J jnl
IEEE Trans. Sustain. Comput.
Kai Huang, Ke Wang, Dandan Zheng, Xiaowen Jiang, Xiaomeng Zhang, Rongjie Yan, Xiaolang Yan
2020 A* conf
ISCA
Chen Chen, Xiaoyan Xiang, Chang Liu, Yunhai Shang, Ren Guo, Dongqi Liu, Yimin Lu, Ziyi Hao, Jiahui Luo, Zhijian Chen, Chunqiang Li, Yu Pu, Jianyi Meng, Xiaolang Yan, Yuan Xie, Xiaoning Qi
2020 conf
Hot Chips Symposium
Chen Chen, Xiaoyan Xiang, Chang Liu, Yunhai Shang, Ren Guo, Dongqi Liu, Yimin Lu, Ziyi Hao, Jiahui Luo, Zhijian Chen, Chunqiang Li, Yu Pu, Jianyi Meng, Xiaolang Yan, Yuan Xie, Xiaoning Qi
2019 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Kai Huang, Xiaomeng Zhang, Dandan Zheng, Min Yu, Xiaowen Jiang, Xiaolang Yan, Lisane B. de Brisolara, Ahmed Amine Jerraya
2019 J jnl
IEEE Access
Kai Huang, Xiaowen Jiang, Haitian Jiang, Xiaomeng Zhang, Min Yu, Rongjie Yan, Xiaolang Yan
2019 J jnl
IEICE Trans. Inf. Syst.
Menghan Jia, Feiteng Li, Zhijian Chen, Xiaoyan Xiang, Xiaolang Yan
2018 J jnl
IEEE Access
Xiaomeng Zhang, Kai Huang, Min Yu, Xiaowen Jiang, Xiaolang Yan
2018 J jnl
IEICE Electron. Express
Kai Huang, Ke Wang, Xiaoxu Zhang, Xiaolang Yan
2018 J jnl
IEEE Access
Kai Huang, Xiaowen Jiang, Xiaomeng Zhang, Rongjie Yan, Ke Wang, Dongliang Xiong, Xiaolang Yan
2017 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Zhan-Hui Li, Tao-Tao Zhu, Zhi-Jian Chen, Jian-Yi Meng, Xiaoyan Xiang, Xiaolang Yan
2017 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Tao-Tao Zhu, Jian-Yi Meng, Xiaoyan Xiang, Xiaolang Yan
2017 conf
ESSCIRC
Chixiao Chen, Hongwei Ding, Huwan Peng, Haozhe Zhu, Rui Ma, Peiyong Zhang, Xiaolang Yan, Yu Wang, Mingyu Wang, Hao Min, Chuanjin Richard Shi
2017 J jnl
ACM Trans. Archit. Code Optim.
Dongliang Xiong, Kai Huang, Xiaowen Jiang, Xiaolang Yan
2016 J jnl
IEICE Electron. Express
Ziyi Hao, Xiaoyan Xiang, Chen Chen, Jianyi Meng, Yong Ding, Xiaolang Yan
2016 J jnl
IEICE Electron. Express
Li Zhanhui, Yong Ding, Xiaolang Yan, Jianyi Meng, Xiaoyan Xiang
2016 J jnl
ACM Trans. Archit. Code Optim.
Dongliang Xiong, Kai Huang, Xiaowen Jiang, Xiaolang Yan
2015 J jnl
ACM Trans. Embed. Comput. Syst.
Kai Huang, Min Yu, Rongjie Yan, Xiaomeng Zhang, Xiaolang Yan, Lisane B. de Brisolara, Ahmed Amine Jerraya, Jiong Feng
2015 J jnl
J. Comput. Sci. Technol.
Zhen Geng, Zheng Shi, Xiaolang Yan, Kai-sheng Luo, Weiwei Pan
2015 J jnl
VLSI Design
Kai Huang, Peng Zhu, Rongjie Yan, Xiaolang Yan
2015 J jnl
J. Electr. Comput. Eng.
Shupeng Wang, Kai Huang, Tianyi Xie, Xiaolang Yan
2015 J jnl
Frontiers Inf. Technol. Electron. Eng.
Kai Huang, Xiaoxu Zhang, Siwen Xiu, Dan-dan Zheng, Min Yu, De Ma, Kai Huang, Gang Chen, Xiaolang Yan
2014 A conf
DATE
Yanchen Long, Zhonghai Lu, Xiaolang Yan
2014 J jnl
IEICE Trans. Inf. Syst.
Kai Huang, Min Yu, Xiaomeng Zhang, Dandan Zheng, Siwen Xiu, Rongjie Yan, Kai Huang, Zhili Liu, Xiaolang Yan
2014 J jnl
Sci. China Inf. Sci.
Yong Ding, Yuan Zhang, Xiang Wang, Xiaolang Yan, Andrey S. Krylov
2014 J jnl
J. Zhejiang Univ. Sci. C
Kai-sheng Luo, Zheng Shi, Xiaolang Yan, Zhen Geng
2014 C conf
ISCAS
Zhengqiang Yu, Luc Claesen, Yun Pan, Andy Motten, Yimu Wang, Xiaolang Yan
2013 conf
MUE
Yimu Wang, Alexander Peyls, Yun Pan, Luc Claesen, Xiaolang Yan
2013 conf
CAD/Graphics
Zhen Geng, Zheng Shi, Xiaolang Yan, Kai-sheng Luo
2013 J jnl
Int. J. Commun. Syst.
Zhi Zhang, Zhonghai Lu, Qiang Chen, Xiaolang Yan, Li-Rong Zheng
2013 J jnl
J. Signal Process. Syst.
Yun Pan, Ning Zheng, Qinglin Tian, Xiaolang Yan, Ruohong Huan
2013 J jnl
J. Zhejiang Univ. Sci. C
Kai Huang, De Ma, Rongjie Yan, Haitong Ge, Xiaolang Yan
2013 J jnl
J. Zhejiang Univ. Sci. C
Li-Sheng Chen, Xiao-hua Luo, Jiao-jiao Zhu, Fan-chao Jie, Xiaolang Yan
2013 Misc conf
ICASSP
Qinglin Tian, Yun Pan, Xiaolang Yan, Ning Zheng, Ruohong Huan
2013 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
De Ma, Rongjie Yan, Kai Huang, Min Yu, Siwen Xiu, Haitong Ge, Xiaolang Yan, Ahmed Amine Jerraya
2013 J jnl
J. Zhejiang Univ. Sci. C
Zhen Geng, Zheng Shi, Xiaolang Yan, Kai-sheng Luo
2012 J jnl
J. Zhejiang Univ. Sci. C
Xiao-hua Luo, Li-Sheng Chen, Jiao-jiao Zhu, Xiaolang Yan
2012 J jnl
J. Zhejiang Univ. Sci. C
Jie Ren, Weiwei Pan, Yongjun Zheng, Zheng Shi, Xiaolang Yan
2012 J jnl
Int. J. Commun. Syst.
Zhi Zhang, Zhonghai Lu, Qiang Chen, Xiaolang Yan, Li-Rong Zheng
2012 J jnl
IEICE Trans. Commun.
Zhi Zhang, Zhonghai Lu, Qiang Chen, Xiaolang Yan
2012 Misc conf
ICASSP
Ning Zheng, Yun Pan, Xiaolang Yan, Ruohong Huan
2012 J jnl
J. Zhejiang Univ. Sci. C
Jiao-jiao Zhu, Xiao-hua Luo, Li-Sheng Chen, Yi Ye, Xiaolang Yan
2012 C conf
ISCAS
Ning Zheng, Yun Pan, Xiaolang Yan, Ruohong Huan
2011 conf
ECCTD
Bo Zhang, Weiwei Pan, Yongjun Zheng, Zheng Shi, Xiaolang Yan
2011 J jnl
J. Zhejiang Univ. Sci. C
Ai-lian Cheng, Yun Pan, Xiaolang Yan, Ruohong Huan
2011 J jnl
Microelectron. J.
Jiana Lou, Xiaobo Wu, Menglian Zhao, Xiaolang Yan
2011 J jnl
J. Supercomput.
Yong Ding, Xiaolang Yan
2011 J jnl
J. Zhejiang Univ. Sci. C
Bin Lin, Xiaolang Yan, Zheng Shi, Yiwei Yang
2011 J jnl
J. Electron. Test.
Min-yong Wan, Yong Ding, Yun Pan, Xiaolang Yan
2011 C conf
ISCAS
Huan Wang, Yun Pan, Xiaolang Yan, Ruohong Huan
2011 J jnl
J. Zhejiang Univ. Sci. C
Yong Ding, Xiao-hua Luo, Xiaolang Yan
2011 J jnl
J. Zhejiang Univ. Sci. C
Xiang Wang, Yong Ding, Ming-Yu Liu, Xiaolang Yan
2011 J jnl
J. Zhejiang Univ. Sci. C
Bin Lin, Xiaolang Yan, Zheng Shi, Yiwei Yang
2011 conf
ISQED
Weiwei Pan, Jie Ren, Yongjun Zheng, Zheng Shi, Xiaolang Yan
2010 B conf
ICCCN
Zhi Zhang, Zhonghai Lu, Zhibo Pang, Xiaolang Yan, Qiang Chen, Li-Rong Zheng
2010 conf
ASAP
Chunshu Li, Kai Huang, Xiaolang Yan, Jiong Feng, De Ma, Haitong Ge
2010 B conf
GLOBECOM
Zhi Zhang, Zhonghai Lu, Qiang Chen, Xiaolang Yan, Li-Rong Zheng
2010 J jnl
J. Zhejiang Univ. Sci. C
Yun Pan, Ning Ge, Xiaolang Yan, Xiao-Peng Yu
2009 J jnl
Integr.
Sang-Il Han, Soo-Ik Chae, Lisane B. de Brisolara, Luigi Carro, Katalin Popovici, Xavier Guerin, Ahmed Amine Jerraya, Kai Huang, Lei Li, Xiaolang Yan
2008 C conf
ISCAS
Xiaoru Xu, Xiaobo Wu, Xiaolang Yan
2007 J jnl
Eng. Lett.
Shurong Gu, Xiaobo Wu, Xiaolang Yan
2007 conf
ISQED
Ye Chen, Zheng Shi, Xiaolang Yan
2007 conf
ATS
Feijun Zheng, Kwang-Ting Cheng, Xiaolang Yan, John Moondanos, Ziyad Hanna
2007 conf
ASAP
Jianying Peng, Xing Qin, Dexian Li, Xiaolang Yan, Xiexiong Chen
2007 conf
ACM Great Lakes Symposium on VLSI
Chunyue Liu, Xiaolang Yan, Xing Qin
2007 J jnl
Eng. Lett.
Yuhua Cheng, Xiaobo Wu, Xiaolang Yan
2007 conf
Parallel and Distributed Computing and Networks
Chunyue Liu, Xing Qin, Xiaolang Yan
2007 J jnl
Sci. China Ser. F Inf. Sci.
JianXing Fan, Huazhong Yang, Hui Wang, Xiaolang Yan, Chaohuan Hou
2007 J jnl
CoRR
Min Li, Xiaobo Wu, Richard Yao, Xiaolang Yan
2007 A* conf
DAC
Kai Huang, Sang-Il Han, Katalin Popovici, Lisane B. de Brisolara, Xavier Guerin, Lei Li, Xiaolang Yan, Soo-Ik Chae, Luigi Carro, Ahmed Amine Jerraya
2006 conf
APCCAS
Hai Chen, Xiaobo Wu, Xiaolang Yan
2006 conf
IMECS
Shurong Gu, Xiaobo Wu, Xiaolang Yan
2006 conf
ICICIC (3)
Jianying Peng, Xing Qin, Jian Yang, Xiaolang Yan, Xiexiong Chen
2006 conf
IMECS
Yuhua Cheng, Xiaobo Wu, Xiaolang Yan
2006 conf
APCCAS
Danyan Zhang, Xiaobo Wu, Menglian Zhao, Hai Chen, Xiaolang Yan
2006 conf
APCCAS
Yuhua Cheng, Xiaobo Wu, Xiaolang Yan
2005 conf
ISCAS (1)
Xiaolang Yan, Ying Qin, Ye Yang, Haitong Ge
2005 conf
ASP-DAC
Xiaolang Yan, Ye Chen, Zheng Shi, Yue Ma
2005 conf
ASP-DAC
Yongjian Tang, Lenian He, Xiaolang Yan
2005 conf
ISCAS (6)
Xing Qin, Xiaolang Yan, Haitong Ge, Ye Yang
2005 J jnl
Sci. China Ser. F Inf. Sci.
Xiaolang Yan, Zheng Shi, Ye Chen, Yue Ma, Gensheng Gao
2005 A conf
ICME
Min Li, Xiaobo Wu, Zihua Guo, Richard Yao, Xiaolang Yan
2005 A conf
DATE
Min Li, Xiaobo Wu, Richard Yao, Xiaolang Yan
2004 C conf
EUC
Min Li, Xiaobo Wu, Menglian Zhao, Hui Wang, Xiaolang Yan
2004 conf
GCC
Min Li, Xiaobo Wu, Menglian Zhao, Hui Wang, Ping Li, Xiaolang Yan
2004 C conf
EUC
Min Li, Xiaobo Wu, Menglian Zhao, Hui Wang, Xiaolang Yan
2004 conf
ICESS
Min Li, Xiaobo Wu, Menglian Zhao, Ping Li, Xiaolang Yan
2004 A conf
ICME
Xing Qin, Xiaolang Yan, Chong-Peng Yang, Yang Ye
2003 conf
Asian Test Symposium
Zhan Xu, Xiaolang Yan, Yongjiang Lu, Haitong Ge
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