2009-02-23 33 views
35

Bạn có biết bất kỳ công cụ nào có thể hỗ trợ tôi trong việc mã hóa mã python không?Code Python Obfuscation

+99

Chuyển đổi nó thành Perl? Bùng nổ, bùng nổ, cảm ơn bạn đã lắng nghe, tôi ở đây cả tuần :-) – paxdiablo

+1

Nhân bản: http://stackoverflow.com/questions/261638/how-do-i-protect-python-code –

+0

Và thảo luận chung hơn: http: // : //stackoverflow.com/questions/164137/how-do-i-deploy-a-python-desktop-application – tzot

Trả lời

5

Trong nhiều tình huống bạn có thể gửi file byte-biên soạn pyc thay vì các tập tin nguồn py. Điều này mang lại cho bạn một số mức độ obfuscation. Như README pyobfuscate gợi ý, điều này có những hạn chế. Nhưng bạn có thể kết hợp hai cách tiếp cận này.

15

Không gian sự cố của bạn chưa được xác định. Đây có phải là một ứng dụng dòng lệnh không? Mã này có được coi là thư viện không?

Ngoài hai câu trả lời khác, bạn có thể nhúng mã vào một tệp nhị phân. Khi nó bắt đầu, giải mã và đánh giá chuỗi. Điều này làm việc cho một phần mở rộng thư viện được chia sẻ là tốt. Bạn cũng có thể làm điều đó với mã byte, tôi nghĩ, nhưng nó sẽ không đơn giản như gọi Py_EvalCode.

py2exe hoặc đóng băng là giải pháp khác, chuyển đổi mã thành tệp thực thi. Nó chỉ bao gồm các mã trong nhị phân, và không làm bất kỳ loại quan sát nghiêm trọng, nhưng nó vẫn còn khó hơn việc mở một tập tin .py.

Bạn có thể viết mã trong Cython, tương tự như Python và ghi các tệp mở rộng Python trong C, để sử dụng dưới dạng .so. Đó có lẽ là khó khăn nhất trong số này để đảo ngược kỹ sư và vẫn cung cấp cho bạn một ngôn ngữ cấp cao cho phát triển.

Tất cả chúng đều có thể tấn công, như tất cả các giải pháp. Bạn muốn nó như thế nào?

+6

+1 cho Cython, mà tôi đã sử dụng gần đây và thấy nó khá tốt ở Những gì nó làm. – Dan

+0

giải pháp đơn giản nhất để sử dụng là gì, nếu tôi không muốn 'decompyle' dễ dàng? – Basj

4

Thư viện chuẩn của Python bao gồm compileall.py. Bạn có thể chạy nó trên một thư mục và nó sẽ tạo ra các tệp .pyc cho tất cả các tệp nguồn của bạn. Các tệp .pyc sẽ chỉ bao gồm bytecode và docstrings và sẽ loại bỏ tất cả nhận xét. Sau đó bạn có thể sao chép thư mục này, và sau đó chạy một cái gì đó như rm -rf $(find . -name .py) để loại bỏ các tệp nguồn gốc.

2

Đặt cược tốt nhất của bạn là biên dịch nó bằng cách sử dụng Shed Skin, trình biên dịch Python-to-C++ thử nghiệm.

+0

Ngoài ra còn có Pypy, nhưng nó không có giấy tờ và rất hạn chế trong mã nó chấp nhận. – Antimony

+0

@Antimony: Bạn đang nói về RPython?PyPy (sử dụng RPython) là một triển khai đầy đủ của Python, và không bị giới hạn ở mã mà nó chấp nhận. –

+0

@John Có, tôi đang nói về RPython. Đó là một phần của dự án PyPy. – Antimony

6

Tôi thực sự tìm thấy một dự án rất hay về cơ bản chuyển đổi một Python thành C++ và tạo tệp nhị phân, được liên kết tĩnh.

Kiểm tra này ra: http://www.nuitka.net/

0

Mặc dù nó không làm hoang mang, đây Python recipe hoạt động rất tốt để giảm thiểu kích thước của mã Python, kể cả tước ra ý kiến.