
셸코드의 bad-bytes를 받아 제거하고, 기능이 보존된 정리된 셸코드를 반환합니다.
쉘코드의 배드바이트 추방자
개요 • 빠른 시작 • 대화형 TUI • 타겟 배드바이트 제거 • 배드바이트 프로파일 • 기능 • 아키텍처 • 시스템 요구 사항 • 의존성 • 빌드 • 설치 • 사용법 • 난독화 전략 • 널바이트 제거 전략 • ML 학습 • 에이전트 컬렉션 • 개발 • 문제 해결 • 라이선스
byvalver는 C로 작성된 CLI 도구로서, x86/x64/ARM/ARM64 쉘코드에서 배드바이트를 자동으로 제거(또는 "추방")하면서 완전한 기능적 동등성을 유지합니다.
v4.0의 새로운 기능: 크로스 아키텍처 지원
--arch 플래그를 통한 자동 Capstone 모드 선택v4.0.1 버그 수정:
can_handle 로직 수정 (패스스루 전략 대상)v4.2의 새로운 기능: 향상된 x64 지원
is_64bit_register(), is_extended_register(), build_rex_prefix()이 도구는 Capstone 역어셈블 프레임워크를 사용하여 명령어를 분석하고, 175개 이상의 순위가 매겨진 변환 전략을 적용하여 배드바이트가 포함된 코드를 동등한 대안으로 교체합니다.
일반적인 배드바이트 추방 프레임워크는 2가지 사용 모드를 제공합니다:
--bad-bytes 옵션을 통해 임의의 바이트를 추방하도록 지정할 수 있습니다 (예: 개행 문자에 안전한 쉘코드를 위한 --bad-bytes "00,0a,0d")--profile 옵션을 사용하면 일반적인 익스플로잇 시나리오에 대한 사전 구성된 배드바이트 세트를 사용할 수 있습니다 (예: --profile http-newline, --profile sql-injection, --profile alphanumeric-only)Windows, Linux, macOS를 지원합니다.
핵심 기술:
C 구현CapstoneNASM[!NOTE] 널바이트 제거 (
--bad-bytes "00"또는 기본값): 잘 테스트됨 / 일반 배드바이트 제거 (--bad-bytes "00,0a,0d"등): 새로 구현됨
몇 분 만에 byvalver를 시작해 보세요:
옵션 1: GitHub에서 (권장)```bash curl -sSL https://raw.githubusercontent.com/umpolungfish/byvalver/main/install.sh | bash
**옵션 2: 소스에서 빌드**```bash
git clone https://github.com/umpolungfish/byvalver.git
cd byvalver
make
sudo make install
sudo make install-man # Install man page
NULL BYTES 제거 (DEFAULT):```bash byvalver input.bin output.bin
**BAD-BYTE 프로필 사용:**```bash
# HTTP contexts (removes null, newline, carriage return)
byvalver --profile http-newline input.bin output.bin
# SQL injection contexts
byvalver --profile sql-injection input.bin output.bin
# Alphanumeric-only shellcode (most restrictive)
byvalver --profile alphanumeric-only input.bin output.bin
수동 BAD-BYTE 지정:```bash
byvalver --bad-bytes "00,0a,0d" input.bin output.bin
**고급 기능:**```bash
# Add obfuscation layer before denullification
byvalver --biphasic input.bin output.bin
# Enable ML-powered strategy selection
byvalver --ml input.bin output.bin
# Generate XOR-encoded shellcode with decoder stub
byvalver --xor-encode DEADBEEF input.bin output.bin
# Output in different formats
byvalver --format c input.bin output.c # C array
byvalver --format python input.bin output.py # Python bytes
byvalver --format hexstring input.bin output.hex # Hex string
항상 변환된 셸코드를 검증하십시오:```bash
python3 verify_denulled.py --bad-bytes "00,0a,0d" output.bin
python3 verify_functionality.py input.bin output.bin
### 크로스 아키텍처 지원
`byvalver`는 `--arch` 플래그를 통해 여러 아키텍처를 지원합니다:
**x86 (32-bit Intel/AMD)** - 150개 이상의 전략으로 완전히 지원됨```bash
byvalver --arch x86 --bad-bytes "00" x86_shellcode.bin output.bin
x64 (64-bit Intel/AMD) - 완전 지원 (기본값)```bash byvalver --arch x64 --bad-bytes "00,0a,0d" x64_shellcode.bin output.bin
**ARM (32-bit)** - 기본 전략을 갖춘 실험적 지원```bash
byvalver --arch arm --bad-bytes "00" arm_shellcode.bin output.bin
ARM64 (AArch64) - 기본 전략을 포함한 실험적 지원```bash byvalver --arch arm64 --bad-bytes "00,0a" arm64_shellcode.bin output.bin
**참고:**
- ARM/ARM64 지원은 핵심 명령어(MOV, 산술, 로드/스토어)에 초점을 맞춥니다.
- ARM에서는 더 간단한 배드바이트 프로필(예: 널 바이트만)을 사용하세요.
- ARM/ARM64가 선택되면 실험 경고가 표시됩니다.
- 기본 아키텍처 불일치 감지 기능이 있어 셸코드가 잘못된 아키텍처인 경우 경고합니다.
- 자동 아키텍처 감지는 향후 릴리스에서 계획 중입니다.
### 배치 처리
전체 디렉터리 처리:```bash
# Process all .bin files recursively
byvalver -r --pattern "*.bin" input_dir/ output_dir/
# Apply HTTP profile to all shellcode in directory
byvalver -r --profile http-newline input_dir/ output_dir/
byvalver에는 1:1 CLI 기능 동등성을 갖춘 대화형 TUI(텍스트 사용자 인터페이스)가 포함되어 있습니다.
TUI는 다음을 포함한 모든 bad-byte 제거 작업을 위한 직관적인 시각적 인터페이스를 제공합니다:
--menu 플래그로 TUI를 실행하세요:```bash
byvalver --menu
### 주요 기능:
TUI는 모든 CLI 기능을 포괄하는 9개의 메인 메뉴 옵션을 제공합니다:
1. **단일 파일 처리** - 개별 셸코드 파일을 시각적 피드백과 함께 처리
2. **디렉토리 일괄 처리** - 실시간 진행 상황 추적으로 전체 디렉토리 처리
3. **처리 옵션 구성** - 이중 위상 모드, PIC 생성, ML, 상세, 시뮬레이션 실행 전환
4. **나쁜 바이트 설정** - 수동 입력 또는 13개의 사전 정의된 프로필 중 선택
5. **출력 형식 설정** - 5가지 출력 형식(raw, C, Python, PowerShell, hexstring) 중 선택
6. **ML 메트릭 구성** - ML 전략 선택 및 메트릭 추적 구성
7. **고급 옵션** - XOR 인코딩, 타임아웃, 제한, 검증 설정
8. **구성 로드/저장** - INI 스타일 구성 파일 관리
9. **About byvalver** - 버전 및 도움말 정보
### 시각적 파일 브라우저:
- **디렉토리 탐색** - 화살표 키 또는 vi 스타일의 j/k 키 사용
- **파일/디렉토리 구분** - [FILE] 및 [DIR] 표시기
- **파일 크기 표시** - 사람이 읽기 쉬운 형식(B, KB, MB, GB)
- **확장자 필터링** (예: *.bin)
- **지능형 경로 처리** - 파일 경로가 제공되면 자동으로 상위 디렉토리로 이동
- **정렬된 표시** - 디렉토리 우선, 그 다음 알파벳순
- **다중 선택 모드**:
- 파일 선택 모드: 디렉토리로 이동, 파일만 선택
- 디렉토리 선택 모드: 일괄 처리를 위한 디렉토리 선택
- 두 모드: 파일 또는 디렉토리 선택
### 실시간 업데이트를 통한 일괄 처리:
일괄 처리 화면은 **실시간 피드백**을 제공합니다:
- **진행 표시줄** - 처리된 파일 표시 (예: `[============== ] 52/100 파일`)
- **구성 표시** - 활성 설정 표시:
- 나쁜 바이트 수 및 사용된 프로필
- 처리 옵션 (`Biphasic`, `PIC`, `XOR`, ML)
- 출력 형식
- **라이브 파일 통계** - 색상 코드 상태:
- 완료: X / Y (시도한 파일 / 총 파일)
- ✅ 성공 (녹색) - 남은 나쁜 바이트 없음
- ❌ 실패 (빨간색) - 오류 또는 남은 나쁜 바이트
- 성공률 백분율
- **현재 파일 표시** - 굵은 텍스트
- **다음 파일 미리보기** - 노란색/어두운 텍스트
- **동적 전략 통계 표** 표시:
- **모든 활성 전략** (10개 전략 제한 없음)
- **전체 전략 이름** (최대 50자, 잘림 없음)
- 전략별 성공/실패 횟수
- 성공률 백분율
- 성능별 색상 코드 (녹색 ≥80%, 노란색 50-79%, 빨간색 <50%)
- 50ms마다 실시간 업데이트
### 구성 관리:
**INI 스타일 형식**으로 구성을 로드 및 저장:```ini
[general]
verbose = 0
quiet = 0
show_stats = 1
[processing]
use_biphasic = 0
use_pic_generation = 0
encode_shellcode = 0
xor_key = 0xDEADBEEF
[output]
output_format = raw
[bad_bytes]
bad_bytes = 00
[ml]
use_ml_strategist = 0
metrics_enabled = 0
[batch]
file_pattern = *.bin
recursive = 0
preserve_structure = 1
example.conf에서 완전한 구성 템플릿을 확인할 수 있습니다.
2가지 입력 방법 사용 가능:
00,0a,0d)대화형 모드를 사용하려면 시스템에 ncurses 라이브러리가 설치되어 있어야 합니다:```bash
sudo apt install libncurses-dev
sudo dnf install ncurses-devel
brew install ncurses
애플리케이션은 ncurses 사용 가능 여부를 자동으로 감지하여 그에 따라 TUI 지원을 활성화합니다.
### 빌드 옵션:
TUI 지원은 ncurses 가용성에 따라 조건부 컴파일됩니다.
- 기본 빌드: `make` - ncurses가 있으면 TUI 포함
- TUI 강제 빌드: `make with-tui` - TUI 지원으로 빌드 (ncurses가 없으면 실패)
- TUI 제외: `make no-tui` - 더 작은 바이너리를 위해 TUI 없이 빌드
### 예제 워크플로우:
**단일 파일 처리:**
1. TUI 실행: `byvalver --menu`
2. "1. 단일 파일 처리" 선택
3. 시각적 파일 브라우저를 사용하여 입력 파일 찾기
4. 출력 파일 위치 찾기
5. 처리 시작 및 결과 확인
**배치 처리:**
1. TUI 실행: `byvalver --menu`
2. "2. 디렉토리 배치 처리" 선택
3. 셸코드 파일이 있는 입력 디렉토리 찾기
4. 출력 디렉토리 찾기
5. 파일 패턴(기본값: <file>.bin) 및 재귀 옵션 구성
6. 배치 처리 시작 및 전략 통계와 함께 실시간 진행 상황 보기
**설정 관리:**
1. TUI에서 모든 옵션 구성 (나쁜 바이트, 출력 형식, ML 등)
2. "8. 설정 로드/저장" 선택
3. 현재 설정을 파일로 저장 (예: `my_config.conf`)
4. 나중에: 설정 파일을 로드하여 모든 설정 복원
### 성능 참고 사항:
- **단일 파일 처리**: 즉각적인 시각적 피드백, 일반적인 셸코드에 대해 1초 미만
- **배치 처리**: 시각적 업데이트를 위해 파일 간 50ms 지연
- **대형 디렉토리(100개 이상 파일)**: 스캔에 1-2초 소요 가능
- **전략 초기화**: 첫 실행 시 2-5초 (세션당 한 번 비용)
### 터미널 호환성:
TUI는 다음에서 테스트되었습니다:
- GNOME Terminal
- Konsole
- xterm
- iTerm2 (macOS)
- Windows Terminal (WSL)
- tmux/screen (작동하지만 색상 제한 있을 수 있음)
**권장 최소 터미널 크기**: 80x24 문자 (배치 처리 중 전체 전략 테이블을 위해 100x30 이상 권장)
전체 TUI 문서, 문제 해결 및 고급 사용법은 [TUI_README.md](https://github.com/umpolungfish/byvalver/blob/main/TUI_README.md)를 참조하세요.
## 대상 지정 나쁜 바이트 추방
### 개요
`--bad-bytes` 옵션을 사용하여 셸코드에서 추방할 바이트 집합을 지정할 수 있습니다.
### 구현 세부 사항
`byvalver`는 다음을 통해 작동합니다:
1. 쉼표로 구분된 16진수 바이트 목록(예: `"00,0a,0d"`)을 구문 분석
2. O(1) 비트맵 조회를 사용하여 명령어에서 나쁜 바이트 식별
3. 널 바이트 제거에 사용되는 동일한 153개 이상의 변환 전략 적용
4. 출력에 지정된 나쁜 바이트가 포함되지 않았는지 확인
### 예상 동작
- **널 바이트만** (`--bad-bytes "00"` 또는 기본값): 높은 성공률 (테스트 코퍼스에서 100%)
- **여러 나쁜 바이트** (`--bad-bytes "00,0a,0d"`): 성공률은 다음에 따라 크게 달라질 수 있음:
- 나쁜 것으로 표시된 특정 바이트
- 입력 셸코드의 복잡성
- 원래 셸코드에서 나쁜 바이트의 빈도
- 특정 나쁜 바이트 집합에 대한 효과적인 대체 인코딩 존재 여부
### 권장 사항
1. **프로덕션 사용 시:** 기본 널 바이트 추방 모드 사용
2. **실험용:** 특정 사용 사례에서 `--bad-bytes` 기능을 테스트하고 출력을 검증
3. **항상 확인:** `verify_denulled.py --bad-bytes "XX,YY"`를 사용하여 모든 나쁜 바이트가 제거되었는지 확인
4. **변동성 예상:** 일부 셸코드는 특정 나쁜 바이트 집합으로 완전히 정리되지 않을 수 있음
### 향후 개선 사항
일반적인 나쁜 바이트 기능은 다음을 위한 기반을 제공합니다:
- 특정 나쁜 바이트 패턴에 대한 전략 최적화
- 일반적인 나쁜 바이트 조합을 대상으로 하는 새로운 전략의 자동 발견
- 다양한 나쁜 바이트 훈련 데이터로 ML 모델 재훈련
- 확장된 테스트 및 검증
> [!CAUTION]
> 여러 나쁜 바이트와 함께 `--bad-bytes`를 사용하면 변환 작업의 복잡성이 크게 증가합니다. 너무 많은 바이트가 나쁜 것으로 표시되면 도구가 대체 인코딩을 소진하여 일부 셸코드를 변환하는 것이 불가능해질 수 있습니다. 작은 나쁜 바이트 집합(예: `"00,0a"`)으로 시작하고 출력을 테스트하면서 점진적으로 확장하십시오. 배포 전에 항상 `verify_denulled.py`로 결과를 확인하십시오.
## 나쁜 바이트 프로필
### 개요
사용자는 **나쁜 바이트 프로필** - 일반적인 익스플로잇 시나리오에 대해 미리 구성된 바이트 집합을 선택할 수도 있습니다. 수동으로 16진수 값을 지정하는 대신 컨텍스트에 맞는 프로필 이름을 사용하십시오.
### 사용 가능한 프로필
| 프로필 | 난이도 | 나쁜 바이트 수 | 사용 사례 |
|---------|-----------|----------|-----------|
| `null-only` | ░░░░░ 쉬움 | 1 | 고전적인 버퍼 오버플로우 (기본값) |
| `http-newline` | █░░░░ 낮음 | 3 | `HTTP` 헤더, 라인 기반 프로토콜 |
| `http-whitespace` | █░░░░ 낮음 | 5 | `HTTP` 매개변수, 명령어 삽입 |
| `url-safe` | ███░░ 중간 | 23 | `URL` 매개변수, `GET` 요청 |
| `sql-injection` | ███░░ 중간 | 5 | `SQL` 삽입 컨텍스트 |
| `xml-html` | ███░░ 중간 | 6 | `XML`/`HTML` 삽입, `XSS` |
| `json-string` | ███░░ 중간 | 34 | `JSON` API 삽입 |
| `format-string` | ███░░ 중간 | 3 | 포맷 문자열 취약점 |
| `buffer-overflow` | ███░░ 중간 | 5 | 필터링이 있는 스택/힙 오버플로우 |
| `command-injection` | ███░░ 중간 | 20 | 셸 명령어 삽입 |
| `ldap-injection` | ███░░ 중간 | 5 | `LDAP` 쿼리 |
| `printable-only` | ████░ 높음 | 161 | 텍스트 기반 프로토콜 (인쇄 가능 ASCII만) |
| `alphanumeric-only` | █████ 극단적 | 194 | 영숫자만 셸코드 (0-9, A-Z, a-z) |
### 사용법```bash
# List all available profiles
byvalver --list-profiles
# Use a specific profile
byvalver --profile http-newline input.bin output.bin
# Combine with other options
byvalver --profile sql-injection --biphasic --format c input.bin output.c
HTTP Contexts (NULL, LF, CR 제거):```bash byvalver --profile http-newline payload.bin http_safe.bin
**SQL Injection** (NULL, 따옴표, 세미콜론 제거):```bash
byvalver --profile sql-injection payload.bin sql_safe.bin
영숫자만 허용 (극도로 어려움 - 0-9, A-Z, a-z만 허용):```bash byvalver --profile alphanumeric-only payload.bin alphanum.bin
자세한 프로필 문서는 [docs/BAD_BYTE_PROFILES.md](https://github.com/umpolungfish/byvalver/blob/main/docs/BAD_BYTE_PROFILES.md)를 참조하세요.
## 기능
### 높은 NULL-BYTE 제거 성공률
<div align="center">
<strong>일반적이고 복잡한 널 소스를 대표하는 다양한 테스트 코퍼스에서 100% 널-바이트 제거를 달성했습니다.</strong>
</div>
> 이 성공률은 광범위하게 테스트 및 최적화된 널-바이트(`\x00`) 제거에만 적용됩니다.
### 고급 변환 엔진
170+ 전략 구현으로 사실상 모든 일반적인 널-바이트 소스와 일반적인 배드-바이트 패턴을 다룹니다 (v3.0, v3.6, v3.7, v3.8, v4.0 및 v4.1에서 여러 새로운 전략 패밀리 추가됨):
- `CALL/POP` 및 스택 기반 즉시 로딩
- `PEB` 트래버설 및 해시 API 해석
- 복잡한 알고리즘을 사용한 고급 해시 기반 API 해석
- 다중 DLL 로딩을 위한 다단계 `PEB` 트래버설
- `SALC`, `XCHG` 및 플래그 기반 제로잉
- 산술 대체를 위한 `LEA`
- 시프트 및 산술 값 구성
- 다중 `PUSH` 문자열 빌딩
- Windows 구조를 위한 스택 기반 구조 구성
- 고급 패턴을 사용한 스택 기반 문자열 구성
- `SIB` 및 변위 재작성
- 조건부 점프 변위 처리
- 레지스터 재매핑 및 체이닝
- 버퍼 초기화를 위한 향상된 `SALC`+`REP STOSB`
- 고급 문자열 연산 변환
- 원자 연산 인코딩 체인
- `FPU` 스택 기반 즉시 인코딩
- `XLAT` 테이블 기반 바이트 변환
- `LAHF`/`SAHF` 플래그 보존 체인
- **v3.6 신규**: `BCD` 산술 난독화 (`AAM`/`AAD`)
- **v3.6 신규**: `ENTER`/`LEAVE` 스택 프레임 대안
- **v3.6 신규**: 상수에 대한 `POPCNT`/`LZCNT`/`TZCNT` 비트 카운팅
- **v3.6 신규**: `SIMD` `XMM` 레지스터 즉시 로딩
- **v3.6 신규**: `JECXZ`/`JRCXZ` 제로-테스트 점프 변환
- **v3.7 신규**: 조건부 점프 opcode 배드-바이트 제거 (나쁜 opcode를 가진 JE/JNE/JG/JL)
- **v3.7 신규**: 레지스터-투-레지스터 전송 배드-바이트 opcode (MOV/XCHG 대안)
- **v3.7 신규**: 스택 프레임 포인터 배드-바이트 제거 (PUSH/POP EBP 대안)
- **v3.7 신규**: ModR/M 및 SIB 바이트 배드-바이트 제거 (대체 레지스터 조합)
- **v3.7 신규**: 멀티-바이트 즉시 부분 배드-바이트 (회전 최적화)
- **v3.7 신규**: 비트 연산 즉시 배드-바이트 (레지스터를 사용한 AND/OR/XOR/TEST)
- **v3.7 신규**: 1-바이트 opcode 대체 (INC/DEC/PUSH/POP 대안)
- **v3.7 신규**: 문자열 명령어 접두사 배드-바이트 (REP 접두사를 루프로 변환)
- **v3.7 신규**: 피연산자 크기 접두사 배드-바이트 (16비트에서 32비트 변환)
- **v3.7 신규**: 세그먼트 레지스터 배드-바이트 감지 (FS/GS 접두사 감지)
- **v3.8 신규**: 프로필 인식 SIB 생성 시스템 (하드코딩된 0x20 SIB 바이트 제거)
- **v3.8 신규**: 조건부 점프 처리 및 부분 레지스터 최적화에 대한 중요 수정
- **v3.9 신규**: 여러 NOP 등가물을 사용한 다형성 NOP 삽입
- **v3.9 신규**: 즉시 값 난독화를 위한 상수 언폴딩
- **v3.9 신규**: XCHG 패턴을 사용한 레지스터 이름 변경 난독화
- **v3.9 신규**: 산술 연산을 위한 스택 스필 난독화
- **v3.9 신규**: NOP 삽입을 통한 명령어 재정렬
- **v3.9 신규**: 런타임 자체 수정 전략 (기본 구현)
- **v3.9 신규**: 중첩 명령어 생성
- **v4.0 신규**: Capstone 동적 모드 선택을 통한 ARM/ARM64 크로스-아키텍처 지원
- **v4.0 신규**: MVN 변환을 사용한 ARM 즉시 인코딩
- **v4.0 신규**: ARM MOV 전략 (원본, MVN 기반 널 회피)
- **v4.0 신규**: ARM 산술 전략 (SUB 변환을 사용한 ADD)
- **v4.0 신규**: ARM 메모리 전략 (LDR/STR 통과)
- **v4.0 신규**: ARM 분기 전략 (B/BL 통과)
- **v4.1 신규**: SETcc 플래그 누적 체인 (조건부 점프 제거)
- **v4.1 신규**: 다형성 즉시 값 구성 (여러 인코딩 변형)
- **v4.1 신규**: 레지스터 의존성 체인 최적화 (다중 명령어 패턴)
- **v4.1 신규**: RIP-상대 주소 지정 최적화 (x64 PIC 개선)
- **v4.1 신규**: 음수 변위 메모리 주소 지정 (변위 대안)
- **v4.1 신규**: 멀티-바이트 NOP 인터레이싱 (난독화 NOP 변형)
- **v4.1 신규**: 비트 조작 상수 구성 (BSWAP, BSF, POPCNT, BMI2)
- **v4.2 신규**: x86/x64 전략 호환성 계층 (x64에서 128개 이상의 x86 전략 활성화)
- **v4.2 신규**: MOVABS 64비트 즉시 전략 (XOR/ADD 구성을 사용한 REX.W MOV)
- **v4.2 신규**: SBB 즉시 제로 전략 (SBB AL/AX/EAX, 0 변환)
- **v4.2 신규**: TEST 큰 즉시 전략 (레지스터 피연산자를 사용한 TEST EAX/RAX, imm32)
- **v4.2 신규**: SSE 메모리 연산 전략 (MOVUPS/MOVAPS/MOVDQU/MOVDQA 널 제거)
- **v4.2 신규**: LEA x64 변위 전략 (REX 접두사를 사용한 큰 변위 처리)
- **v4.2 신규**: 확장 레지스터 지원 (R8-R15 레지스터 인코딩 유틸리티)
- `MOV`, `ADD/SUB`, `XOR`, `LEA`, `CMP`, `PUSH` 등에 대한 포괄적인 지원
엔진은 다중 패스 처리(난독화 → 널 제거)를 사용하며, 예외 상황에 대한 강력한 대체 메커니즘을 갖추고 있습니다.
**v3.8 중요 개선사항**: http-whitespace 프로필을 위한 다중 전략 수정
- **문제**: 하드코딩된 배드 바이트로 인해 79.1% 실패율 발생 (125/158 파일 실패)
- **식별된 근본 원인**:
- 15개 전략 파일에서 45개 이상의 하드코딩된 SIB 바이트 0x20 (SPACE) 인스턴스
- 검증 없이 배드 바이트 건너뛰기 오프셋을 사용하는 조건부 점프 핵심 로직
- 배드 바이트를 직접 쓰는 부분 레지스터 최적화
- 5개의 높은 우선순위 전략 파일에 추가적인 하드코딩된 배드 바이트
- **구현된 솔루션**:
- 3단계 대체(표준 → DISP8 → PUSHPOP)를 사용한 중앙 집중식 프로필 인식 SIB 생성
- 배드 바이트를 피하기 위한 조건부 점프 건너뛰기 오프셋의 동적 NOP 패딩
- 분해를 사용한 부분 레지스터 값의 지능형 바이트 구성
- 하드코딩된 바이트를 프로필 인식 대안으로 체계적으로 대체
- **영향**: **79.1% 실패 → 35.4% 실패** (성공률: **20.9% → 64.6%**)
- **수정된 파일**: 이제 102개 파일이 성공적으로 처리됨 (+69개 파일, 3.09배 개선)
- **전략 성공률**:
- 부분 레지스터 최적화: 25% → **100%** (12/12 변환)
- mov_mem_disp_enhanced: 0% → **98.5%** (1605/1629 변환)
- indirect_call_mem: 0% → **98.5%** (135/137 변환)
- indirect_jmp_mem: 0% → **98.5%** (134/136 변환)
- **성능**: 지능형 캐싱을 통한 제로 오버헤드, 평균 크기 2% 미만 증가
### 성능 지표
184개의 다양한 셸코드 샘플 처리에 대한 실제 성능 데이터:```
📊 Batch Processing Statistics:
Success Rate: 184/184 █████████████████████████ 100.00%
Files Processed: 184 █████████████████████████ 100.00%
Failed: 0 ░░░░░░░░░░░░░░░░░░░░░░░░░ 00.00%
Skipped: 0 ░░░░░░░░░░░░░░░░░░░░░░░░░ 00.00%
각 테스트가 끝나면 대상 시스템이 재부팅되며, 결과는 사용자가 지정한 이메일로 전송됩니다.``` 🧠 ML Strategy Selection Performance:
Processing Speed: Instructions/sec: 19.5 inst/sec ████████████░░░░░░░░░░░░░ Total Instructions: 20,760 Session Duration: 1,067 seconds
Null-Byte Elimination: Eliminated: 18,636/20,760 ██████████████████████░░░ 89.77% Strategies Applied: 20,129 Success Rate: 92.57% ███████████████████████░░ 92.57%
Learning Progress: Positive Feedback: 18,636 ███████████████████████░░ 92.57% Negative Feedback: 1,493 █░░░░░░░░░░░░░░░░░░░░░░░░ 07.43% Total Iterations: 40,889 Avg Confidence: 0.0015 ░░░░░░░░░░░░░░░░░░░░░░░░░ 00.15%
[빌드](https://github.com/chaitin/xray/tree/master/source)를 소스로부터 하는 것도 옵션입니다.```
🏆 Top Performing Denullification Strategies:
Strategy Attempts Success% Confidence
-------- -------- -------- ----------
ret_immediate 134 █████████████░░░░░░░░░░░░ 50.00%
MOVZX/MOVSX Null-Byte banishment 162 █████████████░░░░░░░░░░░░ 50.00%
transform_mov_reg_mem_self 774 █████████████░░░░░░░░░░░░ 50.00%
cmp_mem_reg_null 96 ████████████░░░░░░░░░░░░░ 46.88%
cmp_mem_reg 264 ████████████░░░░░░░░░░░░░ 46.97%
lea_disp_null 3900 ███████████░░░░░░░░░░░░░░ 45.38%
transform_add_mem_reg8 2012 ███████████░░░░░░░░░░░░░░ 43.49%
Push Optimized 4214 ███████░░░░░░░░░░░░░░░░░░ 29.31%
ModRM Byte Null Bypass 82 ██████░░░░░░░░░░░░░░░░░░░ 25.61%
conservative_arithmetic 5172 █████░░░░░░░░░░░░░░░░░░░░ 21.37%
arithmetic_addsub_enhanced 1722 ████░░░░░░░░░░░░░░░░░░░░░ 18.12%
PUSH Immediate Null-Byte banishment 3066 ████░░░░░░░░░░░░░░░░░░░░░ 16.54%
SIB Addressing 9560 ████░░░░░░░░░░░░░░░░░░░░░ 16.03%
generic_mem_null_disp_enhanced 22130 ███░░░░░░░░░░░░░░░░░░░░░░ 15.52%
SALC-based Zero Comparison 1654 ███░░░░░░░░░░░░░░░░░░░░░░ 12.88%
KeyCheck가 이 방식으로 도구를 사용하려면 암호화된 데이터 파일 내의 알려진 위치에 있는 알려진 평문 바이트 쌍이 필요합니다. 현재 이 도구는 이것이 파일의 첫 번째/마지막 블록이라고 가정합니다.``` ⚡ Processing Efficiency:
Learning Rate: 1.97 feedback/instruction Weight Update Avg: 0.042650 Weight Update Max: 0.100000 Total Weight Updates: 1724.68
Strategy Coverage: Total Strategies: 153+ Strategies Activated: 117 ████████████████████████░ 95.90% Zero-Attempt: 5 █░░░░░░░░░░░░░░░░░░░░░░░░ 04.10%
### 난독화 계층
`--biphasic` 모드는 디널링 전에 분석 방지 난독화를 추가합니다:
- 제어 흐름 평탄화
- 디스패처 패턴
- 레지스터 재할당
- 상태 난독화
- 데드 코드 삽입
- NOP 슬레드
- 명령어 대체
- 동등 연산
- 스택 프레임 조작
- API 해석 숨기기
- 문자열 인코딩
- 상수 인코딩
- 안티 디버깅
- VM 탐지 기법
### ML 기반 전략 선택
> **성숙도: 베타 v2.0** — 널 바이트 제거 데이터셋으로 훈련됨. 일반적인 배드 바이트 사용 사례를 위해 재훈련 필요.
**아키텍처**:
- **원-핫 명령어 인코딩** (51차원)이 스칼라 명령어 ID를 대체합니다
- **컨텍스트 윈도우**는 4개 명령어(현재 + 이전 3개)의 슬라이딩 버퍼를 사용합니다
- **고정 특징 추출**은 명령어당 안정적인 84차원 레이아웃을 사용합니다
- **안정적인 전략 레지스트리**로 일관된 NN 출력 매핑 보장
- **전체 역전파**를 모든 레이어(입력→은닉→출력)에 적용
- 소프트맥스 + 교차 엔트로피 손실에 대한 **올바른 그래디언트 계산**
- **출력 마스킹**이 소프트맥스 전에 유효하지 않은 전략을 필터링합니다
- 적절한 가중치 초기화를 위한 **He/Xavier 초기화**
- 3층 피드포워드 신경망 (336→512→200)
- 성공/실패 피드백으로 적응형 학습
- 예측, 정확도, 신뢰도 추적
- 결정적 순서로의 정상적인 대체
> [!WARNING]
> ML 모드는 실험적이며 새로운 아키텍처로 추가 훈련/검증이 필요합니다.
### 배치 처리
- 재귀적 디렉토리 탐색 (`-r`)
- 사용자 정의 파일 패턴 (`--pattern "*.bin"`)
- 구조 보존 또는 평탄화
- 오류 시 계속 또는 엄격 모드
- 모든 옵션(이상성, PIC, `XOR` 등)과 호환 가능
- **향상된 출력**:
- 파일별 크기 변환 및 비율
- 실패 시 상세 배드 바이트 식별
- 요약에서 성공/실패 비율
- 실패한 파일 목록 (처음 10개 인라인 표시)
- 엄격한 성공 정의: 남은 배드 바이트가 있는 파일은 실패로 표시
**배치 처리 출력 예시:**```
===== BATCH PROCESSING SUMMARY =====
Total files: 8
Successfully processed: 1 (12.5%)
Failed: 7 (87.5%)
Skipped: 0
Total input size: 650 bytes
Total output size: 764 bytes
Average size ratio: 1.18x
Bad bytes: 5 configured
Configured set: 0x00, 0x09, 0x0a, 0x0d, 0x20
FAILED FILES (7):
- shellcode1.bin
- shellcode2.bin
...
[!TIP] 대규모 셸코드 컬렉션을 배치 처리할 때는
--no-continue-on-error를 사용하여 문제가 있는 파일을 조기에 식별한 후,--pattern으로 실패를 제외하고 성공적으로 처리하세요.--verbose플래그는 진행 상황을 추적하고 특정 셸코드 코퍼스에 가장 적합한 전략을 식별하는 데 도움이 됩니다. 파일은 남은 배드 바이트가 0개일 때만 성공으로 간주됩니다. 부분 성공은 실패로 처리됩니다.
C 배열, Python bytes, 16진수 문자열XOR 인코딩(디코더 스텁 포함) (--xor-encode 0xDEADBEEF)--pic)--stats 플래그를 사용하면 byvalver가 상세 분석을 제공합니다.
전략 사용 통계:
파일 복잡도 분석:
배치 처리 요약:
출력 예:``` ===== BATCH PROCESSING SUMMARY ===== Total files: 162 Successfully processed: 131 (80.9%) Failed: 31 (19.1%) Skipped: 0
Total input size: 35772920 bytes Total output size: 81609 bytes Average size ratio: 0.00x
FAILED FILES (31):
STRATEGY USAGE STATISTICS: ┌─────────────────────────────────────────┬─────────┬─────────┬──────────────┬────────────────┐ │ Strategy Name │ Success │ Failure │ Applications │ Avg Output Size│ ├─────────────────────────────────────────┼─────────┼─────────┼──────────────┼────────────────┤ │ push_immediate_strategy │ 45 │ 3 │ 48 │ 12.34 │ │ mov_reg_mem_self │ 32 │ 1 │ 33 │ 8.21 │ │ ... │ ... │ ... │ ... │ ... │ └─────────────────────────────────────────┴─────────┴─────────┴──────────────┴────────────────┘
FILE COMPLEXITY ANALYSIS: Most Complex Files (by instruction count):
Largest Files (by input size):
Smallest Files (by input size):
Largest Expansion (by size ratio):
### 검증 스위트
검증을 위한 Python 도구:
- `verify_denulled.py`: 잘못된 바이트가 없음을 보장합니다 (사용자 정의 검증을 위해 `--bad-bytes` 지원)
- `verify_functionality.py`: 실행 패턴을 확인합니다
- `verify_semantic.py`: 동등성을 검증합니다
## 아키텍처
`byvalver`는 모듈식 전략 패턴 설계를 사용합니다:
- 패스 1: (선택 사항) 분석 방지를 위한 난독화
- 패스 2: 널 바이트 제거를 위한 Denullification
- 전략 최적화를 위한 ML 계층
- 확장 가능한 처리를 위한 배치 시스템
<div align="center">
<img src="https://assets.kitploit.com/production/public/readmes/9982/8d3a1e20481460fedecaecda6f87bc21355fbbb1f1ef58d7fef4427eda36a381.png" alt="전략 카테고리 분류" width="700">
</div>
## 시스템 요구 사항
- **운영체제**: Linux (Ubuntu/Debian/Fedora), macOS (Homebrew 사용), Windows (WSL/MSYS2 경유)
- **CPU**: 최신 명령어를 지원하는 x86/x64
- **RAM**: 1GB 여유
- **디스크**: 50MB 여유
- **도구**: `C` 컴파일러, Make, Git (권장)
## 종속성
- **핵심**: GCC/Clang, GNU Make, `Capstone` (v4.0+), `NASM` (v2.13+), xxd
- **선택 사항**: Clang-Format, Cppcheck, Valgrind
- **ML 학습**: 수학 라이브러리 (포함됨)
### 설치 명령어
**Ubuntu/Debian:**```bash
sudo apt update
sudo apt install build-essential nasm xxd pkg-config libcapstone-dev clang-format cppcheck valgrind
macOS (Homebrew) — macOS Tahoe 26 (그 이상):```bash
brew install capstone nasm pkg-config
brew install vim
### macOS/Homebrew 빌드 수정 사항 (저장소 변경 사항)
최근 macOS/Homebrew 호환성을 개선하기 위해 변경 사항이 적용되었습니다 (특히 Apple Silicon 및 Homebrew 접두사 `/opt/homebrew`에서):
- `Makefile` 및 `makefile`을 업데이트하여 **컴파일 시 `CPPFLAGS` 사용** 및 **링킹 시 `LDLIBS` 사용**을 적용하도록 하여, `pkg-config`로 발견된 Capstone 플래그가 적용되도록 했습니다.
- Homebrew의 `pkg-config`가 생성하는 Capstone include 경로를 `.../include/capstone`에서 `.../include`로 정규화하여, 프로젝트의 `#include <capstone/capstone.h>`가 올바르게 해석되도록 했습니다.
변경 사항 요약 (높은 수준):
- `$(CC) $(CFLAGS) -c ...` → `$(CC) $(CFLAGS) $(CPPFLAGS) -c ...`
- `$(CC) $(CFLAGS) -o ... $(LDFLAGS)` → `$(CC) $(CFLAGS) $(CPPFLAGS) -o ... $(LDFLAGS) $(LDLIBS)`
- `CAPSTONE_CFLAGS := pkg-config --cflags capstone` → `<capstone/capstone.h>`와 호환되는 include 경로로 정규화됨
### 문제 해결 (macOS)```bash
# Verify xxd is available (macOS usually ships /usr/bin/xxd)
command -v xxd
# Verify Capstone is discoverable via pkg-config
pkg-config --cflags capstone
pkg-config --libs capstone
# Clean rebuild
make clean
make
Windows (WSL): Ubuntu/Debian과 동일합니다.
빌드에는 Makefile을 사용하세요:
make (최적화된 실행 파일)make debug (심볼, 샌타이저)make release (-O3, 네이티브)make static (자체 포함)make train (bin/train_model)make clean 또는 make clean-all사용자 정의:```bash make CC=clang CFLAGS="-O3 -march=native" CPPFLAGS="$(pkg-config --cflags capstone)"
설정 보기: `make info`
## 설치
전역 설치:```bash
sudo make install
sudo make install-man
제거:```bash sudo make uninstall
GitHub에서:```bash
curl -sSL https://raw.githubusercontent.com/umpolungfish/byvalver/main/install.sh | bash
byvalver [OPTIONS] [output]
- 입력/출력은 파일 또는 디렉토리(자동 배치)입니다.
**주요 옵션:**
- `-h, --help`: 도움말
- `-v, --version`: 버전
- `-V, --verbose`: 상세 출력
- `-q, --quiet`: 조용히
- `--bad-bytes BYTES`: 제거할 쉼표로 구분된 16진수 바이트(기본값: "00")
- `--profile NAME`: 미리 정의된 배드바이트 프로필 사용(예: http-newline, sql-injection)
- `--list-profiles`: 사용 가능한 모든 배드바이트 프로필 나열
- `--biphasic`: 난독화 + null 제거
- `--pic`: 위치 독립적
- `--ml`: ML 전략 선택
- `--xor-encode KEY`: 스텁과 함께 `XOR`
- `--format FORMAT`: raw|c|python|hexstring
- `-r, --recursive`: 재귀적 배치
- `--pattern PATTERN`: 파일 글로브
- `--no-preserve-structure`: 출력 평탄화
- `--no-continue-on-error`: 오류 시 중단
- `--menu`: 대화형 TUI 메뉴 실행
**예시:**```bash
# Default: banish null bytes only (well-tested, recommended)
byvalver shellcode.bin clean.bin
# v3.0 NEW: List available bad-byte profiles
byvalver --list-profiles
# v3.0 NEW: Use predefined profile for HTTP contexts (eliminates 0x00, 0x0A, 0x0D)
byvalver --profile http-newline shellcode.bin clean.bin
# v3.0 NEW: Use profile for SQL injection contexts
byvalver --profile sql-injection shellcode.bin clean.bin
# v3.0 NEW: Use profile for URL-safe shellcode
byvalver --profile url-safe shellcode.bin clean.bin
# v3.0 NEW: Manual bad-byte specification (experimental - not extensively tested)
byvalver --bad-bytes "00,0a,0d" shellcode.bin clean.bin
# Combined with other features
byvalver --profile http-newline --biphasic --ml input.bin output.bin
# Batch processing with profile
byvalver -r --profile http-whitespace --pattern "*.bin" shellcodes/ output/
# Launch interactive TUI mode
byvalver --menu
byvalver의 난독화 패스(--biphasic 옵션으로 활성화)는 분석 방지 기술을 적용합니다:
MOV Register Exchange: XCHG/push-pop 패턴MOV Immediate: 산술 분해Arithmetic Substitution: 복잡한 등가 변환Memory Access: 간접 참조 및 LEAStack Operations: 수동 ESP 처리Conditional Jumps: SETcc 및 이동Unconditional Jumps: 간접 메커니즘Calls: PUSH + JMP우선순위는 단순 대체(낮음)보다 분석 방지(높음)를 선호합니다.
자세한 전략 문서는 OBFUSCATION_STRATS를 참조하세요.
핵심 NULL 제거 패스는 170개 이상의 전략을 사용합니다:
MOV 전략NEG, NOT, XOR, 시프트, ADD/SUB 분해NEG, XOR, ADD/SUBCALL/JMP 간접TESTSIB 주소 지정PUSH 최적화CALL/POP, PEB 해싱, SALC, LEA 산술, 시프트, 스택 문자열 등.LEA 대체전략은 ML 또는 결정론적 순서로 우선순위가 지정되어 선택됩니다.
모듈식 레지스트리를 사용하면 새로운 전략을 쉽게 추가하여 새로운 셸코드 패턴을 처리할 수 있습니다.
자세한 전략 문서는 DENULL_STRATS를 참조하세요.
빌드 트레이너: make train
실행: ./bin/train_model
./shellcodes/./ml_models/byvalver_ml_model.bin모델은 런타임에 경로 해석과 함께 자동 로드됩니다.
./bin/byvalver --ml shellcodes/linux_x86/execve.bin output.bin
./bin/byvalver --ml test.bin output.bin 2>&1 | grep "ML Registry"
./bin/byvalver --ml --batch shellcodes/linux_x86/*.bin output/
cat ml_metrics.log
**권장 사항:** ML 모드는 프로덕션 사용 전에 다양한 bad-byte 데이터셋으로 재훈련이 필요합니다. 현재는 널 바이트 제거에만 최적화되어 있습니다.
## 에이전트 메나저리
`byvalver`는 **AI 기반 에이전트 파이프라인** (`agents/`)을 제공합니다. 이 파이프라인은 전략 레지스트리의 격차를 자율적으로 발견하고, 새로운 bad-byte 제거 기술을 제안하며, 완전한 C 구현을 생성하고, 이를 프로젝트에 통합할 수 있습니다. 이 모든 것이 단일 명령으로 이루어집니다.
이 파이프라인은 [AjintK](https://github.com/umpolungfish/byvalver/blob/main/AjintK) 다중 공급자 에이전트 프레임워크를 기반으로 구축되었으며, **Anthropic**, **DeepSeek**, **Qwen**, **Mistral**, **Google**을 LLM 백엔드로 지원합니다.
### 빠른 시작```bash
# Requires API key for your chosen provider
export ANTHROPIC_API_KEY="..." # or DEEPSEEK_API_KEY, QWEN_API_KEY, etc.
# --- Specialized Generators ---
# 1. General Technique Generator (discover → propose → generate → implement)
python3 run_technique_generator.py
# 2. Obfuscation Technique Generator (specifically for anti-analysis/evasion)
python3 run_obfuscation_generator.py
# 3. Bad-Byte Removal Generator (targeting restricted byte elimination)
python3 run_badbyte_generator.py
# 4. Profile-Specific Strategy Generator (targeting a specific bad-byte profile)
python3 run_profile_generator.py --profile alphanumeric-only
# --- Common Options ---
# Dry-run: discover and propose only, no files written
python3 run_technique_generator.py --dry-run
# Target a specific architecture
python3 run_technique_generator.py --arch x64
# Use a different provider / model
python3 run_technique_generator.py --provider deepseek --model deepseek-chat
--dry-run Stop after Stage 2 — print proposal, write nothing --arch x86 | x64 | both (default: both) --provider anthropic | deepseek | qwen | mistral | google (default: anthropic) --model Model ID (provider-specific default applied if omitted) --verbose Print full LLM responses at each stage
### 요구 사항```bash
# Install Python dependencies (uses AjintK framework)
pip install anthropic tenacity httpx pyyaml
# Or with uv (faster)
uv pip install -r AjintK/requirements.txt
파이프라인은 DeepSeek (deepseek-chat) 및 Anthropic (claude-sonnet-4-6)으로 검증되었습니다.
일반적인 실행에서는 340개 이상의 전략을 발견하고, 기법(예: SSE/AVX 명령어에 대한 VEX 접두사 재인코딩)을 제안하며, 약 200줄의 C 코드를 생성하고 완전히 자동으로 깔끔한 빌드를 생성합니다.
아키텍처 세부 정보 및 새 에이전트로 파이프라인 확장에 대해서는 docs/AGENT_MENAGERIE.md를 참조하세요.
Cbash tests/run_tests.sh (tests/README.md 참조)make format 실행docker build -t byvalver . (Dockerfile 참조)전체 문서는 docs/ 디렉터리에서 확인할 수 있습니다:
Capstone/NASM/xxd 확인지속적인 문제가 발생하면 상세 모드를 사용하고 로그를 확인하세요.
특정 셸코드에서 나쁜 바이트 제거가 실패하면 전략 레지스트리에 대상 전략을 추가하는 것을 고려하세요.
byvalver는 UNLICENSE에 따라 지구 위에 자유롭게 풀려났습니다.
| 아키텍처 | 성숙도 | 전략 수 | 비고 |
|---|
| x86 (32비트 Intel/AMD) | 안정 v4.2 | 150+ | 프로덕션 테스트 완료, 전체 커버리지 |
| x64 (64비트 Intel/AMD) | 안정 v4.2 | 150+ | 기본 아키텍처, 프로덕션 테스트 완료 |
| ARM (32비트) | 실험 v0.1 | 7개 핵심 | 제한적 테스트, 핵심 명령어만 |
| ARM64 (AArch64) | 실험 v0.1 | 기본 | 프레임워크 준비 완료, 최소 전략 |
Control Flow Flattening: 디스패처 상태Instruction Substitution: 등가 연산Dead Code: 무해한 삽입Register Reassignment: 데이터 흐름 숨기기Multiplication by One: IMUL 패턴NOP Sleds: 가변 패딩Polymorphic NOP Insertion: 다양한 NOP 등가물(XCHG EAX,EAX, LEA, MOV)Constant Unfolding: 즉시값을 산술 연산으로 분해Register Renaming: XCHG 기반 레지스터 대체Stack Spill Obfuscation: 스택 기반 산술 연산Instruction Reordering: NOP 삽입 명령어 재배열Runtime Self-Modification: 자체 수정 코드 생성Overlapping Instructions: 다중 해석 바이트 시퀀스Jump Decoys: 가짜 대상Relative Offsets: 계산된 점프Switch-Based: 계산된 흐름Boolean Expressions: 드 모르간 등가 변환Variable Encoding: 가역 변환Timing Variations: 지연Register State: 복잡한 조작Stack Frames: 사용자 정의 관리API Resolution: 복잡한 해싱String Encoding: 런타임 디코딩Constants: 표현식 생성Debugger Detection: 난독화된 검사VM Detection: 은폐된 방법| 단계 | 에이전트 | 수행 작업 |
|---|
| 1 | StrategyDiscoveryAgent | src/를 스캔하여 340개 이상의 전략 이름과 카테고리를 추출하고, LLM에게 커버리지 격차를 요약하도록 요청합니다 |
| 2 | TechniqueProposalAgent | 카탈로그를 바탕으로 하나의 진정한 새로운 기술을 제안하며, 근거, 대상 지시, 접근 방식을 포함합니다 |
| 3 | CodeGenerationAgent | strategy.h/utils.h/mov_strategies.c를 참조하여 strategy_t를 준수하는 완전한 .h + .c 구현을 생성합니다 |
| 4 | ImplementationAgent | 파일을 src/에 작성하고, strategy_registry.c를 패치하며 (include → forward decl → register call), make를 실행합니다 |
| 문서 | 설명 |
|---|
| docs/USAGE.md | 예제를 포함한 종합 사용 가이드 |
| docs/BUILD.md | 빌드 지침 및 플랫폼별 참고 사항 |
| docs/TUI_README.md | 대화형 TUI 문서 |
| docs/DENULL_STRATS.md | Null 제거 전략 카탈로그 |
| docs/OBFUSCATION_STRATS.md | 난독화 기법 문서 |
| docs/BAD_BYTE_PROFILES.md | 나쁜 바이트 프로파일 참조 |
| docs/BADBYTEELIM_STRATS.md | 확장 제거 전략 |
| docs/STRATEGY_HIERARCHY.md | 전략 구성 및 우선순위 |
| docs/ADVANCED_STRATEGIES.md | 고급 변환 기법 |
| docs/WHITEPAPER.md | 기술 백서 |
| docs/AGENT_MENAGERIE.md | 에이전트 파이프라인: 자동 기법 생성 |