{"id":33245517,"url":"https://github.com/saferwall/pe","last_synced_at":"2026-01-12T01:59:58.472Z","repository":{"id":37012291,"uuid":"334526274","full_name":"saferwall/pe","owner":"saferwall","description":"A :zap: lightweight Go package to parse, analyze and extract metadata from Portable Executable (PE) binaries. Designed for malware analysis tasks and robust against PE malformations.","archived":false,"fork":false,"pushed_at":"2025-06-11T08:42:00.000Z","size":30019,"stargazers_count":361,"open_issues_count":11,"forks_count":53,"subscribers_count":14,"default_branch":"main","last_synced_at":"2025-07-02T11:05:42.335Z","etag":null,"topics":["binary-analysis","coff","go","golang","malware","malware-analysis","parser","parsing","pe","pe-file","pe-format","pe-malformations","portable-executable","reverse-engineering"],"latest_commit_sha":null,"homepage":"https://saferwall.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/saferwall.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.YML","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"security.go","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"LordNoteworthy"}},"created_at":"2021-01-30T22:37:51.000Z","updated_at":"2025-06-20T04:00:53.000Z","dependencies_parsed_at":"2023-02-17T11:31:13.238Z","dependency_job_id":"784a8411-86b7-4467-9fcc-95da6a3b6f3e","html_url":"https://github.com/saferwall/pe","commit_stats":{"total_commits":109,"total_committers":13,"mean_commits":8.384615384615385,"dds":0.1834862385321101,"last_synced_commit":"f9f7d40832adb932b7a7b5e5aa62a43fa0c3c022"},"previous_names":[],"tags_count":56,"template":false,"template_full_name":null,"purl":"pkg:github/saferwall/pe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saferwall%2Fpe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saferwall%2Fpe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saferwall%2Fpe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saferwall%2Fpe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/saferwall","download_url":"https://codeload.github.com/saferwall/pe/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saferwall%2Fpe/sbom","scorecard":{"id":794824,"data":{"date":"2025-08-11","repo":{"name":"github.com/saferwall/pe","commit":"0b9f45b49710284582b261a071df75340631fdf6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":1,"reason":"2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":6,"reason":"Found 19/30 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yaml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":0,"reason":"binaries present in source code","details":["Warn: binary detected: test/D2D1Debug2.dll:1","Warn: binary detected: test/IEAdvpack.dll:1","Warn: binary detected: test/KernelBase.dll:1","Warn: binary detected: test/PSCRIPT5.DLL:1","Warn: binary detected: test/SgrmEnclave_secure.dll:1","Warn: binary detected: test/WdBoot.sys:1","Warn: binary detected: test/WdfCoInstaller01011.dll:1","Warn: binary detected: test/YourPhone.Exp.WinRT.dll:1","Warn: binary detected: test/_setup.dll:1","Warn: binary detected: test/acpi.sys:1","Warn: binary detected: test/amdi2c.sys:1","Warn: binary detected: test/amdxata.sys:1","Warn: binary detected: test/arp.dll:1","Warn: binary detected: test/brave.exe:1","Warn: binary detected: test/impbyord.exe:1","Warn: binary detected: test/jobexec.dll:1","Warn: binary detected: test/kernel32.dll:1","Warn: binary detected: test/liblzo2-2.dll:1","Warn: binary detected: test/look:1","Warn: binary detected: test/mfc140u.dll:1","Warn: binary detected: test/mfc40u.dll:1","Warn: binary detected: test/mscorlib.dll:1","Warn: binary detected: test/msyuv.dll:1","Warn: binary detected: test/pspluginwkr.dll:1","Warn: binary detected: test/putty.exe:1","Warn: binary detected: test/putty_modified.exe:1","Warn: binary detected: test/pwsh.exe:1","Warn: binary detected: test/shimeng.dll:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yaml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/saferwall/pe/ci.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yaml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/saferwall/pe/ci.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yaml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/saferwall/pe/ci.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yaml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/saferwall/pe/ci.yaml/main?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 29 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T08:37:58.909Z","repository_id":37012291,"created_at":"2025-08-23T08:37:58.910Z","updated_at":"2025-08-23T08:37:58.910Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28331498,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T00:36:25.062Z","status":"ssl_error","status_checked_at":"2026-01-12T00:36:15.229Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["binary-analysis","coff","go","golang","malware","malware-analysis","parser","parsing","pe","pe-file","pe-format","pe-malformations","portable-executable","reverse-engineering"],"created_at":"2025-11-16T21:00:32.227Z","updated_at":"2026-01-12T01:59:58.467Z","avatar_url":"https://github.com/saferwall.png","language":"Go","readme":"\u003ca href=\"https://saferwall.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\u003cimg align=\"right\" width=\"300\" src=\".github/assets/logo.png\" alt=\"Saferwall logo\"\u003e\u003c/a\u003e\n\n# Portable Executable Parser\n\n[![GoDoc](http://godoc.org/github.com/saferwall/pe?status.svg)](https://pkg.go.dev/github.com/saferwall/pe) ![Go Version](https://img.shields.io/badge/go%20version-%3E=1.15-61CFDD.svg) [![Report Card](https://goreportcard.com/badge/github.com/saferwall/pe)](https://goreportcard.com/report/github.com/saferwall/pe) [![codecov](https://codecov.io/gh/saferwall/pe/branch/main/graph/badge.svg?token=W7WTOUZLRY)](https://codecov.io/gh/saferwall/pe) ![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/saferwall/pe/ci.yaml?branch=main)\n\n\n**pe** is a go package for parsing the [portable executable](https://docs.microsoft.com/en-us/windows/win32/debug/pe-format) file format. This package was designed with malware analysis in mind, and being resistent to PE malformations.\n\n## Table of content\n\n- [Portable Executable Parser](#portable-executable-parser)\n  - [Table of content](#table-of-content)\n  - [Features](#features)\n  - [Installing](#installing)\n  - [Using the library](#using-the-library)\n    - [PE Header](#pe-header)\n    - [Rich Header](#rich-header)\n    - [Iterating over sections](#iterating-over-sections)\n  - [Roadmap](#roadmap)\n  - [Fuzz Testing](#fuzz-testing)\n  - [Projects Using This Library](#projects-using-this-library)\n  - [References](#references)\n\n## Features\n\n-   Works with PE32/PE32+ file format.\n-   Supports Intel x86/AMD64/ARM7ARM7 Thumb/ARM8-64/IA64/CHPE architectures.\n-   MS DOS header.\n-   Rich Header (calculate checksum and hash).\n-   NT Header (file header + optional header).\n-   COFF symbol table and string table.\n-   Sections headers + entropy calculation.\n-   Data directories\n    -   Import Table + ImpHash calculation.\n    -   Export Table\n    -   Resource Table\n    -   Exceptions Table\n    -   Security Table + Authentihash calculation.\n    -   Relocations Table\n    -   Debug Table (CODEVIEW, POGO, VC FEATURE, REPRO, FPO, EXDLL CHARACTERISTICS debug types).\n    -   TLS Table\n    -   Load Config Directory (SEH, GFID, GIAT, Guard LongJumps, CHPE, Dynamic Value Reloc Table, Enclave Configuration, Volatile Metadata tables).\n    -   Bound Import Table\n    -   Delay Import Table\n    -   COM Table (CLR Metadata Header, Metadata Table Streams)\n-   Report several anomalies\n\n## Installing\n\nUsing this go package is easy. First, use `go get` to install the latest version of the library. This command will install the `pedumper` executable along with the library and its dependencies:\n\n    go get -u github.com/saferwall/pe\n\nNext, include `pe` package in your application:\n\n```go\nimport \"github.com/saferwall/pe\"\n```\n\n## Using the library\n\n```go\npackage main\n\nimport (\n\tpeparser \"github.com/saferwall/pe\"\n)\n\nfunc main() {\n    filename := \"C:\\\\Binaries\\\\notepad.exe\"\n    pe, err := peparser.New(filename, \u0026peparser.Options{})\n\tif err != nil {\n\t\tlog.Fatalf(\"Error while opening file: %s, reason: %v\", filename, err)\n    }\n\n    err = pe.Parse()\n    if err != nil {\n        log.Fatalf(\"Error while parsing file: %s, reason: %v\", filename, err)\n    }\n}\n```\n\nStart by instantiating a pe object by called the `New()` method, which takes the file path to the file to be parsed and some optional options.\n\nAfterwards, a call to the `Parse()` method will give you access to all the different part of the PE format, directly accessible to be used. Here is the definition of the struct:\n\n```go\ntype File struct {\n\tDOSHeader    ImageDOSHeader              `json:\"dos_header,omitempty\"`\n\tRichHeader   RichHeader                  `json:\"rich_header,omitempty\"`\n\tNtHeader     ImageNtHeader               `json:\"nt_header,omitempty\"`\n\tCOFF         COFF                        `json:\"coff,omitempty\"`\n\tSections     []Section                   `json:\"sections,omitempty\"`\n\tImports      []Import                    `json:\"imports,omitempty\"`\n\tExport       Export                      `json:\"export,omitempty\"`\n\tDebugs       []DebugEntry                `json:\"debugs,omitempty\"`\n\tRelocations  []Relocation                `json:\"relocations,omitempty\"`\n\tResources    ResourceDirectory           `json:\"resources,omitempty\"`\n\tTLS          TLSDirectory                `json:\"tls,omitempty\"`\n\tLoadConfig   LoadConfig                  `json:\"load_config,omitempty\"`\n\tExceptions   []Exception                 `json:\"exceptions,omitempty\"`\n\tCertificates CertificateSection          `json:\"certificates,omitempty\"`\n\tDelayImports []DelayImport               `json:\"delay_imports,omitempty\"`\n\tBoundImports []BoundImportDescriptorData `json:\"bound_imports,omitempty\"`\n\tGlobalPtr    uint32                      `json:\"global_ptr,omitempty\"`\n\tCLR          CLRData                     `json:\"clr,omitempty\"`\n\tIAT          []IATEntry                  `json:\"iat,omitempty\"`\n\tAnomalies    []string                    `json:\"anomalies,omitempty\"`\n\tHeader       []byte\n\tdata         mmap.MMap\n\tFileInfo\n\tsize          uint32\n\tOverlayOffset int64\n\tf             *os.File\n\topts          *Options\n\tlogger        *log.Helper\n}\n```\n\n### PE Header\n\nAs mentioned before, all members of the struct are directly (no getters) accessible, additionally, the fields types has been preserved as the spec defines them, that means if you need to show the prettified version of an `int` type, you have to call the corresponding helper function.\n\n```go\nfmt.Printf(\"Magic is: 0x%x\\n\", pe.DOSHeader.Magic)\nfmt.Printf(\"Signature is: 0x%x\\n\", pe.NtHeader.Signature)\nfmt.Printf(\"Machine is: 0x%x, Meaning: %s\\n\", pe.NtHeader.FileHeader.Machine, pe.NtHeader.FileHeader.Machine.String())\n```\n\nOutput:\n```\nMagic is: 0x5a4d\nSignature is: 0x4550\nMachine is: 0x8664, Meaning: x64\n```\n\n### Rich Header\n\nExample:\n```go\nrichHeader, _ := json.Marshal(pe.RichHeader)\nfmt.Print(prettyPrint(richHeader))\n```\n\nOutput:\n```json\n{\n    \"XorKey\": 2796214951,\n    \"CompIDs\": [\n        {\n            \"MinorCV\": 27412,\n            \"ProdID\": 257,\n            \"Count\": 4,\n            \"Unmasked\": 16870164\n        },\n        {\n            \"MinorCV\": 30729,\n            \"ProdID\": 147,\n            \"Count\": 193,\n            \"Unmasked\": 9664521\n        },\n        {\n            \"MinorCV\": 0,\n            \"ProdID\": 1,\n            \"Count\": 1325,\n            \"Unmasked\": 65536\n        },\n        {\n            \"MinorCV\": 27412,\n            \"ProdID\": 260,\n            \"Count\": 9,\n            \"Unmasked\": 17066772\n        },\n        {\n            \"MinorCV\": 27412,\n            \"ProdID\": 259,\n            \"Count\": 3,\n            \"Unmasked\": 17001236\n        },\n        {\n            \"MinorCV\": 27412,\n            \"ProdID\": 256,\n            \"Count\": 1,\n            \"Unmasked\": 16804628\n        },\n        {\n            \"MinorCV\": 27412,\n            \"ProdID\": 269,\n            \"Count\": 209,\n            \"Unmasked\": 17656596\n        },\n        {\n            \"MinorCV\": 27412,\n            \"ProdID\": 255,\n            \"Count\": 1,\n            \"Unmasked\": 16739092\n        },\n        {\n            \"MinorCV\": 27412,\n            \"ProdID\": 258,\n            \"Count\": 1,\n            \"Unmasked\": 16935700\n        }\n    ],\n    \"DansOffset\": 128,\n    \"Raw\": \"47vE9afaqqan2qqmp9qqprOxq6ej2qqmrqI5pmbaqqan2qumit+qprOxrqeu2qqms7Gpp6TaqqazsaqnptqqprOxp6d22qqms7FVpqbaqqazsainptqqplJpY2in2qqm\"\n}\n\n```\n\n### Iterating over sections\n\n```go\nfor _, sec := range pe.Sections {\n    fmt.Printf(\"Section Name : %s\\n\", sec.NameString())\n    fmt.Printf(\"Section VirtualSize : %x\\n\", sec.Header.VirtualSize)\n    fmt.Printf(\"Section Flags : %x, Meaning: %v\\n\\n\",\n        sec.Header.Characteristics, sec.PrettySectionFlags())\n}\n```\n\nOutput:\n\n```\nSection Name : .text\nSection VirtualSize : 2ea58\nSection Flags : 60500060, Meaning: [Align8Bytes Readable Align16Bytes Executable Contains Code Initialized Data Align1Bytes]\n\nSection Name : .data\nSection VirtualSize : 58\nSection Flags : c0500040, Meaning: [Readable Initialized Data Writable Align1Bytes Align16Bytes Align8Bytes]\n\nSection Name : .rdata\nSection VirtualSize : 18d0\nSection Flags : 40600040, Meaning: [Align2Bytes Align8Bytes Readable Initialized Data Align32Bytes]\n\n...\n```\n\n## Roadmap\n\n- imports MS-styled names demangling\n- PE: VB5 and VB6 typical structures: project info, DLLCall-imports, referenced modules, object table\n\n## Fuzz Testing\n\nTo validate the parser we use the [go-fuzz](https://github.com/dvyukov/go-fuzz) and a corpus of known malformed and tricky PE files from [corkami](https://github.com/corkami/pocs/tree/master/PE).\n\n## Projects Using This Library\n\n  \u003ca href=\"https://www.fibratus.io\" \u003e\n    \u003cimg src=\"https://github.com/rabbitstack/fibratus/raw/master/logo.png\" alt=\"Fibratus\" width=\"50px\"\u003e\n  \u003c/a\u003e\n\n[Fibratus](https://github.com/rabbitstack/fibratus) A modern tool for Windows kernel exploration and tracing with a focus on security.\n\n## References\n\n- [Peering Inside the PE: A Tour of the Win32 Portable Executable File Format by Matt Pietrek](http://bytepointer.com/resources/pietrek_peering_inside_pe.htm)\n- [An In-Depth Look into the Win32 Portable Executable File Format - Part 1 by Matt Pietrek](http://www.delphibasics.info/home/delphibasicsarticles/anin-depthlookintothewin32portableexecutablefileformat-part1)\n- [An In-Depth Look into the Win32 Portable Executable File Format - Part 2 by Matt Pietrek](http://www.delphibasics.info/home/delphibasicsarticles/anin-depthlookintothewin32portableexecutablefileformat-part2)\n- [Portable Executable File Format](https://blog.kowalczyk.info/articles/pefileformat.html)\n- [PE Format MSDN spec](https://docs.microsoft.com/en-us/windows/win32/debug/pe-format)\n- [DotNET format](https://www.ntcore.com/files/dotnetformat.htm)\n- [BlackHat 2011 - CONSTANT INSECURITY: (PECOFF) Portable Executable FIle Format](https://www.youtube.com/watch?v=uoQL3CE24ls)\n","funding_links":["https://github.com/sponsors/LordNoteworthy"],"categories":["Operating Systems"],"sub_categories":["Windows"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaferwall%2Fpe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaferwall%2Fpe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaferwall%2Fpe/lists"}