日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

利用license机制来保护Java软件产品的安全

發(fā)布時(shí)間:2024/4/14 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用license机制来保护Java软件产品的安全 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自:http://infinite.iteye.com/blog/238064

中國(guó)是個(gè)盜版軟件橫行泛濫的國(guó)度,也許這里面有我們社會(huì)主義初級(jí)階段這個(gè)國(guó)情的因素,我們確實(shí)離不開(kāi)盜版軟件。但要發(fā)展壯大本國(guó)的軟件產(chǎn)業(yè),知識(shí)產(chǎn)權(quán)保護(hù)亟需重視起來(lái)。除了寄希望于大環(huán)境方面的改善,我們自己也可以做些力所能及的事情,保護(hù)好自己的軟件產(chǎn)品,以免自己的辛勤勞動(dòng)成果被他人輕松竊取。

???? 通常可以通過(guò)license機(jī)制來(lái)保護(hù)軟件產(chǎn)品的安全,我們可以限定只有購(gòu)買(mǎi)了license的用戶(hù)在特定的機(jī)器上使用我們的軟件。

???? 我設(shè)想的license機(jī)制有以下的主要功能點(diǎn):

????????? 應(yīng)用程序可以創(chuàng)建以及驗(yàn)證綁定給用戶(hù)、系統(tǒng)等實(shí)體的license

????????? 防止用戶(hù)隨意拷貝軟件和license

????????? licenses可以是永久性的或者臨時(shí)性的(在某個(gè)特定時(shí)期內(nèi)有效)

????????? licenses的驗(yàn)證由JAVA Security API提供的數(shù)字簽名機(jī)制來(lái)實(shí)現(xiàn)。

????????? license安裝模塊需要用特殊機(jī)制對(duì)其進(jìn)行保護(hù),以防被反編譯輕易破解。

1? 定義license的文件格式

License文件采用普通java properties文件的定義格式。

文件中定義了產(chǎn)品、版本、Mac地址、license類(lèi)型、license有效期等信息。如下所示:

Product.name=cpu

Product.version=3.2

License.type=Commercial

License.expiry=2010-05-12

Server.macaddress=00-1B-77-2C-9D-8F

signature=302d0215008b4ef2390e11d28f5ea7b86f71ba5168bfeaa6b402146c77706b985be68cc515

c6079b31ad50e3f17552

?? 其中最下面一串?dāng)?shù)據(jù)為根據(jù)上面幾項(xiàng)基本信息簽名產(chǎn)生的注冊(cè)號(hào)。

2? 創(chuàng)建以及驗(yàn)證license

以下是部分實(shí)現(xiàn)代碼(篇幅問(wèn)題,只好只粘方法說(shuō)明)

??? /** 生成公鑰、私鑰對(duì)。公鑰公開(kāi),注意保管好私鑰(如果泄露,則有可能被hacker隨意創(chuàng)建license?*/

??? public static void generateKey() throws Exception;

??? /** 用私鑰對(duì)license進(jìn)行數(shù)據(jù)簽名*/

?public static synchronized void sign(License license) throws Exception ;

??? /**

???? * 驗(yàn)證license是否合法。

???? * 首先驗(yàn)證Mac地址是否有改變,有的話(huà)則非法。(防止用戶(hù)自由拷貝軟件)。

???? * 然后根據(jù)公鑰驗(yàn)證簽名是否合法。*/

? boolean validate(License license) throws Exception ;

然后通過(guò)以下三步可以完成整個(gè)license的創(chuàng)建以及驗(yàn)證:

// 第一步:生成公鑰、私鑰對(duì)。公鑰公開(kāi),注意保管好私鑰(如果泄露,則有可能被隨意創(chuàng)建license)。

????? ??LicenseFactory.generateKey();???????

// 第二步:根據(jù)產(chǎn)品、版本、Mac地址、有效期等信息,簽名產(chǎn)生注冊(cè)號(hào),并將該注冊(cè)號(hào)復(fù)制到license中。

??????? License license = License.fromConfigFile("cpu.license");

??????? LicenseFactory.sign(license);

???????? ?FileHelper.writeFile(new File(LicenseFactory.LICENSE_DIR + "/cpu.license"), license.toString());?????

// 第三步:利用公鑰對(duì)license進(jìn)行合法性驗(yàn)證。可以在軟件代碼的重要模塊中加入下面的驗(yàn)證,比如登錄模塊

??????? LicenseManager.getInstance().validate (license);

3? 加強(qiáng)license機(jī)制實(shí)現(xiàn)模塊的安全性

基于Java軟件產(chǎn)品一般都是由編譯文件.class組成的發(fā)布包,源代碼很容易被諸如JAD之類(lèi)的工具反編譯出來(lái),據(jù)此hacker們可以很輕松的重新實(shí)現(xiàn)部分代碼來(lái)跳過(guò)license驗(yàn)證。

簽于此,我們可以在編譯或者類(lèi)裝載環(huán)節(jié)下些功夫,盡量增加被破解的難度。目前有多種工具可以幫助我們?cè)诰幾gJAVA文件的時(shí)候進(jìn)行混淆,使得反編譯出來(lái)的代碼可讀性很差,難以理解。至于類(lèi)裝載環(huán)節(jié),可以對(duì)編譯生成的class文件進(jìn)行加密,然后通過(guò)自己定制的類(lèi)裝載器classLoader來(lái)裝載。但這樣的實(shí)現(xiàn)也并非無(wú)懈可擊,類(lèi)裝載器本身也是Java文件,破解了類(lèi)裝載器也就破解了解密的過(guò)程,hacker還是能夠反編譯出源代碼。所以說(shuō),這些做法只是盡可能的增加被破解難度,還是無(wú)法真正杜絕被破解。

另外Mac地址部分的實(shí)現(xiàn)也存在漏洞,據(jù)說(shuō)現(xiàn)在有不少軟件可以修改WindowsUnix下的機(jī)器的Mac地址(也許不是真正的修改,只是干擾我們調(diào)用ipconfig /all 或者 ifconfig等命令讀取Mac地址的時(shí)候,讀取的是這些軟件設(shè)定的Mac地址)。對(duì)這方面還不是很了解。

以上是我的一些實(shí)現(xiàn)思路和方法,權(quán)當(dāng)拋磚引玉,歡迎大家拍轉(zhuǎn)。個(gè)人郵箱 : lovejava@163.com

總結(jié)

以上是生活随笔為你收集整理的利用license机制来保护Java软件产品的安全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。