HOWTO · PHP

8 최고의 PHP 코드 난독화 도구

이 튜토리얼은 PHP의 8가지 최고의 코드 난독화 도구를 보여줍니다.

이 페이지의 내용

PHP 난독화는 소스 코드를 덜 읽기 쉬운 형태로 다시 작성해 검사하기 어렵게 만들지만, 코드가 계속 읽을 수 없는 상태로 남거나 복사를 막아 주거나 실제 보안을 제공한다고 보장할 수는 없습니다. 아래 도구들은 무엇을 변환하는지, 어떤 PHP 버전을 대상으로 하는지, 어떤 라이선스로 제공되는지가 서로 다릅니다.

이 기사에서는 잘 알려진 PHP 난독화 도구 8개를 비교하여 프로젝트에 맞는 도구를 선택할 수 있도록 도와드립니다.

PHP 난독화로 할 수 있는 것과 없는 것

난독화는 정상적으로 동작하는 PHP 코드를 일반적인 독자가 따라가기 어렵게 다시 작성합니다. 일반적인 변환에는 변수, 함수, 클래스, 네임스페이스를 의미 없는 식별자로 바꾸는 작업, 주석과 들여쓰기 제거, 제어 흐름 왜곡 등이 있습니다. 목표는 코드를 이해하는 데 필요한 노력을 높이는 것이지, 이해를 수학적으로 불가능하게 만드는 것이 아닙니다.

PHP가 여전히 파일을 실행할 수 있어야 하므로, 난독화된 스크립트는 원칙적으로 항상 되돌릴 수 있습니다. 의지가 있는 독자는 식별자 테이블을 해독하거나, 디버거로 코드를 단계별로 실행하거나, 난독화된 출력을 원본과 비교할 수 있습니다. 따라서 난독화는 기회적인 복사를 단념하게 만들 뿐 암호화가 아니며, 그 자체로 재사용이나 도용을 막을 수는 없습니다. 실질적인 보호를 위해서는 라이선스 조건이 필요하고, 중요한 경우에는 소스를 아예 배포하지 않는 서버 측 제공 방식도 필요합니다.

난독화는 자주 혼동되는 세 가지와도 다릅니다. 축소(minification) 또는 압축(compaction)은 공백과 주석을 제거하고 때로는 이름을 짧게 줄여 파일 크기를 줄일 뿐이며, 가독성 저하는 부수적인 효과이지 목표가 아닙니다. 성능 최적화는 코드를 더 빠르게 실행되도록 바꾸는 것이며 압축은 그런 역할을 하지 않습니다. 그리고 비밀번호 해싱이나 비밀 값 보호 같은 보안 통제는 절대 난독화에 의존해서는 안 됩니다. PHP 런타임이 읽을 수 있는 것은 공격자도 결국 읽을 수 있기 때문입니다.

전체 목록에 적용되는 주의 사항이 하나 더 있습니다. 아래의 기능 설명, PHP 버전 주장, 라이선스 관련 내용은 각 프로젝트가 문서에서 밝힌 내용을 반영한 것이며, 이 중 일부 프로젝트는 몇 년 동안 업데이트되지 않았습니다. 도구를 채택하기 전에 리포지토리의 현재 상태를 확인하세요.

PHP 난독화 도구 8개 비교

YAK Pro – PHP 난독화 도구

"Yet Another Killer Product"의 약자인 YAK Pro는 광범위한 변환을 적용하는 오픈 소스 PHP 난독화 도구입니다.

  1. 코드 문장을 무작위로 재배열할 수 있습니다.
  2. 들여쓰기와 주석처럼 불필요한 요소를 삭제할 수 있습니다.
  3. goto 문을 사용해 if, else, else if, for, while, do-while 및 유사한 구조를 알아보기 어렵게 만듭니다.
  4. 함수, 클래스, 레이블, 변수, 네임스페이스를 포함해 코드의 모든 중요한 부분의 이름을 바꿀 수 있습니다.

YAK Pro는 GitHub에서 제공되며 여기에서 다운로드할 수 있습니다.

Naneu의 PHP 난독화 도구

Naneu는 PSR/OOP PHP 코드용으로 설계되었습니다. eval() 기반 난독화에 의존하는 많은 도구와 달리 Naneu는 PHP 소스를 구문 분석하여 클래스, 메서드, 변수 등의 코드 부분 이름을 바꿉니다.

이 라이브러리는 원래 보호 없이 공유할 수 없는 비공개 라이브러리의 소스를 난독화하기 위해 작성되었습니다. 문서에 명시된 특징은 다음과 같습니다.

  1. PSR/OOP PHP 코드베이스를 대상으로 합니다.
  2. 문서에 따르면 PHP 5.3, 5.4, 5.5용으로 작성된 코드를 난독화할 수 있지만, 도구 자체를 실행하려면 5.4보다 높은 PHP 버전이 필요합니다. 이는 오래된 버전 주장이므로 사용 전에 현재 호환성을 확인하세요.

Naneu는 GitHub에서 제공되며 여기에서 다운로드할 수 있습니다.

Eccenux POBS

Eccenux POBS는 PHP 코드를 덜 읽기 쉬운 형태로 컴파일합니다. 문서는 그 한계를 솔직하게 밝히고 있습니다. 결과물이 완벽하게 방어되는 것은 아니며, 집요한 독자는 개별 함수가 무엇을 하는지 여전히 추측할 수 있습니다.

POBS 설치는 간단합니다. 파일을 다운로드해 웹 서버 디렉터리에 압축을 풀면 됩니다. 문서에 명시된 기능은 다음과 같습니다.

  1. 대규모 프로젝트에 사용할 수 있습니다.
  2. 설정이 쉽고 많은 준비가 필요하지 않습니다.

Eccenux POBS는 GitHub에서 제공되며 여기에서 다운로드할 수 있습니다.

pH-7 Obfuscator

pH-7 Obfuscator는 공유 웹 호스팅에 배포된 코드를 보호하는 것을 목표로 하는 오픈 소스 도구로, 일반적인 접근으로부터 소스를 숨기는 것이 주된 관심사입니다. 문서에 명시된 기능은 다음과 같습니다.

  1. 코드를 매우 읽기 어렵게 만듭니다.
  2. 문서는 PHP 5.2 이상을 지원한다고 주장하지만, 이는 실제 런타임과 대조해 확인해 볼 가치가 있는 오래된 주장입니다.

pH-7 Obfuscator는 GitHub에서 제공되며 여기에서 다운로드할 수 있습니다.

Xeoncross PHP Compactor

Xeoncross PHP Compactor는 PHP 코드를 압축하고 난독화하지만, 심층 난독화 도구라기보다는 주로 압축기에 가깝습니다. 압축은 공백을 제거하고 코드를 줄일 뿐 PHP 실행 속도를 높이지 않으므로, 성능 향상을 기대하고 이 도구를 선택해서는 안 됩니다.

이 도구는 클래스를 실행하는 데 필요한 문자 수를 비교해 프로젝트의 실제 크기를 파악하는 데 유용합니다.

Xeoncross PHP Compactor는 GitHub에서 제공되며 여기에서 다운로드할 수 있습니다.

smart-php-obfuscator

smart-php-obfuscator는 Weidi Zhang이 개발한 PHP 난독화 도구입니다. 문서에 명시된 기능은 다음과 같습니다.

  1. 오픈 소스입니다.
  2. 단순함을 유지하면서도 소스를 효과적으로 뒤섞는 것을 목표로 합니다.
  3. 문서는 PHP 7.0 이상을 지원한다고 주장하지만, 이 역시 확인이 필요한 오래된 주장입니다.

smart-php-obfuscator는 GitHub에서 제공되며 여기에서 다운로드할 수 있습니다.

pmaslak/php-obfuscator

pmaslak/php-obfuscator는 상업적 및 비상업적 목적으로 사용할 수 있으며 YAK Pro와 유사하게 작동합니다. 문서에 명시된 기능은 다음과 같습니다.

  1. 오픈 소스입니다.
  2. MIT 라이선스로 배포되어 독점 프로젝트에서의 도입이 간단합니다.

pmaslak/php-obfuscator는 GitHub에서 제공되며 여기에서 다운로드할 수 있습니다.

pl4g4/online-php-obfuscator

pl4g4/online-php-obfuscator는 pl4g4가 개발한 온라인 서비스입니다. PHP 파일을 업로드하면 서비스가 난독화된 버전을 생성하고 결과를 다운로드합니다. 문서에 명시된 기능은 다음과 같습니다.

  1. 오픈 소스입니다.
  2. PHP 코드의 난독화된 버전을 다운로드할 수 있습니다.

이 프로젝트는 업로드된 파일이 난독화가 끝나면 삭제된다고 주장하지만, 그 보장은 검증되지 않았습니다. 처리 및 보관 조건을 독립적으로 확인하지 않고는 비공개 또는 독점 소스 코드를 제3자 난독화 서비스에 업로드하지 마세요. 민감한 코드에는 로컬에서 실행되는 도구를 사용하는 것이 좋습니다.

프로젝트에 맞는 PHP 난독화 도구 선택

기능 목록이 가장 긴 도구를 고르기보다는 실제 제약 조건에 맞는 도구를 선택하세요.

  • 코드베이스 스타일. 최신 PSR/OOP 코드베이스의 경우 Naneu는 파싱 기반의 클래스 및 메서드 이름 변경을 중심으로 설계되었습니다. 오래되었거나 절차적인 코드의 경우 YAK Pro 또는 pmaslak/php-obfuscator가 더 광범위한 식별자 및 제어 흐름 변경을 적용합니다.
  • 라이선스. 상용 프로젝트에 명시적인 허용 라이선스가 필요하다면 pmaslak/php-obfuscator는 MIT 라이선스입니다. 나머지 도구의 경우 각 리포지토리의 라이선스 파일을 직접 확인하세요. “오픈 소스"라는 표시만으로는 사용자의 권리가 정의되지 않습니다.
  • PHP 버전. 명시된 호환성 범위(Naneu의 PHP 5.3~5.5 대상, pH-7 Obfuscator의 5.2+, smart-php-obfuscator의 7.0+)는 프로젝트 문서에서 가져온 것으로 오래되었을 수 있습니다. 도입하기 전에 프로덕션 PHP 버전에서 코드 사본을 대상으로 도구를 실행해 보세요.
  • 로컬 도구 대 온라인 서비스. pl4g4/online-php-obfuscator는 가장 편리한 옵션이지만 소스를 업로드해야 합니다. 서비스의 데이터 처리 방식을 확인하지 않았다면 독점 코드는 로컬 도구에서 처리하세요.
  • 목표. 가독성을 낮추는 것이 목표라면 YAK Pro, Naneu, pH-7 Obfuscator 같은 실제 난독화 도구를 선택하세요. 파일 크기를 줄이거나 크기를 측정하는 것이 목표라면 Xeoncross PHP Compactor가 더 적합합니다. 단, 이것은 보안 수단이 아니며 PHP를 더 빠르게 만들지도 않습니다.

어떤 도구를 선택하든 원본 소스는 버전 관리에 보관하고, 난독화된 출력을 철저히 테스트하세요. 이름 변경은 리플렉션, 동적 호출, 명명 규칙에 의존하는 코드를 망가뜨릴 수 있습니다. 그리고 난독화는 라이선스와 함께 사용하는 여러 억제 수단 중 하나로 취급하고, 코드를 읽거나 재사용할 수 없다는 보장으로 여기지 마세요.