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