SuperAPI AI 工具集

re-format-elf

安全与审计

查看项目

更新于 10-15 21:34

技能介绍

用途:面向 Linux ELF 可执行文件与 .so 共享库,理解文件结构、查看初始化回调、GOT/PLT 与符号,并评估安全属性。不适用于 PE(re-format-pe)、Mach-O(re-format-macho)和裸二进制固件(re-firmware);若只需函数逻辑,应直接用反编译技能。

工具准备:readelf、objdump 来自 binutils,macOS 为 greadelf/gobjdump;elfutils 提供 eu-* 工具族;patchelf 用于修改 ELF 头或加载器,分析时先只读。安装命令按原样保留,例如 apt install binutils、brew install elfutils,并用 readelf --version、objdump -V、eu-readelf -h /bin/ls、patchelf --version 验证。

主要能力:读取三表——readelf -h(ELF 头)、-l(program headers,含装载偏移与 GNU_STACK)、-S(section headers);对照入口点、运行时内存布局与静态节视图。可查 .init_array/.fini_array 回调,注意 .init_array 在 main 之前正序执行、.fini_array 在退出清理阶段逆序执行。可解析 .plt 桩、重定位表、.dynsym 动态符号与未定义导入符号,并结合 dynamic section 的 DT_* 标签理解关联链(DT_STRTAB/DT_SYMTAB/DT_SYMENT/DT_GNU_HASH)与 JUMP_SLOT、GLOB_DAT、RELATIVE 重定位行为。

符号恢复与安全检查:stripped 后仅剩 .dynsym 时,用 strings 交叉引用、库函数签名匹配、从 main 逆推调用关系恢复。readelf -l 检查 GNU_STACK 是否有 E 标志(NX)、GNU_RELRO 是否配合 BIND_NOW 构成全 RELRO;__stack_chk_fail 仅作为 SSP 线索,静态链接可能误报。头字段被伪造时,可用 xxd 加 Python struct 按偏移手工解析,不要当损坏文件丢弃。

限制与注意:跨架构 ARM/MIPS 目标本机 objdump 可能报 unknown format,需交叉工具或 QEMU;早期初始化链还包括比 .init_array 更早的 .preinit_array;R_X86_64_RELATIVE 的 addend 计算需与 vaddr 体系自洽;SHF_ALLOC 节必须被 PT_LOAD 覆盖;重定位目标段必须可写;gzexe 包裹的 ELF 需先解压;OLLVM 混淆时可考虑在 GOT 出口拦截。