## MalwareDB Types [![Test](https://github.com/malwaredb/malwaredb-rs/actions/workflows/test.yml/badge.svg)](https://github.com/malwaredb/malwaredb-rs/actions/workflows/test.yml)[![Lint](https://github.com/malwaredb/malwaredb-rs/actions/workflows/lint.yml/badge.svg)](https://github.com/malwaredb/malwaredb-rs/actions/workflows/lint.yml)[![Cross](https://github.com/malwaredb/malwaredb-rs/actions/workflows/release.yml/badge.svg)](https://github.com/malwaredb/malwaredb-rs/actions/workflows/release.yml)[![Crates.io Version](https://img.shields.io/crates/v/malwaredb-types)](https://crates.io/crates/malwaredb-types) **Note:** These parsers are designed to extract potentially useful features from various file types. They are in **no way** designed to be complete representations of their respective file format. That said, contributions are welcome to extract additional features/information, to add support for a new file format, or to make general improvements! This crate contains the logic for parsing some executable and document datatypes, and for determining if a Zip file is an MS Office document or an archive of files. Executable Types: * ELF (feature flag `elf`, default) * Mach-O and Fat Mach-O (feature flag `macho`, default). Fat Mach-O's embedded Mach-O binaries are extracted and processed as child elements. * PE32 (feature flag `pe32`, default) * PEF (feature flag `pef`, not default and probably not useful) For each executable, the goal is to extract: * Section information: names, sizes, entropy * Import data * Target: architecture, operating system, endianness, pointer size (32 vs 64-bit) * Binary type (object file, executable, library, etc.) Some complications: * How to get the imports for ELFs? [Go has this figured out](https://github.com/golang/go/blob/74a9d283e4d498b78521f4a40c23b4c3f5ff7387/src/debug/elf/file.go#L1473), but I haven't been able to replicate. Goblin issue [#363](https://github.com/m4b/goblin/issues/363). * Should I ditch the custom parsers for [Goblin](https://github.com/m4b/goblin)? It would allow me to get Authenticode data from PE32 files, but I worry it won't be tolerant to malformed files (as malware tends to be). Document Types: * PDF via [pdf](https://github.com/pdf-rs/pdf) (feature flag `pdf`, default) * RTF *currently incomplete* (feature flag `rtf`, default) There should be a simple way to represent the needed data so the component which stores the data in the database doesn't have to be aware of file formats.