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"

特性

  • 超棒的 crate 名称
  • 零拷贝、跨平台、端序感知的 ELF64/32 实现——哇!
  • 零拷贝、跨平台、端序感知的 32/64 位 Mach-o 解析器——好家伙!
  • PE 32/64 位解析器——咚!
  • 支持 Unix 和 BSD 风格的存档解析器(后者感谢 @willglynn)——万岁!
  • 多种 cfg 选项——让你头晕目眩,阅读源码时让你愤怒!
  • 经过模糊测试——“我很高兴地报告,goblin 经受住了 1 亿次模糊测试运行,种子 1~100 各 100 万次。”—— @sanxiyn
  • 测试

libgoblin 旨在成为你进行二进制解析、加载和分析的一站式解决方案。

使用场景

Goblin 主要支持以下重要使用场景:

  1. 核心、无 std 的 #[repr(C)] 结构体,编译时间极短,可自由选择 32/64 位(或两者)。

  2. 类型双关。在类型上定义一次函数,但使其同时适用于 32 位和 64 位变体——几乎无需修改,且无需宏!请参见 examples/automagic.rs 的基本示例。

  3. std 模式。通过 Pread 和 Pwrite 提供读取和写入实现,支持从文件读取、便捷分配、额外方法等。适用于能够分配内存并希望从磁盘读取二进制的用户。

  4. Endian_fd。一个糟糕的名字 😆 适用于像 panopticon 或 falcon 这样的二进制分析工具,它需要读取外部端序的二进制文件,或作为构建跨平台外部架构二进制工具的基础,例如 cargo-sym 和 bingrep 是简单的例子,但潜力无限。

以下是一些你可以使用此 crate 实现的功能(或帮助实现以便达成的):

  1. 编写编译器并使用它生成二进制文件(所有原始 C 结构体都派生自 Pwrite)。
  2. 编写一个加载、解析和分析各种二进制格式的二进制分析工具,例如 panopticon 或 falcon。
  3. 编写一个半功能动态链接器。
  4. 编写一个内核并使用 no_std 配置加载二进制文件。即,它基本上只是结构体和常量定义(如同 C 头文件)——无文件描述符、无输出、无 std。
  5. 编写一个 bin2json 工具,二进制格式为什么不可以是 JSON 呢?

编译配置

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 - 简洁可执行文件(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. 请为提交添加前缀,标明受影响的二进制组件;越具体越好,例如,如果您仅修改 elf 模块中的重定位,则使用“elf.reloc: 为 Z80 添加新常量”
  2. 提交信息必须解释其更改,不要使用泛泛的“changed”或“fix”;如果您在 PR 中推送此类提交,请注意 @m4b 或其他人很可能会将其压缩合并。
  3. 如果要对模块进行重大更改,请先提出 issue 并进行讨论;我不希望因为技术方向不合适等原因浪费您的时间。
  4. 如果您的 PR 未得到关注,请回复 PR 上提出的所有相关评论,若仍未回复,请在 GitHub 上 @ @m4b 或发送邮件至 @m4b。
  5. 如果您添加新功能,请添加测试。即使不是,也请随意添加测试,测试很棒且在 Rust 中很容易实现。
下载工具
@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