版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
快速入門及注意事 第1章ROCKEY4SMART簡快速入門及注意事 第1章ROCKEY4SMART簡 關于ROCKEY4SMART加密 ROCKEY4SMART加密鎖的優(yōu) 軟件保 ROCKEY4SMART加密鎖的基本概 密 硬件 用戶內存 模塊 模塊屬性 算法 用戶 種子碼與返回 隨機 2計時和計 ROCKEY4SMART其他功 第3章軟件加密方法舉 一些簡單的加密技 有迷惑性的代 虛假的檢 驗證時機的選 使用ROCKEY4SMART進行加 遠程升 第4章ROCKEY4SMART外部API函 函數(shù)原型與定 ROCKEY4SMARTAPI服 RY_OPEN(打開鎖 RY_ClOSE(關閉鎖 1 錯誤編 4.3.1錯誤編 基本應用示 查找加密鎖— 綜合應用示 用戶內存區(qū)的靈活綜合應 種子碼的靈活綜合應 模塊字的靈活綜合應用 同號加密鎖不同軟件的應用方案 第5章ROCKEY4SMART加密鎖的硬件算 ROCKEY4SMART加密鎖自定義算法介 算法指令格 加密鎖內部算法與用戶程序的接 三種算法的區(qū) ROCKEY4SMART加密鎖自定義算法寫 寫入算 算法指令的一些限 ROCKEY4SMART加密鎖自定義算法使用示 算法基本應用示 算法1示 算法2示 算法3示 算法綜合應用示 綜合示例 綜合示例 綜合示例 綜合示例 2需要注意的問 加密方案的應用要 在需加密的程序中,盡量使用多次加密調 在需加密的程序中,盡量動態(tài)的使用種子碼等功需要注意的問 加密方案的應用要 在需加密的程序中,盡量使用多次加密調 在需加密的程序中,盡量動態(tài)的使用種子碼等功 在需加密的程序中,盡量避免使用重復加密方 在需加密的程序中,對其中某些字符串和數(shù)據(jù)進行加密處 第6章ROCKEY4SMART網絡 NetRockey4Smart簡 基本概 配置文 記錄文 端口和 網絡地 搜索方 打開方 超時設 最大用戶數(shù) 不響應時服務端的保留時 0單個進程中打開模塊的限 6.1.2配置文 Rockey4Smart網絡鎖的函 函數(shù)原形與定 函數(shù)原 NetRockey4SmartAPI服 找鎖 查找下一鎖 打開鎖 關閉鎖 讀鎖 寫鎖 隨機數(shù) 種子碼 寫用戶ID[*] 讀用戶ID 設置模塊[*] 檢查模塊屬性 寫算法[*] 計算1 計算2 計算3 遞減 Rockey4Smart網絡鎖的錯誤 常規(guī)錯誤 速測Rockey4Smart網絡鎖的功 3快速入門及ROCKEY4SMART加密鎖出廠設置為 P1、P2是基本密碼(或一級密碼),P3、P4是高級密碼(快速入門及ROCKEY4SMART加密鎖出廠設置為 P1、P2是基本密碼(或一級密碼),P3、P4是高級密碼(或二級密碼),開發(fā)商可以修改。在0ROCKEY4SMART加密鎖是USBHID設備,支持Win98SE以上的Windows統(tǒng),包括最新的Windows7操作系統(tǒng),不需要安裝額外的驅動程序ROCKEY4SMART64位(8個字節(jié))ROCKEY4SMART每個存儲單元的硬件擦寫次數(shù)為10萬次,讀沒有限制。工作溫度:0℃-70℃。),工具能幫您完成諸如加密鎖的初始化、編輯修改等操作,是您使用加密鎖的實用工具(詳細光盤的Tools\Envelope目錄下,您能找到ROCKEY4SMART加密鎖標準外殼加密工具 位應用程序。不需要寫一行代碼,是最簡(Envelope.exe),該工具可以方便、快捷的加最快速的加密方案。(詳細參考《ROCKEY4SMART實用工具手冊》)光盤的Tools\RsaTool目錄下,您能找到ROCKEY4SMART加密鎖RSA密鑰產生工具(RsaTool.exe),該工具可以產生RSA運算所需的密鑰。(詳細參考《ROCKEY4SMART實用工手冊》)ManagementROCKEY4SMART商生產工具和客戶遠程升級工具,這些工具可以方便、快捷的實現(xiàn)遠程升級功能。(詳細 加密鎖提供外部函數(shù)調用(API)保護方法,您可以在自己要保護的應序中連接入RO4MARTARK4MARTAI(ROCKEY4SMART外部API函數(shù)調用及光盤Samples目錄下的程序示例)如果您需要使用 加密鎖進行開發(fā)或者測試請與我公司聯(lián)系。并請關注我們網站:http://www.FT(中文http://www.Fsafe.co(英文http://ww.Fsaf.co.jp(日文4(34第1章ROCKEY4SMART1.1關于ROCKEY4SMART加密R4MARTD區(qū)以及計時計次模塊。開發(fā)者則可以將軟件的一些重要信息(如序列號等)保存在加密鎖中,需要注意的是,每個存儲單元可寫第1章ROCKEY4SMART1.1關于ROCKEY4SMART加密R4MARTD區(qū)以及計時計次模塊。開發(fā)者則可以將軟件的一些重要信息(如序列號等)保存在加密鎖中,需要注意的是,每個存儲單元可寫10萬次,讀的次數(shù)不受限制。10碼生成器、用戶自定義算法的解釋器1.2ROCKEY4SMART加密鎖的小巧美ROCKEY4SMART加密鎖美觀、時尚、精巧,便于攜帶速度對于已使ROCKEY4 加密鎖加密后的軟件,其運行速度同加密前區(qū)別不大,即使用簡ROCKEY4SMART 限度地簡化APIROCKEY4SMART加密強度高到一個新的高度ROCKEY4 加密鎖采用了種子的方式產生密碼,種子長度最大8字節(jié),大大增加了安全性ROCKEY4SMART加密鎖采用智能卡芯片,內部結構設計合理,ROCKEY4SMART加密鎖成為一個算法復雜度的前提下,程序被破解的可能性等5系統(tǒng)支持全ROCKEY4SMART加密鎖支持的平臺:Windows98SE、WindowsMe、Windows2000、WindowsXPWindowsServer2003、Windows2008、WindowsVista、Windows7軟件接口系統(tǒng)支持全ROCKEY4SMART加密鎖支持的平臺:Windows98SE、WindowsMe、Windows2000、WindowsXPWindowsServer2003、Windows2008、WindowsVista、Windows7軟件接口豐對于大多數(shù)開發(fā)工具都有相應的軟件接口,VB、VC、BUILDER、PB、DELPHI、VS.NET、JAVA1.3軟件保在軟件加密方面 采用了多種先進的關鍵加密技術,是目前軟件保護領域中非常安的保護產品硬件上的安固的硬件基礎。RO4MART采用了安全強度最高的智能卡芯片,硬件不能被復制,多重安全級16位U,2k646464ROE4MART根本上提高了軟件的加密強度硬件上的兼ROCKEY4SMARTHIDWIN98裝驅動程序,徹底解決了由于驅動安裝而給軟件開發(fā)商帶來的各種各樣的問題。無驅的同時SMART使用高速協(xié)議,對應用軟件沒有任何速度上的影響。正因為兼容性,使用 SMART幾乎不需要任何維護,大大節(jié)省了維護成本SMART在硬件上卓越先進的軟件ROCKEY4SMART就像一個小型計算機,128條指令的算法,這些算法在ROCKEY4SMART中運行,計算機中沒有任何程序的痕跡,同時ROCKEY4SMART的算法區(qū)域任何人也獲取不到。軟件開發(fā)商發(fā)行的是一個不完整的軟件,只有與ROCKEY4SMART結合,軟件才能夠正確執(zhí)行。由于硬件上的安全性,可以認為ROCKEY4SMART是不可破解的6第2章ROCKEY4SMART2.1密每個ROCKEY4SMART加密鎖出廠時都會設416位長的密碼第2章ROCKEY4SMART2.1密每個ROCKEY4SMART加密鎖出廠時都會設416位長的密碼。其中頭兩個是基本密碼(或一級密碼后兩個是高級密碼(或二級密碼。出廠密碼的默認值是,一級密碼(P1:C44C,P2:C8F8級密碼(P30799P4C43B,開發(fā)商可以通過我們提供的實用工具來修改密碼(詳見《ROCKEY4鎖的所有權限,而在開發(fā)者提交給最終用戶的軟件中,不應該包括高級密碼(或二級密碼),因為基本碼已經具備了保護軟件所需要訪問加密鎖所有功能的權限,在程序中,需要引入密碼的地方,應該把個高級密碼都設0。下面的內容會更進一步指出在什么情況下需要什么樣R4MART8R4MART會加了安全性2.2硬件ROCKEY4SMARTIDIDIDIDROCKEY4SMART有效性ID開發(fā)商調用RY_FIND接口成功后,硬件序列號會返回在參數(shù)lp1中,詳見第4.2.1章節(jié)2.3用戶內存這個區(qū)域是一個存儲區(qū),開發(fā)者可以讀/寫這一區(qū)例如在此區(qū)域寫入一些軟件運行所需的或相關的內容來檢驗軟件的合法性,促使軟件在只有加密鎖的情況下才能正常工用戶內存區(qū)分兩個部分:低地址區(qū)(0—499)和高地址區(qū)(500--軟件開發(fā)商在調用API函數(shù)對用戶內存區(qū)進行讀、寫操作時,請調用RY_READ_EXRY_WRITE_EX口(詳見4.2.57操作屬性:低地址區(qū),一、二級密碼均可讀寫 高地址區(qū),一級密碼可讀,二級密碼可讀寫2.4模塊這是為實現(xiàn)多模塊加密而設立的特殊加密鎖內部單元,它也可用于軟件加密的特定數(shù)據(jù)保存2.4模塊這是為實現(xiàn)多模塊加密而設立的特殊加密鎖內部單元,它也可用于軟件加密的特定數(shù)據(jù)保存殼加密和 方式調用時有不同的功用ROCKEY4SMART6416時啟 個模塊來做加密處理。開發(fā)者可以向這個區(qū)域寫入模塊字,只要這個模塊字內容不0,就示這個模塊可以使用,如 就表示這個模塊不可使用,最終用戶可以通過檢查模塊屬性字來識個模塊是否可用,如果希望確切檢查這個模塊字的內容是什么,用戶必須通過自定義算法功能來讀取,這便大大提高了安全性2.5模塊屬性81644模塊可用屬性字每一位代表一個模塊字是否可用。1表示對應的模塊可用(即模塊字內容非0 示對應的模塊不可用(即模塊字內容為0模塊遞減屬性字每一位代表一個模塊字是否可以遞減。塊不可以遞表示對應的模塊可以遞減表示對應的2.6算法1281616位單元,128條指令。ROCKEY4SMART3ID(5ROCKEY4SMART加密鎖的硬件算法該區(qū)域是不可讀的,充分提高了安全性2.7用戶這是為開發(fā)商管理自己發(fā)布的軟件而設立的序列號單元,它是一 位長的數(shù)字,被保存在加密8操作屬性:一、二級密碼下均不可讀;二級密碼下可操作屬性操作屬性:一、二級密碼下均不可讀;二級密碼下可內部的特定位置。開發(fā)商當然也可以根據(jù)實際情況用作其他的一些用途,例如寫入一個時間內部的特定位置。開發(fā)商當然也可以根據(jù)實際情況用作其他的一些用途,例如寫入一個時間或與其產理相關的信息等2.8種子碼與返回向 加密鎖輸入一個種子碼,通過內部算法可以計算這個種子碼的四個返回碼。種子碼算法是不公開密碼相同的加密鎖在輸入相同的種子碼的時候會返回四個相同的返回碼,密碼不同的加密鎖即相同的種子碼,返回碼也不同,所以可以通過檢查這種依賴關系來判別是否是所期望的加密2.9隨機通 加密鎖可得到一隨機數(shù),借此可以進行一些抗跟蹤操作,或使其在硬件算參與運算,或進行其他功用等2.10計時和ROCKEY4SMART6464期,軟件通過設置和訪問64個的計時單元中任何一個,控制對用戶的時間授權。還可以通過Rockey4Smart加密鎖的計次單元來控制軟件的使用次 加密鎖還有一個特征是,如果向計時單元寫入了小時數(shù),在加密鎖連接到電腦上自動遞減時間,不用程序特意去控制,這樣就方便了編程人員的使2.11ROCKEY4SMART其他功ROCKEY4SMART為硬件級通訊加密,在USB接口上傳輸?shù)臄?shù)據(jù)都是密文。即軟件中的數(shù)據(jù),經過傳送ROCKEY4SMART再在硬件內部進行解密,然后進行操作,反之ROCKEY4SMART硬件實現(xiàn)1024位的RSA非對稱算法和DES\3DES對稱算法,開發(fā)商可以用這些算法數(shù)據(jù)進行加解密開發(fā)商可以將應用軟件中的公式放入到 加密鎖的算法區(qū)中來完成級程序,就可以將鎖內的數(shù)據(jù)進行升級(詳見《ROCKEY4SMART實用工具手冊》。升級數(shù)據(jù)包可以使用ROCKEY4SMART加密鎖授權管理工具產生(詳見《ROCKEY4SMART實用工具手冊》可以調API接口產生(詳見4.2.31—4.2.359操作屬性:一、二級密碼下均可讀;二級密碼下可第3章軟件加密方法舉例上一章介紹了RO4MART加密鎖的特點,那么怎樣才能將RK4第3章軟件加密方法舉例上一章介紹了RO4MART加密鎖的特點,那么怎樣才能將RK4MARTRCY4MART軟件。這些方法都是您在軟件保護的書籍中或者相關的網站上可以找到的,在這里只是給大家做用ROCKEY4SMART設計出自己獨特的加密方案,真正達到您的軟件不可破3.1一些簡單的加密對于軟件保護來說,有些技巧并不需要你掌握很多匯編或系統(tǒng)低層的知識也能夠做到。我們都知道,不論您的軟件采用何種方式來加密,很多情況下總是會歸結為某些條件的判定,如果滿足了這些條件,程序就會認為軟件是允許執(zhí)行下去的,否則就會報告一些錯誤并退出執(zhí)行。不論這些代碼必然以這樣或那樣的形式存在,我們考慮的重點是如何有效的隱藏和保護這些代碼是這么理解開發(fā)人員的,他通過分析程序中保護代碼的每一段指令來追索編程人員的保護思路。如果反其道而行之,故意添加大量的無用的代碼,把程序復雜化,畢竟開發(fā)者是在拿高級語言編并不是一件簡單的事故意去把返回結果和一些錯誤的答案進行比較,比較結果一定應該是錯誤的,如果比較發(fā)現(xiàn)是正確的,說明有人正在試圖破解您的軟件。反擊的手段可以有多種選3.1.3-1驗證時機的選軟件在運行時,驗證時機可以是沒有規(guī)律3.1.3-1驗證時機的選軟件在運行時,驗證時機可以是沒有規(guī)律的,是散亂的,那么要查找到所有的加密點則一件容易的事情3.2使用ROCKEY4SMART進行加軟件加密方法是每個軟件開發(fā)商結合自己軟件特點所設計出來的具有獨特性的方案,每個開發(fā)商應該有自己特別的方案,不要雷同,更要做好保密工作,防止破解者根據(jù)經驗進行破解。下RE4MART的復雜運算能力和密鑰保密性等特3.2.1ROCKEY4SMART傳統(tǒng)的軟件加密方法很多只是把加密鎖當作存儲設備,將簡單的信息存儲在里面,然后在軟件運行時進行判斷,也有許多開發(fā)商只是檢測硬件是否存在,這些加密手段在現(xiàn)在的破解中十分以前只有在PC中才可以實現(xiàn)的功能,軟件開發(fā)商可以通過這樣的步驟來實現(xiàn)軟件(1)使用高級語言開發(fā)(2)將核心算法公式ROCKEY4SMART加密鎖的算法區(qū),在鎖內計算,ROCKEY4采用的是16位的智能卡芯片,運算能力非??欤?)加密鎖內的公式不能是已經公開的或者是泄漏的公式,這些不安全的公式可以被破軟件模擬的(5)利用 SMART加密鎖提供的三種算法,將硬件ID、種子碼、模塊字等功能結到算法中,使軟件得到最大限度的保(6)使用 加密鎖的計時計次模塊,開發(fā)商可以輕松的實現(xiàn)各種銷售模式(7)ROCKEY4SMART163DESRSA運算能力。3DES,RSA這些對稱和非對稱的加解密算法可以使用在單機版軟件,C/S結構和B/S上述的方法是軟件保護中最有效的 就是一個黑盒子,那么只要注意上面四點說明,使用這樣的方法進行保護的軟件是不可能被破解的軟件開發(fā)商將加密后的軟件賣給最終用戶后,在軟件進行升級時可以利用遠程升級功能而不必回收加密鎖。遠程升級時,開發(fā)商用自己手中的母鎖,產生升級包,發(fā)給最終用戶,最終用戶手中的子鎖在驗證基本密碼(或一級密碼狀態(tài)下就可以升級加密鎖中的所有信息:用戶ID遠程升級可以通過調用AI接口實現(xiàn),也可以使用R4MART的授權管理平臺工具、開發(fā)商生產工具和客戶升級工具來實現(xiàn)詳見《R4SMART產生升級包時可以指定允許被升級的硬 ID、UID、模塊字等,這樣就能對指定的SMART進行升級第4章ROCKEY4SMART外部APIROCKEY4SMART(API)ROCKEY4SMART活的加密方式。使用我們提供的API果的好壞取決于您如何使用它API第4章ROCKEY4SMART外部APIROCKEY4SMART(API)ROCKEY4SMART活的加密方式。使用我們提供的API果的好壞取決于您如何使用它API調用越復雜,軟件保護越好。我們最大限度地簡化接口 應用程序通過使用API與ROCKEY4SMART聯(lián)系來提高安全性。您可以在應用程序的任何地方來檢測ROCKEY4SMART加密鎖的存在,并決定如何響應檢測結果。您也可以檢測您存儲在ROCKEY4SMART加密鎖用戶內存區(qū)中的數(shù)據(jù)當您使API來做加密處理時,你可以預先使用ROCKEY4SMART加密鎖編輯器來完成一要的操作,比如模塊的設置、用戶內存數(shù)據(jù)的寫入、算法及用戶ID的寫入等,當然這一切操作也都可以使用API來完成。4.1函數(shù)原型與定 WORD*DWORD*DWORD* 加密鎖的函數(shù)只有一個,開發(fā)者只需要通過這個函數(shù)的調用就可以使用鎖的全部功能,這個函數(shù)本身就是一個多功能的函 語言調用樣例,下面的說明都會依照這個樣例來retcode=函數(shù)的參數(shù)定義如下4-1函數(shù)參數(shù)定Function161234789寫用戶讀用戶計算計算計算設置RSA私鑰N,公<注意 所有的接口參數(shù)函數(shù)的參數(shù)定義如下4-1函數(shù)參數(shù)定Function161234789寫用戶讀用戶計算計算計算設置RSA私鑰N,公<注意 所有的接口參數(shù)必須在程序中定義,不能傳遞一個NULL類型的空指針過去API參數(shù)參數(shù)參數(shù)參數(shù)4-2Function功能定handlelp1,lp2p1,p2,p3,p4是短整形參數(shù)指針,具體內容根據(jù)功能的不同而不同buffer是字符緩沖區(qū)指針,具體內容根據(jù)功能的不同而不同4.2ROCKEY4SMARTAPI服4.2.1RY_FIND說明查找計算機上連接的ROCKEY4SMART加密鎖設備<注意>:OCEY4MRT4-2Function功能定handlelp1,lp2p1,p2,p3,p4是短整形參數(shù)指針,具體內容根據(jù)功能的不同而不同buffer是字符緩沖區(qū)指針,具體內容根據(jù)功能的不同而不同4.2ROCKEY4SMARTAPI服4.2.1RY_FIND說明查找計算機上連接的ROCKEY4SMART加密鎖設備<注意>:OCEY4MRT的高級密碼(或二級密碼),是為開發(fā)者操作加密鎖使用的,在最終用戶軟件中,不需要也不應該出現(xiàn),我們要求開發(fā)者在最終用戶軟件中,在查找加密鎖的P3、P4設置0設置RSA私鑰D,公設置DES密RY_DES3DES加RY_DES3DES解RY_RSA加RY_RSA解轉換時間(DWORD類型輸入?yún)?shù)function=*p1=*p2=*p3=3(可選*p4=4(可選返回0表示成功,其它為錯誤碼。當成功時,*lp1ID注意輸入?yún)?shù)function=*p1=*p2=*p3=3(可選*p4=4(可選返回0表示成功,其它為錯誤碼。當成功時,*lp1ID注意事項一臺計算機上允許最多同時插入32把ROCKEY4SMART通常情況下,這個函數(shù)只需要在程序一開始時調用 次,這個函數(shù)會進行一些初化工作,并建立內部的設備列表,所以至少要調用1如果是多線程程序,最好在主線程開始的時候調用1當用戶有插/拔動作時,不會導致設備個數(shù)的變4.2.2RY_FIND_NEXT說明查找是否還有指定密碼的輸入?yún)?shù)function=*p1=*p2=*p3=3可選*p4=4可選*lp1=RY_FIND或RY_FIND_NEXT所找到的上一把加返回值0*lp1ID4.2.3RY_OPEN打開說明ID輸入?yún)?shù)function=*p1=*p2=*p3=3可選*p4=4可選*lp14.2.3RY_OPEN打開說明ID輸入?yún)?shù)function=*p1=*p2=*p3=3可選*p4=4可選*lp1=返回值返回 表示成功,其它為錯誤碼。當成功時為加密鎖的句柄注意事項打開成功,*handle指向被打開的ROCKEY4SMART加密鎖的設備句柄該函數(shù)打開時是共享模式,即允許其他進程也可以打開SMART。在這種式下是支持多進程的。因此,只在程序開始和退出時打開和關閉一次就可以,頻開和關閉動作會降低程序ROCKEY4SMARThandle保存打開過的加密鎖的句柄,為下一步具體操作加密鎖做好準備。也可以循環(huán)操個加密鎖用戶完成自己的操作后,應該調用動作,釋放設備句4.2.4RY_ClOSE關閉鎖說明關閉ROCKEY4SMART設備。調用該函數(shù)前需要先打開設備(RY_OPEN輸入?yún)?shù)function=*handle=要關閉的ROCKEY4SMART設備的句柄,與RY_OPEN返回值0說明讀出加密鎖用戶內存區(qū)的內容。調用該函數(shù)前需要先打開設備返回值0說明讀出加密鎖用戶內存區(qū)的內容。調用該函數(shù)前需要先打開設備輸入?yún)?shù)function=*handle=*p1=*p2=buffer=返回值0buffer注意事項20000-499字節(jié)為低地址區(qū),500-1999調用此函數(shù)可以在驗證低級密碼(或一級密碼)的狀態(tài)下讀取所有用戶內存區(qū)的內容說明向用戶內存區(qū)寫入內容。調用該函數(shù)前需要先打開設備輸入?yún)?shù)function=*handle=*p1=*p2=buffer=返回值0注意事項20000-499字節(jié)為低地址區(qū),500-1999字節(jié)為高地址區(qū),返回值0注意事項20000-499字節(jié)為低地址區(qū),500-1999字節(jié)為高地址區(qū),碼(或二級密碼)的狀態(tài)下可以寫所有的區(qū)域4.2.7RY_RANDOM說明獲取一個隨機數(shù)。調用該函數(shù)前需要先打開設備(RY_OPEN輸入?yún)?shù)function=*handle=返回值中為加密鎖返回的隨0數(shù)4.2.8RY_SEED說明得到種子碼的返回碼。調用該函數(shù)前需要先打開設備(RY_OPEN輸入?yún)?shù)function=*handle=*lp2=返回值0當成功時*p1=*p2=*p3=*p4=注意事項種子碼的算法在加密鎖的內部完成,并且不對任何人*p2=*p3=*p4=注意事項種子碼的算法在加密鎖的內部完成,并且不對任何人 RY_WRITE_USERID(寫用戶說明寫入用 ID,調用該函數(shù)需要驗證高級密碼(或二級密碼)。調用該函數(shù)前需要先打開設(RY_OPEN輸入?yún)?shù)function=*handle=*lp1=返回值0注意事項ID32調用該函數(shù)需要驗證高級密碼(或二級密碼)4.2.10RY_READ_USERID(讀用戶說明讀出用戶ID。調用該函數(shù)前需要先打開設備(RY_OPEN輸入?yún)?shù)function=*handle=返回值0表示成功,其它為錯誤碼。當成功時,*lp1ID注意事項ID324.2.11RY_SET_MODULE說明設置模塊字及其遞減屬性,調用0表示成功,其它為錯誤碼。當成功時,*lp1ID注意事項ID324.2.11RY_SET_MODULE說明設置模塊字及其遞減屬性,調用該函數(shù)需要驗證高級密碼(或二級密碼)。調用該函數(shù)前要先打開設備(RY_OPEN輸入?yún)?shù)function=*handle=*p1=*p2=*p3=(1=允許,0=不允許返回值0注意事項調用該函數(shù)需要驗證高級密碼(或二級密碼)模塊遞減屬性設置為1允許遞減時,才能對模塊進行遞減操說明檢查模塊屬性字,確定模塊是否可用,是否可以遞減。調用該函數(shù)前需要先打開設備OPEN輸入?yún)?shù)function=*handle=*p1=返回值0當成功時*p21*p31注意事項81644屬性字通返回值0當成功時*p21*p31注意事項81644屬性字通過檢查模塊可用屬性字來識別這個模塊是否可用,如果希望確切檢查這個模的內容是什么,必須通過自定義算法功能來讀取開發(fā)商可以通過模塊遞減屬性和檢查模塊是否可用,來控制軟件的使用次數(shù)4.2.13RY_DECREASE說明對指定模塊字進行遞減操作。調用該函數(shù)前需要先打開設備OPEN輸入?yún)?shù)function=*handle=*p1=返回值0注意事項模塊遞減屬性為1允許遞減時,才能對模塊進行遞4.2.14RY_WRITE_ARITHMETIC(寫算說明向加密鎖中寫入自定義算法。調用該函數(shù)需要驗證高級密碼(或二級密碼)。調用該函數(shù)需要先打開設備(RY_OPEN輸入?yún)?shù)function=*handle=*p1=buffer=返回值0注意事項調用該函數(shù)需要驗證輸入?yún)?shù)function=*handle=*p1=buffer=返回值0注意事項調用該函數(shù)需要驗證高級密碼(或二級密碼)該區(qū)域在任何狀態(tài)下都是不可讀的1281616條指令的算4.2.15RY_CALCULATE1(計算說明讓加密鎖進行指定方式的算結果由用戶算法用該函數(shù)前需要先打開設OPEN輸入?yún)?shù)function=*handle=*lp1=*lp2=*p1=*p2=*p3=*p4=返回值0當成功時*p1=*p2=*p3=*p4=4.2.16RY_CALCULATE2(計算說明讓加密鎖進行指定方0當成功時*p1=*p2=*p3=*p4=4.2.16RY_CALCULATE2(計算說明讓加密鎖進行指定方式的算結果由用戶算法用該函數(shù)前需要先打開設OPEN輸入?yún)?shù)function=*handle=*lp1=*lp2=*p1=*p2=*p3=*p4=返回值0當成功時*p1=*p2=*p3=*p4=4.2.17RY_CALCULATE3(計算說明讓加密鎖進行指定方式的算結果由用戶算法用該函數(shù)前需要先打*p4=4.2.17RY_CALCULATE3(計算說明讓加密鎖進行指定方式的算結果由用戶算法用該函數(shù)前需要先打開設OPEN輸入?yún)?shù)function=*handle=*lp1=*lp2=模塊字起始地*p1=*p2=*p3=*p4=返回值0當成功時*p1=*p2=*p3=*p4=4.2.18RY_SET_DES_KEY(設置DES3DES密鑰說明設置DES或3DES密鑰。調用該函數(shù)需要驗證高級密碼(或二級密碼)。調用該函數(shù)前先打開設備(RY_OPEN輸入?yún)?shù)function=*handle=*p1DES算法選擇0—1—Buffer=816返回值0注意事項調用輸入?yún)?shù)function=*handle=*p1DES算法選擇0—1—Buffer=816返回值0注意事項調用該函數(shù)需要驗證高級密碼(或二級密碼)DES或3DES密鑰寫入鎖內在任何狀態(tài)下都不能讀出,保證了密鑰的安全4.2.19RY_DES_ENC(DES或3DES說明執(zhí)行DES3DES加密運算。調用該函數(shù)前需要先打開設備(RY_OPEN輸入?yún)?shù)function=RY_*handle=*p1DES算法選擇0—1—*p2=要加密的數(shù)據(jù)長度,必須8的倍Buffer=要加密的數(shù)據(jù),每次最大長度不超過1024返回值0注意事項加密的數(shù)據(jù)長度必須是 的整數(shù)倍。解密后的數(shù)據(jù)可以按照設定的補齊原則來得原文。這里的解密為ECB模式。如要完成CBC模式或者其他模式,請在此基礎上自理4.2.20RY_DES_DEC(DES或3DES說明執(zhí)行DES3DES加密運算。調用該函數(shù)前需要先打開設備(RY_OPEN輸入?yún)?shù)4.2.20RY_DES_DEC(DES或3DES說明執(zhí)行DES3DES加密運算。調用該函數(shù)前需要先打開設備(RY_OPEN輸入?yún)?shù)function=RY_*handle=*p1DES算法選擇0—1—*p2=要解密的數(shù)據(jù)長度,必須8的倍Buffer=解密數(shù)據(jù),每次最大長度不超過1024返回值0注意事項加密的數(shù)據(jù)長度必須是 的整數(shù)倍。解密后的數(shù)據(jù)可以按照設定的補齊原則來得原文。這里的解密為ECB模式。如要完成CBC模式或者其他模式,請在此基礎上自理 RY_SET_RSAKEY_N(設置RSA私鑰說明設置RSA私鑰N,公鑰為65537。調用該函數(shù)需要驗證高級密碼(或二級密碼)。調用該前需要先打開設備(RY_OPEN輸入?yún)?shù)function=*handle=BufferRSA密鑰N(0-返回值0注意事項Rockey4Smart1024位的RSA調用該函數(shù)需要驗證高級密碼(或二級密碼) RY_SET_RSAKEY_D(設置RSA私鑰說明設置RSARockey4Smart1024位的RSA調用該函數(shù)需要驗證高級密碼(或二級密碼) RY_SET_RSAKEY_D(設置RSA私鑰說明設置RSA私鑰D,公鑰為65537。調用該函數(shù)需要驗證高級密碼(或二級密碼)。調用該前需要先打開設備(RY_OPEN輸入?yún)?shù)function=*handle=BufferRSA密鑰D(0-返回值0注意事項Rockey4Smart1024位的RSA調用該函數(shù)需要驗證高級密碼(或二級密碼)4.2.23RY_RSA_ENC(RSA加密說明RSA加密。調用該函數(shù)前需要先打開設備(RY_OPEN輸入?yún)?shù)function=*handle=*p10=1*p2=要加密數(shù)據(jù)的長*p3=填充方式0—Rockey1—用戶自我填Buffer=輸入數(shù)據(jù)當p3=0(Rockey方式填充)時,每次輸入的加密數(shù)據(jù)不能超120字節(jié);當輸入據(jù)長度為120字節(jié)時,最后一個字節(jié)必須為0x00當p3=1(用戶自我填充)時,每次輸入的加密數(shù)據(jù)據(jù)長度為120字節(jié)時,最后一個字節(jié)必須為0x00當p3=1(用戶自我填充)時,每次輸入的加密數(shù)據(jù)不能超長度128字節(jié)時,最后一個字節(jié)必須為0x00128字節(jié);當輸入數(shù)返回值0當成功時Buffer=128字節(jié)的密文注意事項Rockey4Smart1024位的RSA函數(shù)調用成功后,Buffer中返回密文4.2.24RY_RSA_DEC(RSA解密說明RSA解密。調用該函數(shù)前需要先打開設備(RY_OPEN參數(shù)function=*handle=*p10私鑰解密=1*p2=要解密的數(shù)據(jù)長*p3=填充方式0—Rockey1—用戶自我填Buffer=輸入密文,數(shù)據(jù)固定為128字節(jié),返回解密返回值0注意事項Rockey4Smart1024位的RSA運算。每次解密數(shù)據(jù)為128字節(jié)。函數(shù)調用成功后,Buffer中返回明文4.2.25RY_SET_COUNTER_EX說明設置某計次單元的值。調用該函數(shù)需要驗證高級密碼(或二級密碼)。調用該函數(shù)前4.2.25RY_SET_COUNTER_EX說明設置某計次單元的值。調用該函數(shù)需要驗證高級密碼(或二級密碼)。調用該函數(shù)前需要打開設備(RY_OPEN輸入?yún)?shù)function=*handle=*p1=0*P31可遞減,0返回值0注意事調用該函數(shù)需要驗證高級密碼(或二級密碼)4.2.26RY_GET_COUNTER_EX說明讀取某計次單元的值。調用該函數(shù)前需要先打開設備OPEN輸入?yún)?shù)*handle=返回值0當成功時*P31可遞減,0注意事調用該函數(shù)首先會獲取該計次單元當前的數(shù)值,如果該計次單元為可遞減屬性該計次單元注意事調用該函數(shù)首先會獲取該計次單元當前的數(shù)值,如果該計次單元為可遞減屬性該計次單元數(shù)值自動 1,如果該計次單元為不可遞減屬性,則計次數(shù)值沒有改變4.2.27RY_SET_TIMER_EX說明設置某計時單元的值。調用該函數(shù)需要驗證高級密碼(或二級密碼)。調用該函數(shù)前需要打開設備(RY_OPEN輸入?yún)?shù)function=*handle=*p1=0為基礎的計時單元號,64個計時單元0- 1日期,2小時,=3bufferSYSTEMTIME類型的日期時間值(截止日期),或者DWORD類型的天注意事項調用該函數(shù)需要驗證高級密碼(或二級密碼)返回值返回04.2.28RY_GET_TIMER_EX說明讀取某時鐘單元的值。調用該函數(shù)前需要先打開設備OPEN輸入?yún)?shù)function=*handle=*p1=0為基礎的計時單元號,64個計時單元0-返回值0當成功時 1日期,2bufferSYSTEMTIME類型的日期時間值(截止日期),或者DWORD RY_ADJUST_TIMER_EX說明同步加密0當成功時 1日期,2bufferSYSTEMTIME類型的日期時間值(截止日期),或者DWORD RY_ADJUST_TIMER_EX說明同步加密鎖內時鐘和計算機時鐘。在加密鎖內時鐘早于計算機時間的情況下,設置加密(R_N輸入?yún)?shù)function=bufferSYSTEMTIME返回值0注意事項在加密鎖內時鐘早于計算機時間的情況下,設置加密鎖內時鐘和計算機時鐘一如果鎖內時鐘晚于計算機時間,則不會設置成功 RY_GET_TIME_DWORD說明需要先打開設備(RY_OPEN輸入?yún)?shù)function=*handle=*lp2=*p1=*p2=*p3=*p4=返回值0當成功時*lp1=2006-1-10:0 RY_SET_UPDATE_KEY(設置升級的密說明設置升級的*p2=*p3=*p4=返回值0當成功時*lp1=2006-1-10:0 RY_SET_UPDATE_KEY(設置升級的密說明設置升級的 密鑰對,用來加密和解密升級內容。調用該函數(shù)需要驗證高級密碼(或二密碼)。調用該函數(shù)前需要先打開設備(RY_OPEN輸入?yún)?shù)function=*handle=buffer=128字節(jié)是RSA密鑰對的N(公鑰128~255字節(jié)是RSA密鑰對的D(鑰返回值0注意事項開發(fā)商手中的Rockey4Smart作為母鎖,要設置公鑰和私鑰。最終用戶手中的 作為子鎖,只需要有公4.2.32RY_ADD_UPDATE_HEADER(填充升級文件頭)說明填充升級文件頭的內容。調用該函數(shù)前需要先打開設備 OPEN輸入?yún)?shù)function=*handle=*lp1=(bit0-驗證UIDbit1-驗證模塊有效,bit4–校正鎖內時鐘驗證HID,buffer= 升級文件頭的內容,不同的偏移位置有不0*handle=*lp1=(bit0-驗證UIDbit1-驗證模塊有效,bit4–校正鎖內時鐘驗證HID,buffer= 升級文件頭的內容,不同的偏移位置有不03——要綁定UID區(qū)間的起始47——要綁定UID區(qū)間的截止811——要綁定12151617返回值04.2.33RY_ADD_UPDATE_CONTENT(填充升級文件內說明填充升級文件內容中的數(shù)據(jù)。調用該函數(shù)前需要先打開設備 OPEN輸入?yún)?shù)function=*handle=*p1=代碼(0表示升級內存,1表示升級計時單元,2表示升級計次單元,3表示升級算4表示升級UID,5表示升級模塊字其它參數(shù)依據(jù)p1不同的代碼有不同的意義當p1=0(升級內存)時*p2=*p3= 要升級內存的長度,此長度一次不可大于119字節(jié),升級內存的偏移位置+升級存的長度不可以大于2000字節(jié)buffer=當p1=1(升級計時單元)時*p2=0為基礎的計時單元號,64個計時單元,取值范圍0- 1日期,2小時,=3*p2=0為基礎的計時單元號,64個計時單元,取值范圍0- 1日期,2小時,=3Buffer當*p3=1時,先要調用RY_GET_TIME_DWORD函數(shù),在Buffer中是日期轉換成的分鐘值。當*p3=2時,Buffer=要升級的小時數(shù)當*p3=3時,Buffer=要升級的天當p1=2(升級計次單元)時*p2=0為基礎的計次單元號,64個計次單元,取值范圍0- 1可遞減,0buffer=當p1=3(升級算法)時buffer=p1=4(升級UID)時buffer=當p1=5(升級模塊字)*p2= 1可遞減,0buffer=返回值0說明生成升級文也就是把文件頭和文件內容經過加密用該函數(shù)前需要先打開設OPEN輸入?yún)?shù)function=*handle=*p1=子鎖基本密碼*p2=子鎖基本密碼如果buffer為NULL,將在p1返回生成文件的長度;如果不為NULL,buffer中被寫入升件的內返回值04.2.35RY_UPDATE_EX(升說明升級加密鎖。調用該函數(shù)前需要先打開設備件的內返回值04.2.35RY_UPDATE_EX(升說明升級加密鎖。調用該函數(shù)前需要先打開設備OPEN輸入?yún)?shù)function=*handle=buffer=由RY_UPDATE_GEN_EX返回值0注意事項調用此函數(shù)前,要先調用RY_UPDATE_GEN_EX,生成升級文件調用此函數(shù)前,要保證鎖內有升級公4.3錯誤編03456789有ROCKEY但基本密碼錯ID寫數(shù)據(jù)Find遞減算法中常數(shù)值同一個進程中打開數(shù)DES密鑰DES加密錯DES解密錯RSA加密錯誤沒有找到給定要求錯誤給出UID誤(參數(shù)錯誤)讀寫操作給出的塊索引錯誤GenUID功能GenUID功能讀記錄錯(Windows錯誤)寫記錄錯(Windows內部錯誤內部錯不是Mod無效升級包無不允許遞RSA類型錯未知錯4.4為了方便初次使用加密鎖的開發(fā)者盡快入門,下面根據(jù)基本功能出發(fā),給出幾個編程示例供RC4MART用,至于怎樣用好加密鎖在這些示例中并未體現(xiàn)。在本節(jié)內容的“靈活綜合應用”中提供一些加(以直接參見本章靈活綜合應用示例就編程時可能會遇到的一些問題做些簡單的說明第一、因是高級密碼,只在開發(fā)商定制寫入加密鎖里面的內容的時候才應該有效的值,在最終的用戶程序里面,p3,p40第二、ROCKEY4SMART函數(shù)的所有參數(shù)均不能是NULLBufferNULL下面這些程序是用VC6.0編寫的控制臺程序,從一個未加密的程序開始,我們逐步展現(xiàn)ROCKEY4SMARTROCKEY4SMART加密鎖來完成需要的加密功巧,使用任何語言的程序員都能夠很容易的看懂這是一段沒有加密過的源程序,我們的這是一段沒有加密過的源程序,我們的加密工作將從這里開始。如4.4.2查找加密鎖—在程序開始的地方插入了一段查找特定密碼的加密鎖的操作,如果找到加密鎖,程序繼行,如果沒有找到加密鎖,程序直接退#include<stdio.h>#include //IncludeROCKEY4SMARTHeadervoid{//WORDWORDhandle,p1,p2,p3,p4;DWORDlp1,lp2;BYTEp1=0xc44c;p2=p3=0; //Programneedn'tPassword3,Setto0p4= //Programneedn'tPassword4,Setto//TrytofindspecifiedROCKEY4retcode=Rockey(RY_FIND,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Notfound{#include<stdio.h>void{//Anyonebeginfromhere.}ROCKEY4SMARTAPI中的一個"查找鎖"即可。請參考前文"ROCKEY4SMARTAPIROCKEY4SMARTAPI中的一個"查找鎖"即可。請參考前文"ROCKEY4SMARTAPI服務"一節(jié)中關于"查找鎖"功能的介紹嘗試執(zhí)行上面的程序,看看在插鎖與不插鎖兩種情況下有什么不4.4.3打開加密鎖--在程序開始的地方插入了一段打開特定密碼的加密鎖的操作,如果可以打開找到的加密程序繼續(xù)執(zhí)行,如果不能打開加密鎖,程序直接退#include<stdio.h>#include //IncludeROCKEY4SMARTHeadervoid{//WORDWORDhandle,p1,p2,p3,p4;//ROCKEY4SMARTVariableDWORDlp1,lp2; //ROCKEY4SMARTVariableBYTEbuffer[1024]; //ROCKEY4SMARTVariablep1=0xc44c; //ROCKEY4SMARTDemoPassword1p2= //ROCKEY4SMARTDemop3=0; //Programneedn'tPassword3,Setto0p4= //Programneedn'tPassword4,Setto//Trytofindspecifiedretcode=Rockey(RY_FIND,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Notfound{printf("ROCKEYnotfound!\n");}//printf("Hello}4.4.4用戶內存--使用編輯器(編輯器的使用參見《 4.4.4用戶內存--使用編輯器(編輯器的使用參見《 SMART實用工具手冊》)或采用API方式初始加密鎖在低地址區(qū)中寫入 FeiTian!”,然后把字符串的內容讀取參見示例--Step3,Step4初始化加密鎖,寫入 FeiTian!”示例--#include<stdio.h>#include //IncludeROCKEY4SMARTHeadervoid{//WORDWORDhandle,p1,p2,p3,p4;//ROCKEY4SMARTprintf("ROCKEYnotfound!\n");}retcode=Rockey(RY_OPEN,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Error{printf("ErrorCode:%d\n",retcode);}//printf("Helloretcode=Rockey(RY_CLOSE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode){printf("ErrorCode:%d\n",retcode);}}DWORDlp1,////SMARTSMART====////SMARTSMARTProgramneedn'tPassword3,SettoProgramneedn'tDWORDlp1,////SMARTSMART====////SMARTSMARTProgramneedn'tPassword3,SettoProgramneedn'tPassword4,SettoTrytofindretcode=Rockey(RY_FIND,&handle,&lp1,&lp2,&p1,&p3,&p4,if{//Notprintf("ROCKEYnot}{//printf("ErrorCode:%d\n",}=0;//=//strcpy((char*)buffer,"HelloFeiTian!retcode=Rockey(RY_WRITE_EX,&handle,&lp1,&lp2,&p1,&p2,&p3,if{//printf("ErrorCode:%d\n",}printf("Write:%s\n",retcode=Rockey(RY_CLOSE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,if在下面這個例子里面,通過上面示例--Step3開發(fā)的過程中已經在下面這個例子里面,通過上面示例--Step3開發(fā)的過程中已經“HelloFeiTian!”寫入到密鎖中,在下面示例--Step4程序的執(zhí)行過程中,動態(tài)的從加密鎖中把字符串的內容讀回讀出特定內存中的內容,示例--#include<stdio.h>#include //IncludeROCKEY4SMARTHeadervoid{//WORDWORDhandle,p1,p2,p3,p4;//ROCKEY4SMARTVariableDWORDlp1,lp2; //ROCKEY4SMARTVariableBYTEbuffer[1024]; //ROCKEY4SMARTVariablep1=0xc44c; //ROCKEY4SMARTDemoPassword1p2= //ROCKEY4SMARTDemop3=0; //Programneedn'tPassword3,Setto0p4= //Programneedn'tPassword4,Setto//Trytofindspecifiedretcode=Rockey(RY_FIND,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Notfound{printf("ROCKEYnotfound!\n");}retcode=Rockey(RY_OPEN,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Error{{printf("ErrorCode:%d\n",retcode);}}4.4.5利用加密鎖生成真正的隨機數(shù)--4.4.5利用加密鎖生成真正的隨機數(shù)--個固定地址肯定被寫入了另一個隨機數(shù),這樣抗跟蹤能力便大大增加#include<stdio.h>#include //IncludeROCKEY4SMARTHeadervoidprintf("ErrorCode:%d\n",retcode);}p1=0;//p2= //buffer[14]=retcode=Rockey(RY_READ_EX,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Error{printf("ErrorCode:%d\n",retcode);}//printf("%s\n",retcode=Rockey(RY_CLOSE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,if{printf("ErrorCode:%d\n",retcode);}}{//WORDWORDhandle,p1,DWORDlp1,p4;//ROCKEY4SMART////SMARTSMART====////SMARTSMART{//WORDWORDhandle,p1,DWORDlp1,p4;//ROCKEY4SMART////SMARTSMART====////SMARTSMARTProgramneedn'tPassword3,SettoProgramneedn'tPassword4,SettoTrytofindspecifiedif{//Notprintf("ROCKEYnot}retcode=Rockey(RY_OPEN,&handle,&lp1,&lp2,&p1,&p2,&p4,{//printf("ErrorCode:%d\n",}retcode=Rockey(RY_RANDOM,&handle,&lp1,&lp2,&p1,&p2,&p4,if{//printf("ErrorCode:%d\n",}sprintf(buffer,"%04X",p1=0;//p2=4;//Lengthp3=1;retcode=Rockey(RY_WRITE_EX,&handle,&lp1,&lp2,&p1,&p2,&p3,p2=4;//Lengthp3=1;retcode=Rockey(RY_WRITE_EX,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,if //{printf("ErrorCode:%d\n",retcode);}printf("Write:%s\n",p1=0;//p2=4;//buffer[4]=retcode=Rockey(RY_READ_EX,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Error{printf("ErrorCode:%d\n",retcode);}printf("Read:%s\n",retcode=Rockey(RY_CLOSE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode){printf("ErrorCode:%d\n",retcode);}}4.4.6種子碼--RK4MART)4.4.6種子碼--RK4MART)或采用API定種子碼(根據(jù)實際情況也可以由程序內部傳入等方法)的返回碼,種子碼的算法在加密鎖的內例--Step6,Step7讀出固定種子碼(0x12345678)的返回碼,示例--#include<stdio.h>#include //IncludeROCKEY4SMARTHeadervoid{WORDWORDhandle,p1,p2,p3,p4;//ROCKEY4SMARTVariableDWORDlp1,lp2; //ROCKEY4SMARTVariableBYTEbuffer[1024]; //ROCKEY4SMARTVariablep1=0xc44c; //ROCKEY4SMARTDemoPassword1p2= //ROCKEY4SMARTDemop3=0; //Programneedn'tPassword3,Setto0p4= //Programneedn'tPassword4,Setto//Trytofindspecifiedretcode=Rockey(RY_FIND,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Notfound{printf("ROCKEYnotfound!\n");}retcode=Rockey(RY_OPEN,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Error{printf("ErrorCode:%d\n",retcode);}檢驗返回碼的正確性,決定是否繼續(xù)執(zhí)行程序,示例檢驗返回碼的正確性,決定是否繼續(xù)執(zhí)行程序,示例--#include<stdio.h>#include //IncludeROCKEY4SMARTHeadervoid{WORDWORDhandle,p1,p2,p3,p4;//ROCKEY4SMARTVariableDWORDlp1,lp2; //ROCKEY4SMARTVariableBYTEbuffer[1024]; //ROCKEY4SMARTVariablep1= //ROCKEY4SMARTDemo//seedRockeylp2=0x12345678;retcode=Rockey(RY_SEED,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Error{printf("ErrorCode:%d\n",retcode);}printf("Seed:%04X%04X%04X%04X\n",p1,p2,p3,//Closeretcode=Rockey(RY_CLOSE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode){printf("ErrorCode:%d\n",retcode);}}===//ROCKEY4SMARTDemoProgramneedn'tPassword3,Setto0Programneedn'tPassword4,SettoTrytofind===//ROCKEY4SMARTDemoProgramneedn'tPassword3,Setto0Programneedn'tPassword4,SettoTrytofindspecifiedif{//Notprintf("ROCKEYnot}if{//printf("ErrorCode:%d\n",}//seedlp2=if{//printf("ErrorCode:%d\n",}if(p1==0xD03A&&p2==0x94D6&&p3==0x96A9&&{}//Closeretcode=Rockey(RY_CLOSE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,4.4.7用戶ID--使用編輯器(編輯器的使用參見《 SMART實用工4.4.7用戶ID--使用編輯器(編輯器的使用參見《 SMART實用工具手冊》)或采用API方式設置入用戶 號,常用于軟件版本、產品種類或其他加密處理等方面等。參見示例--Step8,Step9初始化鎖寫入用戶ID--示#include<stdio.h>#include //IncludeROCKEY4SMARTHeadervoid{//WORDWORDhandle,p1,p2,p3,p4;//ROCKEY4SMARTVariableDWORDlp1,lp2; //ROCKEY4SMARTVariableBYTEbuffer[1024]; //ROCKEY4SMARTVariablep1=0xc44c;//ROCKEY4SMARTDemoPassword1p2=0xc8f8;//ROCKEY4SMARTDemoPassword2p3=0x0799;//ROCKEY4SMARTDemoPassword3p4=0xc43b;//ROCKEY4SMARTDemoPassword4//Trytofindspecifiedretcode=Rockey(RY_FIND,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Notfound{printf("ROCKEYnot<注意>Step8需要高級密碼(二級密碼)if{printf("ErrorCode:%d\n",retcode);}}檢驗用戶ID,如果用戶ID0x88888888,輸出“HelloDEMO檢驗用戶ID,如果用戶ID0x88888888,輸出“HelloDEMO!”,示例--#include<stdio.h>#include //IncludeROCKEY4SMARTHeadervoid{//}retcode=Rockey(RY_OPEN,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Error{printf("ErrorCode:%d\n",retcode);}lp1=retcode=Rockey(RY_WRITE_USERID,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,if(retcode)//{printf("ErrorCode:%d\n",retcode);}printf("WriteUserID:%08X\n",retcode=Rockey(RY_CLOSE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode){printf("ErrorCode:%d\n",retcode);}}WORDWORDhandle,p1,p2,DWORDlp1,lp2;p4;//ROCKEY4SMART////SMARTSMART====////SMARTWORDWORDhandle,p1,p2,DWORDlp1,lp2;p4;//ROCKEY4SMART////SMARTSMART====////SMARTSMARTProgramneedn'tPassword3,SettoProgramneedn'tPassword4,SettoTrytofindspecifiedif{//Notprintf("ROCKEYnot}if{//printf("ErrorCode:%d\n",}lp1=retcode=Rockey(RY_READ_USERID,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode)//Error{printf("ErrorCode:%d\n",retcode);}ifprintf("Hello{4.4.8模塊字--RK4MART)或采用API4.4.8模塊字--RK4MART)或采用API塊字,亦可同時設置其屬性,然后在用戶程序中可以檢驗其模塊是否有效及是否可以遞減,來限功能則可以用于軟件限次使用等加密處理方面。參見示例--Step10,Step11,Step12初始化鎖設置模塊字,如設置模 為有效,屬性為不可以遞減,示例--#include<stdio.h>#include //IncludeROCKEY4SMARTHeadervoid{//WORDWORDhandle,p1,p2,p3,p4;//ROCKEY4SMARTVariableDWORDlp1,lp2; //ROCKEY4SMARTVariableBYTEbuffer[1024]; //ROCKEY4SMARTVariablep1=0xc44c;//ROCKEY4SMARTDemoPassword1p2=0xc8f8;//ROCKEY4SMARTDemoPassword2p3=0x0799;//ROCKEY4SMARTDemoPassword3p4=0xc43b;//ROCKEY4SMARTDemoPassword4//Trytofindspecified:運行示例Step10需要高級密碼(二級密碼)}retcode=Rockey(RY_CLOSE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode){printf("ErrorCode:%d\n",retcode);}}在用戶程序中如果模塊0有效,輸出“HelloFeiTian!”,在用戶程序中如果模塊0有效,輸出“HelloFeiTian!”,否則停止或退出,示例--#include<stdio.h>#include //IncludeROCKEY4SMARTHeaderif //Not{printf("ROCKEYnotfound!\n");}retcode=Rockey(RY_OPEN,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Error{printf("ErrorCode:%d\n",retcode);}p1=p2=p3=retcode=Rockey(RY_SET_MODULE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,if{printf("ErrorCode:%d\n",retcode);}printf("SetMODULE0:Pass=%04XDecreasenoallow\n",retcode=Rockey(RY_CLOSE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode){printf("ErrorCode:%d\n",retcode);}}void{//WORDWORDhandle,p1,DWORDlp1,p4;//ROCKEY4SMART//SMART//SMART===void{//WORDWORDhandle,p1,DWORDlp1,p4;//ROCKEY4SMART//SMART//SMART====////SMARTSMARTProgramneedn'tPassword3,SettoProgramneedn'tPassword4,Settotofindspecifiedif{//Notprintf("ROCKEYnot}retcode=Rockey(RY_OPEN,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,if{//printf("ErrorCode:%d\n",}p1=retcode=Rockey(RY_CHECK_MODULE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,if{printf("ErrorCode:%d\n",retcode);在 中設置模塊的定義中,設p2=3(軟件運行次數(shù)),p3=1(在 中設置模塊的定義中,設p2=3(軟件運行次數(shù)),p3=1(遞減有效),即通次,如示例--模0(p1=0)達到限制軟件的運行次3#include<stdio.h>#include //IncludeROCKEY4SMARTHeadervoid{//WORDWORDhandle,p1,p2,p3,p4;//ROCKEY4SMARTVariableDWORDlp1,lp2; //ROCKEY4SMARTVariableBYTEbuffer[1024]; //ROCKEY4SMARTVariablep1=0xc44c; //ROCKEY4SMARTDemoPassword1p2= //ROCKEY4SMARTDemop3=0; //Programneedn'tPassword3,Setto0p4= //Programneedn'tPassword4,Setto//Trytofindspecifiedretcode=Rockey(RY_FIND,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode) //Notfound{}ifretcode=Rockey(RY_CLOSE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);if(retcode){printf("ErrorCode:%d\n",retcode);}}printf("ROCKEYnot}if{//printf("ErrorCode:%d\n",printf("ROCKEYnot}if{//printf("ErrorCode:%d\n",}p1=if{printf("ErrorCode:%d\n",retcode);}if{}{retcode=Rockey(RY_DECREASE,&handle,{&lp1,&lp2,&p1,printf("ErrorCode:%d\n",}}//4.4.9同號鎖級聯(lián)-- 加密鎖擁有同號級聯(lián)的功能,在同一4.4.9同號鎖級聯(lián)-- 加密鎖擁有同號級聯(lián)的功能,在同一臺計算機上可以插入多把相同密碼相同或不相同
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度環(huán)保型PHC管樁生產與施工一體化合同2篇
- 二零二五版汽車售后服務合同協(xié)議2篇
- 二零二五版醫(yī)療器械樣品采購及臨床試驗合同3篇
- 二零二五年度特種玻璃進出口貿易合同樣本2篇
- 基于云計算的醫(yī)療信息平臺建設合同(2025年度)3篇
- 二零二五版CNG車輛進出口貿易合同2篇
- 二零二五年度豪華郵輪船員聘用及綜合服務合同3篇
- 二零二五版家庭護理服務與保險產品對接合同2篇
- 二零二五年電子商務產業(yè)園杭州電子商務法律風險防范合同3篇
- 二零二五年防水材料研發(fā)與市場拓展合同3篇
- GB/T 18476-2001流體輸送用聚烯烴管材耐裂紋擴展的測定切口管材裂紋慢速增長的試驗方法(切口試驗)
- GA 1551.5-2019石油石化系統(tǒng)治安反恐防范要求第5部分:運輸企業(yè)
- 拘留所教育課件02
- 沖壓生產的品質保障
- 《腎臟的結構和功能》課件
- 2023年湖南聯(lián)通校園招聘筆試題庫及答案解析
- 上海市徐匯區(qū)、金山區(qū)、松江區(qū)2023屆高一上數(shù)學期末統(tǒng)考試題含解析
- 護士事業(yè)單位工作人員年度考核登記表
- 天津市新版就業(yè)、勞動合同登記名冊
- 產科操作技術規(guī)范范本
- 人教版八年級上冊地理全冊單元測試卷(含期中期末試卷及答案)
評論
0/150
提交評論