2010-01-14 12 views
16

Tôi sử dụng Haxe để tạo mã PHP. (Điều này có nghĩa là bạn viết mã cho bạn bằng ngôn ngữ Haxe và nhận được một loạt các tập tin php sau khi biên soạn.) Hôm nay một khách hàng nói với tôi rằng anh ta cần một tính năng mới trên một dự án cũ được thực hiện với Haxe. Ông cũng nói với tôi rằng ông đã thay đổi một số điều nhỏ trên mã cho các nhu cầu của riêng mình. Bây giờ tôi lần đầu tiên có cổng thay đổi của mình để mã Haxe của tôi và sau đó thêm các tính năng mới, bởi vì nếu không thay đổi của ông sẽ được ghi đè bởi thời gian tiếp theo tôi biên dịch dự án.Giảm bớt/Làm xáo trộn Mã PHP

Để ngăn chặn điều này xảy ra lần nữa, tôi đang tìm một số loại chương trình giúp giảm thiểu/làm xáo trộn mã PHP. Mục đích là làm cho mã không đọc được/không thể chỉnh sửa càng tốt.
Công cụ lý tưởng sẽ chạy dưới Linux và có thể xử lý toàn bộ thư mục và tất cả thư mục chứa tệp.

Bất kỳ ai đề xuất?

Trả lời

17

Tôi đồng ý với nhận xét, những gì bạn đang làm là rất ít, nhưng sau 10 năm trong biz này tôi có thể chứng thực một điều: Một nửa mã bạn nhận được rất phức tạp nó có thể cũng đã được rút gọn, và thực sự chức năng/var tên là như vậy thường hoàn toàn tùy ý, tôi đã chỉnh sửa js minified và nó đã không được nhiều hơn một rắc rối hơn một số mã unminified.

Tôi không thể tìm thấy bất kỳ tập lệnh/chương trình như vậy, rất có thể vì đây là loại chống lại tinh thần PHP và một chút underhanded, không bao giờ ít hơn.

Đầu tiên: Php không phải là không gian trắng nhạy cảm, do đó bước một là xóa tất cả các dòng mới và khoảng trắng bên ngoài chuỗi.

Điều đó sẽ gây khó khăn cho bạn đối với người phát hành trung bình, một lập trình viên trung gian sẽ tìm và thay thế tất cả; {} với $ 1 \ n hoặc điều gì đó có hiệu lực.

Bước tiếp theo sẽ là get_defined_functions và lưu mảng đó (phím 'người dùng' trong mảng được trả về), bạn sẽ cần bao gồm tất cả các tệp để thực hiện việc này.

Nếu đó là mã oo, bạn cũng cần get_defined_classes. Lưu mảng đó. Về cơ bản, bạn cần lấy các biến, phương thức và các cá thể lớp, bạn sẽ phải khởi tạo lớp và get_object_vars trên đó, và bạn có thể poke xung quanh và thấy rằng bạn có thể nhận được rất nhiều thông tin khác, chẳng hạn như hằng số và vars lớp vv

Sau đó, bạn lấy các danh sách đó, lặp lại chúng, tạo tên duy nhất cho mỗi thứ, sau đó là preg_replace hoặc str_replace trong tất cả các tệp.

Đảm bảo bạn thực hiện việc này trên bản sao thử nghiệm và xem lỗi nào bạn nhận được.

Mặc dù, chỉ cần rõ ràng, có một vị trí đặc biệt trong địa ngục dành riêng cho những người làm xáo trộn vì mục đích của obfuscation.

Kiểm tra: get_defined_functionsget_declared_classes và chỉ cần theo các liên kết xung quanh để xem bạn có thể làm gì.

+0

Nếu bạn đang tìm kiếm các trường hợp mã cụ thể, điều này là đơn giản str = file_get_contents (tên tệp) và str = preg_replace ('/ function $ var /', ...) Bạn bắt được sự trôi dạt của tôi. Chỉ cần tra cứu các hàm này trên php.net và bạn sẽ có tất cả những gì bạn cần. –

+1

Nếu bạn cần trợ giúp với regex để thay thế, hãy sử dụng http://www.gskinner.com/RegExr/ –

+1

tuyệt vời của gskinner Chúng tôi đang nói về mã được tạo tự động, điều này có vẻ khá mơ hồ. Tôi sẽ không dành một giây để sửa đổi mã này. Đừng đổ lỗi cho những người sáng tạo của một trình biên dịch c để tạo các tệp nhị phân bị bẻ khóa? – TheHippo

4

Chúng tôi sử dụng Zend Guard để mã hóa mã PHP của chúng tôi với một số khách hàng nhất định, nhưng như vẹt cho biết, bạn cần đảm bảo rằng bạn cần đảm bảo mã bạn. Chúng tôi chỉ mã hóa trong các tình huống nhất định và chỉ khi rõ ràng là chúng tôi giữ quyền sở hữu mã, nếu không Vẹt là đúng, khách hàng có quyền sửa đổi nó.

+1

đây là một chút quá mức cần thiết, tôi đang tìm kiếm một cái gì đó như tước whitespaces một biến đổi tên. – TheHippo

+0

@ctyshrock: "khách hàng có quyền sửa đổi nó?" Đây không phải là về đạo đức, chỉ là những gì được cho phép. Khách hàng chỉ có "quyền" để sửa đổi nếu giấy phép phần mềm đã thỏa thuận cho phép điều đó. Có giấy phép phần mềm bị nghiêm cấm ngay cả khi mã được cung cấp dưới dạng nguồn. Cho dù mô hình kinh doanh cho phép hay cấm sửa đổi mã phụ thuộc vào cách các chủ sở hữu xem việc quản lý sản phẩm. –

+0

OMG! "khách hàng có quyền sửa đổi nó không?" @catsby bạn thực sự thực sự sai khách hàng KHÔNG có quyền sửa đổi nó, ở tất cả, thực sự bạn cần phải tìm hiểu luật bản quyền .. tác giả của tất cả các công trình luôn luôn giữ quyền đối với công việc và nó có thể không được sửa đổi, trong trên thực tế, ngay cả khi khách hàng mua nó, nếu anh ta không ký EULA thì theo lý thuyết bạn có thể kiện họ là tác giả ngay cả sau khi họ mua nó. (Họ sẽ phải ra tòa và cố gắng để tòa án cai trị "sử dụng hợp lý" bất cứ thứ gì bên ngoài có thể sử dụng được) không có biện minh cho việc tuyên truyền một lời nói dối (nguy hiểm) được báo giá –

4

Tôi biết về Zendguard, Expressionengine đã sử dụng nó để mã hóa mã lõi phiên bản dùng thử của họ. Bạn luôn có thể cung cấp cho một đi mặc dù bạn cần phải trả tiền cho nó.

Tuy nhiên, mặc dù tôi hiểu được sự thất vọng khi phải chuyển các thay đổi của mình, tôi cho rằng họ đã mua mã của bạn? Họ có quyền sửa đổi nó. Bạn chỉ có quyền tính phí cho họ để thay đổi cổng của họ;) Hãy tưởng tượng nếu bạn ngừng làm việc cho họ, làm thế nào họ có thể thuê người khác để cập nhật mã?

+0

có thể đã hỏi tôi, tôi có thực hiện nó miễn phí. Hoặc họ có thể đã lấy các tập tin haxe từ các subversion chia sẻ ;-) – TheHippo

+0

+1 nhưng, chỉ để được vụng về - có, họ đã mua mã - nhưng nếu bạn chỉ bao giờ cung cấp mã obfuscated, thì đó là những gì họ mua. Trừ khi bạn bán nó như một nền tảng phát triển một cách rõ ràng, tôi không thấy vấn đề gì. Nhưng bạn có thể chắc chắn 100% rằng nếu bạn cung cấp mã cleartext và họ sửa đổi nó thì bạn sẽ nhận được sự hỗ trợ nhức đầu và họ thường sẽ không được chuẩn bị để trả tiền. – Mawg

+0

Nếu bạn cung cấp văn bản rõ ràng và giấy phép phần mềm cho biết họ không được phép làm điều đó, thì bạn không có nghĩa vụ phải sửa nó. Trong trường hợp này, việc vận chuyển mã bị xáo trộn sẽ giúp ngăn cản những gì đã được nêu rõ trong thỏa thuận cấp phép. Nếu bạn "bán" cho họ mã nguồn, thì bạn có thể mong đợi cả hai để sửa đổi và cung cấp cho bên thứ ba mà không có sự cho phép của bạn, theo nghĩa thông thường là "bán". –

2

PHP Obfuscator của chúng tôi thực hiện chính xác công việc xóa nhận xét, khoảng trắng và xáo trộn số nhận dạng.

Nó hoạt động trên một tập hợp đầy đủ các tệp PHP để đảm bảo rằng các biểu tượng tranh giành được tranh giành nhất quán trên các tệp đó, đảm bảo hoạt động chính xác ngay cả sau khi xáo trộn.

EDIT 2013: Bây giờ mã hóa các chuỗi ký tự chuỗi để làm cho chúng không thể đọc được. Hoạt động dưới Windows và Linux trên Wine.

0

Tôi vừa tìm cách rút gọn dịch vụ cho PHP. Nó thực sự có vẻ hữu ích. Họ nói rằng, việc làm xáo trộn sẽ sớm có sẵn. Tôi hy vọng điều này là đúng :) http://customhost.com.ua/php-minify/

+0

điều này sẽ là lý tưởng, nhưng nó không loại bỏ nhận xét // của tôi. Tôi đang xem http://aciddrop.com/php-speedy/ – adudley

+4

3 năm sau 'Sắp có: biến obfuscating' –

+0

liên kết ở trên không hoạt động đối với tôi (404) –

24

Tại sao không sử dụng php buid trong chức năng php_strip_whitespace()

string php_strip_whitespace (string $filename) 

Trả về mã nguồn PHP trong tên tập tin với PHP ý kiến ​​và khoảng trắng loại bỏ. Điều này có thể hữu ích để xác định số lượng mã thực trong kịch bản của bạn so với số lượng nhận xét. Điều này tương tự như sử dụng php -w từ dòng lệnh.

+0

cảm ơn, rất hữu ích. – EmRa228

+1

Tôi đã thử ý tưởng của bạn https://github.com/basselin/php-minify, nó hoạt động rất tốt! Cảm ơn –