Có một mã obfuscator cho PHP? [đóng cửa]


212

Có ai đã sử dụng một obfuscator tốt cho PHP chưa? Tôi đã thử một số nhưng họ không làm việc cho các dự án lớn. Ví dụ, họ không thể xử lý các biến được bao gồm trong một tệp và được sử dụng trong một tệp khác.

Hoặc bạn có bất kỳ thủ thuật nào khác để ngăn chặn sự lây lan của mã của bạn?


11
Bạn có chắc là bạn cần?
Vui vẻ

5
@ StevenA.Lowe: hãy cẩn thận khi tạo niềm vui cho PHP. :-)
Marco Demaio

89
Một câu hỏi liên quan đến lập trình xây dựng thực sự tốt khác ở định dạng Q & A hoàn hảo được đóng lại là không mang tính xây dựng. Xấu hổ về chồng tràn ...
Petr

6
Đó là Stack Overflow. Điều duy nhất sinh sôi nảy nở hơn những câu hỏi đóng không nên đóng là người dùng bùng cháy khi một số người nghèo đến đây và yêu cầu giúp đỡ.
Mac

2
Nếu bạn nghĩ rằng điều này không nên được đóng lại, sau đó bỏ phiếu để mở lại.
Ira Baxter

Câu trả lời:


240

Bạn có thể thử PHP bảo vệ , đó là một obfuscator PHP miễn phí để làm xáo trộn mã PHP của bạn.
Nó rất đẹp, dễ sử dụng và cũng miễn phí.
EDIT: Dịch vụ này không còn tồn tại nữa.

Đối với những gì người khác đã viết ở đây về việc không sử dụng obfuscation vì nó có thể bị hỏng, v.v .:
Tôi chỉ có một điều để trả lời họ - đừng khóa cửa nhà bạn vì bất cứ ai cũng có thể chọn khóa của bạn.
Đây là chính xác trường hợp, obfuscation không có nghĩa là để ngăn chặn trộm cắp mã 100%. Nó chỉ cần làm cho nó một nhiệm vụ tốn thời gian vì vậy sẽ rẻ hơn để trả tiền cho người viết mã gốc. Hi vọng điêu nay co ich.


105
+1 để chỉ ra thực tế rằng obfuscation là về việc làm cho nó cứng hơn, không phải là không thể.
Ashkan Kh. Nazary

3
lưu ý rằng mã hóa mã nguồn của bạn thay vì làm xáo trộn nó cũng không làm cho nó không thể giải mã được, thật sự rất khó để làm điều đó.
xorinzor

9
Đã thử nó, nhưng không thích nó. Nó chỉ thay đổi tên biến, nó không xóa bình luận ..
Pisu

1
@Schwern, Mở khóa cửa của bạn sau đó thuê Columbo và một luật sư thực sự giỏi, để tự bảo vệ mình;)
David Newcomb

2
@David Newcomb - Ai muốn trả tiền cho một luật sư thực sự giỏi khi bạn chỉ có thể khóa cửa?
azoundria

109

Mọi người sẽ cung cấp cho bạn obfuscators, nhưng không có lượng obfuscation nào có thể ngăn ai đó lấy mã của bạn. Không ai. Nếu máy tính của bạn có thể chạy nó, hoặc trong trường hợp phim và nhạc nếu nó có thể phát nó, người dùng có thể lấy nó. Ngay cả việc biên dịch nó thành mã máy cũng chỉ khiến công việc khó khăn hơn một chút. Nếu bạn sử dụng một obfuscator, bạn chỉ đang tự lừa dối chính mình. Tồi tệ hơn, bạn cũng không cho phép người dùng của mình sửa lỗi hoặc sửa đổi.

Các công ty âm nhạc và điện ảnh chưa hoàn toàn đồng ý với điều này, họ vẫn chi hàng triệu đô la cho DRM.

Trong các ngôn ngữ được giải thích như PHP và Perl, nó không quan trọng. Perl đã từng có rất nhiều mã obfuscators, sau đó chúng tôi nhận ra rằng bạn có thể dịch ngược chúng một cách tầm thường.

perl -MO=Deparse some_program

PHP có những thứ như DeZenderShow My Code .

Lời khuyên của tôi? Viết giấy phép và nhận một luật sư. Tùy chọn duy nhất khác là không đưa ra mã và thay vào đó chạy một dịch vụ được lưu trữ.

Xem thêm mục perlfaq về chủ đề này .


220
Tôi hầu hết đồng ý với bạn, nhưng OP đã yêu cầu giới thiệu sản phẩm, không phải là một bài giảng về giá trị của nguồn mở.
Eli

36
Không có gì để làm với Nguồn mở, đó là về việc trộn mã không chỉ để có thể nhìn thấy nó. Thực tế là bất kỳ mã hoặc dữ liệu nào chạy trên máy của người dùng cuối cùng đều trong suốt cho dù bạn biên dịch hay làm xáo trộn hoặc mã hóa nó như thế nào, hãy dừng hoàn toàn. OP cần hiểu điều đó.
Schwern

7
@JamShady: Obfuscation không có nghĩa là bạn không thể sửa lỗi hoặc sửa đổi. Nếu bạn ngu ngốc làm xáo trộn mã nguồn, vứt bỏ bản gốc và khăng khăng duy trì kết quả bị che giấu, vâng, bạn sẽ không thể làm được gì. Các obfuscators tốt khẳng định bạn giữ lại mã của mình ánh xạ tới kết quả bị che khuất; bạn có thể gỡ lỗi / sửa đổi mã gốc của mình, gửi các bản vá bị che khuất cho khách hàng của mình và thậm chí chẩn đoán các vấn đề của anh ta bằng cách sử dụng bản đồ để chuyển đổi các khiếu nại bị che giấu thành các bản có thể đọc được. Anh ta không có bản đồ, điều này làm cho nó an toàn.
Ira Baxter

34
Câu hỏi: Làm thế nào, Trả lời: Bạn không nên = không hữu ích
cmc

26
@cmc Tôi tin rằng nhiều người sẽ trả lời trực tiếp câu hỏi, vì vậy tôi không mất gì khi thực hiện một chiến thuật khác. Một nửa quan điểm của việc hỏi một chuyên gia là họ biết khi bạn hỏi sai câu hỏi để giải quyết vấn đề thực sự. Đây là một ứng dụng của "5 Whys". vi.wikipedia.org/wiki/5_Whys Vấn đề / câu hỏi thực sự là "làm thế nào để tôi ngăn mọi người không thể đọc / đánh cắp mã PHP của tôi". Câu trả lời là nếu bạn gửi mã mà bạn không thể, nhưng bạn có thể lãng phí toàn bộ thời gian và tiền bạc để thử và có được cảm giác an toàn sai lầm. Chẳng phải nó hữu ích hơn một danh sách các obfuscators sao?
Schwern

31

Không có gì sẽ hoàn hảo. Nếu bạn chỉ muốn một cái gì đó ngăn chặn những người không lập trình thì đây là một đoạn script nhỏ tôi đã viết, bạn có thể sử dụng:

<?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
Tuyệt vời? Mỗi trang đi kèm với giải pháp hoàn chỉnh để lấy nguồn: chạy "gzuncompress (base64_decode ($ a))". Vâng, điều này sẽ ngăn chặn những người không lập trình. Nhưng sau đó, mã nguồn ban đầu sẽ ngăn chặn những người không lập trình, ai cần mã hóa cho điều đó? Người duy nhất sẽ xem xét điều này có ý định thiết kế đảo ngược nó một lập trình viên PHP.
Ira Baxter

2
Hầu hết thời gian những người không lập trình viên cố gắng tìm kiếm một số chuỗi trong mã nguồn mà họ muốn thay đổi, tôi cũng đang tìm kiếm một giải pháp như vậy chỉ ngăn những người không lập trình thay đổi mã nguồn, ví dụ như tên miền, tên cơ sở dữ liệu, người dùng, v.v.
Asad kamran

Đây là một câu trả lời rất hữu ích cho tôi. Tôi chỉ quan tâm đến việc ngăn người dùng dễ dàng mở "cơ sở dữ liệu" trong notepad và xem tên người dùng và mật khẩu cơ sở dữ liệu của tôi.
TimH - Codidact

20

Tôi không chắc bạn có thể gắn nhãn che giấu ngôn ngữ được dịch là vô nghĩa (Tôi không thể thêm nhận xét vào bài đăng của Schwern, vì vậy đây là một mục mới).

Tôi nghĩ rằng sẽ hơi thiển cận khi cho rằng bạn biết tất cả các tình huống có thể xảy ra khi ai đó muốn làm xáo trộn mã và bạn cho rằng bất kỳ ai cũng thực sự sẵn sàng đi đến bất kỳ độ dài cần thiết nào để xem mã đó một khi bị che khuất. Hãy xem xét kịch bản hiện tại của tôi:

Tôi làm việc cho một công ty tư vấn đang phát triển một trang web dựa trên PHP lớn và khá tinh vi. Dự án sẽ được lưu trữ trên máy chủ của khách hàng đang lưu trữ các trang web khác được phát triển bởi các chuyên gia tư vấn khác. Về mặt kỹ thuật, bất kỳ mã nào chúng tôi viết đều thuộc sở hữu của khách hàng, vì vậy chúng tôi không thể cấp phép cho mã đó. Tuy nhiên, bất kỳ tư vấn nào khác (đối thủ cạnh tranh) có quyền truy cập vào máy chủ đều có thể sao chép mã của chúng tôi mà không cần xin phép khách hàng trước. Do đó, chúng tôi có một lý do thực sự cho việc giấu giếm - để nỗ lực cần thiết để đối thủ cạnh tranh hiểu mã của chúng tôi hơn là nỗ lực tạo bản sao công việc của chúng tôi từ đầu.


16

Xem Obfuscator SD thicket của chúng tôi để biết một obfuscator hoạt động tốt với các trang lớn tùy ý. Nó hoạt động chủ yếu bằng cách xáo trộn tên định danh. Với các ứng dụng từ khiêm tốn đến lớn, điều này có thể làm cho mã trở nên cực kỳ khó hiểu, đó là toàn bộ mục đích.

Nó không lãng phí bất kỳ năng lượng nào cho các lược đồ "eval (giải mã (mã hóa chương trình mã hóa ))", mà rất nhiều "obfuscators" của PHP thực hiện [đây là "bộ mã hóa", không phải "obfuscator" s], bởi vì bất kỳ clod nào cũng có thể tìm thấy cuộc gọi đó và tự thực hiện giải mã eval và lấy mã được giải mã.

Nó sử dụng một trình phân tích cú pháp chính xác ngôn ngữ để xử lý PHP; nó sẽ cho bạn biết nếu chương trình của bạn không hợp lệ về mặt cú pháp. Quan trọng hơn, nó biết chính xác toàn bộ ngôn ngữ; nó sẽ không bị mất hoặc bị nhầm lẫn và nó sẽ không phá vỡ mã của bạn (điều khác xảy ra nếu bạn làm xáo trộn "không chính xác", ví dụ, không xác định chính xác API công khai của mã).

Vâng, nó che giấu các định danh giống hệt nhau trên các trang; nếu nó không làm điều đó, kết quả sẽ không hoạt động.


1
Flagger: bạn có thể có phép lịch sự để nói lý do tại sao bạn gắn cờ này. Nó trả lời trực tiếp câu hỏi của OP, bao gồm cả vấn đề cụ thể của anh ấy.
Ira Baxter

Từ những gì tôi có thể nói đây là một EXE chỉ chạy trong Windows? Ít nhất eval là một tập tin .exe ...
Craig Jacobs

Tệp eval là một trình cài đặt dựa trên .exe. Sự thật phức tạp là sản phẩm được cài đặt thường chạy từ tập lệnh .cmd vì có ngôn ngữ lập trình song song bên dưới nó, nhưng bạn sẽ không bao giờ thấy điều đó. Nó được thiết kế chủ yếu là một sản phẩm Windows; tuy nhiên, nếu bạn cài đặt nó trên Linux với Wine, nó sẽ chạy với các tập lệnh .sh được cài đặt với nó như thể nó là một công cụ Linux gốc. Nếu bạn sử dụng phần GUI (tùy chọn, hầu hết mọi người muốn chạy nó dưới dạng tập lệnh trong quy trình xây dựng sản xuất), thì nó sử dụng Java nguyên gốc trên Windows và Java gốc trên Linux.
Ira Baxter

Có đúng là thicket yêu cầu addon vào không gian lưu trữ không? Nếu có, làm thế nào để cài đặt trên một lưu trữ được chia sẻ?
Stephen Adelakun

@StephenAdelakun: thicket không yêu cầu thay đổi máy chủ. Tải về nó và kiểm tra tài liệu.
Ira Baxter

14

Thứ tốt nhất tôi từng thấy là Zend Guard .


2
Obfuscator SD PHP cũng tốt như vậy và có giá khoảng 1/5.
Ira Baxter

1
@SalmanPK Và lý do cho điều đó được cho là hiển nhiên?
Pellmeister

@SalmanPK Nó yêu cầu một addon vào không gian lưu trữ web. Zend Guard có lẽ cũng vậy. Không chắc chắn đó là chủ đạo nhất. Dù sao, vấn đề là nó cắt giảm đối tượng tiềm năng của bạn.
James P.

1
Bộ giải mã PHP của SD chuyển đổi tất cả thành chữ thường. Đó sẽ là một vấn đề nếu bạn đang sử dụng một khung.
Amil Waduwawara

1
@JamesPoulson: Không rõ liệu nhận xét của bạn có được chỉ vào bộ giải mã SD PHP hay không. Để rõ ràng, nó không yêu cầu bất kỳ addon nào vào không gian lưu trữ web.
Ira Baxter

10

Hãy thử cái này: http://www.pipsomania.com/best_php_obfuscator.do

Gần đây tôi đã viết nó bằng Java để làm xáo trộn các dự án PHP của tôi, vì tôi không tìm thấy bất kỳ nội dung tốt và tương thích nào được viết trên mạng, tôi quyết định đưa nó lên mạng như saas, vì vậy mọi người đều sử dụng nó miễn phí. Nó không thay đổi tên biến giữa các tập lệnh khác nhau để tương thích tối đa, nhưng làm mờ chúng rất tốt, với logic ngẫu nhiên, mọi hướng dẫn cũng vậy. Chuỗi ... tất cả mọi thứ. Tôi tin rằng nó tốt hơn nhiều so với mã lỗi này, đó là bằng cách viết bằng PHP và rất chậm :)


Có vẻ tốt ... nhưng nó có an toàn không? Ý tôi là, người khác có thể giải mã nó dễ dàng không?
shasi kanth

Tôi có thể đảm bảo với bạn rằng tại thời điểm này, NOBODY có thể làm xáo trộn mã bị che khuất bởi obfuscator này.
PatlaDJ

3
[cần dẫn nguồn] - mã hóa homebrew là bảo mật thông qua che khuất, không có bảo mật nào cả.
Chris Baker

8
"Tôi có thể đảm bảo với bạn rằng tại thời điểm này, NOBODY có thể làm xáo trộn mã" Ngay cả PHP? Nếu PHP có thể làm điều đó thì người khác cũng có thể làm được. Nhìn như mã mẫu trên trang web của bạn, ở đâu đó, bạn sẽ có một thống kê chính xác để loại bỏ mã, thay đổi mã đó thành tiếng vang và mã của bạn sẽ được hiển thị.

3
CẢNH BÁO: Phương pháp này có thể được giải mã một cách tầm thường trở lại tên biến ban đầu, xem: lombokcyber.com/en/detools/decode-pipsomania
Zane Hooper

3

Máy lọc dữ liệu thicket ™ cho PHP

Công cụ Obfuscator của PHP xáo trộn mã nguồn PHP để làm cho nó rất khó hiểu hoặc kỹ sư đảo ngược (ví dụ). Điều này cung cấp sự bảo vệ đáng kể cho tài sản trí tuệ mã nguồn phải được lưu trữ trên một trang web hoặc chuyển đến khách hàng. Nó là thành viên của gia đình SD Obfuscators của SD.


TrueBug.com là không thể truy cập. Tôi biết tôi sẽ đăng bình luận sau hơn 3 năm, nhưng bạn có thể vui lòng giúp đỡ với url mới của trueBug không, nếu có?
Stephen Adelakun

@StephenAdelakun Bạn chỉ cần TrueBug? Sử dụng cái này: TruBug PHP Obfuscator .
Praveen Kumar Purushothaman

Xin lỗi, liên kết không hoạt động. Hay tôi đang thiếu một cái gì đó?
Stephen Adelakun

@StephenAdelakun Tôi mới kiểm tra, nó hoạt động.
Praveen Kumar Purushothaman

1
@StephenAdelakun Tại sao chỉ có vậy? :(Dù sao đó cũng là phần mềm chết. Có những cái tốt hơn và tuyệt vời bây giờ phải không?
Praveen Kumar Purushothaman

2

Sử dụng SourceGuardian là tốt vì nó đi kèm với GUI dễ sử dụng và dễ sử dụng.

Nhưng hãy lưu ý:

Hãy chú ý đến các điều khoản cấp phép hài hước của nó.

  • Bạn chỉ được phép chạy 1 trên mỗi máy - cho đến nay điều này có thể chấp nhận được
  • Nếu bạn muốn chạy giao diện dòng lệnh trên một máy khác, giả sử máy chủ web của bạn, BẠN S NE CẦN GIẤY PHÉP KHÁC (Vâng, thật buồn cười và tôi cũng có thể nghe thấy bạn cười).

2
Điều đó có vẻ bình thường với tôi! 2 máy = 2 giấy phép! Thông thường những gì mọi người làm là mã hóa tất cả trên một máy, sau đó tải nó lên (các) máy khác.
David Newcomb

@davidnewcomb bạn dường như không nhận được điểm. Bạn thường mã hóa mã trên máy dev của mình trước khi vận chuyển nó. Trong trường hợp bạn cần thực hiện trực tuyến, giao diện dòng lệnh cũng yêu cầu giấy phép bổ sung, điều này rõ ràng là không đúng. Bạn có xu hướng đặt giao diện dòng lệnh trên máy chủ web chứ không phải trên hộp cục bộ của bạn.
Herr

2
TL; DR bảo vệ tốt, điều khoản cấp phép ngu ngốc.
Herr

1
Nên là 1 giấy phép cho mỗi người dùng, không phải cho mỗi máy.
beppe9000

@ beppe9000 Hoàn toàn đồng ý!
Herr

-16

Obfuscation chỉ thêm một lớp lỗi tiềm ẩn và lỗ hổng bảo mật cho chương trình của bạn. Xin đừng làm điều đó.

Những người viết phần mềm obfuscation thường có vẻ rất sơ sài và không có kỹ năng.

Nếu mã của bạn là "tuyệt vời", các cracker sẽ trải qua thời gian dài để phát tán nó, bất kể nó có bị xáo trộn hay không. Nếu không ai biết / quan tâm đến mã của bạn, thì có lẽ họ cũng sẽ không.


7
Không được giết? Dựa vào bằng chứng nào? Tôi viết chúng. Kiểm tra tiểu sử của tôi trước khi bạn thực hiện khái quát hóa. semanticdesigns.com/Company/P
People / idbaxter

5
@Ira: Tuyên bố của tôi vẫn giữ. Hầu hết các mã bị xáo trộn có thể bị phá vỡ trong vòng vài phút. Tôi đặc biệt có nghĩa là, hầu hết những người làm điều đó là không có kỹ năng, không phải tất cả . Điều đầu tiên xuất hiện trong đầu là Ioncube, và chắc chắn, nó có một lỗ hổng được công bố: osvdb.org/show/osvdb/41708 . Sau đó, một lần nữa bạn có thể đổ lỗi một phần rằng các yêu cầu bảo mật tối nghĩa của PHP.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

3
Obfuscation, nếu được thực hiện với một công cụ đáng tin cậy, sẽ không thay đổi gì về độ tin cậy của chương trình. Biên dịch nhị phân là một loại cực kỳ khó hiểu, nhưng tôi đoán bạn tự tin rằng công cụ PHP của Zend là đáng tin cậy. (Obfuscation hoặc biên dịch được thực hiện với các công cụ xấu không nên tính).
Ira Baxter

1
Bất cứ ai có nửa bộ não đều biết rằng php đang vật lộn (đọc "không tồn tại") trong thị trường phần mềm doanh nghiệp trong thế giới thực vì nó không bị xáo trộn trên và asp.net. Tôi quá mệt mỏi với những nhà truyền giáo đầu óc yếu đuối nói bất cứ điều gì khác. (và vâng, đó là sự thiếu hiểu biết cố ý là gì) Nguồn mở đã ra quá lâu và đã được thử và thấy muốn quá thường xuyên để có bất kỳ nhận thức nào khác ngoài điều này: sở thích? Mã nguồn mở. Việc làm? Mã hóa. Chỉ những kẻ ngốc / những kẻ ngốc / những người sống trong một bong bóng / có một người giàu có mới có thể từng nghĩ rằng EVER khác biệt.
Conners

2
Nhận xét đó gần như không thể hiểu được đối với tôi, nhưng dường như nó ngụ ý rằng việc bán phần mềm hoặc phần mềm nguồn mở dựa trên phần mềm nguồn mở là vô nghĩa. Trong trường hợp bạn không nhận thấy, Java là "doanh nghiệp", nguồn mở và cũng thành công như điều .NET đó. công ty của tôi kiếm được hàng triệu đô la và chúng tôi không bao giờ phải sử dụng obfuscation. Hãy tự hỏi mình điều này: bán phần mềm nào tốt nếu bạn không thể hỗ trợ / cải thiện phần mềm (ví dụ: bạn vừa bẻ khóa phần mềm của người khác và bán lại phần mềm)?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.