Làm thế nào để tạo và xác nhận mã bản quyền phần mềm?


235

Tôi hiện đang tham gia phát triển một sản phẩm (được phát triển bằng C #) sẽ có sẵn để tải xuống và cài đặt miễn phí nhưng ở phiên bản rất giới hạn. Để có quyền truy cập vào tất cả các tính năng, người dùng phải trả phí giấy phép và nhận khóa. Khóa đó sau đó sẽ được nhập vào ứng dụng để "mở khóa" phiên bản đầy đủ.

Khi sử dụng khóa cấp phép như thế là một cách thông thường, tôi tự hỏi:

  1. Làm thế nào mà thường được giải quyết?
  2. Làm cách nào tôi có thể tạo khóa và làm thế nào để ứng dụng có thể xác thực?
  3. Làm thế nào tôi cũng có thể tránh việc có một khóa được xuất bản trên Internet và được sử dụng bởi những người khác chưa trả tiền giấy phép (một khóa về cơ bản không phải là "của họ").

Tôi đoán rằng tôi cũng nên buộc khóa vào phiên bản ứng dụng bằng cách nào đó để có thể tính phí cho các khóa mới trong các phiên bản tính năng.

Bất cứ điều gì khác tôi nên suy nghĩ trong kịch bản này?

Câu trả lời:


126

Hãy cẩn thận: bạn không thể ngăn người dùng vi phạm bản quyền, nhưng chỉ giúp người dùng trung thực dễ dàng thực hiện đúng hơn.

Giả sử bạn không muốn thực hiện một bản dựng đặc biệt cho mỗi người dùng, thì:

  • Tạo cho mình một chìa khóa bí mật cho sản phẩm
  • Lấy tên người dùng
  • Liên kết tên người dùng và khóa bí mật và băm với (ví dụ) SHA1
  • Giải nén băm SHA1 dưới dạng một chuỗi ký tự chữ và số. Đây là "Khóa sản phẩm" của từng người dùng
  • Trong chương trình, thực hiện cùng một hàm băm và so sánh với khóa sản phẩm. Nếu bằng nhau, OK.

Nhưng, tôi nhắc lại: điều này sẽ không ngăn chặn vi phạm bản quyền


Gần đây tôi đã đọc rằng phương pháp này không phải là mật mã rất âm thanh. Nhưng giải pháp này đã yếu ( vì bản thân phần mềm phải bao gồm khóa bí mật ở đâu đó ), vì vậy tôi không nghĩ rằng khám phá này làm mất hiệu lực giải pháp cho đến khi nó đi.

Chỉ cần nghĩ rằng tôi thực sự nên đề cập đến điều này, mặc dù; nếu bạn đang dự định lấy một cái gì đó khác từ điều này, hãy cẩn thận.


13
nếu chương trình bao gồm khóa bí mật (theo ngụ ý của các bước trên), việc bẻ khóa nó là chuyện nhỏ
Steven A. Lowe

2
chỉnh sửa để rõ ràng hơn; không thể nhấn mạnh quá mức một cái gì đó cơ bản ;-)
Steven A. Lowe

23
Sử dụng phương pháp mã hóa bất đối xứng (như RSA) để tạo và giải mã khóa sản phẩm để tránh nhúng bí mật vào mã.
Amir Moghimi

6
Tôi sẽ nghĩ rằng vào thời điểm ai đó đang hack mã của bạn (có thể ở cấp độ lắp ráp) để tìm khóa bí mật của bạn, họ có thể cũng ở cấp độ mà họ có thể bỏ qua kiểm tra của bạn hoàn toàn. Tôi không nghĩ có một phương thức đăng ký an toàn đến mức nó có thể tồn tại một hacker giỏi chạy chương trình tại địa phương. Như nhận xét ban đầu đã nói, đó thực sự là tất cả về bất cứ điều gì làm cho nó khó hơn một bước so với việc sao chép tệp. Rất nhiều trò chơi ngày nay đã từ bỏ việc bảo vệ bản sao và chỉ đơn giản là đưa nội dung trò chơi lên mạng, trong trường hợp đó, mã nằm ngoài tầm tay của hacker.
JamieB

1
Có phổ biến để bao gồm các hạn chế trong khóa giấy phép? Ví dụ: hạn chế thời gian, số lượng người dùng đồng thời, các mô-đun để cài đặt, v.v.?
Carlo

97

Có nhiều cách để tạo khóa cấp phép, nhưng rất ít trong số những cách đó thực sự an toàn. Và thật đáng tiếc, vì đối với các công ty, khóa cấp phép có giá trị gần như bằng tiền thật.

Lý tưởng nhất, bạn sẽ muốn các khóa cấp phép của mình có các thuộc tính sau:

  1. Chỉ công ty của bạn mới có thể tạo khóa cấp phép cho sản phẩm của bạn, ngay cả khi ai đó hoàn toàn đảo ngược các kỹ sư sản phẩm của bạn (điều này SILL xảy ra, tôi nói từ kinh nghiệm). Việc che giấu thuật toán hoặc ẩn khóa mã hóa trong phần mềm của bạn thực sự không còn quan trọng nếu bạn nghiêm túc trong việc kiểm soát cấp phép. Nếu sản phẩm của bạn thành công, ai đó sẽ tạo một trình tạo khóa trong vài ngày kể từ ngày phát hành.

  2. Khóa giấy phép chỉ được sử dụng trên một máy tính (hoặc ít nhất bạn có thể kiểm soát điều này rất chặt chẽ)

  3. Khóa giấy phép phải ngắn gọn và dễ gõ hoặc đọc chính tả qua điện thoại. Bạn không muốn mọi khách hàng gọi cho bộ phận hỗ trợ kỹ thuật vì họ không hiểu nếu khóa chứa "l" hay "1". Bộ phận hỗ trợ của bạn sẽ cảm ơn bạn vì điều này và bạn sẽ có chi phí thấp hơn trong lĩnh vực này.

Vậy làm thế nào để bạn giải quyết những thách thức này?

  1. Câu trả lời rất đơn giản nhưng đầy thách thức về mặt kỹ thuật: chữ ký số sử dụng mật mã khóa công khai. Các khóa cấp phép của bạn trên thực tế phải được ký "tài liệu", có chứa một số dữ liệu hữu ích, được ký với khóa riêng của công ty bạn. Các chữ ký nên là một phần của khóa giấy phép. Sản phẩm nên xác thực các khóa cấp phép với khóa chung tương ứng. Bằng cách này, ngay cả khi ai đó có toàn quyền truy cập vào logic sản phẩm của bạn, họ không thể tạo khóa cấp phép vì họ không có khóa riêng. Khóa giấy phép sẽ trông như thế này: BASE32 (CONCAT (DATA, PRIVATE_KEY_ENCRYPTED (HASH (DATA)))) Thách thức lớn nhất ở đây là thuật toán khóa công khai cổ điển có kích thước chữ ký lớn. RSA512 có chữ ký 1024 bit. Bạn không muốn khóa cấp phép của mình có hàng trăm ký tự. Một trong những cách tiếp cận mạnh mẽ nhất là sử dụng mật mã đường cong elliptic (với việc triển khai cẩn thận để tránh các bằng sáng chế hiện có). Các khóa ECC giống như ngắn hơn 6 lần so với các khóa RSA, cho cùng một cường độ. Bạn có thể giảm thêm kích thước chữ ký bằng các thuật toán như thuật toán chữ ký số Schnorr (bằng sáng chế đã hết hạn vào năm 2008 - tốt :))

  2. Điều này có thể đạt được bằng cách kích hoạt sản phẩm (Windows là một ví dụ tốt). Về cơ bản, đối với một khách hàng có khóa cấp phép hợp lệ, bạn cần tạo một số "dữ liệu kích hoạt", đó là một thông báo đã ký, nhúng id phần cứng của máy tính làm dữ liệu đã ký. Điều này thường được thực hiện qua internet, nhưng chỉ ONCE: sản phẩm gửi mã bản quyền và id phần cứng máy tính đến máy chủ kích hoạt và máy chủ kích hoạt gửi lại tin nhắn đã ký (cũng có thể được viết ngắn gọn và dễ dàng đọc qua điện thoại). Từ thời điểm đó, sản phẩm không kiểm tra khóa cấp phép khi khởi động, nhưng dữ liệu kích hoạt, cần máy tính giống nhau để xác thực (nếu không, DATA sẽ khác và chữ ký số sẽ không xác thực).

  3. Chà, chỉ cần loại bỏ các ký tự dư thừa như "1", "l", "0", "o" khỏi các phím của bạn. Chia chuỗi khóa cấp phép thành các nhóm ký tự.


8
Họ không thể chỉnh sửa phần mềm thêm / xóa mã sao cho việc kiểm tra bị bỏ qua hoàn toàn?
Pacerier

Câu trả lời cho số 1 có cần thiết phải có dịch vụ kích hoạt / hủy kích hoạt trực tuyến không?
Dan W

2
Tôi muốn chỉ ra rằng câu trả lời này vượt trội đến mức nào so với điều băm khác.
Erik Aronesty

1
@Pacerier Có nhiều thứ khóa cấp phép bảo vệ các công ty phần mềm. Sửa đổi exe không phải là một trong số họ.
Erik Aronesty 18/03/19

1
Điều đáng chú ý là ngay cả với khóa riêng / mật mã giả mã hóa, vẫn có thể tạo giấy phép giả, chỉ cần thay thế khóa công khai được gửi trong phần mềm bằng khóa công khai khác và sử dụng khóa riêng tương ứng để ký giấy phép giả. Đây là lý do tại sao chúng tôi có và cần các Cơ quan Chứng nhận đáng tin cậy BTW, người liên kết các khóa công khai với danh tính. Vì vậy, trong khi điều này có thể thêm một vòng nữa để nhảy qua, nó không tự đảm bảo # 1.
Saeb Amini

76

Câu trả lời đơn giản - Bất kể bạn sử dụng lược đồ nào, nó có thể bị bẻ khóa.

Đừng trừng phạt những khách hàng trung thực bằng một hệ thống nhằm ngăn chặn tin tặc, vì tin tặc sẽ bẻ khóa nó bất kể.

Một mã băm đơn giản gắn với email của họ hoặc tương tự có lẽ là đủ tốt. ID dựa trên phần cứng luôn trở thành vấn đề khi mọi người cần cài đặt lại hoặc cập nhật phần cứng.

Chủ đề hay về vấn đề này: http://discuss.joelonsoftware.com/default.asp?biz.5.82298.34


2
đồng ý, bạn không muốn làm phiền người dùng đang mua sản phẩm của bạn! (trả tiền cho m $, apple, v.v ...)
Jason

2
MS, Apple, v.v ... có thể thoát khỏi nó vì chúng lớn và cung cấp các sản phẩm cốt lõi khó có thể có ở nơi khác hoặc có một cái bóng thị trường lớn mà chúng có thể sử dụng để ép buộc mọi người. Các dev nhỏ không thể.
schooner

1
một lược đồ ký khóa pub / private có thể bị "bẻ khóa" để tạo khóa hợp lệ mới cho người dùng muốn chạy mã đã ký được tải xuống từ trang web của nhà xuất bản, thay vì phần mềm bị bẻ khóa. trong khi đó một lược đồ băm / đối xứng có thể bị bẻ khóa để tạo ra các khóa cấp phép hợp lệ mới không thể phân biệt với các lược đồ không hợp lệ. Sự khác biệt lớn.
Erik Aronesty 18/03/19

Liên kết bị hỏng ....
stigzler

56

Khi tạo khóa, đừng quên nối phiên bản và xây dựng số cho chuỗi bạn tính băm. Bằng cách đó, sẽ không có một khóa duy nhất mở khóa tất cả mọi thứ bạn từng phát hành.

Sau khi bạn tìm thấy một số khóa hoặc bản vá nổi trong astalavista.box.sk bạn sẽ biết rằng bạn đã thành công trong việc làm cho một cái gì đó đủ phổ biến mà ai đó bận tâm để bẻ khóa. Hân hoan!


8
"đừng quên nối phiên bản và xây dựng số cho chuỗi bạn tính toán băm" - nhưng điều đó có làm cho khóa bị hỏng khi người dùng cập nhật lên bản phát hành bản vá nhỏ không?
22 giờ

1
@thomthom Làm thế nào để liên kết một phiên bản tối đa với một khóa? Bản thân ý tưởng phiên bản là hợp lý và tăng thêm bảo mật
Marvin Thobejane

@MarvinThobejane để liên kết một ver tối đa bạn có thể ký ver tối đa được phép và có mã lặp lại phiên bản của nó một chút. nhưng không> = ops được phép trong cát.
Erik Aronesty

22

Bên cạnh những gì đã được nêu ....

Bất kỳ việc sử dụng các ứng dụng .NET vốn đã bị phá vỡ do các vấn đề ngôn ngữ trung gian. Một mã tách đơn giản của mã .NET sẽ mở sản phẩm của bạn cho bất kỳ ai. Họ có thể dễ dàng bỏ qua mã cấp phép của bạn tại thời điểm đó.

Bạn thậm chí không thể sử dụng các giá trị phần cứng để tạo khóa nữa. Giờ đây, các máy ảo cho phép ai đó tạo hình ảnh của máy 'được cấp phép' và chạy nó trên bất kỳ nền tảng nào họ chọn.

Nếu đó là phần mềm đắt tiền thì có những giải pháp khác. Nếu không, chỉ cần gây khó khăn cho hacker thông thường. Và chấp nhận thực tế là cuối cùng sẽ có bản sao không được cấp phép.

Nếu sản phẩm của bạn phức tạp, các vấn đề hỗ trợ vốn có sẽ tạo ra một số bảo vệ cho bạn.


9
+1 để ngăn ngừa điểm yếu về giá trị Phần cứng vì Máy ảo.
Rubens Mariuzzo

3
Đó là cách đặt tên mạnh cho .NET và Authenticode cho ký PE. Nếu ai đó đã dịch ngược, sửa đổi và xây dựng lại thư viện của bạn thì nó sẽ không được ký và ứng dụng sẽ không chạy. Máy ảo .NET sẽ không cho phép.
Stephen Tunney

2
Ký là để xác nhận nguồn gốc của chương trình bạn sẽ chạy. Nếu người dùng không quan tâm đến nguồn gốc vì anh ta biết nó đã bị sửa đổi và bẻ khóa, người bẻ khóa sẽ loại bỏ chữ ký, hoặc thậm chí ký bằng chữ ký của chính anh ta. Việc ký kết không dừng trộn các hội đồng đáng tin cậy với các hội đồng không đáng tin cậy.
jesusduarte

một ứng dụng di động có thể được sử dụng như một khóa phần cứng được bồi thẩm đoàn cho phần mềm đắt tiền .... chỉ cần trả tiền bằng ứng dụng và nhúng khóa ký vào yếu tố bảo mật của ứng dụng. sau đó bạn có thể kích hoạt bằng ứng dụng + máy tính để bàn ... hủy kích hoạt màn hình khác. colocating một số khu vực mã phần quan trọng trong ứng dụng và / hoặc trong các dịch vụ tính toán đồng hình trực tuyến có thể giúp ngăn chặn dịch ngược nhỏ.
Erik Aronesty

12

Công cụ C # / .NET mà chúng tôi sử dụng để tạo khóa cấp phép hiện được duy trì dưới dạng nguồn mở:

https://github.com/appsoftware/.NET-Licence-Key-Generator .

Nó dựa trên hệ thống "Xác minh khóa một phần", nghĩa là chỉ một tập hợp con của khóa mà bạn sử dụng để tạo khóa phải được biên dịch thành bản phân phối của bạn. Bạn tự tạo các khóa, vì vậy việc triển khai giấy phép là duy nhất cho phần mềm của bạn.

Như đã nêu ở trên, nếu mã của bạn có thể được dịch ngược, thì việc phá vỡ hầu hết các hệ thống cấp phép là tương đối dễ dàng.


Bạn có sẵn sàng làm một hướng dẫn để sử dụng sản phẩm này? Tôi thấy wiki của họ thiếu một chút.
Anthony Ruffino

Dự án hiện đã được mở nguồn trên GitHub nếu điều đó có ích (câu trả lời được chỉnh sửa với liên kết).
gb2d

10

Tôi là một trong những nhà phát triển đằng sau nền tảng cấp phép phần mềm Cryptolens và đã làm việc trên các hệ thống cấp phép từ năm 14. Trong câu trả lời này, tôi đã bao gồm một số mẹo dựa trên kinh nghiệm có được qua nhiều năm.

Cách tốt nhất để giải quyết vấn đề này là thiết lập một máy chủ khóa giấy phép mà mỗi phiên bản của ứng dụng sẽ gọi để xác minh khóa cấp phép.

Lợi ích của máy chủ khóa giấy phép

Những lợi thế với một máy chủ khóa giấy phép là:

  1. bạn luôn có thể cập nhật hoặc chặn khóa cấp phép có hiệu lực ngay lập tức.
  2. mỗi khóa giấy phép có thể bị khóa đối với một số máy nhất định (điều này giúp ngăn người dùng xuất bản khóa cấp phép trực tuyến cho người khác sử dụng).

Cân nhắc

Mặc dù việc xác minh giấy phép trực tuyến cung cấp cho bạn quyền kiểm soát nhiều hơn đối với từng phiên bản của ứng dụng, nhưng kết nối internet không phải lúc nào cũng có mặt (đặc biệt nếu bạn nhắm mục tiêu vào các doanh nghiệp lớn hơn), vì vậy chúng tôi cần một cách khác để thực hiện xác minh khóa giấy phép.

Giải pháp là luôn luôn ký phản hồi khóa giấy phép từ máy chủ bằng hệ thống mật mã khóa công khai như RSA hoặc ECC (có thể tốt hơn nếu bạn định chạy trên các hệ thống nhúng). Ứng dụng của bạn chỉ nên có khóa chung để xác minh phản hồi khóa giấy phép.

Vì vậy, trong trường hợp không có kết nối internet, bạn có thể sử dụng phản hồi khóa giấy phép trước đó để thay thế. Đảm bảo lưu trữ cả ngày và số nhận dạng máy trong phản hồi và kiểm tra xem nó không quá cũ (ví dụ: bạn cho phép người dùng ngoại tuyến tối đa 30 ngày, v.v.) và phản hồi khóa giấy phép thuộc về đúng thiết bị.

Lưu ý, bạn phải luôn kiểm tra chứng chỉ phản hồi khóa giấy phép, ngay cả khi bạn được kết nối với internet), để đảm bảo rằng nó không bị thay đổi kể từ khi nó rời khỏi máy chủ (điều này vẫn phải được thực hiện ngay cả khi API của bạn đến máy chủ khóa giấy phép sử dụng https)

Bảo vệ thuật toán bí mật

Hầu hết các ứng dụng .NET có thể được thiết kế ngược khá dễ dàng (có cả bộ diassembler do Microsoft cung cấp để lấy mã IL và một số sản phẩm thương mại thậm chí có thể truy xuất mã nguồn trong ví dụ: C #). Tất nhiên, bạn luôn có thể làm xáo trộn mã, nhưng nó không bao giờ an toàn 100%.

Tôi hầu hết các trường hợp, mục đích của bất kỳ giải pháp cấp phép phần mềm nào là giúp những người trung thực trung thực (nghĩa là người dùng trung thực sẵn sàng trả tiền không quên thanh toán sau khi hết hạn dùng thử, v.v.).

Tuy nhiên, bạn vẫn có thể có một số mã mà bạn không bao giờ muốn rò rỉ ra công chúng (ví dụ: một thuật toán để dự đoán giá cổ phiếu, v.v.). Trong trường hợp này, cách duy nhất để đi là tạo điểm cuối API mà ứng dụng của bạn sẽ gọi mỗi khi phương thức được thực thi. Nó yêu cầu kết nối internet nhưng nó đảm bảo rằng mã bí mật của bạn không bao giờ được thực hiện bởi máy khách.

Thực hiện

Nếu bạn không muốn thực hiện tất cả mọi thứ cho mình, tôi sẽ khuyên bạn nên hãy xem hướng dẫn này (một phần của Cryptolens )


Một câu hỏi về việc hạn chế khóa giấy phép đã lưu để không quá cũ: Vì PC có thể không được kết nối với internet, ngày và giờ của chúng luôn có thể được thay đổi trở lại để giữ nguyên ngày hợp lệ?
Amir Mahdi Nassiri

Người dùng không thể bỏ qua máy chủ cấp phép trực tuyến bằng cách xác định máy chủ loopback trong Windows? Tôi đã thấy nhiều ứng dụng bị sao chép trái phép như vậy, Resharper và Matlab là những ứng dụng mà tôi có thể nhớ.
Amir Mahdi Nassiri

1
@AmirMahdiNassiri Đối với câu hỏi 1: Nếu PC vĩnh viễn ngoại tuyến, bạn có thể sử dụng khóa đồng hồ thời gian thực (RTC) làm nguồn đáng tin cậy cho thời gian. Đối với câu hỏi 2: Vì phản hồi được ký bằng khóa riêng của nhà cung cấp (và được xác minh bằng khóa chung bên trong ứng dụng), một đối thủ sẽ cần phải ký lại tệp mà không cần biết khóa riêng, tại thời điểm viết, là không thể với khóa RSA 2048bit.
Artem

7

Tôi đã sử dụng Crypkey trong quá khứ. Đó là một trong nhiều thứ có sẵn.

Bạn chỉ có thể bảo vệ phần mềm đến một điểm với bất kỳ chương trình cấp phép nào.


6

Tôi không biết bạn muốn lấy công phu như thế nào

nhưng tôi tin rằng .net có thể truy cập số sê-ri ổ cứng.

bạn có thể yêu cầu chương trình gửi cho bạn cái đó và một cái gì đó (như tên người dùng và địa chỉ mac của nic)

bạn tính mã dựa trên mã đó và gửi lại mã khóa cho họ.

họ sẽ giữ cho chúng khỏi chuyển đổi máy sau khi chúng có chìa khóa.


4
Và giữ cho chúng khỏi thay thế một HD chết, những thứ khác, dẫn đến sự thất vọng. Không có câu trả lời dễ dàng đáng tiếc, bạn cần phải cân bằng niềm tin với các cơ chế cấp phép cơ bản.
schooner

Đã làm việc nhiều năm với tư cách là một kỹ sư phần mềm với một sản phẩm sử dụng số sê-ri ngoài hd, nó hoàn toàn không an toàn với những người biết cách cập nhật nó.
oden

Tôi đã ngụ ý sử dụng số này với những thứ khác (địa chỉ mac, FQDN) có thể ném tất cả chúng vào một hàm băm. Vấn đề là làm cho việc giả mạo tất cả các dữ liệu này trở nên khó khăn hơn một chút so với việc đảo ngược phần mềm ở vị trí đầu tiên và loại bỏ kiểm tra vì luôn luôn là một tùy chọn.
Crash893

4

Cách duy nhất để làm mọi thứ bạn yêu cầu là yêu cầu truy cập và xác minh internet với máy chủ. Ứng dụng cần đăng nhập vào máy chủ bằng khóa và sau đó bạn cần lưu trữ các chi tiết phiên, như địa chỉ IP. Điều này sẽ ngăn khóa được sử dụng trên một số máy khác nhau. Điều này thường không phổ biến lắm đối với người dùng ứng dụng và trừ khi đây là một ứng dụng rất đắt tiền và phức tạp thì không đáng.

Bạn chỉ có thể có khóa cấp phép cho ứng dụng và sau đó kiểm tra phía máy khách xem khóa đó có tốt không, nhưng có thể dễ dàng phân phối khóa này cho người dùng khác và với trình dịch ngược, có thể tạo khóa mới.


5
tôi đã làm việc tại một công ty sử dụng chương trình cấp phép dựa trên internet. Mỗi khi chương trình bắt đầu lên mạng để xác nhận, tôi nghĩ công ty đã chi nhiều $$ hơn cho cơ sở hạ tầng và nhà phát triển cho giải pháp cấp phép của họ hơn là họ đã mất từ ​​vi phạm bản quyền (chúng là một sản phẩm thích hợp).
Jason

3
Ngoài ra, chi phí hỗ trợ kỹ thuật là rất lớn. nhiều lần, NHIỀU lần người dùng sẽ sử dụng hợp pháp một máy tính khác để thử và chạy phần mềm nhưng hàm băm thì khác, điều này dẫn đến một lượng lớn hỗ trợ công nghệ. Nói tóm lại, những gì schooner nói - đừng trừng phạt người dùng trung thực.
Jason

1
Có vẻ như công ty của bạn đã hơi quá nhiệt tình khi yêu cầu xác nhận khi khởi động mọi lúc.
jugg1es

@Jason, Chà, họ nên tăng giá sản phẩm.
Pacerier

1
@Pacerier: Trả lời sai.
Các cuộc đua nhẹ nhàng trong quỹ đạo

4

Tôi đã triển khai kích hoạt một lần dựa trên internet trên phần mềm của công ty tôi (C # .net) yêu cầu khóa cấp phép đề cập đến giấy phép được lưu trữ trong cơ sở dữ liệu của máy chủ. Phần mềm đánh vào máy chủ bằng khóa và được cung cấp thông tin giấy phép sau đó được mã hóa cục bộ bằng khóa RSA được tạo từ một số biến (kết hợp CPUID và các thứ khác sẽ không thay đổi thường xuyên) trên máy khách đăng ký.

Nó đòi hỏi một số mã hóa phía máy chủ, nhưng nó đã hoạt động rất tốt cho chúng tôi và tôi đã có thể sử dụng cùng một hệ thống khi chúng tôi mở rộng sang phần mềm dựa trên trình duyệt. Nó cũng cung cấp cho nhân viên bán hàng của bạn thông tin tuyệt vời về ai, ở đâu và khi nào phần mềm đang được sử dụng. Bất kỳ hệ thống cấp phép nào chỉ được xử lý cục bộ đều dễ bị khai thác, đặc biệt là sự phản ánh trong .NET . Nhưng, như mọi người khác đã nói, không có hệ thống nào hoàn toàn an toàn.

Theo tôi, nếu bạn không sử dụng giấy phép dựa trên web, thì không có điểm nào thực sự để bảo vệ phần mềm cả. Với sự đau đầu mà DRM có thể gây ra, thật không công bằng cho những người dùng thực sự phải trả tiền cho nó phải chịu đựng.


1
Nhưng vấn đề chính với việc cấp phép web là dịch vụ cấp phép trở thành mục tiêu chính cho các cuộc tấn công DDoS .. Điều này làm tê liệt dịch vụ hoặc làm tăng chi phí đám mây.
afk5min

4
Điều đó giống như nói rằng không có điểm nào trong việc có một trang web vì nó dễ bị tấn công DDoS ...
jugg1es

@ jugg1es Không ở đâu trong bình luận của anh ấy, anh ấy đã nói "không có điểm nào". Ông chỉ đơn giản chỉ ra thực tế rằng đó là một lỗ hổng cần được xem xét.
Dan Bechard

Và kiểm tra vẫn có thể được gỡ bỏ trong máy khách. Không kiểm tra, không cấp phép dựa trên web ...
azarai

1
Bạn có nghĩa là mã ứng dụng thực tế với "thông tin bắt buộc"? Mã nào cần thiết để chạy ứng dụng? Mặt khác, tôi nghĩ rằng nó vẫn sẽ dẫn đến việc gọi các phương thức kiểm tra isLicensed trong các mã.
azarai

4

Tôi tin tưởng mạnh mẽ rằng chỉ có hệ thống cấp phép dựa trên mật mã khóa công khai là cách tiếp cận phù hợp ở đây, bởi vì bạn không phải đưa thông tin cần thiết để tạo giấy phép vào mã nguồn của mình.

Trước đây, tôi đã sử dụng Thư viện cấp phép của Tux nhiều lần, bởi vì nó đáp ứng đầy đủ các yêu cầu này và cung cấp mức giá thực sự tốt. Nó sử dụng cùng một bảo vệ giấy phép cho người dùng cuối và chính nó và không ai bị bẻ khóa cho đến bây giờ. Bạn cũng có thể tìm thấy những lời khuyên tốt trên trang web để tránh vi phạm bản quyền và bẻ khóa.


Mật mã khóa công khai có bắt buộc phải sử dụng dịch vụ kích hoạt trực tuyến không? Ý tôi là, nếu nó không có trong mã nguồn (tôi đoán bạn cũng có nghĩa là có thể thực thi được), thì nó có thể ở đâu khác?
Dan W

Không, bạn không phải sử dụng dịch vụ kích hoạt trực tuyến. Bạn có thể tạo tập tin giấy phép hoàn toàn ngoại tuyến.
panpernicek

Thực tế, điều quan trọng là bạn chỉ đặt khóa chung cho mã, không thể sử dụng để tạo giấy phép. Chỉ để xác minh của nó.
panpernicek 10/11/2015

3

Giống như một số người khác đã đề cập, tôi là một đối thủ lớn của việc thù địch với khách hàng theo mặc định là một thứ gì đó mà ngành công nghiệp cấp phép nổi tiếng. Vì vậy, tôi sẽ mở rộng một giải pháp tốt cho vấn đề của bạn cũng cung cấp một khách hàng tốt UX .

Để bắt đầu, bạn đã đề cập rằng bạn có phiên bản "giới hạn" của phần mềm mà bạn đang sử dụng để thử và chuyển đổi khách hàng sang "nâng cấp" cho các tính năng bổ sung. Vì vậy, những gì bạn đang tìm kiếm là giấy phép tính năng cho sản phẩm của bạn, ví dụ như khách hàng có thể mua giấy phép cho tính năng-X hoặc tính năng-Y .

Tôi đã xây dựng Keygen với loại giấy phép này trong tâm trí. Keygen là API REST cấp phép cho phép bạn quản lý tài khoản người dùng, giấy phép và cũng theo dõi việc sử dụng / liên kết máy.

Những gì tôi sẽ làm là thiết lập 2 loại giấy phép ( chính sách trong Keygen) trong đó một loại là chính sách cơ bản cho phiên bản miễn phí có giới hạn và loại còn lại là chính sách dành cho phiên bản trả phí.

Tôi không chắc chắn những gì bạn đang sử dụng để thanh toán, nhưng giả sử bạn đang sử dụng một cái gì đó như Stripe (khá chuẩn hiện nay) cung cấp webhooks . Keygen cũng có webhooks (cho dù bạn có sử dụng hay không, tất cả điều này vẫn được áp dụng). Bạn có thể tích hợp Keygen để nói chuyện với nhà cung cấp thanh toán của mình bằng cách sử dụng webhooks từ cả hai bên (nghĩ: customer.created-> tạo giấy phép cơ sở cho khách hàng,license.created -> tính phí khách hàng cho giấy phép mới).

Vì vậy, bằng cách sử dụng webhooks, chúng tôi có thể tự động tạo giấy phép cho khách hàng mới. Vì vậy, những gì về xác nhận giấy phép trong chính ứng dụng? Điều này có thể được thực hiện bằng nhiều cách khác nhau, nhưng cách phổ biến nhất là bằng cách yêu cầu khách hàng của bạn nhập khóa cấp phép dài vào trường nhập liệu mà sau đó bạn có thể xác thực; Tôi nghĩ rằng đây là một cách khủng khiếp để xử lý xác nhận giấy phép trong ứng dụng của bạn.

Tại sao tôi nghĩ vậy? Trước hết, bạn đang yêu cầu khách hàng của mình nhập khóa giấy phép dài tẻ nhạt có nghĩa là tiêu thụ máy và thứ hai là bạn yêu cầu bạn và khách hàng của bạn theo dõi khóa giấy phép dài tẻ nhạt .

Được rồi, vậy cái gì thay thế? Tôi nghĩ rằng giải pháp thay thế tốt nhất là làm một việc mà tất cả khách hàng của bạn đã quen: cho phép họ tạo tài khoản cho sản phẩm của bạn bằng email / mật khẩu . Sau đó, bạn có thể liên kết tất cả các giấy phép của họ và máy của họ với tài khoản đó. Vì vậy, bây giờ thay vì nhập khóa cấp phép, họ chỉ cần đăng nhập bằng thông tin đăng nhập.

Lợi thế nào mang lại cho bạn? Đầu tiên, bạn không cần phải theo dõi các khóa cấp phép, vì tất cả đều được xử lý hậu trường bên trong tài khoản người dùng của họ và quan trọng nhất: giờ đây bạn có thể cung cấp cho khách hàng giấy phép tự phục vụ và máy của bạn kích hoạt! tức là vì tất cả các giấy phép và máy của họ được liên kết với tài khoản người dùng của họ, bạn có thể nhắc họ mua giấy phép khi họ kích hoạt ứng dụng của bạn trên một máy không được nhận dạng.

Bây giờ hãy xác thực giấy phép : bất cứ khi nào khách hàng của bạn đăng nhập vào ứng dụng của bạn bằng email / mật khẩu của họ, bạn có thể truy vấn tài khoản người dùng của họ để biết giấy phép họ sở hữu để xác định xem họ có thể sử dụng tính năng-X hoặc tính năng-Y hay không . Và vì ứng dụng của bạn hiện đang tự phục vụ , bạn có thể cho phép khách hàng của mình mua các tính năng bổ sung trực tiếp từ trong ứng dụng của bạn!

Vì vậy, chúng tôi đã giới thiệu một tấn tự động hóa cho hệ thống cấp phép của mình, chúng tôi có thể cấp phép cho các tính năng riêng lẻ (ví dụ: phiên bản giới hạn so với phiên bản đầy đủ), chúng tôi đã cung cấp một UX tuyệt vời cho khách hàng của mình và chúng tôi cũng đã giảm bớt một trong những lý do lớn nhất cho các yêu cầu hỗ trợ: phục hồi khóa giấy phép.

Dù sao, điều này đã lâu nhưng hy vọng nó sẽ giúp được ai đó!


Không thể tưởng tượng một DLL được cấp phép như thế này trong bất kỳ tình huống phát triển doanh nghiệp. Hãy nghĩ rằng các kịch bản xây dựng và triển khai tự động, ví dụ. Hoặc chỉ cần thêm bước này vào nhiều bước thường được yêu cầu để thiết lập máy phát triển. Đối với tôi, khóa cấp phép cần phải được cấp trước, và không dựa trên các máy riêng lẻ, phải thiết thực
DVS

2

Không thể ngăn chặn vi phạm bản quyền phần mềm hoàn toàn. Bạn có thể ngăn chặn vi phạm bản quyền thông thường và đó là những gì tất cả các giải pháp cấp phép thực hiện.

Node (máy) bị khóa cấp phép là tốt nhất nếu bạn muốn ngăn chặn việc sử dụng lại các khóa cấp phép. Tôi đã sử dụng Cryptlex khoảng một năm nay cho phần mềm của mình. Nó cũng có gói miễn phí , vì vậy nếu bạn không mong đợi quá nhiều khách hàng, bạn có thể sử dụng miễn phí.


2

Bạn có thể sử dụng giải pháp bên thứ ba miễn phí để xử lý vấn đề này cho bạn như Quantum-Key.Net Miễn phí và xử lý thanh toán qua paypal thông qua trang bán hàng web mà nó tạo cho bạn, phát hành khóa qua email và khóa sử dụng khóa cho một máy tính cụ thể để ngăn chặn vi phạm bản quyền.

Bạn cũng nên cẩn thận để mã hóa / mã hóa mã của mình hoặc nó có thể dễ dàng được thiết kế ngược bằng phần mềm như De4dot và .NetReflector. Một obfuscator mã miễn phí tốt là ConfuserEx wich rất nhanh và đơn giản để sử dụng và hiệu quả hơn so với các lựa chọn thay thế đắt tiền.

Bạn nên chạy phần mềm đã hoàn thành của mình thông qua De4Dot và .NetReflector để thiết kế ngược lại phần mềm và xem những gì một cracker sẽ thấy nếu họ làm điều tương tự và để đảm bảo rằng bạn không để bất kỳ mã quan trọng nào bị lộ hoặc không bị che giấu.

Phần mềm của bạn vẫn có thể bị bẻ khóa nhưng đối với người bẻ khóa thông thường, nó có thể đủ để loại bỏ chúng và các bước đơn giản này cũng sẽ ngăn mã của bạn được trích xuất và sử dụng lại.

https://quantum-key.net

Làm thế nào để sử dụng ConfuserEx?

https://github.com/0xd4d/de4dot

https://www.red-gate.com/dynamic/products/dotnet-development/reflector/doad

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.