PHP 8.x · Rust 로더 · Web + CLI · Linux / Unix

당신의 PHP 프로그램을 판매하세요.
소스 코드는 함께 넘기지 말고.

BinaryPHP는 AES-256-GCM으로 상용 PHP 코드를 암호화하고, 파일마다 독립된 키를 부여한 뒤 도메인이나 MAC, 만료일을 바인딩합니다 — 모든 복호화는 극경량 Rust 로더가 투명하게 처리합니다. 분기마다 키를 갱신, 영구 하위 호환, 해독 비용은 정품 라이선스비를 훨씬 상회합니다.

1. 온라인 인코딩 2. 고객 설치 3. 암호화된 채로 실행
# binaryphp.com/encode/ 에서 파일과 라이선스 정보를 입력:

  도메인: acmestore.com, *.acmestore.com
  만료:   2027-12-31
  이름:   acme-pro

# 입력  →  plugin.php          (작성한 소스 코드, ~40 KB)
# 출력  →  plugin.php          (암호화 후, ~41 KB 바이너리)

# 파일명·확장자 그대로 — 원본 위에 덮어쓰면 되고, 호출 코드는 변경 불필요.
# 로더는 5-byte "BPHP2" 매직 헤더로 식별, 확장자와 무관.
# 마스터 키는 우리 서버에 머무르고, 고객은 암호화된 결과물만 받습니다.

PHP에는 컴파일이 없습니다.
프로그램을 파는 입장에선 큰 문제죠.

고객이 곧 경쟁자

고객이 .zip을 받는 순간, 작성한 모든 PHP 코드를 베끼고, 수정하고, 재판매할 수 있습니다.

라이선스 키만으론 못 막아요

소스 코드가 그대로 노출되면 라이선스 검사는 몇 분이면 제거됩니다. 코드 수준의 보호가 없으면 라이선스는 스위치일 뿐, 벽이 되지 못합니다.

당신의 노력이 남의 디스크에 흩어집니다

고객이 다운로드하는 순간, 지적 재산이 공유 호스팅·VPS·CI 머신 등에 흩어집니다 — 당신은 보지도 못하고 관리도 못 하며, tar -xzf 한 줄이면 다 추출됩니다.

동작 방식

1

업로드

.php 파일이나 플러그인 전체 .zip을 온라인 인코더에 끌어다 놓고, 도메인·MAC·만료일을 설정하면 됩니다. 마스터 키는 우리 서버에 머뭅니다 — 보관 걱정은 일체 없습니다.

2

배포

암호화된 파일을 다운로드. 각 파일에 독립된 16-byte salt와 HKDF-SHA256 파생 키가 포함됩니다. 1 byte라도 변조되면 GCM 검증이 실패해 실행이 거부됩니다.

3

로드

고객이 php.iniextension=binaryphp.so 한 줄을 추가하면 끝. 로더가 PHP의 컴파일 경로에 끼어들어 메모리에서 복호화·라이선스 검증(도메인 SERVER_NAME / HTTP_HOST 또는 CLI의 MAC)하고, 평문을 Zend Engine에 직접 전달합니다.

기본 탑재 기능

🔐 AES-256-GCM

NIST 표준 인증 암호화. 1 byte라도 변조되면 GCM tag 검증을 통과 못 해 실행 거부.

🧂 파일별 독립 키

암호화 파일마다 독립된 16-byte salt가 부여되고, HKDF-SHA256으로 파일 전용 키를 파생. 각 파일이 독립 봉인되어 서로 영향이 없습니다.

🛡️ 핵심 함수는 자체 VM에서 실행

#[binaryphp\Protected]가 표시된 함수는 우리 자체 바이트코드로 컴파일됩니다 — PHP도 Zend opcode도 아닙니다. 실행 시 로더가 직접 해석하므로, 알고리즘이 고객 디스크에 소스 형태로 남지 않습니다.

🌐 다중 도메인 라이선스

한 라이선스에 여러 호스트명이나 와일드카드(*.example.com)를 나열 가능. 어느 하나라도 일치하면 통과.

🔌 MAC 주소 바인딩

CLI 도구나 cron 작업처럼 HTTP가 없는 환경에서는 라이선스를 고객 머신의 MAC(/sys/class/net에서 읽음)에 직접 바인딩.

⏳ 만료일

기간 한정 빌드(평가판, 구독, 릴리스 주기) 발급 가능. 로더가 시스템 시계와 파일에 내장된 timestamp를 비교합니다.

⚙️ 표준 PHP 확장

php.iniextension=으로 로드. 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가 켜져 있으면 그 한 번의 복호화 비용도 캐시로 분산됩니다.

100만 회 핫 루프 벤치(for + % + 누적) · 막대가 짧을수록 빠름 · 기준은 네이티브 PHP
네이티브 PHP
88.6 ms
1.0×
binaryphp-rs
89.5 ms
1.0×
binaryphp-vm + JIT
~115 ms
1.3×
binaryphp-vm 해석 실행
197.6 ms
2.2×
네이티브 / .bphp 전체 파일 암호화 #[Protected] · cranelift JIT #[Protected] · 순수 해석
워크로드 네이티브 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% 할인.

Free

$0영구 무료
  • Google 로그인으로 즉시 사용
  • 파일당 1 MB 제한 — .php 또는 .zip
  • 정확한 도메인 1개(와일드카드 불가) + MAC 1개
  • 암호 강도는 유료와 완전히 동일
  • 제출 속도 제한 있음
로그인하여 시작
ISV 전용

Ultra

$10/ 월 · $96 / 년 (20% 할인)
  • Pro의 모든 기능 포함
  • 파일당 300 MB 상한(multipart 대용량 업로드)
  • REST API + Webhook, 판매 플로우에 통합 가능
  • 고객이 주문 → API 호출 → 다운로드 링크 webhook으로 수신 → 고객에게 전달
  • 인코딩마다 도메인 / MAC / 만료일 개별 지정
  • 우선 지원
Stripe로 구독

무료 버전과 유료 버전은 동일한 인코딩 엔진! 동일한 AES-256-GCM, 동일한 바이트코드 VM, 보호 강도는 완전히 같습니다. 차이는 사용량 한도(파일 크기, API 권한, 일괄 처리 속도)뿐입니다.

로더 설치

무료, 자유롭게 재배포 가능. BinaryPHP로 암호화한 플러그인을 실행할 호스트는 모두 이 로더가 필요합니다.

고객측

표준 설치(Debian/Ubuntu, PHP 8.2)

# 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는 현재 미지원.

플러그인 개발자

SaaS 인코더 사용

CLI 설치도, 마스터 키 보관도 필요 없음. 인코더를 열고 업로드, 라이선스 설정, 암호화 파일 다운로드. 끝.

  • 파일별 독립 랜덤 salt + AES-256-GCM
  • 라이선스 정보(도메인 · MAC · 만료일)는 암호문에 봉인되어 변조 불가
  • 파일명 그대로(.php.php)
  • 로더는 매직 헤더로 식별, 확장자와 무관
인코더 열기

무료는 .php 또는 .zip, 상한 1 MB. Pro 상한 100 MB; Ultra는 multipart로 300 MB까지.

자주 묻는 질문

BinaryPHP는 정말로 해독할 수 없나요?

솔직히: 오프라인에서 실행 가능한 어떤 DRM도 「영원히 해독 불가」를 보장할 수 없습니다. ionCube, Zend Guard, SourceGuardian 모두 연구되고 깨진 적이 있습니다.

그래서 BinaryPHP의 목표는 신화적 「절대 안전」이 아니라:

해독 비용을 정품 라이선스 비용보다 훨씬 높게 만드는 것입니다.

BinaryPHP의 해독은 단순히 「파일을 복호화」하는 데 그치지 않습니다. 공격자는 보통 추가로:

  • 로더 리버스 엔지니어링
  • 실행 시 로직 분석
  • VM 바이트코드 복원
  • 난독화된 프로그램 흐름 재구성

설령 성공해도, 얻는 것은 보통 소스 코드가 아니라:

  • 변수명 손실
  • 주석 없음
  • 제어 흐름 혼란
  • 유지보수 어려운 중간 표현

게다가 BinaryPHP는 지속적으로 업데이트:

  • 로더
  • VM 명령 집합
  • 난독화 계층
  • Anti-debug / Anti-tamper

구버전 해독 도구는 빠르게 무력화됩니다.

이것이 BinaryPHP의 핵심 철학입니다:

해독을 「불가능」으로 만드는 게 아니라 「가치 없게」 만든다.

Web과 CLI, 어느 라이선스 방식을 써야 하나요?

웹 서버에서 실행되는 프로그램은 도메인 바인딩. 로더는 먼저 $_SERVER['SERVER_NAME'](nginx / Apache가 설정해 클라이언트가 위조 불가)을 확인하고, 없으면 HTTP_HOST로 폴백. CLI 도구는 MAC 주소로 바인딩. 둘 다 함께 적어도 되고, 어느 하나라도 일치하면 통과합니다.

성능에 영향이 있나요?

없습니다. 복호화는 컴파일 단계에서 한 번, 파일당 한 번뿐입니다. 컴파일 후 실행 속도는 네이티브 PHP와 차이 없음. OPcache가 켜져 있으면 그 한 번의 복호화 비용도 후속 요청 전체에 분산됩니다.

마스터 키가 제 서버에 저장되나요?

SaaS 인코더 사용 시: 아니요. 마스터 키는 항상 우리 측에 머무르고 고객 환경으로 유출되지 않습니다.

다른 인코딩 솔루션과 무엇이 다른가요?

BinaryPHP는 2026년에 처음부터 새로 만든 버전으로, 현대 암호(AES-256-GCM, HKDF-SHA256)를 기반으로 핵심 로직을 자체 바이트코드 VM으로 한 번 더 감쌉니다. 도구체인은 SaaS 형태로 제공되고, 마스터 키는 우리 서버에 상주하며, 파일 포맷도 공개 사양입니다.

공유 호스팅에서 동작하나요?

호스트에 BinaryPHP 로더가 설치되어 있어야 합니다. 로더는 무료로 자유롭게 재배포 가능 — 고객이 직접 설치(php.ini에 한 줄 추가)하거나 호스팅 사업자에게 사전 설치 요청 가능.

BinaryPHP는 어떤 보호 계층을 제공하나요?

로더는 독립된 3중 방어를 내장:

  • AES-256-GCM 인증 암호화 + HKDF-SHA256 파일별 파생 키. 각 파일이 독립된 salt와 키를 가지므로 — 하나가 깨져도 다른 파일에 영향이 없습니다.
  • 자체 바이트코드 VM, #[binaryphp\Protected]로 표시된 함수 전용. 이 함수들은 우리 자체 바이트코드로 컴파일되며(PHP도 Zend opcode도 아님), 실행 시 로더가 직접 해석. 고객 디스크에 평문 PHP는 일절 등장하지 않습니다.
  • 라이선스 정보는 암호문에 봉인: 도메인 / MAC / 만료일. 어느 한 곳이라도 변조되면 GCM tag 검증 실패로 실행 거부.

가장 민감한 알고리즘은 자체 서버 API에서 실행하는 것을 권장; 그 외에는 BinaryPHP의 다층 방어로 보호되므로 프로그램 전체를 다시 작성할 필요는 없습니다.

제 프레임워크 / autoloader와 호환되나요?

호환됩니다. BinaryPHP는 PHP의 컴파일 경로에 개입하므로 include / require는 평소대로 동작합니다 — Composer autoload, 프레임워크 라우터, 플러그인 시스템 모두 문제없음.

OPcache와 호환되나요?

호환됩니다. OPcache는 우리가 복호화·컴파일을 마친 후에 컴파일 결과 캐싱을 이어받으므로, 각 무효화 주기당 한 번만 복호화됩니다.

파일 포맷은 어떤 모양인가요?

공개되고 안정된 사양: 52-byte 헤더("BPHP2" magic + 버전 + 16-byte salt + 12-byte IV + 16-byte GCM tag) 뒤에 암호문이 따라옵니다.

어떤 결제 수단을 지원하나요?

청구는 모두 Stripe 경유, 선택은:

  • 월간 구독 — Pro $5/월, Ultra $10/월, 언제든 취소 가능.
  • 연간 구독 — 동일 플랜의 연간으로 자동 20% 할인(Pro $48/년, Ultra $96/년).

구독은 30일 환불 보장 포함. Stripe는 모든 주요 신용카드와 다수의 지역별 결제 방식을 지원합니다.

악의적인 PHP 업로드로 시스템이 망가질 수 있나요?

아키텍처상 불가능합니다. 우리는 업로드된 PHP를 실행하지 않습니다. tokenize(구문 분할)와 암호화만 수행. 인코더는 파일에 token_get_all()(PHP의 어휘 분석기, 실행기가 아님)을 돌리고, HTML과 PHP 블록을 분리한 뒤 AES로 각 PHP 블록을 암호화해 파일로 출력합니다. 전체 프로세스에서 eval, include, shell 명령 호출은 일절 없습니다.

zip 업로드는 4중 방어선이 추가됩니다(압축 해제 전 검증):

  • 경로 탈출 공격 차단(../, 절대 경로, 드라이브 문자)
  • zip 폭탄 차단(누적 압축 해제 > 200 MB 또는 압축비 > 100배)
  • 엔트리 과다 차단(> 2,000개, 또는 .php > 1,000)
  • 디렉토리 깊이 차단(> 16단)

각 인코딩 작업은 독립된 임시 디렉토리에서 실행되고, 응답 송출 후 즉시 정리됩니다. 어떤 악성 코드를 업로드해도 — 우리는 그저 암호화해서 돌려줄 뿐입니다.

API 플랜은 어떻게 동작하나요?

암호화 PHP 플러그인을 재판매하는 ISV / SaaS 사업자용. 고객이 주문한 후:

  1. 당신의 서버가 우리 REST API에 POST, 고객의 도메인 / MAC, 인코딩 파라미터, webhook URL 전달.
  2. 우리가 지정 URL에서 소스를 가져와(또는 inline 수용) 인코딩 후 R2에 업로드.
  3. 우리가 설정된 webhook으로 다운로드 링크를 POST.
  4. 당신이 링크를 고객에게 전달(이메일, 대시보드, 어떤 방식이든).

인코딩 결과물은 R2에 72시간 보관 후 자동 삭제; 업로드한 소스는 24시간 이내에 삭제됩니다.

BinaryPHP로 출시 중인 고객

이젠 소스 코드를 함께 넘기지 마세요.

Google 로그인으로 즉시 시작 — 무료 버전 즉시 사용 가능, 신용카드 불필요.