• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于圣天狗的VC++應(yīng)用控制程序加/解密實例

    2019-06-11 09:54:24馬斌仁范祖清
    電子技術(shù)與軟件工程 2019年7期
    關(guān)鍵詞:天狗控制程序字符串

    文/馬斌仁 范祖清

    1 研究背景

    軟件狗是使用在計算機并行口或USB接口上,用于軟件保護的硬件產(chǎn)品。它是一個可編程可讀寫具有數(shù)據(jù)存儲區(qū)的設(shè)備。將軟件狗插在計算機上,通過相應(yīng)的接口函數(shù)或開發(fā)商工具進行訪問。

    加密方案分為兩種。一種使用外殼工具,不需對程序源代碼進行改動,將可執(zhí)行應(yīng)用程序加一個保護層。程序開始運行和運行中會自動訪問軟件狗,若軟件狗不存在,提示錯誤且應(yīng)用程序不能運行;另一種使用obj、dll、lib等,開發(fā)商提供接口函數(shù)或工具。應(yīng)用時在源代碼中加入接口函數(shù)對軟件狗進行操作,并編寫加密程序?qū)崿F(xiàn)軟件保護。

    為有效保護知識產(chǎn)權(quán),有利于軟件分期控制。使用單機時鐘版圣天狗對單位醫(yī)療設(shè)備應(yīng)用控制程序進行加/解密。采用內(nèi)嵌式在源代碼VC++6.0程序中調(diào)用圣天狗接口函數(shù)并編寫程序?qū)λM行檢測和操作。

    2 設(shè)計原理

    程序中,調(diào)用接口函數(shù)進行操作,圣天狗響應(yīng)該操作并通過API函數(shù)返回數(shù)值。程序中對返回值進行判定并采取相應(yīng)動作。若返回值無響應(yīng)或無效,程序終止運行或限制部分功能。

    由于醫(yī)療產(chǎn)品軟件特殊性,結(jié)合單位產(chǎn)品VC++6.0應(yīng)用控制程序。將圣天狗加/解密分為軟件到期時間控制、用戶請求和時間延期代碼升級三部分。同時,程序通過timer每隔2分鐘調(diào)用一次SFNTGetLicens檢測圣天狗,防止中途拔出。若被撥出,終止程序使用。

    使用圣天狗開發(fā)商工具Sentinel Keys Toolkit,采用保護策略API特征項string類型(加/解密字符)和AES類型(激活、加密、解密)燒制圣天狗,并經(jīng)編譯形成頭文件。程序源代碼中引用“SentinelKeys.h”和“SentinelKeysLicense.h”;工程設(shè)置的對象/庫模塊中加入“SentinelKeyW.lib”。另外,設(shè)計加/解密字符串為圣天狗唯一ID編號(00-FF)和控制到期時間(YYYYMMDD),共十個字符。

    3 控制程序加/解密

    3.1 到期時間控制

    在主程序中,先對圣天狗初始化,再定義判斷標(biāo)志位、圣天狗狀態(tài)/ID/句柄等。通過SFNTGetLicense接口函數(shù)獲取圣天狗狀態(tài)。返回值為209,驅(qū)動程序未安裝;返回值為226,圣天狗不匹配或中途被拔出;返回值為SP_SUCCESS,獲取狀態(tài)成功,反之標(biāo)志位設(shè)為0,應(yīng)用控制程序主要功能被限制。

    圖1:到期時間控制流程圖

    圖2:開發(fā)商專用加密程序

    獲取狀態(tài)成功后,采用SFNTGetDeviceInfo接口函數(shù)讀取圣天狗基本信息。通過deviceInfo.timeValue獲取內(nèi)部時鐘,定義年月日類型整形,如device.timeValue.year為內(nèi)部時鐘年份。通過計算年份×365+月份×30+日期,時間參數(shù)為a。

    采用SFNTReadString函數(shù),返回值為SP_SUCCESS時,讀取圣天狗存儲區(qū)的字符數(shù)組,再轉(zhuǎn)換成一個字符串。按照加/解密字符設(shè)計規(guī)則進行字符分離,字符串第1、2位字符為圣天狗ID編號;第3-6位為設(shè)定的到期年份;第7、8位為月份;第9、10位為日期。該字符串中年月日為控制程序到期時間,且作了加密算法和限制條件,經(jīng)計算為時間參數(shù)b。若不滿足條件,則數(shù)據(jù)不合法,標(biāo)志位為0。程序中,比較a和b,若a<=b,標(biāo)志位為2,應(yīng)用控制程序正常運行;標(biāo)志位為1或0,程序主要功能被限制或終止運行,并提示相應(yīng)信息。到期時間控制流程圖如圖1所示。

    3.2 用戶請求

    唯一ID編號和原設(shè)定的軟件到期時間。

    程 序 中,引 用“SentinelKeys.h”和“SentinelKeysLicense.h”。先對圣天狗初始化,再采用SFNTGetLicense函數(shù)獲取狀態(tài),返回值為SP_SUCCESS時,界面中“請求升級”按鈕實現(xiàn)讀取ID編號和到期時間(32位16進制字符顯示)。

    源代碼中,采用SFNTGetDeviceInfo獲取圣天狗基本信息,將deviceInfo.devSN唯一ID編號轉(zhuǎn)換成十六進制字符,若長度不足2位加0補位。另外,通過SFNTReadString函數(shù)讀取圣天狗內(nèi)部字符數(shù)組,經(jīng)處理變成一個字符串。按照YYYYMMDD格式分離出年月日,程序自動檢查數(shù)據(jù)合法性。然后將ID編號和YYYYMMDD組合成一個字符串,再變成無符號的字符數(shù)組。接著采用指針方式寫入plainBuffer[]數(shù)組,程序中使用SFNTEncrypt函數(shù)加密。最后將返回值clipherBuffer[]數(shù)組轉(zhuǎn)換成16進制,若不足兩位補位,即形成32位字符的用戶請求代碼。

    3.3 時間延期代碼升級

    為便于開發(fā)商重寫加/解密字符,對用戶圣天狗進行確認(rèn)。用戶請求為32位16進制字符串代碼,僅通過開發(fā)商專用程序獲取圣天狗

    開發(fā)商采用專用加密程序,將圣天狗唯一ID編號和控制軟件下一個到期時間兩段數(shù)據(jù)拼接在一起,使用SFNTEncrypt接口函數(shù)將拼接的字符串進行加密。由clipherBuffer[]數(shù)組生成32位16進制字符串即為時間延期升級代碼。如圖2所示。

    代碼升級的程序中,先將圣天狗初始化,將32位16進制字符串輸入至文本框中,點擊“驗證”按鈕,字符串轉(zhuǎn)換成大寫并去除所有空格,再檢查字符串長度和每個字符ASC碼在48至57或65至70范圍內(nèi)。若滿足條件,時間延期代碼合法。

    點擊“代碼升級”按鈕,程序?qū)戏ㄗ址績晌蛔址来畏蛛x成字符數(shù)組,并將16進制轉(zhuǎn)換成字符型。采用SFNTDecrypt函數(shù)解密,將plainBuffer[]字符數(shù)組組合成一個字符串即為ID編號和預(yù)置控制軟件到期時間YYYYMMDD。程序自動完成對字符串的拆分和數(shù)據(jù)合法性判斷。另外,通過SFNTGetDeviceInfo函數(shù)獲取圣天狗ID,與字符串中的ID比較。若匹配,采用SFNTWriteString函數(shù)將字符串YYYYMMDD(年月日)重新寫入圣天狗內(nèi)部儲存器中,存儲區(qū)內(nèi)部字符更新;若不匹配,代碼升級無效。

    4 結(jié)束語

    單機時鐘版圣天狗是一種智能型軟件保護工具,采用公鑰和128位AES保護,自身配置電池有源時鐘,不依賴計算機系統(tǒng)時間,給我們提供了靈活的加密方案。通過提供的開發(fā)工具和文檔,操作圣天狗并將算法和限制條件融入到VC++6.0應(yīng)用控制程序中,實現(xiàn)不同代碼控制程序運行時間和功能模塊限制,有利于軟件分期控制。

    目前,市場上獨立的硬加密出現(xiàn)已有多年,方案很多,屬于較成熟技術(shù)。本文僅針對適合我單位產(chǎn)品軟件的簡單加密,后續(xù)根據(jù)需求,可考慮時間、執(zhí)行次數(shù)和固定失效時間及外殼等多重加/解密方式。

    猜你喜歡
    天狗控制程序字符串
    天狗送的紙牌
    童話世界(2020年31期)2021-01-04 01:41:50
    基于PLC的變電站備用電源自動投入裝置控制程序的研究
    天狗吃月亮
    天狗吃地球
    天狗的月亮餅
    基于PLC數(shù)值處理模塊的PID控制程序研究
    一種新的基于對稱性的字符串相似性處理算法
    紙機傳動控制程序的復(fù)用性研究
    中國造紙(2014年1期)2014-03-01 02:10:04
    依據(jù)字符串匹配的中文分詞模型研究
    建筑工程新工藝、新技術(shù)現(xiàn)澆砼空心板的控制程序
    来宾市| 南靖县| 南郑县| 阳曲县| 南城县| 西盟| 商城县| 兴隆县| 莱州市| 精河县| 吕梁市| 惠州市| 稻城县| 民权县| 文昌市| 潮州市| 镇安县| 沂水县| 龙川县| 龙门县| 宿州市| 乐山市| 山阴县| 合阳县| 德格县| 新郑市| 海阳市| 南投县| 淳化县| 册亨县| 乐东| 芒康县| 许昌县| 中山市| 金昌市| 武城县| 双流县| 英德市| 泗洪县| 洛南县| 中山市|