vmlinux-to-elf:揭秘从原始内核镜像恢复可分析ELF文件的终极工具

【免费下载链接】vmlinux-to-elf A tool to recover a fully analyzable .ELF from a raw kernel, through extracting the kernel symbol table (kallsyms) 【免费下载链接】vmlinux-to-elf 项目地址: https://gitcode.com/gh_mirrors/vm/vmlinux-to-elf

vmlinux-to-elf是一款强大的工具,能够从原始内核镜像(如vmlinux/vmlinuz/bzImage/zImage)中恢复出完全可分析的ELF文件,并提取函数和变量符号,为嵌入式系统逆向工程提供关键支持。

🌟 什么是vmlinux-to-elf?

vmlinux-to-elf的核心功能是从原始内核二进制文件中提取内核符号表(kallsyms),通过解析这个几乎存在于每个内核中的压缩符号表,恢复出在原始二进制中不可见的字符串,最终生成可被IDA Pro和Ghidra等工具分析的ELF文件。

🔍 它如何工作?

内核符号表(kallsyms)包含"符号名称"、"符号地址"和"符号类型"等信息,这些信息通过简单的压缩算法紧密打包。vmlinux-to-elf通过启发式方法检测kallsyms.py中定义的各个结构的偏移量,包括:

  • kallsyms_addresses:每个符号的地址数组
  • kallsyms_num_syms:符号总数
  • kallsyms_names:压缩的符号名称
  • kallsyms_markers:用于快速查找符号名称偏移的查找表
  • kallsyms_token_tablekallsyms_token_index:用于解压缩符号名称的字符串片段和索引

🚀 主要功能亮点

  • ✅ 支持原始二进制 blob 或 ELF 内核文件作为输入
  • ✅ 自动检测和解压 Linux 内核使用的主要压缩格式(XZ、LZMA、GZip、BZ2、LZ4、LZO 和 Zstd)
  • ✅ 从输入文件中查找并提取嵌入式内核符号表(kallsyms)
  • ✅ 依靠常见函数序言签名推断指令集架构、字节序和位大小
  • ✅ 从 kallsyms 表中包含的符号推断内核入口点
  • ✅ 提供内核基地址的基本推断
  • ✅ 支持解压某些类型的 Android boot.img 文件
  • ✅ 生成可通过 IDA Pro 或 Ghidra 完全分析的 ELF 文件

💻 快速开始:安装与使用

安装方法

# 使用 uv
uv tool install git+https://gitcode.com/gh_mirrors/vm/vmlinux-to-elf

# 或使用 pipx
pipx install git+https://gitcode.com/gh_mirrors/vm/vmlinux-to-elf

基本使用

vmlinux-to-elf <input_kernel.bin> <output_kernel.elf>

本地开发环境设置

git clone https://gitcode.com/gh_mirrors/vm/vmlinux-to-elf
cd vmlinux-to-elf

# 使用 uv (本地开发环境)
uv sync

# 或系统级安装
uv tool install -e .

# 或使用 pipx
pipx install -e .

🛠️ 高级用法

除了基本转换功能,vmlinux-to-elf还提供了kallsyms-finder工具,可生成内核符号名称、地址和类型的纯文本输出,格式类似于/proc/kallsyms文件。

对于高级用户,还可以覆盖自动推断的参数:

usage: vmlinux-to-elf [-h] [--e-machine DECIMAL_NUMBER] [--bit-size BIT_SIZE]
                      [--file-offset HEX_NUMBER] [--base-address HEX_NUMBER]
                      [--bss-size BSS_SIZE] [--use-absolute]
                      input_file output_file

主要参数说明:

  • --e-machine:覆盖输出ELF的"e_machine"字段
  • --bit-size:指定内核位大小(32或64)
  • --file-offset:指定原始内核在文件中的偏移量
  • --base-address:覆盖输出ELF的基地址
  • --use-absolute:假设kallsyms偏移是绝对地址

📋 支持的内核和架构

vmlinux-to-elf支持从2.6.10(2004年12月)到当前6.4版本的内核,仅不支持显式配置为无CONFIG_KALLSYMS的内核。

支持检测的架构包括:MIPSEL、MIPSEB、ARMEL、ARMEB、PowerPC、SPARC、x86、x86-64、ARM64、MIPS64、SuperH、ARC。

🔧 故障排除与常见问题

如果遇到"KallsymsNotFoundException: No embedded symbol table found in this kernel"错误,通常表示内核未启用CONFIG_KALLSYMS配置。

对于复杂情况,建议尝试不同的基地址或使用--use-absolute参数强制使用绝对地址。

🤝 贡献与反馈

如果您有任何改进建议或发现bug,请随时提交issue或pull request。项目代码主要位于src/vmlinux_to_elf/目录下,核心功能实现包括架构检测、ELF符号化、kallsyms解析和内核解压等模块。

vmlinux-to-elf为内核分析和逆向工程提供了强大支持,无论是嵌入式系统开发还是安全研究,都是一款不可或缺的工具。通过恢复内核符号表,它大大降低了内核分析的难度,为开发者和研究人员打开了深入理解内核工作原理的大门。

【免费下载链接】vmlinux-to-elf A tool to recover a fully analyzable .ELF from a raw kernel, through extracting the kernel symbol table (kallsyms) 【免费下载链接】vmlinux-to-elf 项目地址: https://gitcode.com/gh_mirrors/vm/vmlinux-to-elf

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐