
Cargador ELF multiarquitectura y kit de herramientas de análisis con sondeo, desensamblado, volcado hexadecimal, cálculo de entropía y ejecución mmap/memfd para binarios x86 y x86-64.
Elfina es un cargador ELF multiarquitectura que soporta binarios x86 y x86-64.
Este proyecto ha sido implementado en Rust desde la versión v2.0.0.
Recientemente, he estado estudiando ingeniería inversa en Windows y el formato de archivo PE.
Después de eso, comencé a explorar binarios ELF para aprender más sobre ingeniería inversa en Linux y desarrollo de rootkits.
Para comprender mejor cómo se cargan y ejecutan los ejecutables ELF, desarrollé Elfina como un proyecto de aprendizaje centrado en el kernel de Linux y el formato de archivo ELF.
Si encuentras este proyecto útil o informativo, ¡una ⭐ sería apreciada!
Este proyecto está destinado únicamente a fines educativos y de investigación.
Está diseñado para ayudar a comprender:
--mmap--memfd--info muestra metadatos y estructura del ELF--hexdump : Muestra la representación hexadecimal del archivo ELF.--hexdump-out: Guarda el resultado de --hexdump en un archivo específico.--entropy: Calcula la entropía para ayudar a identificar secciones empaquetadas o comprimidas.--entropy-out: Guarda el resultado de --entropy en un archivo específico.--disasm: Desensambla el binario ELF.--disasm-out: Guarda el resultado de --disasm en un archivo específico.sudo apt install gcc-multilib
Descarga y extrae el paquete de lanzamiento:
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
El diseño se muestra a continuación:
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>
Clona el repositorio y compila el proyecto:
git clone https://github.com/iss4cf0ng/Elfina
cd Elfina/C
make
o
chmod +x build.sh
./build.sh
git clone https://github.com/iss4cf0ng/Elfina
cd Elfina/Rust
chmod +x build.sh
./build.sh
En el Subsistema de Windows para Linux (WSL2), Elfina no puede ejecutar archivos binarios ELF de 32 bits. El sondaje (--info) y la ejecución de 64 bits funcionan correctamente. Para soporte completo de 32 bits, utiliza un entorno Linux nativo o una máquina virtual como VirtualBox o VMWare.
--hexdump
--entropy
--disasm
| Arquitectura | Bits | Dispositivos comunes |
|---|
| x86 (i386) | 32 bits | PCs antiguos, Linux de 32 bits |
| x86-64 | 64 bits | PCs modernos, servidores |
| ARM32 | 32 bits | Raspberry Pi 2, Android más antiguo |
| AArch64 (ARM64) | 64 bits | Raspberry Pi 3/4/5, Android moderno |
| RISC-V 64 | 64 bits | Placas SiFive, VisionFive, dispositivos Linux emergentes |