一般的隨身碟不具備加密的功能,雖然隨身碟和加密狗外形有一些相似,但是內部完全不一樣的,隨身碟只是一個儲存空間晶片和簡單的附屬電路,而現在的智慧卡加密狗都具有一個單獨的CPU或者加密晶片,可以執行相當複雜的密碼編譯演算法。
有的軟體開發商有這樣一種需求,就是使用隨身碟發布軟體的同時,想要節約成本,防止隨身碟中的軟體被複製,但又不想再購買昂貴的加密狗,因此想要把軟體綁定在隨身碟上執行,當隨身碟拔下來的時候,軟體就不能正常運行,和我先前介紹的綁定硬體指紋相似,使用綁定隨身碟的方式加密軟體。
在對軟體安全不是特別在意的情況下,可以在軟體中採用綁定隨身碟內部ID的方式來實現這種加密,先使用程式將隨身碟的ID讀出來,然後根據這個ID產生License檔案,當解密者將隨身碟內的檔案複製到其他電腦的時候,軟體執行過程中讀取隨身碟ID失敗,因此就無法校正License。
通常情況下兩個隨身碟的ID是不相同的,因此即使將軟體複製到另外一個隨身碟,軟體執行的時候,根據隨身碟ID驗證License,也會出現不匹配的現象,這樣就實現了軟體綁定隨身碟的加密方式。
需要指出的是,這種隨身碟加密並不算安全,大多數隨身碟廠商有內部量產工具,可以修改隨身碟的內部ID號碼,這就存在了複製隨身碟的可能性,但對於普通使用者來說,通常沒有修改隨身碟內部ID的能力,因此也具有一定的加密性。
這個加密方法中,讀取隨身碟ID號的函數的VB原始碼如下所示:
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_USBHub")
For Each objItem In colItems
a = objItem.DeviceID
If InStr(a, "VID") Then b = Split(a, "\")
USB_ID = b(UBound(b))
Next