2012-06-05 7 views
7

Tôi muốn tạo một ứng dụng dành cho máy tính để bàn chỉ chạy trên các máy có khóa hoặc giấy phép. Làm thế nào để đạt được điều này?bảo vệ Ứng dụng Java theo giấy phép hoặc khóa

+0

Xác minh trực tuyến (ví dụ: mỗi lần khởi động) có phải là một tùy chọn không? – nfechner

+1

Dù sao thì tôi nghĩ về nó, ứng dụng của bạn có thể bị nứt, vì mọi thứ đều ở phía khách hàng. – nhahtdh

+0

@nhahtdh Mặc dù có đủ nỗ lực, đây là trường hợp cho bất cứ điều gì ... – will

Trả lời

19

Điều này phụ thuộc hoàn toàn vào mức độ bảo mật mà bạn muốn thực hiện ...

Vấn đề với java là bạn có thể đảo ngược biên dịch nó. Vì vậy, nếu ai đó muốn, họ có thể tải xuống phần mềm của bạn, đảo ngược biên dịch, và sau đó loại bỏ bất kỳ bảo mật nào bạn đã đưa ra (và sau đó phân phối lại nó nếu họ muốn).

Đây chỉ là vấn đề nếu bạn có kế hoạch tiếp cận thị trường đại chúng và bán nó và vi phạm bản quyền thực sự sẽ là một vấn đề.

Nếu bạn không lo lắng về điều này, bạn có thể truy cập trực tuyến hoặc kiểm tra ngoại tuyến.

Công ty tôi làm việc với sử dụng phương pháp trực tuyến; có một vài bước:

CHỈNH SỬA: Tôi đã thay đổi cách hoạt động của tính năng này, vì cách cũ là một cơn ác mộng bảo trì.

  1. Một tập tin giấy phép
    • (điều này có thể chứa bất cứ điều gì bạn muốn trong thực tế, nó chỉ có phải là duy nhất cho mỗi người dùng Hầu hết mọi người thường đi với trang phục chung;.
    • name
    • company
    • email
    • và sau đó là key. Nghĩa là JDU8-AJS9-88DF-SASF-ASF9 loại điều bạn thường thâý.
  2. Chương trình tạo băm từ tệp giấy phép.
    1. đặt tất cả các dữ liệu từ các tập tin giấy phép vào một chuỗi
    2. vượt qua chuỗi để một hàm băm this page có thể chỉ cho bạn cách.
  3. có chương trình kiểm tra trực tuyến (trên máy chủ của bạn). Dữ liệu được mã hóa trong một yêu cầu HTML (post/get/json/bất cứ điều gì bạn muốn) và được gửi đến trang xác minh giấy phép của bạn, sau đó xác minh dữ liệu. Bao gồm trong dữ liệu là một chuỗi được tạo ngẫu nhiên, được sử dụng bởi trang xác minh để tạo mật khẩu khác.Điều này sau đó được trả về cho chương trình, cũng đã sử dụng chuỗi ngẫu nhiên để tạo mật khẩu riêng của nó. Nếu hai trận đấu, chương trình khởi động.

Để tạo khóa, chỉ cần sử dụng cùng chức năng có, sau đó tải băm lên máy chủ của bạn.

Nếu bạn muốn nó ngoại tuyến, bạn có thể bao gồm băm trong mã tôi đoán và kiểm tra chúng ở đó.

Tôi nên chỉ ra rằng, tôi không phải là chuyên gia bảo mật bằng bất kỳ phương tiện nào, tôi chỉ phát triển cho một công ty như là một phần của tiến sĩ và đây chỉ là cách tôi đã làm.

Edit: hình ảnh này có thể hữu ích:

enter image description here

Second Edit:

bây giờ tôi đã bao gồm "ẩn xác minh" trong quá trình này. Nó không thực sự xác minh ngoại tuyến, nó chỉ sử dụng người dùng làm proxy - họ cần truy cập internet theo cách khác.

nó hoạt động như thế này:

  1. không có kết nối internet được tìm thấy: cung cấp cho người dùng một mã 4 chữ số
  2. dùng đi để diễn đàn Trang xác minh (tối ưu hóa cho việc sử dụng điện thoại di động quá)
  3. dùng chọn mà phần mềm họ sử dụng từ danh sách thả xuống
  4. người dùng nhập tên người dùng của họ (trường này ghi nhớ các mục nhập)
  5. người dùng nhập mã chương trình đã gửi cho họ và gửi
  6. trang web cung cấp mã gồm 4 chữ số, sau đó chúng nhập vào chương trình và bắt đầu.
  7. chương trình thêm một số dữ liệu đặc biệt vào tệp giấy phép có nghĩa là quá trình này sẽ không cần lặp lại trong tuần tiếp theo/tháng/tuy nhiên.

mỗi khi chương trình xác minh thành công trực tuyến, nó cũng thêm mật khẩu truy cập ngoại tuyến vào tệp giấy phép, có nghĩa là nó mạnh mẽ chống lại thời gian ngừng internet tạm thời và sẽ chỉ ngừng hoạt động nếu internet bị gián đoạn hơn một tuần/tháng/tuy nhiên nó được thiết lập để hoạt động.

+0

Tôi không hiểu lắm, Khi người dùng thực hiện mua hàng, bạn có cung cấp cho họ một tệp giấy phép có chứa khóa cấp phép đã băm hay không bằng cách sử dụng thông tin họ cung cấp khi mua. hoặc bạn chỉ cần tạo ra một chìa khóa và sau đó người dùng nhập này và các thông tin khác vào propgram và nó tạo ra một tập tin giấy phép sau đó chạy đầu tiên. –

+0

@PaulTaylor khi ai đó mua hàng, chúng tôi sẽ gửi lại cho họ chi tiết giấy phép của họ (để xác nhận với họ). Khi bạn bắt đầu chương trình, nó sẽ tìm kiếm tệp giấy phép. Sau đó nó kết hợp dữ liệu trong tệp và chuyển chuỗi kết quả thông qua hàm băm - nếu băm này khớp với băm mà chúng tôi có cho khóa cấp phép của chúng trên máy chủ của chúng tôi thì nó bắt đầu, nếu không nó sẽ nhắc bạn điền vào biểu mẫu. Sau đó, nó tạo tệp giấy phép đi qua băm trong tương lai. – will

+0

@will những gì chính xác shoud máy chủ trở lại trong phản ứng? boolean? một số loại chìa khóa? –

1

tùy thuộc vào số lượng khách hàng bạn dự định có và chế độ phân phối. Bạn có thể sử dụng máy chủ cấp phép nhưng điều này yêu cầu kết nối internet cho khách hàng. Bạn cũng có thể sử dụng USB dongle để quản lý cấp phép.

Không có hệ thống hoàn hảo nào bạn cần để thực hiện một sự kết hợp giữa sự đơn giản, công sức và giá cả.

1

Bạn có thể theo dõi cấp phép của một máy có macIP trực tuyến. Ngay cả trong cửa sổ bạn có thể viết trong registry không có api nhưng bạn vẫn có thể làm điều đó. Tìm đoạn mã bên dưới để đọc đăng ký -

public static final String readRegistry(String location, String key){ 
     try { 
      // Run reg query, then read output with StreamReader (internal class) 
      Process process = Runtime.getRuntime().exec("reg query " + 
        '"'+ location + "\" /v " + key); 

      StreamReader reader = new StreamReader(process.getInputStream()); 
      reader.start(); 
      process.waitFor(); 
      reader.join(); 
      String output = reader.getResult(); 

      // Output has the following format: 
      // \n<Version information>\n\n<key>\t<registry type>\t<value> 
      if(! output.contains("\t")){ 
        return null; 
      } 

      // Parse out the value 
      String[] parsed = output.split("\t"); 
      return parsed[parsed.length-1]; 
     } 
     catch (Exception e) { 
      return null; 
     } 

    } 

Và ở cấp lớp nếu bạn muốn làm xáo trộn sử dụng proGuard.

+0

Địa chỉ Mac có thể dễ dàng giả mạo mặc dù. Nếu bạn muốn đi xuống con đường này, nó an toàn hơn để thử và tạo ra một ngón tay máy tính in độc đáo. – will

+0

cách bạn có thể tạo vân tay máy tính? –

+0

tốt, điều đó tùy thuộc vào bạn. Tôi đã từng nói chuyện với một công ty thực hiện cấp phép như vậy, và anh ta nói rằng họ đã sử dụng một loạt các thứ, chẳng hạn như địa chỉ mac, chi tiết phần cứng, địa chỉ IP (nhưng thay đổi rất nhiều, tùy thuộc vào cách bạn muốn giấy phép của bạn hoạt động). Cá nhân, tôi chỉ theo dõi các chi tiết khác nhau, và có nó khá hạn chế, nhưng sau đó wcheck các chi tiết mỗi bây giờ và sau đó, và nếu họ dường như lạm dụng nó (mà chưa xảy ra chưa), sau đó tôi muốn cắt chúng đi. – will