2010-08-01 31 views
6

Tôi đang viết một ứng dụng phần mềm mà người dùng cần mua giấy phép và kích hoạt nó. Tôi cần gợi ý về cách bắt đầu viết một thuật toán mạnh mẽ để tạo mã và tất nhiên, kiểm tra mã. Tôi biết rằng mọi người có thể thiết kế đối chiếu mã và thực hiện một keygen, tuy nhiên, câu hỏi của tôi là hai phần:Thuật toán cho khóa kích hoạt- Bảo mật

  1. Nói chung, không phụ thuộc vào ứng dụng đang được nứt theo cách này, làm thế nào tôi có thể bắt đầu viết một thuật toán để chấp nhận một chuỗi hoặc chuỗi nhất định hoặc kết hợp. (ví dụ: đó là điều đúng? ví dụ: số đầu tiên là từ 3-9 thứ hai phải là số đầu tiên - 3, trong khi số thứ ba phải là số thứ hai * + .... bất kỳ ... ??)

  2. Cách tiếp cận tốt nhất để bảo vệ ứng dụng Máy tính để bàn khỏi vi phạm bản quyền mà không phải xử lý internet là gì. Đó có phải là thuật toán (làm cho nó khó hơn để đảo ngược kỹ sư), bảo vệ mã nguồn khỏi bị nhìn thấy sau khi ứng dụng được cài đặt ở đâu đó không ?? ... ??

PS: Có lẽ điều đáng nói là tôi đang sử dụng Java làm ngôn ngữ phát triển của mình. Cảm ơn

Trả lời

2
  1. Có vẻ như bạn có thể hưởng lợi từ phương pháp public-key cryptography.

  2. này có thể được chia thành hai điểm phụ:

    • A. Có bạn đọc this thread here on SO? Nó có thể cung cấp cho bạn một số bề rộng về vấn đề này.
    • B. Như @Jaka đã nói, nó không phải là một thách thức lớn (từ những gì tôi đã đọc) để sản xuất mã có thể đọc được con người từ mã byte Java. Bạn có thể chạy mã của mình thông qua an obfuscator để làm cho người khác khó tạo mã có thể đọc được từ người đó, nhưng nếu ai đó thực sự muốn đọc mã của bạn, họ hầu như luôn tìm cách. Cách tiếp cận tốt nhất để chống lại điều này là thực hiện lời khuyên trong chuỗi SO mà tôi đã liên kết: giúp người khác mua ứng dụng của bạn dễ dàng hơn so với người nào đó để ăn cắp nó.

(sửa sau khi tuyên bố ông đang sử dụng Java)

+0

Nó được biên soạn. Ứng dụng JAVA Desktop. –

+0

@Saher, đã cập nhật câu trả lời của tôi. – labratmatt

+0

Vấn đề với mật mã khóa công khai cho việc tạo số sê-ri là nó tạo ra các mã cực kỳ dài, rất khó để người dùng nhập vào. Khóa 1024 bit sẽ tạo mã có độ dài khoảng 200 ký tự nếu mã hóa base32. Điều đó thậm chí không tính đến các vấn đề nhận thức của con người như nhầm lẫn 1 (một) và l (chữ thường L). –

0

Góp ý: mã hóa một phần của ứng dụng cung cấp chức năng cấp phép-only. Người dùng cần một khóa bạn cung cấp khi mua để sử dụng phần mã đó.

Nếu bạn cho phép người dùng chạy mã bạn muốn bảo vệ trước khi họ mua, không có giải pháp ngoại tuyến an toàn đáng kể nào. Tốt nhất, bạn có thể ngăn chặn vi phạm bản quyền thông thường nhất.

1

Đối với các khóa cấp phép, bạn có thể sử dụng mã hóa với khóa công khai. Bằng cách này, bạn có thể nhúng khóa riêng vào phần mềm và mã hóa một chuỗi có ý nghĩa gì đó với phần mềm của bạn (như các tính năng của phần mềm của bạn được cấp phép). Hoặc bạn có thể nhúng công chúng và cung cấp cho phần mềm một chuỗi với ý nghĩa đặc biệt và ký nó với khóa riêng của bạn. Sau đó, phần mềm có thể kiểm tra xem chữ ký có hợp lệ hay không.

chỉnh sửa: labratmatt là nhanh hơn với câu trả lời chính công-tư :)

phần Rõ ràng bảo vệ thứ hai của bạn sẽ cần phải đối phó với việc phần mềm của bạn khó có thể tháo rời và gỡ lỗi (đây là cách kiểm tra bánh của bạn phần mềm và cố gắng bỏ qua việc bảo vệ bằng một miếng vá hoặc họ cố gắng tìm ra cách họ có thể tạo ra một keygen). Phần này thực sự khó khăn hơn nhiều và liên quan đến các kỹ thuật như mã hóa toàn bộ tệp thực thi và bọc nó bên trong trình nạp để giải mã nó khi chạy. Trình tải cũng có thể sử dụng các kỹ thuật khác nhau để phát hiện sự hiện diện của các trình gỡ rối.

chỉnh sửa: Vì bạn đã đề cập rằng ứng dụng được viết bằng JAVA, bước mã hóa và đóng gói này thậm chí còn quan trọng hơn vì JAVA có thể dễ dàng được biên dịch thành dạng có thể đọc được. Có những chương trình "obfuscator" lộn xộn xung quanh với các lớp để các trình giải mã không thể tạo ra mã có thể đọc được, nhưng việc bẻ khóa này vẫn dễ dàng hơn nhiều so với việc bẻ khóa một thứ gì đó được biên dịch thành mã máy.

Nếu bạn không muốn dành nhiều thời gian để phát triển sự bảo vệ của riêng mình, bạn cũng có thể sử dụng một trong những phần mềm bảo vệ thương mại. Có khá nhiều trong số họ để lựa chọn và họ cung cấp nhiều chương trình bảo vệ (dongle, giấy phép thời gian dựa, ...)

Rất nhiều phần mềm thương mại sử dụng các gói như FlexNet, HASP, WIBU-key

0

Bạn cũng nên làm điều đó theo cách mà một khóa không thể được sử dụng trên hai máy tính khác nhau. Chỉ để ngăn chặn một công ty mua một chìa khóa và sử dụng nó cho nhiều bản năng.

+0

chắc chắn tôi sẽ xem xét –

0

Bạn cũng đã viết JRE của riêng mình chưa? Xây dựng một hệ thống kích hoạt an toàn, có khả năng giao dịch thuận lợi với phạm vi kịch bản người dùng mà bạn gặp phải (những người không có kết nối mạng, tường lửa, máy chủ proxy, v.v) và đã được kiểm tra kỹ lưỡng trong lĩnh vực này. Là một nhà cung cấp các hệ thống như vậy, chúng tôi có quyền tự khai báo, nhưng chúng tôi cũng có dữ liệu - chúng tôi thấy nhiều công ty đặt niềm tin của họ vào một nhà phát triển cho biết họ có thể đặt cùng một hệ thống cấp phép, sau đó họ trở lại với chúng tôi vì nó không bao giờ làm những gì họ cần. Bài viết này (của tôi) mở rộng về các vấn đề: http://knol.google.com/k/dominic-haigh/issues-to-consider-before-building-your/2zijsseqiutxo/6#

0

https://superuser.com/questions/14224/how-to-explain-drm-cannot-work/14254#14254

Thậm chí nếu bạn đã đặt một khóa rất mạnh mẽ về phần mềm của bạn, cướp biển vẫn sẽ tìm ra cách để crack nó và đặt nó trên một trang web torrent . (trường hợp tại điểm: Spore)

Bạn đang nói về DRM và không có cách nào dễ dàng (nếu có) để khóa cướp biển vi phạm phần mềm của bạn. Và bên cạnh đó, bạn đang cạnh tranh với các sản phẩm miễn phí có thể làm những gì phần mềm của bạn thực hiện, vì vậy bạn nên tập trung hơn vào việc làm cho phần mềm của bạn dễ cài đặt và sử dụng, không khó cài đặt và sử dụng nhiều hơn bạn dự định.

Các vấn đề liên quan