Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
goblin — Озорной, кроссплатформенный крейт для бинарного парсинга, написанный на Rust. | Kitploit
Инструменты/GitHubGitHub/m4b/goblin
Обратная инженерияФаззингАнализ Бинарных Файлов
GitHubm4b/goblin

goblin

Озорной, кроссплатформенный крейт для бинарного парсинга, написанный на Rust.

Репозиторий
1.5k2002 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

libgoblin

Actions crates.io version

say the right words

Документация

https://docs.rs/goblin/

список изменений

Использование

Goblin требует rustc 1.85.0 (редакция Rust 2024).

Добавьте в ваш Cargo.toml

root@kitploit:~
[dependencies]
goblin = "0.10"

Возможности

  • отличное название крейта
  • zero-copy, кроссплатформенная, с учётом порядка байт реализация ELF64/32 — вау!
  • zero-copy, кроссплатформенная, с учётом порядка байт реализация 32/64-битного Mach-o — здорово!
  • парсер PE 32/64 — бинго!
  • парсер архивов в стиле Unix и BSD (второй благодаря @willglynn) — ура!
  • множество опций cfg — от них голова пойдёт кругом, и вы будете злиться, читая исходники!
  • прошёл фаззинг — "Я рад сообщить, что goblin выдержал 100 миллионов прогонов фаззинга, 1 миллион прогонов на каждый сид 1~100." — @sanxiyn
  • тесты

libgoblin стремится быть вашим универсальным инструментом для разбора, загрузки и анализа бинарных файлов.

Примеры использования

Goblin в первую очередь поддерживает следующие важные сценарии использования:

  1. Базовые, std-free структуры #[repr(C)], минимальное время компиляции, 32/64 (или обе) на ваш выбор.

  2. Type punning. Определите функцию один раз для типа, и она будет работать как с 32-битными, так и с 64-битными вариантами — без реальных изменений и без макросов! Смотрите examples/automagic.rs для простого примера.

  3. Режим std. Он добавляет реализации чтения и записи через Pread и Pwrite, чтение из файла, удобные выделения памяти, дополнительные методы и т.д. Это для клиентов, которые могут выделять память и хотят читать бинарные файлы с диска.

  4. Endian_fd. Ужасное название 😆 это для бинарного анализа, как в panopticon или falcon, где нужно читать бинарные файлы с чужим порядком байт, или как основа для создания кроссплатформенных утилит для работы с бинарными файлами чужих архитектур, например, cargo-sym и bingrep — простые примеры этого, но возможности безграничны.

Вот некоторые вещи, которые вы могли бы сделать с этим крейтом (или помочь реализовать, чтобы они стали возможны):

  1. Написать компилятор и использовать его для генерации бинарных файлов (все сырые C-структуры имеют произвольный [Pwrite][scroll]).
  2. Написать инструмент для анализа бинарных файлов, который загружает, разбирает и анализирует различные бинарные форматы, например, panopticon или falcon.
  3. Написать полуработающий динамический компоновщик.
  4. Написать ядро и загружать бинарные файлы с помощью конфигурации no_std. То есть, по сути, это просто определения структур и констант (как C-заголовок) — никаких файловых дескрипторов, вывода, std.
  5. Написать инструмент bin2json, потому что почему бы бинарным форматам не быть в JSON?

Конфигурации (cfg)

libgoblin спроектирован так, чтобы быть максимально настраиваемым. Текущие флаги:

  • elf64 — 64-битные ELF-бинарные файлы, определения структур repr(C)
  • elf32 — 32-битные ELF-бинарные файлы, определения структур repr(C)
  • mach64 — 64-битные Mach-O, определения структур repr(C)
  • mach32 — 32-битные Mach-O, определения структур repr(C)
  • pe32 — 32-битные PE, определения структур repr(C)
  • pe64 — 64-битные PE, определения структур repr(C)
  • te — Terse Executable (TE), определения структур repr(C)
  • archive — парсер архивов Unix
  • endian_fd — разбор в соответствии с порядком байт в бинарном файле
  • std — для поддержки окружений no_std

Сопровождающие

  1. PE: @kkent030315
  2. Elf: @m4b, заявки принимаются
  3. Mach-o: @m4b, заявки принимаются

Сопровождающие — это рецензенты первого контакта для соответствующего бэкенда. Они выбираются на основе предыдущих вкладов, активности, базовых знаний и дружелюбного и общительного поведения :D

В настоящее время только я (@m4b) имею права на слияние всех PR. В будущем, вероятно, сопровождающие для данного бэкенда также получат права на слияние.

Наконец, я всё равно, скорее всего, буду бегло просматривать все PR, но в основном/полностью буду полагаться на сопровождающего для данного бэкенда.

И всегда помните мудрость Билла и Теда: "Будьте превосходны друг к другу!"

Участники

Спасибо вам всем ❤️ !

В лексикографическом порядке:

  • @000lbh
  • @2vg
  • @5225225
  • @alessandrod
  • @amanieu
  • @anfedotoff
  • @apalm
  • @baloo
  • @BinFlip
  • @burjui
  • @CalebFenton
  • @chf0x
  • @connorkuehl
  • @dancrossnyc
  • @DreydenGys
  • @dureuill
  • @Evian-Zhang
  • @ExPixel
  • @flanfly
  • @glandium
  • @glslang
  • @Gelbpunkt
  • @gunbux
  • @h33p
  • @hannahfluch
  • @Hexorg
  • @ibabushkin
  • @ideeockus

Вклад в проект

Если явно не указано иное, вы соглашаетесь, что ваши вклады лицензируются в соответствии с описанием в прилагаемом файле LICENSE (MIT).

  1. Пожалуйста, начинайте коммиты с указания затрагиваемого бинарного компонента; чем конкретнее, тем лучше, например, если вы изменяете только перемещения (relocations) в модуле elf, то пишите "elf.reloc: added new constants for Z80".
  2. Сообщения коммитов должны объяснять изменения, никаких общих "changed" или "fix"; если вы отправляете такие коммиты в PR, имейте в виду, что @m4b или кто-то другой, скорее всего, их сольёт в один.
  3. Если вы вносите большие изменения в модуль, пожалуйста, сначала создайте обсуждение (issue), и давайте обсудим; я не хочу тратить ваше время, если это неверное техническое направление и т.д.
  4. Если ваш PR не получает внимания, пожалуйста, отвечайте на все соответствующие комментарии, оставленные в PR, и если ответа всё ещё нет, напишите @m4b в github, а также можете написать @m4b на почту.
  5. Пожалуйста, добавляйте тесты, если вы добавляете новую возможность. Не стесняйтесь добавлять тесты, даже если не добавляете новую возможность; тесты — это здорово и легко в Rust.
Скачать инструмент
@ivlzme
  • @jackcmay
  • @jan-auer
  • @Javagedes
  • @jessehui
  • @jdub
  • @Jhynjhiruu
  • @JohnScience
  • @johannst
  • @joschock
  • @jrmuizel
  • @jsgf
  • @Jvlegod
  • @keith
  • @kjempelodott
  • @kkent030315
  • @ko1n
  • @le-jzr
  • @Lichtso
  • @lion128
  • @lissyx
  • @llogiq
  • @lumag
  • @lzutao
  • @lzybkr
  • @m-hilgendorf
  • @makubacki
  • @mmaekr
  • @m4b
  • @messense
  • @mitsuhiko
  • @mkroening
  • @mre
  • @Mrmaxmeier
  • n01e0
  • nathaniel-daniel
  • @nick96
  • @nico-abram
  • @npmccallum
  • @pchickey
  • @philipc
  • @PJB3005
  • @prettyroseslover
  • @Pzixel
  • @quake
  • @raindev
  • @RaitoBezarius
  • @ReturnRei
  • @rocallahan
  • @sanxiyn
  • @SAY-5
  • @skdltmxn
  • @sollyucko
  • @supervacuus
  • @Swatinem
  • @SweetVishnya
  • @SquareMan
  • @tathanhdinh
  • @Techno-coder
  • @tiann
  • @ticki
  • @Timmmm
  • @Tiwalun
  • @track-5
  • @tux3
  • @wickerwacka
  • @willglynn
  • @woodruffw
  • @wyxloading
  • @xcoldhandsx
  • @x0rb3l
  • @x64k