飞天诚信ROCKEY-ARM(标准锁)软件加密狗使用记录
一、加密狗原理簡介
??加密狗是為軟件開發商提供的一種智能型的軟件保護工具,它包含一個安裝在計算機并行口或USB口上的硬件,及一套適用于各種語言的接口軟件和工具軟件。加密狗基于硬件保護技術,其目的是通過對軟件與數據的保護防止知識產權被非法使用。
??加密狗是外形酷似U盤的一種硬件設備,正名加密鎖,后來發展成如今的一個軟件保護的通俗行業名詞,加密狗是一種插在計算機并行口上的軟硬件結合的加密產品(新型加密狗也有USB口的)。一般都有幾十或幾百字節的非易失性存儲空間可供讀寫,現在較新的狗內部還包含了單片機。軟件開發者可以通過接口函數和軟件狗進行數據交換(即對軟件狗進行讀寫),來檢查軟件狗是否插在接口上;或者直接用軟件狗附帶的工具加密自己的EXE文件(俗稱"包殼")。這樣,軟件開發者可以在軟件中設置多處軟件鎖,利用軟件狗做為鑰匙來打開這些鎖;如果沒插軟件狗或軟件狗不對應,軟件將不能正常執行。
??加密狗是通過在軟件執行過程中和加密狗交換數據來實現加密的。加密狗內置單片機電路(也稱CPU),使得加密狗具有判斷、分析的處理能力,增強了主動的反解密能力。這種加密產品稱它為“智能型”加密狗。加密狗內置的單片機里包含有專用于加密的算法軟件,該軟件被寫入單片機后,就不能再被讀出。這樣,就保證了加密狗硬件不能被復制。同時,加密算法是不可預知、不可逆的。加密算法可以把一個數字或字符變換成一個整數,如DogConvert(1)=12345、DogConvert(A)=43565。
(以上內容來源于網絡)
二、第一次使用ROCKEY-ARM
??一定要先認真閱讀《ROCKEY-ARM產品介紹》和《ROCKEY-ARM用戶工具使用手冊》。
- 打開RyRAMNavigation.exe
??界面中有三個標簽頁:“ROCKEY-ARM 標準鎖”、“ROCKEY-ARM 時鐘鎖”和“ROCKEY-ARM U 盤鎖”,根據使用的鎖選擇相應的標簽頁,點擊“更多了解······”。
??選擇“用戶工具”標簽頁,里面介紹了集中常用工具的功能,初次使用點擊“集成編輯工具”打開即可。
??此時是一把空鎖,所有信息都是出廠時的默認值,直接點擊“登錄”即可。
- 初始化鎖
??初始化鎖的目的是把空鎖變成唯一化的子鎖。關于空鎖、子鎖、母鎖之間的關系:
| 空鎖 | 飛天出廠的鎖,所有信息都是缺省值,特征是產品ID為FFFFFFFF |
| 子鎖 | 開發商通過種子碼唯一化后的鎖,特征是產品ID不再是FFFFFFFF |
| 母鎖 | 在子鎖的基礎上寫入了母鎖數據,方便開發商的安全生產,特征是硬件信息中的母鎖標志位為1 |
??以開發商(管理員)權限使用缺省信息登錄后,在“基本功能”標簽頁生成隨機數作為種子碼,點擊“導出”,保存為一個bin文件。
??點擊進入“密碼安全”標簽頁,導入剛才保存的種子碼文件(bin文件),點擊“生成”完成鎖的初始化。
??務必牢記產品ID和管理員密碼,妥善保管好種子碼!如果嫌生成的密碼不好記,重新登錄后可以返回當前頁修改密碼,注意密碼必須是16位。
三、軟件加密
??加密狗初始化以后就可以進行基本的軟件加密操作了。ROCKEY-ARM給我們提供了三種加密文件:數據文件、密鑰文件和可執行文件,用來對軟件進行加密。
| 數據文件 | 數據文件可以和上層軟件進行關聯,即用API進行訪問,數據文件也可以被鎖內的可執行文件讀寫 |
| 密鑰文件 | 理解密鑰文件,可以參考這兩篇文章: 公鑰,私鑰和數字簽名這樣最好理解 一妻多夫制的鑰匙 |
| 可執行文件 | 所謂可執行文件,就是由鎖內的處理器芯片進行運算的程序文件。用戶可以將程序中的核心代碼編寫成ARM可執行程序下載到鎖內,在程序運行過程中,調用提供的API接口,為可執行文件傳入運行參數,通過可執行文件在加密鎖內部運行后,將結果返回給外部的用用程序,是被保護的軟件與鎖進行交互,從而達到軟件保護的目的。 |
??下圖是各種文件在ROCKEY-ARM中的訪問權限表:
??接下來,我們使用數據文件+密鑰文件的方式來對軟件進行加密,基本的思路是:先生成一對密鑰,然后產生一組隨機數作為原始數據,再用公鑰對隨機數進行加密,最后將加密的數據文件保存到鎖內;程序通過API先讀取鎖內加密后的數據文件,然后用鎖內的私鑰進行解密,如果解密后的數據與原始數據完全相同,則獲得軟件使用權限。以上所有文件的操作權限只歸開發商所有,原始數據也可以寫到鎖內。基本操作步驟如下:
- 生成密鑰對
??首先進入“文件管理”菜單頁,選擇文件類型為“RSA私鑰文件”(選擇ECCSM2私鑰文件亦可),點擊創建,彈出如下窗口:
??填入文件ID(注意:文件ID必須是0000~FFFF之間的數,且所有文件類型的文件ID不能使用0000,3F00和FFFF),點擊“創建”即可。然后選中剛剛生成的私鑰文件,再設置好公鑰和私鑰的保存路徑,點擊“產生”,即可保存一對密鑰文件。
- 產生隨機數并加密
??產生隨機數的方法與上面初始化鎖時的操作相同,然后進入“加密解密”菜單頁,導入保存的隨機數,選擇“RSA公鑰加密”,如下圖所示:
??點擊“執行”,在彈出的窗口中選擇剛才保存的公鑰文件打開,即可產生輸出結果,最后將結果導出保存即可。
- 寫入加密數據文件
??回到“文件管理”頁,選擇“數據文件”,點擊“創建”,彈出如下窗口:
??首先設置文件的讀寫權限為“管理員”,輸入文件ID,然后去掉“空文件”處的√,點擊“導入”,打開剛才公鑰加密后的數據文件,點擊“創建”即可,如下圖所示:
??這樣,文件類型為“數據文件”的文件列表中就會有一個ID為“1111”的文件,而且我們還可以對這個文件進行刪除和讀寫操作。
??現在,加密鎖內已經有了我們的私鑰文件和用公鑰加密過的數據文件,接下來只需要在我們自己的程序中利用API進行相應的驗證操作就可以了。
bool Dongle() {DWORD dwRet = 0;int nCount = 0;char AdminPin[] = "FFFFFFFFFFFFFFFF";//默認開發商PIN碼,使用時請修改為你自己的PIN碼int nRemainCount = 0;DONGLE_HANDLE hDongle = NULL;WORD wPriID = 0x1111;WORD wFileID = 0x1111;BYTE buffer[128];BYTE tmpbuf[128];int nInDataLen = 0;int nOutDataLen = 0;//枚舉鎖dwRet = Dongle_Enum(NULL, &nCount);if (dwRet != DONGLE_SUCCESS)return false;//打開鎖dwRet = Dongle_Open(&hDongle, 0);if (dwRet != DONGLE_SUCCESS)return false;//驗證開發商PIN碼dwRet = Dongle_VerifyPIN(hDongle, FLAG_ADMINPIN, AdminPin, &nRemainCount);if (dwRet != DONGLE_SUCCESS)return false;//從加密鎖中讀取公鑰加密后的數據dwRet = Dongle_ReadFile(hDongle, wFileID, 0, tmpbuf, 128);if (dwRet != DONGLE_SUCCESS)return false;//RSA私鑰解密nInDataLen = 128;nOutDataLen = (128 - 11);dwRet = Dongle_RsaPri(hDongle, wPriID, FLAG_DECODE, tmpbuf, nInDataLen, tmpbuf, &nOutDataLen);if (dwRet != DONGLE_SUCCESS)return false;//關閉加密鎖dwRet = Dongle_Close(hDongle);if (dwRet != DONGLE_SUCCESS)return false;//比較解密后的數據與原始數據是否一致//這里buffer里的原始數據我用的是128位標準填充for (int i = 0; i < 128; i++) buffer[i] = i;if (memcmp(tmpbuf, buffer, 117) == 0)return true;elsereturn false; }??在main()函數中判斷if(Dongle()),否則終止程序,并給出相應提示。
總結
以上是生活随笔為你收集整理的飞天诚信ROCKEY-ARM(标准锁)软件加密狗使用记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派 Raspberry Pi 更换国
- 下一篇: linear在HTML的作用,CSS3里