PHP 8.x · Rust 로더 · Web + CLI · Linux / Unix
BinaryPHP는 AES-256-GCM으로 상용 PHP 코드를 암호화하고, 파일마다 독립된 키를 부여한 뒤 도메인이나 MAC, 만료일을 바인딩합니다 — 모든 복호화는 극경량 Rust 로더가 투명하게 처리합니다. 분기마다 키를 갱신, 영구 하위 호환, 해독 비용은 정품 라이선스비를 훨씬 상회합니다.
# binaryphp.com/encode/ 에서 파일과 라이선스 정보를 입력:
도메인: acmestore.com, *.acmestore.com
만료: 2027-12-31
이름: acme-pro
# 입력 → plugin.php (작성한 소스 코드, ~40 KB)
# 출력 → plugin.php (암호화 후, ~41 KB 바이너리)
# 파일명·확장자 그대로 — 원본 위에 덮어쓰면 되고, 호출 코드는 변경 불필요.
# 로더는 5-byte "BPHP2" 매직 헤더로 식별, 확장자와 무관.
# 마스터 키는 우리 서버에 머무르고, 고객은 암호화된 결과물만 받습니다.
고객이 .zip을 받는 순간, 작성한 모든 PHP 코드를 베끼고, 수정하고, 재판매할 수 있습니다.
소스 코드가 그대로 노출되면 라이선스 검사는 몇 분이면 제거됩니다. 코드 수준의 보호가 없으면 라이선스는 스위치일 뿐, 벽이 되지 못합니다.
고객이 다운로드하는 순간, 지적 재산이 공유 호스팅·VPS·CI 머신 등에 흩어집니다 — 당신은 보지도 못하고 관리도 못 하며, tar -xzf 한 줄이면 다 추출됩니다.
.php 파일이나 플러그인 전체 .zip을 온라인 인코더에 끌어다 놓고, 도메인·MAC·만료일을 설정하면 됩니다. 마스터 키는 우리 서버에 머뭅니다 — 보관 걱정은 일체 없습니다.
암호화된 파일을 다운로드. 각 파일에 독립된 16-byte salt와 HKDF-SHA256 파생 키가 포함됩니다. 1 byte라도 변조되면 GCM 검증이 실패해 실행이 거부됩니다.
고객이 php.ini에 extension=binaryphp.so 한 줄을 추가하면 끝. 로더가 PHP의 컴파일 경로에 끼어들어 메모리에서 복호화·라이선스 검증(도메인 SERVER_NAME / HTTP_HOST 또는 CLI의 MAC)하고, 평문을 Zend Engine에 직접 전달합니다.
NIST 표준 인증 암호화. 1 byte라도 변조되면 GCM tag 검증을 통과 못 해 실행 거부.
암호화 파일마다 독립된 16-byte salt가 부여되고, HKDF-SHA256으로 파일 전용 키를 파생. 각 파일이 독립 봉인되어 서로 영향이 없습니다.
#[binaryphp\Protected]가 표시된 함수는 우리 자체 바이트코드로 컴파일됩니다 — PHP도 Zend opcode도 아닙니다. 실행 시 로더가 직접 해석하므로, 알고리즘이 고객 디스크에 소스 형태로 남지 않습니다.
한 라이선스에 여러 호스트명이나 와일드카드(*.example.com)를 나열 가능. 어느 하나라도 일치하면 통과.
CLI 도구나 cron 작업처럼 HTTP가 없는 환경에서는 라이선스를 고객 머신의 MAC(/sys/class/net에서 읽음)에 직접 바인딩.
기간 한정 빌드(평가판, 구독, 릴리스 주기) 발급 가능. 로더가 시스템 시계와 파일에 내장된 timestamp를 비교합니다.
php.ini의 extension=으로 로드. PHP-FPM, mod_php, CLI, FrankenPHP 모두 지원.
단일 ~2.0 MB stripped .so(바이트코드 VM과 cranelift JIT 포함). 파일별 복호화는 1 ms 미만.
일반 .php는 그대로 컴파일됩니다 — 로더는 BinaryPHP 매직 헤더가 있는 파일만 가로채고 나머지는 건드리지 않습니다.
로더는 zend_compile_file에 후크되어 각 PHP 프로세스, 각 파일은 한 번만 복호화됩니다.
Zend opcode로 컴파일된 후의 실행 속도는 일반 PHP와 차이가 없습니다.
OPcache가 켜져 있으면 그 한 번의 복호화 비용도 캐시로 분산됩니다.
for + % + 누적) · 막대가 짧을수록 빠름 · 기준은 네이티브 PHP
| 워크로드 | 네이티브 PHP | binaryphp-rs (.bphp · 전체 파일 암호화) |
binaryphp-vm (#[Protected] · 바이트코드 VM) |
|---|---|---|---|
함수 내 100만 회 핫 루프(for + % + 누적) |
88.61 ms ± 0.95 |
89.48 ms ± 3.08 |
~115 ms (JIT) · 해석 197.56 ms |
| 콜드 스타트 — 작은 파일(~220 B) | 56.05 ms ± 1.62 |
56.46 ms ± 1.34 |
~bphp (stub만, 함수 호출 전이면 VM 미기동) |
| 콜드 스타트 — 10 KB 파일(200 함수) | 57.14 ms ± 1.33 |
57.09 ms ± 1.57 |
~bphp (VM 비용은 호출 시 발생, 로드 시 아님) |
| OPcache 정상 상태 | 네이티브와 동일 |
네이티브와 동일 |
호출마다 추가 비용 |
| 네이티브 ≈ binaryphp-rs(차이는 오차 범위 내). binaryphp-vm 핫 루프는 약 1.3배 느림(cranelift JIT가 정수 핫 패스 최적화) — 그 대가로 바이트코드 수준 보호: 마스터 키가 누설되어도 함수 내용은 보이지 않습니다. | |||
2026-05-05 측정, hyperfine 사용, 각 데이터 30회 반복.
환경: Debian 12(kernel 6.5) + PHP 8.2.30 + Rust 1.95.0,
Intel Xeon E5-2680 v4 @ 2.40 GHz(binaryphp.so 548 KB,
release + LTO 빌드). include마다의 복호화 비용은
파일 크기 / 1 GB/s(AES-NI 하드웨어 가속)에
~50 µs의 HKDF와 라이선스 검증이 추가되는 정도.
VM 실행 비용은 바이트코드 명령 수에 비례합니다.
컴파일러 peephole 최적화($x++, $x += k,
$x = $x + e, slot-vs-slot 정수 비교, $x * imm,
x % imm)로 핫 루프 비용을 ~5×에서 ~2.5×까지 압축 —
LoadVar / StoreVar의 스택 연산을 단일 op로 합치는 방식입니다.
VM 언어 커버리지:
객체 지향(클래스, extends, abstract,
interface, trait + use,
static, 클래스 상수, $this,
parent::, self::, 매직
__construct / __get /
__set / __call);
클로저 function () use (…)와
애로우 함수 fn () => expr;
try / catch / finally / throw;
match, === / !==, ??,
?:, <=>, instanceof;
지연 / 코루틴 제너레이터(yield는 frame snapshot & resume —
무한 제너레이터도 사용 가능, 실제 소비된 값만 계산);
완전한 for / while / foreach / switch / break / continue;
스프레드 ...$args;
참조 &$x(함수 인자, array_push /
sort 등 내장도 지원);
global; heredoc / nowdoc;
약 50개 내장 함수(strlen,
count, trim, explode,
implode, sprintf, md5,
sha1, base64_encode/decode,
array_* 등);
#[Protected]는 클래스 메서드에도 적용 가능, $this->prop
읽기/쓰기는 PHP와 VM 간 자동 동기화; cranelift AOT JIT가 정수 핫 루프 최적화.
.bphp(binaryphp-rs)면 충분 —
네이티브 PHP와의 속도 차이는 측정 불가. #[Protected](binaryphp-vm)는
가장 민감한 함수 — 라이선스 검증, 키 파생, 변조 방지 로직 — 전용으로.
약 2.5배 실행 비용을 지불하는 대가로 「마스터 키가 누설돼도 핵심 로직은 보이지 않음」을 얻습니다.
OPcache가 켜진 상태에서 보호하지 않은 경로는 네이티브 PHP와 완전히 동일한 속도입니다.
Stripe로 월간 또는 연간, 연간은 20% 할인.
.php 또는 .zip.zip 상한 100 MB무료 버전과 유료 버전은 동일한 인코딩 엔진! 동일한 AES-256-GCM, 동일한 바이트코드 VM, 보호 강도는 완전히 같습니다. 차이는 사용량 한도(파일 크기, API 권한, 일괄 처리 속도)뿐입니다.
무료, 자유롭게 재배포 가능. BinaryPHP로 암호화한 플러그인을 실행할 호스트는 모두 이 로더가 필요합니다.
# 1. .so를 PHP 확장 디렉토리에 복사
$ sudo cp binaryphp.so /usr/lib/php/20220829/
# 2. 확장 활성화
$ echo 'extension=binaryphp.so' | sudo tee /etc/php/8.2/mods-available/binaryphp.ini
$ sudo phpenmod binaryphp
# 3. PHP-FPM(또는 사용 중인 SAPI) 재시작
$ sudo systemctl restart php8.2-fpm
로더가 활성화되었는지 확인:
$ php -r 'echo binaryphp_version();'
0.9.2
$ php -r 'echo binaryphp_hostname();'
your-domain-or-hostname
$ php -r 'print_r(binaryphp_macs());'
Array ( [0] => aa:bb:cc:dd:ee:ff )
또는 브라우저에서 phpinfo() 페이지를 열면 BinaryPHP 전용 섹션이 나타나, 로더 버전, master 세대, 지원 포맷, 바이트코드 VM 상태를 확인 가능. CLI 권한이 없는 환경(cPanel, Plesk, 공유 호스팅)에 특히 편리:
BinaryPHP support → enabled
Loader version → 0.9.2
Master gen → 2 (rotated 2026-05-06)
File formats → BPHP2/3/4 · HBPH1/2/3 · BVMC1/2/3
Bytecode VM → v3 obfuscation + cranelift JIT
사용 중인 PHP 마이너 버전에 맞는 것을 다운로드(각 .so는 해당 ABI 전용, 호환되지 않음):
서버에서 php -v로 실제 버전 확인. macOS / aarch64 / FreeBSD는 현재 미지원.
CLI 설치도, 마스터 키 보관도 필요 없음. 인코더를 열고 업로드, 라이선스 설정, 암호화 파일 다운로드. 끝.
.php → .php)무료는 .php 또는 .zip, 상한 1 MB. Pro 상한 100 MB; Ultra는 multipart로 300 MB까지.
솔직히: 오프라인에서 실행 가능한 어떤 DRM도 「영원히 해독 불가」를 보장할 수 없습니다. ionCube, Zend Guard, SourceGuardian 모두 연구되고 깨진 적이 있습니다.
그래서 BinaryPHP의 목표는 신화적 「절대 안전」이 아니라:
해독 비용을 정품 라이선스 비용보다 훨씬 높게 만드는 것입니다.
BinaryPHP의 해독은 단순히 「파일을 복호화」하는 데 그치지 않습니다. 공격자는 보통 추가로:
설령 성공해도, 얻는 것은 보통 소스 코드가 아니라:
게다가 BinaryPHP는 지속적으로 업데이트:
구버전 해독 도구는 빠르게 무력화됩니다.
이것이 BinaryPHP의 핵심 철학입니다:
해독을 「불가능」으로 만드는 게 아니라 「가치 없게」 만든다.
웹 서버에서 실행되는 프로그램은 도메인 바인딩. 로더는 먼저 $_SERVER['SERVER_NAME'](nginx / Apache가 설정해 클라이언트가 위조 불가)을 확인하고, 없으면 HTTP_HOST로 폴백. CLI 도구는 MAC 주소로 바인딩. 둘 다 함께 적어도 되고, 어느 하나라도 일치하면 통과합니다.
없습니다. 복호화는 컴파일 단계에서 한 번, 파일당 한 번뿐입니다. 컴파일 후 실행 속도는 네이티브 PHP와 차이 없음. OPcache가 켜져 있으면 그 한 번의 복호화 비용도 후속 요청 전체에 분산됩니다.
SaaS 인코더 사용 시: 아니요. 마스터 키는 항상 우리 측에 머무르고 고객 환경으로 유출되지 않습니다.
BinaryPHP는 2026년에 처음부터 새로 만든 버전으로, 현대 암호(AES-256-GCM, HKDF-SHA256)를 기반으로 핵심 로직을 자체 바이트코드 VM으로 한 번 더 감쌉니다. 도구체인은 SaaS 형태로 제공되고, 마스터 키는 우리 서버에 상주하며, 파일 포맷도 공개 사양입니다.
호스트에 BinaryPHP 로더가 설치되어 있어야 합니다. 로더는 무료로 자유롭게 재배포 가능 — 고객이 직접 설치(php.ini에 한 줄 추가)하거나 호스팅 사업자에게 사전 설치 요청 가능.
로더는 독립된 3중 방어를 내장:
#[binaryphp\Protected]로 표시된 함수 전용. 이 함수들은 우리 자체 바이트코드로 컴파일되며(PHP도 Zend opcode도 아님), 실행 시 로더가 직접 해석. 고객 디스크에 평문 PHP는 일절 등장하지 않습니다.가장 민감한 알고리즘은 자체 서버 API에서 실행하는 것을 권장; 그 외에는 BinaryPHP의 다층 방어로 보호되므로 프로그램 전체를 다시 작성할 필요는 없습니다.
호환됩니다. BinaryPHP는 PHP의 컴파일 경로에 개입하므로 include / require는 평소대로 동작합니다 — Composer autoload, 프레임워크 라우터, 플러그인 시스템 모두 문제없음.
호환됩니다. OPcache는 우리가 복호화·컴파일을 마친 후에 컴파일 결과 캐싱을 이어받으므로, 각 무효화 주기당 한 번만 복호화됩니다.
공개되고 안정된 사양: 52-byte 헤더("BPHP2" magic + 버전 + 16-byte salt + 12-byte IV + 16-byte GCM tag) 뒤에 암호문이 따라옵니다.
청구는 모두 Stripe 경유, 선택은:
구독은 30일 환불 보장 포함. Stripe는 모든 주요 신용카드와 다수의 지역별 결제 방식을 지원합니다.
아키텍처상 불가능합니다. 우리는 업로드된 PHP를 실행하지 않습니다. tokenize(구문 분할)와 암호화만 수행. 인코더는 파일에 token_get_all()(PHP의 어휘 분석기, 실행기가 아님)을 돌리고, HTML과 PHP 블록을 분리한 뒤 AES로 각 PHP 블록을 암호화해 파일로 출력합니다. 전체 프로세스에서 eval, include, shell 명령 호출은 일절 없습니다.
zip 업로드는 4중 방어선이 추가됩니다(압축 해제 전 검증):
../, 절대 경로, 드라이브 문자)각 인코딩 작업은 독립된 임시 디렉토리에서 실행되고, 응답 송출 후 즉시 정리됩니다. 어떤 악성 코드를 업로드해도 — 우리는 그저 암호화해서 돌려줄 뿐입니다.
암호화 PHP 플러그인을 재판매하는 ISV / SaaS 사업자용. 고객이 주문한 후:
POST, 고객의 도메인 / MAC, 인코딩 파라미터, webhook URL 전달.POST.인코딩 결과물은 R2에 72시간 보관 후 자동 삭제; 업로드한 소스는 24시간 이내에 삭제됩니다.
10분 메일 서비스
「BinaryPHP를 처음에는 무료 버전으로 테스트했는데 느낌이 좋아서, 현재 Pro로 사이트 전체를 PHPMailer 까지 포함해 컴파일하고 있습니다. 정말 강력합니다! 속도 저하도 전혀 느껴지지 않습니다.」