
Multi-architecture ELF loader and analysis toolkit with probing, disassembly, hexdump, entropy calculation, and mmap/memfd execution for x86 and x86-64 binaries.
Elfina — это мультиархитектурный загрузчик ELF, поддерживающий бинарные файлы x86 и x86-64.
Начиная с версии v2.0.0, проект реализован на Rust.
Недавно я изучал реверс-инжиниринг в Windows и формат файлов PE.
После этого я начал изучать ELF-бинарные файлы, чтобы узнать больше о реверс-инжиниринге Linux и разработке руткитов.
Чтобы лучше понять, как загружаются и выполняются ELF-исполняемые файлы, я разработал Elfina в качестве учебного проекта, посвященного ядру Linux и формату ELF.
Если вы находите этот проект полезным или познавательным, звезда ⭐ будет оценена!
Этот проект предназначен только для образовательных и исследовательских целей.
Он разработан, чтобы помочь понять:
--mmap--memfd--info отображает метаданные и структуру ELF--hexdump : Отображение шестнадцатеричного представления ELF-файла.--hexdump-out: Сохранение результата --hexdump в указанный файл.--entropy: Вычисление энтропии для выявления упакованных или сжатых секций.--entropy-out: Сохранение результата --entropy в указанный файл.--disasm: Дизассемблирование ELF-бинарного файла.--disasm-out: Сохранение результата --disasm в указанный файл.sudo apt install gcc-multilib
Скачайте и распакуйте релизный пакет:
wget https://github.com/iss4cf0ng/Elfina/releases/latest/download/elfina-linux.tar.gz
tar -xzf elfina-linux.tar.gz
cd elfina
chmod +x ./elfina
chmod +x ./elfina32
Структура выглядит следующим образом:
elfina/
├ elfina
└ elfina32
// ---------- elfina (x64) ----------
./elfina --coffee
./elfina --info <x64_elf_path>
./elfina --mmap <x64_elf_path> [arguments]
./elfina --memfd <x64_elf_path> [arguments]
./elfina --hexdump <x64_elf_path>
./elfina --hexdump-out <x64_elf_path>
./elfina --entropy <x64_elf_path>
./elfina --entropy-out <output_file> <x64_elf_path>
./elfina --disasm <x64_elf_path>
./elfina --disasm-out <output_file> <x64_elf_path>
// ---------- elfina32 (x86) ----------
./elfina32 --coffee
./elfina32 --info <x86_elf_path>
./elfina32 --mmap <x86_elf_path> [arguments]
./elfina32 --memfd <x86_elf_path> [arguments]
./elfina32 --hexdump <x86_elf_path>
./elfina32 --hexdump-out <x86_elf_path>
./elfina32 --entropy <x86_elf_path>
./elfina32 --entropy-out <output_file> <x86_elf_path>
./elfina32 --disasm <x86_elf_path>
./elfina32 --disasm-out <output_file> <x86_elf_path>
Клонируйте репозиторий и выполните сборку:
git clone https://github.com/iss4cf0ng/Elfina
cd Elfina/C
make
или
chmod +x build.sh
./build.sh
git clone https://github.com/iss4cf0ng/Elfina
cd Elfina/Rust
chmod +x build.sh
./build.sh
В подсистеме Windows для Linux (WSL2) Elfina не может выполнять 32-битные ELF-файлы. Зондирование (--info) и 64-битное выполнение работают нормально. Для полной поддержки 32-битных файлов используйте нативное окружение Linux или виртуальную машину, например VirtualBox или VMWare.
--hexdump
--entropy
--disasm
| Архитектура | Биты | Распространённые устройства |
|---|
| x86 (i386) | 32-бит | Старые ПК, 32-битный Linux |
| x86-64 | 64-бит | Современные ПК, серверы |
| ARM32 | 32-бит | Raspberry Pi 2, старые Android |
| AArch64 (ARM64) | 64-бит | Raspberry Pi 3/4/5, современные Android |
| RISC-V 64 | 64-бит | Платы SiFive, VisionFive, новые устройства на Linux |