Làm cách nào tôi có thể ngăn khách hàng nhìn thấy mã của mình được viết bằng ngôn ngữ được dịch?


16

Tôi đang xây dựng một chương trình diễn giải khá phức tạp trong Python. Tôi đã làm việc với hầu hết các mã này cho các mục đích khác trong một vài tháng, và do đó không muốn khách hàng của tôi có thể sao chép và cố gắng bán nó, vì tôi nghĩ rằng nó đáng giá một số tiền hợp lý.

Vấn đề là tôi cần tập lệnh chạy trên máy chủ mà khách hàng của tôi đang trả tiền, vì vậy có cách nào để tôi có thể bảo mật một thư mục cụ thể trên máy khỏi quyền truy cập root hoặc làm cho nó chỉ có một mục đích sử dụng cụ thể có thể truy cập vào thư mục ? HĐH là Ubuntu.


13
Những loại hợp đồng / thỏa thuận tồn tại giữa bạn và khách hàng của bạn? Họ có sở hữu mã, hoặc bạn chỉ cấp phép sử dụng mã cho họ? Hoặc bạn đã không làm việc ra khỏi đây?
matt b

2
Tôi nghĩ rằng có thể biên dịch nguồn python thành nhị phân. Có thể cho dự án này? Nếu vậy bạn có thể triển khai nhị phân thay thế.
Thất vọngWithFormsDesigner

nightcracker là đúng theo ý kiến ​​của tôi. Cấp phép và hợp đồng thích hợp nên ngăn chặn tất cả điều này, không phải là các biện pháp kỹ thuật. Đặc biệt bởi vì bạn luôn có thể dịch ngược / khử nhiễu một cái gì đó và rootđược phép làm mọi thứ .
Bobby

Hãy nghĩ về nó theo cách khác, nếu họ phá vỡ hợp đồng hoặc giấy phép, bạn có thể kiện họ cho đến khi họ khóc
Jakob Bowyer

9
Mọi người luôn nói rằng mã của họ có giá trị hợp lý.
Kaleb Brasee

Câu trả lời:


40

Cấp phép cho nó.

Thực sự, đó là tất cả!


6
Suy nghĩ đầu tiên của tôi là đánh giá thấp đây không phải là một câu trả lời, nhưng quái gì, bạn nói đúng. Cấp phép và ký hợp đồng là cách để đi đến đây.
Bobby

@ BOB: Hầu như là cách duy nhất để đi. Thay thế là tiếp tục bổ sung các tính năng mới thú vị, hữu ích nhanh chóng đến nỗi việc đánh cắp phiên bản cũ sẽ gây lãng phí thời gian.
S.Lott

commons sáng tạo đủ là một giấy phép?

10
-1 Câu hỏi yêu cầu các cách để ngăn khách hàng nhìn thấy mã, điều này không làm điều đó. Mọi người không phải lúc nào cũng tuân theo giấy phép, và có thể không thể tìm ra chắc chắn về mặt pháp lý để khởi kiện.
Orble

8
Bạn không thể ngăn khách hàng nhìn thấy mã Python, quá dễ dàng để tháo rời. DRM không hoạt động (nếu họ có thể chạy nó, họ có thể tháo rời nó). Vì vậy, câu trả lời duy nhất là một pháp lý. Và một khi bạn đang dựa vào luật để thực thi, sẽ không có vấn đề gì khiến cuộc sống của bạn hoặc khách hàng trở nên khó khăn hơn bằng cách làm phức tạp cơ sở kỹ thuật.
ncoghlan

10

Bạn luôn có thể biên dịch tất cả các tệp của bạn thành mã byte pyc. Có những trình dịch ngược có thể tạo mã nguồn từ nó nhưng không có gì nghiêm trọng.

Tuy nhiên, điều đó sẽ chỉ giải quyết khả năng đọc mã chương trình của bạn. Để bảo vệ cách duy nhất là cấp phép cho nó như nightcracker đã nói, bởi vì ngay cả khi bạn đã biên dịch mã của mình, hãy nói mã máy, nếu công việc của bạn không được bảo vệ bởi giấy phép, nó vẫn có thể được thương mại hóa theo ý muốn của bạn.

Dòng dưới cùng, biên dịch thành mã byte và quan trọng hơn là Cấp phép cho nó


Tôi có một câu hỏi. Trình biên dịch byte có sử dụng tên biến tùy ý hay nó sử dụng tên biến cũ? (Tôi sẽ tưởng tượng nó sẽ phải sử dụng những cái cũ, vì các mô-đun bên ngoài dựa vào không gian tên đó).

@Garrett: Mã byte chứa các tên biến. Đây vẫn là một mớ hỗn độn tương đối khó đọc khi tháo rời (thử tiêu hóa quá trình tháo gỡ của công thức này ) và không có bất kỳ trình dịch ngược nào (gần đây).

7

Sử dụng Cython. Điều này sẽ cho phép bạn biên dịch chương trình của bạn dưới dạng thực thi riêng. Sau đó, nó sẽ khó khăn hơn nhiều để ăn cắp.

Đối với thư mục, lời khuyên duy nhất tôi có thể cung cấp cho bạn là đảm bảo rằng bạn đã thiết lập quyền của mình một cách chính xác. ACL có thể là bạn của bạn, mặc dù tôi không chắc chắn 100% rằng họ có thể hạn chế root truy cập vào một tệp. Ngay cả khi họ có thể, root vẫn có thể thay đổi quyền. Anh ấy là gốc rễ, anh ấy là chúa - đó là cách những thứ này hoạt động.

http://www.korokithakis.net/node/109


1

Như người dùng ở trên đã chỉ ra, trình phân tách có thể lấy lại mã, nhưng nó không dễ đọc (ít nhất là không dành cho trình phân tách mã nguồn mở).

Tôi đã suy nghĩ về điều này, và một cách mà tôi nghĩ rằng bạn có thể giải quyết vấn đề này (nếu bạn gọi mã mở bắt buộc là một vấn đề) là viết một kịch bản bao thanh toán tự động. Điều này thực sự khá đơn giản. Bạn sẽ chỉ cung cấp tập lệnh cho mô-đun của mình và nó sẽ đổi tên tất cả các biến cụ thể của mô-đun. Điều này, cùng với việc chỉ phát hành tệp đã biên dịch, sẽ làm rất nhiều để làm xáo trộn mã của bạn.

Thực hiện tìm kiếm trên PyPI, tôi thấy điều này: http://pypi.python.org/pypi/pyfuscate/0.1 . Bạn nên kiểm tra nó và những thứ khác giống như nó và báo cáo lại: D

Ngoài ra: Bạn cũng nên cấp phép cho nó, tất nhiên.


1

Tôi cũng đề nghị cấp phép. Ngoài việc cấp phép, hãy mã hóa mã nguồn của các thói quen chính bằng thuật toán khóa bất đối xứng để chỉ máy của khách hàng của bạn có thể chạy được. Một trong các khóa trong cặp là thứ gì đó thu được từ phần cứng (ví dụ: số sê-ri của card mạng) của máy khách của bạn. Sử dụng khóa khác trong cặp để giải mã mã nguồn khi chạy chương trình. Lưu ý rằng việc cung cấp duy nhất trong bản rõ sẽ là thói quen giải mã và phần còn lại sẽ là bản mã.

Bằng cách này, khách hàng của bạn có thể sao chép và dán mã dường như vô nghĩa của bạn nhưng không thể chạy nó ở nơi khác. Tuy nhiên, đề nghị của tôi không hoàn toàn chống đạn: trình thông dịch có thể lưu chương trình được giải mã ở đâu đó trong bộ nhớ. Sau đó, có thể một số hacker lấy lại chương trình của bạn trong bản rõ trong khi thực hiện tôi đoán.

Về việc ngăn chặn các thư mục truy cập root, tôi đồng ý rằng root không thể dừng truy cập bất kỳ tập tin / thư mục nào.


Đây chỉ là sự xáo trộn, với các công cụ phù hợp, sẽ luôn có một thời điểm mà mã ở dạng văn bản thuần túy. Một cách đơn giản để đánh bại giải pháp của bạn là chỉ cần trao đổi ruby/ python/ nodevới một chương trình tùy chỉnh phản chiếu API thực thi và xuất mã.
Jamo

Ngoài ra, khóa riêng (để giải mã) sẽ phải có sẵn cho môi trường, do đó có sẵn cho kẻ tấn công.
Fixee

0

Cấp phép là câu trả lời tốt nhất ở đây. Điều đó nói rằng, tại sao nó phải chạy trên thiết bị của họ? Nếu nó cực kỳ quan trọng, bạn có thể muốn sử dụng dịch vụ và xây dựng một số loại API dịch vụ xung quanh mọi thứ để mọi người thậm chí không thể nhìn thấy tài sản trí tuệ của bạn để đánh cắp nó.

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.