Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
goblin — Un crate di analisi binaria birichino e multipiattaforma, scritto in Rust. | Kitploit
Strumenti/GitHubGitHub/m4b/goblin
Reverse EngineeringFuzzingAnalisi di Binari
GitHubm4b/goblin

goblin

Un crate di analisi binaria birichino e multipiattaforma, scritto in Rust.

Vedi Repository
1.5k2002 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

libgoblin

Actions crates.io version

di' le parole giuste

Documentazione

https://docs.rs/goblin/

registro delle modifiche

Utilizzo

Goblin richiede rustc 1.85.0 (edizione Rust 2024).

Aggiungi al tuo Cargo.toml

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

Caratteristiche

  • nome fantastico del crate
  • implementazione zero-copy, cross-platform, endian-aware per ELF64/32 - wow!
  • parser zero-copy, cross-platform, endian-aware per Mach-o 32/64 bit - zoiks!
  • parser PE 32/64 bit - bing!
  • un parser di archivi Unix e BSD (quest'ultimo grazie a @willglynn) - evviva!
  • molte opzioni cfg - ti farà girare la testa e ti farà arrabbiare quando leggi il sorgente!
  • fuzzed - "Sono felice di riferire che goblin ha resistito a 100 milioni di esecuzioni di fuzzing, 1 milione di esecuzioni per ogni seed da 1 a 100." - @sanxiyn
  • test

libgoblin mira a essere il tuo sportello unico per parsing, caricamento e analisi di binari.

Casi d'uso

Goblin supporta principalmente i seguenti casi d'uso importanti:

  1. Strutture #[repr(C)] core, senza std, tempo di compilazione ridotto, 32/64 (o entrambi) a tuo piacimento.

  2. Type punning. Definisci una funzione una volta su un tipo, ma falla funzionare su varianti a 32 o 64 bit - senza cambiare nulla, e niente macro! Vedi examples/automagic.rs per un esempio base.

  3. Modalità std. Aggiunge implementazioni di lettura e scrittura tramite Pread e Pwrite, lettura da file, allocazioni di comodo, metodi extra, ecc. Questo è per client che possono allocare e vogliono leggere binari dal disco.

  4. Endian_fd. Un nome davvero terribile 😆 questo è per analisi binaria come in panopticon o falcon che necessitano di leggere binari con endianness diversa, oppure come base per costruire binutils cross-platform per architetture straniere, ad es. cargo-sym e bingrep sono semplici esempi di questo, ma il cielo è il limite.

Ecco alcune cose che potresti fare con questo crate (o aiutare a implementare in modo che possano essere realizzate):

  1. Scrivere un compilatore e usarlo per generare binari (tutte le strutture C grezze hanno Pwrite derivato).
  2. Scrivere uno strumento di analisi binaria che carica, analizza e analizza vari formati binari, ad es., panopticon o falcon.
  3. Scrivere un linker dinamico semi-funzionante.
  4. Scrivere un kernel e caricare binari usando la configurazione no_std. Cioè, è essenzialmente solo definizioni di struct e const (come un header C) - nessun fd, nessun output, nessun std.
  5. Scrivere uno strumento bin2json, perché i formati binari non dovrebbero essere in JSON?

Configurazioni

libgoblin è progettato per essere massicciamente configurabile. Le flag attuali sono:

  • elf64 - binari elf a 64 bit, definizioni di struct repr(C)
  • elf32 - binari elf a 32 bit, definizioni di struct repr(C)
  • mach64 - definizioni di struct repr(C) per mach-o a 64 bit
  • mach32 - definizioni di struct repr(C) per mach-o a 32 bit
  • pe32 - definizioni di struct repr(C) per PE a 32 bit
  • pe64 - definizioni di struct repr(C) per PE a 64 bit
  • te - definizioni di struct repr(C) per Terse Executable (TE)
  • archive - un parser di archivi Unix
  • endian_fd - analizza in base all'endianness nel binario
  • std - per permettere ambienti no_std

Manutentori

  1. PE: @kkent030315
  2. Elf: @m4b, aperto a candidature
  3. Mach-o: @m4b, aperto a candidature

I manutentori sono i revisori di primo contatto per quel particolare backend. Vengono scelti in base ai contributi precedenti, all'attività, alla conoscenza di base e al comportamento amichevole e socievole :D

Attualmente, io (@m4b) ho solo diritti di merge per tutte le PR. In futuro è probabile che anche i manutentori di quel determinato backend avranno diritti di merge.

Infine, probabilmente darò comunque revisioni sommarie a tutte le PR, ma mi affiderò principalmente/in toto al manutentore per quel backend.

E ricorda sempre la saggezza di Bill e Ted: "Siate eccellenti gli uni con gli altri!"

Collaboratori

Grazie a tutti ❤️ !

In ordine lessicografico:

  • @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

Contribuire

Salvo diversa indicazione esplicita, accetti che i tuoi contributi siano concessi in licenza come descritto nel file LICENSE allegato (MIT).

  1. Per favore, prefissa i commit con il componente binario interessato; più specifico è meglio, ad es., se modifichi solo i relocation nel modulo elf, allora fai "elf.reloc: aggiunte nuove costanti per Z80"
  2. I messaggi di commit devono spiegare la loro modifica, niente generici "changed" o "fix"; se invii commit del genere su una PR, sappi che @m4b o qualcun altro molto probabilmente li schiaccerà.
  3. Se stai apportando una modifica importante a un modulo, per favore apri prima un issue e discutiamo; non voglio sprecare il tuo tempo se non è una buona direzione tecnica, o altro.
  4. Se la tua PR non sta ottenendo attenzione, per favore rispondi a tutti i commenti pertinenti sollevati sulla PR, e se ancora nessuna risposta, pinga @m4b su github e sentiti libero di inviare una email a @m4b.
  5. Per favore aggiungi test se stai aggiungendo una nuova funzionalità. Sentiti libero di aggiungere test anche se non lo stai facendo, i test sono fantastici e facili in Rust.
Scarica lo strumento
@ivlzme
  • @jackcmay
  • @jan-auer
  • @Javagedes
  • @jessehui
  • @jdub
  • @Jhynjhiruu
  • @johannst
  • @JohnScience
  • @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