Elfina是一个多架构ELF加载器,支持x86和x86-64二进制文件。
自v2.0.0起,该项目已用Rust实现。
最近,我一直在研究Windows上的逆向工程和PE文件格式。
之后,我开始探索ELF二进制文件,以更深入地学习Linux逆向工程和rootkit开发。
为了更好地理解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
在适用于Linux的Windows子系统(WSL2)上,Elfina无法执行32位ELF二进制文件。探测(--info)和64位执行工作正常。如需完整的32位支持,请使用原生Linux环境或虚拟机,如VirtualBox或VMWare。
--hexdump
--entropy
--disasm
| 架构 | 位数 | 常见设备 |
|---|
| x86 (i386) | 32位 | 老旧PC、32位Linux |
| x86-64 | 64位 | 现代PC、服务器 |
| ARM32 | 32位 | Raspberry Pi 2、旧版Android |
| AArch64 (ARM64) | 64位 | Raspberry Pi 3/4/5、现代Android |
| RISC-V 64 | 64位 | SiFive开发板、VisionFive、新兴Linux设备 |