一个 42 学校项目,实现了针对 64 位 ELF 可执行文件的二进制打包器。该打包器对可执行文件的代码段进行加密,并注入一个在运行时执行的解密例程。
Woody-Woodpacker 是一个程序,它接收一个 64 位 ELF 二进制文件作为输入,并创建一个名为 woody 的新加密版本。当执行 woody 二进制文件时:
该项目探索了:
原始二进制 → [Woody-Woodpacker] → 加密二进制 (woody)
woody 可执行文件./woody → 解密代码 → 打印 "....WOODY...." → 执行原始程序
# 克隆仓库
git clone https://gitlab.com/Aurh1l/woody-woodpacker.git
cd woody-woodpacker
# 编译项目
make
# 现在 woody_woodpacker 可执行文件已就绪
./woody_woodpacker
./woody_woodpacker <binary_file>
这会在当前目录下创建一个名为 woody 的新文件。
# 打包一个二进制文件
./woody_woodpacker /bin/ls
# 执行打包后的二进制文件
./woody
# 输出: ....WOODY....
# [然后是正常的 ls 输出]
# 比较原始二进制与打包后的行为
/bin/ls -la
./woody -la
# 两者应该产生相同的输出(在 "....WOODY...." 之后)
打包器操作以下 ELF 组件:
.text 节该项目通常使用一种简单的加密方法,例如:
段填充感染法(Silvio Cesare 方法):
┌─────────────────────────┐
│ ELF 头部 │
├─────────────────────────┤
│ 程序头部 │
├─────────────────────────┤
│ 解密存根 │ ← 注入的代码
├─────────────────────────┤
│ 加密的 .text 节 │ ← 原始代码(已加密)
├─────────────────────────┤
│ 其他节 │
├─────────────────────────┤
│ 节头部 │
└─────────────────────────┘
本项目是 42 学校课程的一部分,仅用于教育目的。
此工具是为教育目的而创建的,作为 42 学校课程的一部分。请负责任地使用,仅用于你拥有或有权修改的二进制文件。作者不对本软件的任何滥用负责。