
Strumento multi-architettura per caricamento e analisi di ELF con probing, disassemblaggio, hexdump, calcolo dell'entropia ed esecuzione tramite mmap/memfd per binari x86 e x86-64.
Elfina è un caricatore ELF multi-architettura che supporta binari x86 e x86-64.
Questo progetto è stato implementato in Rust dalla versione v2.0.0.
Recentemente, ho studiato ingegneria inversa su Windows e il formato dei file PE.
Successivamente, ho iniziato a esplorare i binari ELF per imparare di più sull'ingegneria inversa su Linux e lo sviluppo di rootkit.
Per comprendere meglio come i file eseguibili ELF vengono caricati ed eseguiti, ho sviluppato Elfina come progetto di apprendimento incentrato sul kernel Linux e il formato dei file ELF.
Se trovi questo progetto utile o informativo, una ⭐ sarebbe gradita!
Questo progetto è destinato esclusivamente a fini educativi e di ricerca.
È progettato per aiutare a comprendere:
--mmap--memfd--info mostra i metadati e la struttura dell'ELF--hexdump : Visualizza la rappresentazione esadecimale del file ELF.--hexdump-out: Salva il risultato di --hexdump in un file specifico.--entropy: Calcola l'entropia per aiutare a identificare sezioni compresse o impacchettate.--entropy-out: Salva il risultato di --entropy in un file specifico.--disasm: Disassembla il binario ELF.--disasm-out: Salva il risultato di --disasm in un file specifico.sudo apt install gcc-multilib
Scarica ed estrai il pacchetto di rilascio:
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
La struttura è mostrata di seguito:
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 il repository e compila il progetto:
git clone https://github.com/iss4cf0ng/Elfina
cd Elfina/C
make
oppure
chmod +x build.sh
./build.sh
git clone https://github.com/iss4cf0ng/Elfina
cd Elfina/Rust
chmod +x build.sh
./build.sh
Su Windows Subsystem for Linux (WSL2), Elfina non può eseguire file binari ELF a 32 bit. Il probing (--info) e l'esecuzione a 64 bit funzionano. Per il supporto completo a 32 bit, utilizzare un ambiente Linux nativo o una VM come VirtualBox o VMWare.
--hexdump
--entropy
--disasm
| Architettura | Bit | Dispositivi comuni |
|---|
| x86 (i386) | 32-bit | Vecchi PC, Linux a 32 bit |
| x86-64 | 64-bit | PC moderni, server |
| ARM32 | 32-bit | Raspberry Pi 2, Android più vecchio |
| AArch64 (ARM64) | 64-bit | Raspberry Pi 3/4/5, Android moderno |
| RISC-V 64 | 64-bit | Schede SiFive, VisionFive, dispositivi Linux emergenti |