원문 캡처 · github.com
원문 캡처 · github.com

BINPACK은 바이너리 파일의 구조를 먼저 감지해 변환한 뒤 Zstandard나 LZMA2로 압축하는 C99 기반 오픈소스 엔진이다. 제작자는 Silesia 데이터셋과 자체 테스트 파일에서 Zstandard Level 22보다 압축 결과가 작았다고 보고했지만, 이는 프로젝트가 제시한 벤치마크 수치다.

BINPACK은 실행 파일의 주소 상대 분기, 다중 바이트 부동소수점 값, 연속된 16비트 신호처럼 일반 압축기가 바이트 단위로 처리할 때 구조를 활용하기 어려운 데이터를 대상으로 한다. 입력 형식에 따라 x86·ARM 명령어의 상대 오프셋을 정규화하거나, 신호에 차분 변환을 적용하고, 레코드와 부동소수점 값을 필드별로 분리한다. 구조가 감지되지 않으면 입력을 그대로 통과시킨다. 변환은 무손실이며, 결과물은 SHA-256 체크섬으로 검증한다고 프로젝트는 설명한다.

프로젝트가 공개한 Silesia 데이터셋 및 추가 파일의 압축 결과는 다음과 같다. 괄호 안은 원본 대비 압축률이며, 순절감은 Zstandard 결과와 비교한 값이다.

파일데이터 형식원본 크기Meta Zstd L22BINPACK v2Zstd 대비 순절감
x-ray (Silesia)16비트 의료 영상8,474,240 B5,129,824 B (39.5%)4,252,074 B (49.8%)-877,750 B (-17.1%)
ooffice (Silesia)컴파일된 x86 실행 파일6,152,192 B2,594,905 B (57.8%)2,084,550 B (66.1%)-510,355 B (-19.7%)
mr (Silesia)MRI 스캔9,970,564 B3,102,439 B (68.9%)2,610,190 B (73.8%)-492,249 B (-15.9%)
sensor_data32비트 부동소수점 행렬262,144 B226,242 B (13.7%)156,765 B (40.2%)-69,477 B (-30.7%)
telemetry16비트 구조화 쌍262,144 B210,086 B (19.9%)180,472 B (31.2%)-29,614 B (-14.1%)
arm_binaryARM 기계어100,064 B22,680 B (77.3%)194 B (99.8%)-22,486 B (-99.1%)

프로젝트는 전체 순절감량을 약 2.0MB(2,001,931바이트)로 제시했다. 다만 공개된 자료만으로는 다른 데이터나 환경에서도 같은 결과가 나는지 알 수 없다.

네이티브 C99 엔진의 필터 처리량은 x86-64 환경에서 측정했다. 프로젝트가 공개한 결과에 따르면 ooffice에서는 1,955.7MB/s, x-ray에서는 1,616.3MB/s, mr에서는 2,377.2MB/s였으며, 세 파일 모두 비트 단위 무손실 검증을 통과했다. 256KB 크기의 sensor_data.raw와 telemetry_16bit.raw에서는 각각 3.800µs와 7.100µs의 프로파일러 지연 시간을 기록했고, 필터 처리량은 메모리 포화로 표기했다.

Python CLI를 사용하려면 Python 3.10 이상과 zstandard, numpy가 필요하다. 저장소는 벤치마크, 압축, 압축 해제 명령을 제공하며, 압축 해제 때 SHA-256 무결성 검사를 자동으로 수행한다.

text
pip install zstandard numpy
text
# Run benchmark against ZIP, BZIP2, and Meta Zstandard Ultra
python binpack.py bench payload.exe

# Compress a file
python binpack.py compress input.dll -o input.dll.bpk

# Decompress a file (with automatic SHA-256 integrity check)
python binpack.py decompress input.dll.bpk -o input_restored.dll

네이티브 엔진은 Windows에서 build.bat 또는 MSVC 명령으로 빌드할 수 있고, Linux와 macOS에서는 make를 사용한다. 프로젝트는 MIT 라이선스로 배포되며, 제안과 벤치마크 결과를 Meta Zstandard 엔지니어링팀에 기술 논의용으로 제출했다고 밝혔다.