
Carregador de ELF multi-arquitetura e kit de ferramentas de análise com sondagem, desmontagem, dump hexadecimal, cálculo de entropia e execução mmap/memfd para binários x86 e x86-64.
Elfina é um carregador ELF multi-arquitetura que suporta binários x86 e x86-64.
Este projeto foi implementado em Rust a partir da v2.0.0.
Recentemente, tenho estudado engenharia reversa no Windows e o formato de arquivo PE.
Depois disso, comecei a explorar binários ELF para aprender mais sobre engenharia reversa no Linux e desenvolvimento de rootkits.
Para entender melhor como executáveis ELF são carregados e executados, desenvolvi o Elfina como um projeto de aprendizado focado no kernel Linux e no formato de arquivo ELF.
Se você achar este projeto útil ou informativo, uma ⭐ seria apreciada!
Este projeto destina-se exclusivamente a fins educacionais e de pesquisa.
Ele foi projetado para ajudar a entender:
--mmap--memfd--info exibe metadados e estrutura do ELF--hexdump : Exibe a representação hexadecimal do arquivo ELF.--hexdump-out: Salva o resultado de --hexdump em um arquivo específico.--entropy: Calcula a entropia para ajudar a identificar seções empacotadas ou comprimidas.--entropy-out: Salva o resultado de --entropy em um arquivo específico.--disasm: Desmonta o binário ELF.--disasm-out: Salva o resultado de --disasm em um arquivo específico.sudo apt install gcc-multilib
Baixe e extraia o pacote de lançamento:
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
O layout é mostrado a seguir:
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>
Clone o repositório e compile o projeto:
git clone https://github.com/iss4cf0ng/Elfina
cd Elfina/C
make
ou
chmod +x build.sh
./build.sh
git clone https://github.com/iss4cf0ng/Elfina
cd Elfina/Rust
chmod +x build.sh
./build.sh
No Subsistema Windows para Linux (WSL2), o Elfina não pode executar arquivos binários ELF de 32 bits. A sondagem (--info) e a execução de 64 bits funcionam normalmente. Para suporte completo a 32 bits, use um ambiente Linux nativo ou uma VM como VirtualBox ou VMWare.
--hexdump
--entropy
--disasm
| Arquitetura | Bits | Dispositivos Comuns |
|---|
| x86 (i386) | 32 bits | PCs antigos, Linux 32 bits |
| x86-64 | 64 bits | PCs modernos, servidores |
| ARM32 | 32 bits | Raspberry Pi 2, Android antigo |
| AArch64 (ARM64) | 64 bits | Raspberry Pi 3/4/5, Android moderno |
| RISC-V 64 | 64 bits | Placas SiFive, VisionFive, dispositivos Linux emergentes |