2010-11-20 33 views
8

Không có ý định phạm tội, nhưng chúng ta không thảo luận rằng các chương trình cấp phép có thể bị bẻ khóa (tôi biết điều đó) và việc truy đòi luật thường là ngăn chặn tốt hơn (có thể ở nước bạn, nhưng không có).Làm cách nào để triển khai một chương trình cấp phép đơn giản?

Không phải lựa chọn của tôi - Tôi đã được yêu cầu thực hiện cấp phép, chỉ đủ tốt để giữ tin tặc thông thường.

Điều gì có thể làm cho điều này hơi khác một chút là các PC chạy phần mềm sẽ không luôn có quyền truy cập internet.

Khi ai đó mua sản phẩm, tôi có thể tạo thông tin cấp phép vào nó & cung cấp đĩa CD cài đặt. Nhưng, điều gì sẽ xảy ra nếu họ muốn mua thêm giấy phép? Tôi không muốn phải đi trên trang web để cập nhật dữ liệu cấp phép, nhưng họ có thể không truy cập được vào máy chủ của tôi, cũng không phải của họ.

Tôi đã nghĩ đến việc có giấy phép trong các tệp bên ngoài (được mã hóa), mỗi tệp có chứa một số giấy phép và ngày hết hạn. Nếu người dùng mua thêm giấy phép, sau đó tôi có thể gửi email cho một tệp bổ sung & an ninh của họ đã xóa Nhân viên CNTT có thể ghi vào đĩa CD hoặc USB và sau đó sao chép nó vào thư mục dữ liệu ứng dụng.

Điều đó có ổn không? Bạn có thể nghĩ ra điều gì đó tốt hơn không? Bạn có thấy vấn đề không? Tôi không có quá nhiều thời gian để thực hiện điều này.

+0

2,5 nghìn lượt xem và số lần đếm. Đã đóng (đúng) sau 5 năm mở cửa. Nhìn lại, tôi nhận ra rằng tôi nên hỏi về http://programmers.stackexchange.com/, nhưng vào những ngày đó tôi chỉ hoạt động trên trang này. – Mawg

Trả lời

4

Điều đó sẽ tốt nếu giấy phép chứa nhiều thông tin. Thông thường họ không để họ có thể được mã hóa hoàn chỉnh với một số bảo vệ trong 30-50 ký tự hay như vậy. Sau đó, chúng có thể được gửi qua email, cắt & được dán hoặc thậm chí được nhập.

Đối với đề án bảo vệ, PKV hoặc Xác minh một phần chính là phổ biến. Có một số câu hỏi ở đây về SO về nó và tìm kiếm của Google sẽ cung cấp một số cách triển khai ngôn ngữ khác nhau.

+1

+1 Cảm ơn bạn đã trả lời nhanh. Thông tin duy nhất trong các tệp phải là số giấy phép, ngày hết hạn và số khách hàng. Không có nhiều dữ liệu. Bảo vệ không cần quá nặng. – Mawg

+0

Phải. Và thông thường giấy phép có chứa một mã băm của tên người dùng (số khách hàng trong trường hợp của bạn) và cả hai được nhập cùng nhau. Điều này rút ngắn hơn nữa vì băm sẽ ngắn hơn tên/số. – winwaed

+1

Tôi sẽ thực hiện một hệ thống kích hoạt như Microsoft (mặc dù nó có thể sử dụng ổ đĩa USB để có thể làm việc ngoại tuyến) để ngăn ngừa sao chép ngẫu nhiên, mà chỉ đơn giản là cài đặt phần mềm lên nhiều máy tính hơn là nó được cấp phép. Thật không may, một công ty được gọi là Uniloc có bằng sáng chế về điều này và đã kiện nhiều công ty phần mềm bao gồm cả Microsoft. – PleaseStand

2

Nếu bạn không đặc biệt quan tâm đến nứt nỗ lực như thế nào về vấn đề này:

Pre-tạo ra một số lượng nhất định các phím hoàn toàn ngẫu nhiên (tôi không, biết ... nói 10.000 vì lợi ích của ví dụ này). Băm từng khóa bằng SHA-1.

Trong chương trình của bạn, bao gồm một mảng chứa băm SHA-1, ví dụ:

static unsigned char *keys[20] = 
{ 
    // key 8WVJ-TH6R-R7TH-DXM2 
    { 0xb2, 0x3c, 0xc2, 0xb3, 0xea, 0xa5, 0x69, 0xf6, 0xa6, 0x95, 0x8a, 0x75, 0xee, 0x76, 0x88, 0xa5, 0x71, 0xd9, 0x4a, 0x9e }, 
    // many more keys follow... 
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } 
} 

Khi người dùng mua một giấy phép mới (hoặc gói giấy phép) cung cấp cho họ số lượng thích hợp các phím, trầy xước chìa khóa trong danh sách, và đó là điều đó.

Khi người dùng nhập khóa trong ứng dụng, hãy băm và lặp lại danh sách. Nếu bạn tìm thấy băm, bạn tốt để đi. Nếu bạn không, chìa khóa là sai/trái phép.

Ưu điểm:

  • phím có thể của bất kỳ chiều dài và phức tạp.
  • Nếu ai đó có thể đảo ngược SHA-1 họ có những việc tốt hơn để làm hơn là phá vỡ ứng dụng của bạn.
  • Đơn giản để triển khai.
  • Dễ quản lý.
  • Nếu bạn đã hết khóa, hãy cập nhật ứng dụng và thêm các phím mới ở cuối bảng.
  • Không cần truy cập trực tuyến.

Nhược điểm:

  • Những người muốn freeload có thể dễ dàng HexEdit nhị phân của bạn để thiết lập riêng giá trị SHA-1 của họ trong bảng, và sau đó họ có thể "cấp phép" các phần mềm để tự.
  • Bạn không biết liệu người dùng trả phí của mình có sử dụng cùng một khóa trong 20 máy hay không.
  • Đơn giản.

Đề án có thể được cải thiện theo nhiều cách khác nhau. Nhưng đó là điểm khởi đầu cho bạn.

2

Tôi sử dụng mật mã không đối xứng với đường cong elliptic. Để tạo khóa cấp phép mới, tên người dùng băm (hoặc email, có thể với một số ID ứng dụng được thêm vào), hãy ký mã băm bằng khóa cá nhân của bạn và mã hóa bằng base-32 để có khóa đẹp như HQYRV-OZFNZ-M3L7B-WA644-CXLG4-D7IRD-QZ6FY-GJGTO-MEXEG.

Để xác thực giấy phép, hãy băm tên người dùng như trên và xác minh chữ ký của băm bằng khóa công khai của bạn. Điều này có nhiều lợi thế: chìa khóa là tương đối ngắn (nhờ sử dụng EC thay vì RSA/DSA), khóa là "ngẫu nhiên" trong đó một khóa khác được tạo ra mỗi lần cho cùng một tên người dùng, và, quan trọng , không có mã keygen trong ứng dụng và một trình cracker không thể viết một keygen mà không cần giữ khóa riêng của bạn.

Tôi có thư viện để thực hiện việc này trên GitHub: https://github.com/vslavik/ellipticlicense (đó là ngã ba của dự án Objective-C hiện đã chết, tôi đã thêm API C di động và thực hiện một số cải tiến khác).

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