
ELF 바이너리 패커로, 코드 섹션을 암호화하고 64비트 Linux 실행 파일에 런타임 복호화 스텁을 주입하여 코드 인젝션 및 바이너리 조작 기술을 시연합니다.
64비트 ELF 실행 파일을 위한 바이너리 패커를 구현하는 42 학교 프로젝트입니다. 이 패커는 실행 파일의 코드 섹션을 암호화하고, 런타임에 실행되는 복호화 루틴을 주입합니다.
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 학교 커리큘럼의 일환으로 교육 목적으로 제작되었습니다. 소유권이 있거나 수정 권한이 있는 바이너리에 대해서만 책임감 있게 사용하십시오. 저자는 이 소프트웨어의 오용에 대해 책임을 지지 않습니다.