libgoblin


문서
https://docs.rs/goblin/
변경 로그
사용법
Goblin은 rustc 1.85.0 (Rust 2024 에디션)이 필요합니다.
Cargo.toml에 추가하세요
[dependencies]
goblin = "0.10"
기능
- 멋진 크레이트 이름
- 제로-카피, 크로스-플랫폼, 엔디안 인식, ELF64/32 구현 - 와우!
- 제로-카피, 크로스-플랫폼, 엔디안 인식, 32/64비트 Mach-o 파서 - 대단해!
- PE 32/64비트 파서 - 빙!
- Unix 및 BSD 스타일 아카이브 파서 (후자는 [@willglynn] 덕분) - 만세!
- 많은 cfg 옵션 - 머리가 핑 돌고 소스 읽다가 화날 거예요!
- 퍼징됨 - "기쁘게도 goblin이 1억 번의 퍼징 실행, 시드 1~100에 대해 각 100만 번 실행을 견뎠습니다." - [@sanxiyn]
- 테스트
libgoblin은 바이너리 파싱, 로딩, 분석을 위한 원스톱 솔루션을 목표로 합니다.
사용 사례
libgoblin은 주로 다음과 같은 중요한 사용 사례를 지원합니다:
-
코어, std-프리 #[repr(C)] 구조체, 작은 컴파일 시간, 32/64 (또는 둘 다) 자유롭게.
-
타입 퍼닝. 한 타입에 함수를 정의하면 32비트 또는 64비트 변형에서 작동하도록 - 실제로 아무것도 변경하지 않고, 매크로도 없습니다! 기본 예제는 examples/automagic.rs를 참조하세요.
-
std 모드. Pread와 Pwrite를 통한 읽기/쓰기 구현, 파일 읽기, 편의 할당, 추가 메서드 등을 제공합니다. 이는 할당이 가능하고 디스크에서 바이너리를 읽고자 하는 클라이언트를 위한 것입니다.
-
Endian_fd. 정말 끔찍한 이름이죠 😆 이것은 panopticon이나 falcon과 같은 바이너리 분석에서 외부 엔디언의 바이너리를 읽어야 하거나, 크로스 플랫폼 외부 아키텍처 binutils를 구축하는 기반으로 사용됩니다. 예를 들어 cargo-sym과 bingrep이 간단한 예시이며, 가능성은 무한합니다.
이 크레이트로 할 수 있는 몇 가지 예시입니다 (구현을 도와서 완성할 수도 있습니다):
- 컴파일러를 작성하고 이를 사용하여 바이너리 생성 (모든 원시 C 구조체는
Pwrite에서 파생됨).
- 다양한 바이너리 형식을 로드, 파싱, 분석하는 바이너리 분석 도구를 작성하세요, 예: panopticon 또는 falcon.
- 반-기능적 동적 링커를 작성하세요.
- 커널을 작성하고
no_std cfg를 사용하여 바이너리를 로드하세요. 즉, 기본적으로 구조체와 상수 정의(C 헤더와 같음)만 있을 뿐 - fd도, 출력도, std도 없습니다.
- bin2json 도구를 작성하세요, 바이너리 형식이 JSON에 있으면 안 될 이유가 있나요?
Cfgs
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 환경을 허용
관리자
- PE: [@kkent030315]
- Elf: [@m4b], 지원 가능
- Mach-o: [@m4b], 지원 가능
관리자는 해당 백엔드에 대한 첫 번째 연락 리뷰어입니다. 이전 기여, 활동, 기본 지식, 그리고 우호적이고 사교적인 행동을 기준으로 선정됩니다 :D
현재 저([@m4b])만 모든 PR에 대한 병합 권한이 있습니다. 미래에는 해당 백엔드의 관리자도 병합 권한을 가질 가능성이 높습니다.
마지막으로, 저는 여전히 모든 PR에 대해 간략한 리뷰를 할 가능성이 높지만, 대부분/전적으로 해당 백엔드의 관리자에게 맡길 것입니다.
그리고 항상 Bill과 Ted의 지혜를 기억하세요: "서로에게 훌륭하게 행동하세요!"
기여자
모두 감사합니다 ❤️ !
사전순으로:
- [@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]
- [@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]