PHP 용 코드 난독 화 장치가 있습니까? [닫은]


212

PHP에 좋은 난독 화기를 사용한 사람이 있습니까? 나는 몇 가지를 시도했지만 그들은 매우 큰 프로젝트에서 작동하지 않습니다. 예를 들어 한 파일에 포함되어 있고 다른 파일에 사용 된 변수는 처리 할 수 ​​없습니다.

아니면 코드 확산을 막는 다른 방법이 있습니까?


11
꼭 그래야합니까?
— Cheery

5
@ StevenA.Lowe : PHP를 놀리는 것을 조심하십시오. :-)
— Marco Demaio

89
또 다른 완전하고 건설적인 프로그래밍 관련 질문은 완벽한 Q & A 형식으로 구성되지 않은 것으로 닫힙니다. 스택 오버플로에 부끄러움 ...
— Petr

6
스택 오버플로입니다. 닫히지 말아야 할 닫힌 질문보다 더 많은 유일한 것은 빈약 한 슬롭이 여기에 와서 도움을 요청할 때 화염을 일으키는 것입니다.
— Mac

2
이것이 폐쇄되어서는 안된다고 생각되면, 다시 열도록 투표하십시오.
— Ira Baxter

답변:


240

PHP 코드를 난독 처리하는 무료 PHP 난독 화기 인 PHP protect 를 사용해 볼 수 있습니다 .
매우 좋고 사용하기 쉽고 무료입니다.
편집 :이 서비스는 더 이상 살지 않습니다.

혼란 스러울 수 있기 때문에 난독 화를 사용하지 않는 것에 대해 다른 사람들이 여기에 쓴 것에 관해서는 :
나는 대답 할 단 한 가지가 있습니다-누군가가 자물쇠를 집을 수 있기 때문에 집 문을 잠그지 마십시오.
이것은 정확히 그렇습니다. 난독 화는 100 % 코드 도난을 방지하기위한 것이 아닙니다. 시간이 많이 걸리는 작업 만하면되므로 원래 코더를 지불하는 것이 더 저렴합니다. 도움이 되었기를 바랍니다.


105
난독 화가 그것을 어렵게 만드는 것, 불가능하지 않다는 사실을 지적한 +1.
— Ashkan Kh. Nazary

3
소스 코드를 난독 처리하지 않고 암호화하는 것만으로는 해독하기가 불가능하며 실제로는 그렇게하기가 어렵습니다.
— xorinzor

9
그것을 시도했지만 그것을 좋아하지 않았다. 변수 이름 만 변경하고 주석을 제거하지는 않습니다.
— Pisu

1
@ Schwern, 당신의 문을 잠금 해제 한 다음 자신을 커버하기 위해 Columbo와 정말 좋은 변호사를 고용;)
— David Newcomb

2
@David Newcomb-문을 잠글 수있을 때 누가 훌륭한 변호사를 원합니까?
— azoundria 2016 년

109

사람들은 난 독자를 제공하지만 난독 화로 인해 다른 사람이 귀하의 코드를 얻는 것을 막을 수는 없습니다. 없음 컴퓨터에서 실행할 수 있거나 영화와 음악의 경우 재생할 수있는 경우 컴퓨터를 사용할 수 있습니다. 기계 코드로 컴파일하더라도 작업이 조금 더 어려워집니다. 난 독자를 사용하면 자신을 속이는 것입니다. 게다가 사용자가 버그를 수정하거나 수정하지 못하게합니다.

음악 및 영화 회사는 아직이 용어에 동의하지 않았지만 여전히 DRM에 수백만 달러를 소비합니다.

PHP와 Perl과 같은 해석 된 언어에서는 사소합니다. 펄은 많은 코드 난독 화를 가지고 있었지만, 사소하게 디 컴파일 할 수 있다는 것을 깨달았습니다.

perl -MO=Deparse some_program

PHP에는 DeZender 및 Show My Code가 있습니다.

내 조언? 면허를 작성하고 변호사를 구하십시오. 다른 옵션은 코드를 제공하지 않고 대신 호스팅 된 서비스를 실행하는 것입니다.

주제에 대한 perlfaq 항목 도 참조하십시오 .


220
나는 대부분 당신에게 동의하지만 OP는 오픈 소스의 장점에 대한 강의가 아니라 제품 추천을 요구했습니다.
— Eli

36
Open Source와는 아무런 관련이 없습니다. 코드를 볼 수없는 것만으로 매시업하는 것과 관련이 있습니다. 실제로 사용자 컴퓨터에서 실행되는 모든 코드 또는 데이터는 컴파일, 난독 화 또는 암호화 방법에 관계없이 완전히 중단됩니다. OP는이를 이해해야합니다.
— Schwern

7
@ JamShady : 난독 화가 버그를 수정하거나 수정할 수 없다는 것을 의미하지는 않습니다. 어리석게 소스 코드를 난독 처리하고 원본을 버리고 난독 처리 된 결과를 유지해야한다고 주장하면 아무 것도 할 수 없습니다. 훌륭한 난독 화자는 코드 와 난독 화 된 결과에 대한 매핑을 유지해야한다고 주장합니다 . 원본 코드를 디버그 / 수정하고, 난독 처리 된 패치를 고객에게 제공하고, 난독 화 된 불만을 다시 읽을 수있는 것으로 변환하여 맵을 사용하여 문제를 진단 할 수도 있습니다. 그는지도를 가지고 있지 않아서 이것을 안전하게 만듭니다.
— Ira Baxter

34
질문 : 어떻게, 대답 : 도움이되지 않아야합니다
— cmc

26
@cmc 많은 사람들이이 질문에 직접 대답 할 것이라고 확신하므로 다른 방식을 택해도 손실이 없습니다. 전문가에게 문의하는 요점은 실제 문제를 해결하기 위해 잘못된 질문을 할 때 알고 있다는 것입니다. 이것은 "5 가지 이유"의 응용 프로그램입니다. en.wikipedia.org/wiki/5_Whys 실제 문제 / 질문은 "사람들이 내 PHP 코드를 읽거나 훔칠 수 없도록하는 방법"입니다. 대답은 할 수없는 코드를 제공하면 많은 시간과 비용을 낭비하고 잘못된 보안 감각을 얻을 수 있다는 것입니다. 난 독자 목록보다 도움이되지 않습니까?
— Schwern

31

완벽한 것은 없습니다. 프로그래머가 아닌 사람들을 막을 무언가를 원한다면 여기에 쓸 수있는 작은 스크립트가 있습니다.

<?php
$infile=$_SERVER['argv'][1];
$outfile=$_SERVER['argv'][2];
if (!$infile || !$outfile) {
    die("Usage: php {$_SERVER['argv'][0]} <input file> <output file>\n");
}
echo "Processing $infile to $outfile\n";
$data="ob_end_clean();?>";
$data.=php_strip_whitespace($infile);
// compress data
$data=gzcompress($data,9);
// encode in base64
$data=base64_encode($data);
// generate output text
$out='<?ob_start();$a=\''.$data.'\';eval(gzuncompress(base64_decode($a)));$v=ob_get_contents();ob_end_clean();?>';
// write output text
file_put_contents($outfile,$out);

19
대박? 모든 페이지에는 소스를 얻는 완벽한 솔루션이 있습니다 : "gzuncompress (base64_decode ($ a))"를 실행하십시오. 예, 프로그래머가 아닌 사람을 중지시킵니다. 그러나 원래 소스 코드는 프로그래머가 아닌 사람들을 막을 것입니다. 누가 그것을 인코딩해야합니까? 리버스 엔지니어링하려는 의도를 살펴볼 유일한 사람 은 PHP 프로그래머입니다.
— Ira Baxter

2
프로그래머가 아닌 사람들은 대부분 소스 코드에서 변경하려는 문자열을 검색하여 시도합니다. 또한 도메인 이름, 데이터베이스 이름, 사용자 등과 같이 소스 코드가 변경되지 않도록 프로그래머가 아닌 사람을 막는 솔루션을 찾고 있습니다.
— Asad kamran

이것은 나에게 매우 유용한 답변입니다. 사용자가 메모장에서 "database.php"를 쉽게 열고 데이터베이스 사용자 이름과 비밀번호를 볼 수 없도록하는 데 관심이 있습니다.
— TimH-Codidact

20

해석 된 언어의 난독 화를 무의미하다고 레이블 할 수 있는지 확실하지 않습니다 (Schwern의 게시물에 주석을 추가 할 수 없으므로 여기에 새로운 항목이 있습니다).

누군가가 코드를 난독 화하려는 가능한 모든 시나리오를 알고 있다고 가정하면 약간 근시안적이라고 생각합니다. 누군가 코드를 난독 화하면 누군가가 필요한 길이로 실제로 기꺼이 갈 것이라고 가정합니다. 내 현재 시나리오를 고려하십시오.

크고 복잡한 PHP 기반 사이트를 개발하는 컨설팅 회사에서 일하고 있습니다. 이 프로젝트는 다른 컨설턴트가 개발 한 다른 사이트를 호스팅하는 클라이언트 서버에서 호스팅됩니다. 기술적으로 우리가 작성하는 코드는 클라이언트가 소유하므로 라이센스를 부여 할 수 없습니다. 그러나 서버에 대한 액세스 권한이있는 다른 컨설턴트 (경쟁 업체)는 먼저 클라이언트의 허가없이 코드를 복사 할 수 있습니다. 따라서 우리는 난독 화의 진정한 이유가 있습니다. 경쟁 업체가 작업의 사본을 처음부터 새로 만드는 노력보다 코드를 이해하는 데 필요한 노력을 기울이는 것입니다.


16

SD Thicket PHP Obfuscator를 참조하십시오임의의 큰 페이지 세트에서 잘 작동하는 obfuscator에 대해서는 를 . 주로 식별자 이름을 스크램블하여 작동합니다. 규모가 크지 않은 응용 프로그램에서는 코드를 이해하기가 매우 어려워 질 수 있습니다.

"eval (decode ( encryptedprogramcode ))"체계에 많은 에너지를 낭비하지 않습니다 . 많은 PHP " 난 독자 " 가하는 것입니다. "이것은" 난 독자 "가 아닌"인코더 "입니다. eval-decode 자신을 실행하고 디코딩 된 코드를 얻습니다.

언어 정확한 파서를 사용하여 PHP를 처리합니다. 프로그램이 구문 상 유효하지 않은지 알려줍니다. 더 중요한 것은 전체 언어를 정확하게 알고 있다는 것입니다. 코드가 손실되거나 혼동되지 않으며 코드를 손상시키지 않습니다 (예를 들어, "부정확하게"난독 화하는 경우 발생하는 다른 작업 (예 : 코드의 공용 API를 올바르게 식별하지 못하는 경우)).

예, 여러 페이지에서 동일하게 식별자를 난독 처리합니다. 그렇게하지 않으면 결과가 작동하지 않습니다.


1
신고자 : 귀하가 왜 신고했는지에 대한 예의를 가질 수 있습니다. 특정 문제를 포함하여 OP의 질문에 직접 대답합니다.
— Ira Baxter

내가 말할 수있는 것은 Windows에서만 실행되는 EXE입니까? 적어도 eval은 .exe 파일입니다 ...
— Craig Jacobs

eval 파일은 .exe 기반 설치 관리자입니다. 복잡한 사실은 설치된 제품이 일반적으로 .cmd 스크립트에서 실행된다는 것입니다. 왜냐하면 그 아래에는 병렬 프로그래밍 언어가 있기 때문입니다. 주로 Windows 제품으로 설계되었습니다. 그러나 Wine을 사용하여 Linux에 설치하면 기본 Linux 도구 인 것처럼 .sh 스크립트와 함께 설치됩니다. GUI 부분을 사용하는 경우 (선택적, 대부분의 사람들은 프로덕션 빌드 프로세스에서 스크립트로 스크립트를 실행하려고 함) Windows의 기본 Java 및 Linux의 기본 Java를 사용합니다.
— Ira Baxter

Thicket이 호스팅 공간에 애드온을 필요로하는 것이 사실입니까? 그렇다면 공유 호스팅에 어떻게 설치됩니까?
— Stephen Adelakun

@StephenAdelakun : Thicket은 서버를 변경할 필요가 없습니다. 다운로드하여 설명서를 확인하십시오.
— Ira Baxter

14

내가 본 것은 Zend Guard 입니다.


2
SD PHP Obfuscator는 훌륭하고 비용은 약 1/5입니다.
— Ira Baxter

1
@SalmanPK 그리고 그 이유는 분명해야합니까?
— Pellmeister

@SalmanPK 웹 호스팅 공간에 애드온이 필요합니다. 젠드 가드는 아마 그렇게한다. 어느 것이 가장 주류인지 확실하지 않습니다. 어쨌든 문제는 잠재 고객을 줄인다는 것입니다.
— James P.

1
SD의 PHP Obfuscator는 모두 소문자로 변환합니다. 프레임 워크를 사용하는 경우 문제가됩니다.
— Amil Waduwawara

1
@JamesPoulson : 귀하의 의견이 SD PHP obfuscator를 가리키는 지 확실하지 않습니다. 분명히하기 위해 웹 호스팅 공간에 애드온이 필요하지 않습니다.
— Ira Baxter

10

이것을 시도하십시오 : http://www.pipsomania.com/best_php_obfuscator.do

최근에 Java로 작성하여 PHP 프로젝트를 난독 화하기 위해 작성했습니다. 넷에 작성된 훌륭하고 호환 가능한 준비가되어 있지 않기 때문에 온라인으로 saa로 전환하기로 결정했기 때문에 누구나 무료로 사용할 수 있습니다. 호환성을 극대화하기 위해 다른 스크립트간에 변수 이름을 변경하지는 않지만 임의의 논리로 모든 명령을 아주 잘 모호하게합니다. 끈 ... 모든 것. 나는이 버그가 많은 코드 일식보다 훨씬 낫다고 생각합니다 .PHP로 작성된 방식이며 매우 느립니다 :)


좋아 보이지만 안전합니까? 다른 사람들이 쉽게 해독 할 수 있습니까?
— shasi kanth

나는 지금이 순간까지 NOBODY가이 난 독자에 의해 난독 화 된 코드를 난독 처리 할 수 ​​있음을 확신 할 수 있습니다.
— PatlaDJ

3
[인용 필요]-사제 암호화는 모호함을 통한 보안이며 보안은 전혀 없습니다.
— 크리스 베이커

8
"지금까지 NOBODY가 코드를 난독 처리 할 수 ​​있다는 것을 확신 할 수 있습니다"PHP조차도 PHP가 할 수 있다면 다른 사람도 그렇게 할 수 있습니다. 사이트의 샘플 코드로 보아 어딘가에 코드를 덤프하고 평가를 에코로 변경하면 코드가 표시됩니다.

3
주의 :이 방법은 사소 원래 변수 이름 다시 디코딩 될 수는 참조 : lombokcyber.com/en/detools/decode-pipsomania
— 젠 후퍼

3

PHP 용 Thicket ™ Obfuscator

PHP 난독 도구 안간힘의 PHP 소스 코드는 매우 어려운 이해하거나 리버스 엔지니어링 (예)를 할 수 있도록합니다. 이를 통해 웹 사이트에서 호스팅하거나 고객에게 배송해야하는 소스 코드 지적 재산을 크게 보호 할 수 있습니다. SD의 소스 코드 Obfuscators 제품군의 구성원입니다.


TrueBug.com에 연결할 수 없습니다. 3 년이 지난 후에 의견을 게시하고 있음을 알고 있지만 새로운 URL 인 trueBug에 대해 도움을 줄 수 있습니까?
— Stephen Adelakun

@StephenAdelakun TrueBug 만 필요하십니까? 이것을 사용하십시오 : TruBug PHP Obfuscator .
— Praveen Kumar Purushothaman

죄송합니다. 링크가 작동하지 않습니다. 아니면 뭔가 빠졌습니까?
— Stephen Adelakun

@StephenAdelakun 방금 지금 확인했는데 작동합니다.
— Praveen Kumar Purushothaman

1
@StephenAdelakun 왜 그런가요? :(어쨌든 그것은 죽은 소프트웨어입니다. 지금 더 좋고 멋진 것들이 있습니까?
— Praveen Kumar Purushothaman

2

시원하고 사용하기 쉬운 GUI가 제공되므로 SourceGuardian을 사용하는 것이 좋습니다.

그러나주의하십시오 :

재미있는 라이센스 조건에주의하십시오.

  • 머신 당 1 개만 실행할 수 있습니다. 지금까지는 허용됩니다.
  • 웹 서버와 같은 다른 컴퓨터에서 명령 줄 인터페이스를 실행하려면 다른 라이센스가 필요합니다 (예, 웃기 며 웃을 수 있습니다).

2
그것은 나에게 정상인 것 같습니다! 2 대의 컴퓨터 = 2 개의 라이센스! 일반적으로 사람들이하는 일은 한 컴퓨터에서 모두 인코딩 한 다음 다른 컴퓨터에 업로드하는 것입니다.
— David Newcomb

@ davidnewcomb 당신은 요점을 얻지 못하는 것 같습니다. 일반적으로 개발자 컴퓨터에서 코드를 배송하기 전에 암호화합니다. 온라인으로해야하는 경우 명령 행 인터페이스에도 추가 라이센스가 필요합니다. 명령 행 인터페이스는 로컬 상자가 아닌 웹 서버에 두는 경향이 있습니다.
— Herr

2
TL; DR 좋은 보호, 바보 라이센스 조건.
— Herr

1
머신이 아닌 사용자 당 1 개의 라이센스 여야합니다.
— beppe9000

@ beppe9000 완전히 동의합니다!
— Herr

-16

난독 처리는 프로그램에 잠재적 인 버그 및 보안 취약점의 다른 계층 만 추가합니다. 제발 하지마

난독 화 소프트웨어를 작성하는 사람들은 대개 매우 스케치적이고 숙련되지 않은 것처럼 보입니다.

코드가 "위대한"경우, 크래커는 난독 화 여부에 관계없이 코드를 확산시키기 위해 많은 시간을 할애합니다. 아무도 당신의 코드를 알거나 신경 쓰지 않는다면 아마 그렇지 않을 것입니다.


7
미숙련? 어떤 증거를 바탕으로? 나는 그들을 쓴다. 포괄적 인 일반화를 시작하기 전에 내 바이오를 확인하십시오. semanticdesigns.com/Company/People/idbaxter
— Ira Baxter

5
@Ira : 나의 진술은 여전히 ​​유효합니다. 가장 난독 화 된 코드는 몇 분 안에 깨질 수 있습니다. 내가 특별히 의미, 대부분 그것을 할 사람이없는 비 숙련되는 모든 . 가장 먼저 염두에 두었던 것은 Ioncube였으며 분명히 osvdb.org/show/osvdb/41708 취약점이 게시 되었습니다 . 그런 다음 PHP의 모호한 보안 요구 사항에 대해 부분적으로 비난 할 수 있습니다.
— L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

3
신뢰할 수있는 도구를 사용하여 난독 화를 수행하면 프로그램의 안정성에 대해서는 아무런 변화가 없습니다. 이진 컴파일은 일종의 난독 화이지만 Zend의 PHP 엔진이 신뢰할 수 있다고 확신합니다. (나쁜 도구로 수행 한 교란 또는 컴파일은 중요하지 않습니다).
— Ira Baxter

1
두뇌가 절반 정도 인 사람은 PHP가 실제 엔터프라이즈 소프트웨어 시장에서 어려움을 겪고 있다는 사실을 알고 있습니다. 나는 약한 마음을 가진 전도자들이 다른 말을하는 데 너무 아프다. (그렇습니다. 그것은 고의적 인 무지입니다.) 오픈 소스는 너무 오래 나가서 시도되어 왔으며 이것보다 더 많은 다른 비밀이 있기를 원합니다. 취미? 오픈 소스. 일? 암호화 거품 속에 살고 / 풍부한 pater를 가진 바보 / 바보 / 사람들 만이 이제까지 다르게 생각할 수 있습니다.
— conners

2
그 의견은 거의 이해할 수 없지만 오픈 소스 소프트웨어 또는 오픈 소스 소프트웨어를 기반으로하는 소프트웨어를 판매하는 것은 의미가 없음을 암시하는 것 같습니다. 눈치 채지 못한 경우 Java는 "엔터프라이즈", 오픈 소스이며 .NET만큼 성공합니다. 우리 회사는 수백만 달러를 벌고 난독 화를 사용할 필요가 없었습니다. 소프트웨어를 지원 / 개선 할 수없는 경우 소프트웨어를 판매하는 것이 좋은 이유는 무엇입니까 (예 : 다른 사람의 소프트웨어를 크랙하여 재판매 한 경우)
— L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.