這是我第一次從事一個獨立的 Java 專案,該專案將通過直接銷售產生收入(這意味著我將銷售產品而不是第三方平臺)。
我對以下問題感到好奇:開發人員如何阻止客戶簡單地分發他/她的軟體?
我意識到總有辦法繞過開發人員可以在他們的專案中添加的任何型別的安全性。但是,看到我的產品將在本地運行(.exe 或 jar 檔案),我無法在我銷售產品后監控客戶在做什么。
有沒有辦法設定某種沒有更高級知識的人無法繞過的“虛幻墻”?
非常感謝任何提示、建議或參考。
uj5u.com熱心網友回復:
我有一個服務器。我的某些應用程式中的某些操作將使用一些狀態資訊呼叫服務器。所以我知道誰在使用我的軟體。這在合同中明確說明,所以沒有秘密內容。
如果我想限制我的軟體,我會執行以下操作:
- 當我的應用程式啟動時,它會收集一些系統資訊并對它們進行哈希/CRC
- 如果有匹配的檔案,其內容與系統資訊哈希匹配,我解鎖應用程式
- 如果沒有這樣的檔案,或者其中的哈希值不匹配(不同的系統,被操縱等),我將(重新)注冊
- 注冊要么完成
-
- 通過向客戶顯示哈希值,迫使他給我打電話/發電子郵件,或
-
- 該應用程式連接到我的服務器,檢查注冊資訊,顯示頁面,然后根據我收集的其他一些資訊強制用戶付款或解鎖。
- 在服務器端(或手動)我創建一個匹配系統資訊哈希鍵的鍵
- 該密鑰回傳應用程式(互聯網或手動輸入),應用程式檢查該新代碼是否與其系統資訊哈希匹配
- 如果密鑰匹配,將密鑰寫入檔案,然后解鎖應用
2個缺點:
- java真的很容易逆向工程:
-
- 有人可以創建一個哈希生成器并創建丟失/錯誤的系統資訊哈希檔案
-
- 如果你通過互聯網連接,你應該使用 SSL/TLS,因為在其他情況下,有人可以逆向工程(telnet)應用程式需要解鎖的答案
-
- 防止逆向工程或使其變得更加困難的一個好方法是創建純 .exe/elf 檔案。GraalVM native-image 是可以完成這些壯舉的工具之一。(在代碼安全性方面,僅使用 exe 包裝器是毫無意義的,但我對用戶有好處)
- 每當客戶更改其硬體中的內容時,他必須再次注冊/重新連接
uj5u.com熱心網友回復:
我為我的電腦購買的所有軟體都必須通過互聯網使用許可證密鑰注冊一次或擁有 USB 許可證。所以也許這是一些適合你的想法。缺點是運行服務器進行產品注冊或向客戶發送 USB 許可。但我很感興趣是否有任何其他解決方案
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/471166.html
