
如何在十分钟内读懂并修改 ELF、PE、MachO 二进制文件LIEF 使用指南【免费下载链接】LIEFLIEF - Library to Instrument Executable Formats (C, Python, Rust)项目地址: https://gitcode.com/gh_mirrors/li/LIEF凌晨三点你刚拿到一个加壳的恶意样本IDA 里看到的是乱码一样的导入表或者你只想给公司的一个 Linux 程序换个动态链接器却发现手写二进制解析要三天又或者你维护的 Windows 工具需要批量修改图标资源网上搜到的方案全是十几年前的 VB 脚本。这些问题的根源只有一个可执行文件格式晦涩难懂。ELF、PE、MachO 各有各的段、节、符号表和重定位规则手写解析器相当于在三条完全不同语法的外语里来回切换。而LIEFLibrary to Instrument Executable Formats正是为此而生的跨平台开源库——它用一套友好的 API同时打通了解析与修改 ELF、PE、MachO 等主流二进制格式的能力支持 Python、C、Rust、C 四种语言。简单说别人需要两周搞定的事你用 LIEF 可能只需要 10 行代码。 为什么二进制格式会劝退大多数人先看一个现实一个 ELF 文件里藏着program headers程序头、section headers节头、符号表、重定位表、动态段……每个字段的偏移、字节序、对齐方式都有严格规定。PE 文件更复杂光Optional Header里的字段就够你读一下午。MachO 则分为 Fat Binary、多个 load command彼此环环相扣。传统做法是三种路径系统自带工具readelf、objdump、dumpbin只能看不能改十六进制编辑器改一个字节都要心惊胆战改了偏移后面全崩手写解析器解析容易改完还能正确重建才是地狱难度而 LIEF 的核心价值就是把这套解析Parse→ 修改Modify→ 重建Write的完整闭环封装好让你专注业务本身。⚡ 最小实战10 行 Python 给 ELF 加一个新节不整虚的直接上手。先安装pip install lief然后打开任意一个 ELF 可执行文件比如/bin/ls给它在LOAD段里塞入一个新节并写回磁盘import lief binary lief.ELF.parse(/bin/ls) # 遍历每个节的名称与虚拟地址 for section in binary.sections: print(section.name, hex(section.virtual_address)) # 新建一个节并加入二进制 new_section lief.ELF.Section(.my_new_section) new_section.content b\x90 * 4096 # NOP 填充 binary.add(new_section) # 写回磁盘得到一个全新的可执行文件 binary.write(/tmp/ls_patched)整个过程读取 → 遍历 → 修改 → 落盘。你不需要关心节头表怎么扩容、偏移怎么对齐——这些脏活 LIEF 的 Builder 全替你做了。下面是官方的examples/python/目录里真实存在的玩法推荐你先跑一遍感受修改可执行文件和读文件一样简单给 ELF 换动态链接器elf_change_interpreter.py——把/bin/ls从 glibc 换成 musl只改一行binary.interpreter混淆 ELF 符号elf_symbol_obfuscation.py——把.symtab里所有静态符号名随机化跑完readelf -s一看函数名全变成了乱码# 换解释器就这么简单 binary lief.ELF.parse(/bin/ls) binary.interpreter /usr/lib/ld-musl-x86_64.so.1 binary.write(/tmp/ls_musl) 小结LIEF 帮你把二进制文件抽象成了一个普通对象。读属性、改属性、调方法写完再write()文件完整性由库保证。 场景拆解三个真实故事三种真实收益故事一安全分析——破解哈希对比逻辑很多 crackme 会把密码是否正确的判断封装在一个函数里。逆向工程师的经典套路是找到那个 hash 校验函数把它 patch 成return 1。LIEF 让这个过程彻底脚本化。官方教程里有一个hashme样本解析后直接定位符号、定位函数所在节用汇编指令替换函数体再重新写盘。整个过程不需要打开 GUI不需要手动抄偏移。对你的价值恶意软件分析中快速识别可疑导入、定位校验逻辑、批量 patch 多个样本——这些原本按小时计费的手工活现在可以写进自动化流水线。故事二PE 逆向——看懂并重写导入表Windows 恶意样本最常用的手法就是隐藏导入表。LIEF 对 PE 的支持深度到了结构级导入表Import Table、IAT、导出表、资源节、TLS、Rich Header、Authenticode 签名全部有专门的对象模型。官方文档中有一张图清晰展示了 LIEF 修改 PE 导入表前后.idata段的结构变化——ILT、IAT、DLL 名称、Hint/Name 表在重建后被完整重排程序依然可以正常运行。binary lief.PE.parse(C:/Windows/explorer.exe) # 读取 Rich Header确认编译工具链 rich binary.rich_header if rich: print(Rich Header key:, hex(rich.key))对你的价值给样本洗白导入表做免杀对抗分析、提取加壳程序的特征、批量审计二进制供应链——PE 世界里那些让你头疼的结构在这里都是普通对象。故事三软件分发——批量替换程序资源你可能不知道修改 PE 资源图标、版本号、字符串表也是 LIEF 的拿手好戏。官方教程演示了用ResourcesManager把 MFC 程序的对话框资源整个换掉输出后程序 UI 直接变成新版。binary lief.PE.parse(legacy_app.exe) manager binary.resources_manager # 遍历/替换资源节点操作像操作文件树一样直观对你的价值批量品牌化定制换 logo、换版本号、在 CI 流水线里自动修改产物、应急替换存在漏洞的资源文件——不用重新编译改完直接分发。 小结无论目标是 ELF、PE 还是 MachO解析成对象 → 改属性 → 重建都是同一条思路。学会一个三种格式通吃。 横向对比LIEF 与其他方案差在哪维度LIEFreadelf/objdump 等系统工具手写解析器其他二进制库如 pyelftools解析格式ELF/PE/MachO/COFF/OAT/DEX 等单一格式自己实现通常只覆盖一种格式修改能力✅ 改完重建保证可执行❌ 只能读风险极高大部分只读语言支持Python/C/Rust/C命令行绑定语言单一语言学习成本低对象化 API低但能力有限极高中进阶能力反汇编/汇编/PDB/DWARF/ObjC无无无一句话结论如果只是看一眼系统工具够了但如果你的目标里有改这个字LIEF 基本是当前开源生态里覆盖面最广、最省心的选择。 进阶玩法藏在这些角落里的隐藏能力入门之后下面这些能力可能正是你要找的反汇编与汇编引擎内置对 x86/x86-64、AArch64、ARM、RISC-V、MIPS、PowerPC、eBPF 的指令支持src/asm/、api/python/examples/disassembler.py可以做定位→修改→重汇编的完整链路调试信息DWARF 与 PDB 的解析配套 Ghidra / BinaryNinja 插件plugins/目录把二进制分析直接嵌进你熟悉的 GUIAndroid 移动格式OAT、DEX、ART、VDEX 都能解析做 App 逆向和 ART 研究的人会爱不释手Runtime 运行时 API不仅改文件还能在程序运行时操作自身适合做 hook、插桩实验Rust 生态如果你用 Rustliefcrate 提供了与 Python 等价的能力适合写高性能分析工具项目自带的教程目录doc/sphinx/下还藏着一批宝藏文档ELF 转库bin2lib、Frida 免 root 使用、Mach-O 修改、ELF Coredump 分析……每一个都是可以单独写一篇实战帖的深度话题建议按需取用。 行动号召现在就迈出第一步如果你想体验操控二进制文件的乐趣推荐按这个顺序来安装pip install liefPython或brew install liefmacOSC 项目用find_package(LIEF REQUIRED)Rust 加一行lief 0.17依赖即可跑通最小示例先复制上面加节的代码拿/bin/ls练手跑完你会立刻有成就感深入官方文档文档里自带完整的格式指南、API 参考和 13 篇图文教程配合源码仓库examples/目录里的 30 多个可运行示例elf_add_section.py、pe_authenticode.py、macho_reader.py等边读边改加入社区遇到问题可以到项目 Issue 区搜索历史讨论或参与 Discord 交流需要从源码构建时仓库地址是https://gitcode.com/gh_mirrors/li/LIEF文档和示例都在仓库内部不需要联网就能开读。最后提醒一句修改任何二进制之前永远先备份原文件。LIEF 的重建逻辑很可靠但改坏一个字节导致程序崩溃这种事谁都不想用自己的生产环境去验证。工具再好安全意识才是底线。从今天起当别人还在为 ELF 头格式挠头时你已经可以用十几行代码随意操控这些二进制文件了。这就是 LIEF 带给你的自由。【免费下载链接】LIEFLIEF - Library to Instrument Executable Formats (C, Python, Rust)项目地址: https://gitcode.com/gh_mirrors/li/LIEF创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考