本發(fā)明涉及簽名領(lǐng)域,具體說的是自動簽名的方法及其系統(tǒng)。
背景技術(shù):
現(xiàn)在的殺毒軟件對某些行為的判斷,會根據(jù)是否有正常的簽名證書來作為一個判斷條件。所以正常軟件在未簽名的情況下的某些操作,殺毒軟件會彈框提示有可疑的行為。讓用戶認為軟件有危險,影響用戶體驗,也會影響軟件的推廣。
一個完整的程序產(chǎn)品,里面會有許多的Pe文件,如主程序EXE、動態(tài)庫DLL以及可能的驅(qū)動文件SYS等。這樣一個產(chǎn)品下需要簽名的文件可能存在幾十到幾百個,如果手動一個一個的重復(fù)去簽名文件的話,及浪費時間,也有可能會手動重復(fù)操作太多而漏掉某個文件,發(fā)布到市場后因某個文件沒簽名導(dǎo)致被殺毒軟件誤報的可能。
現(xiàn)有技術(shù)的微軟的代碼簽名工具signcode盡管向?qū)Щ敲看沃荒芎灻粋€文件,容易多個文件簽名存在重復(fù)操作的情形;且使用signtool命令行工具,簽名需手工鍵入命令,如需要在Dos操作窗口中輸入Signtool簽名工具的路徑以及簽名所需要一系列對應(yīng)的必選和可選參數(shù),操作過程較繁瑣,對用戶的DOS使用提出了一定的要求。
申請公開號為102685266的中國專利申請文件,通過將區(qū)文件拆分為多個的子文件后分別進行簽名,然后將簽名后的子文件整合成一個區(qū)文件,實現(xiàn)對多個文件的同時簽名。這種簽名方式操作過程較為復(fù)雜,在整合過程容易導(dǎo)致出錯,且還是無法保證每個子文件都經(jīng)過簽名。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是:提供一種自動簽名的方法及其系統(tǒng),實現(xiàn)自動化、準確性地對多個文件同時進行簽名,且能有效避免重復(fù)簽名和遺漏簽名。
為了解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:
自動簽名的方法,包括:
創(chuàng)建命名管道;
將PE格式的待簽名文件添加至待簽名文件列表;
依序從所述待簽名文件列表中獲取一待簽名文件;
對所述一待簽名文件進行簽名,同時通過所述命名管道獲取簽名過程中生成的簽名信息;
依據(jù)所述簽名信息判斷所述一簽名文件是否成功簽名;若是,標(biāo)記所述一簽名文件或?qū)⑺鲆缓灻募瞥龃灻募斜恚瑫r獲取下一待簽名文件。
本發(fā)明提供的另一個技術(shù)方案為:
自動簽名的系統(tǒng),包括:
創(chuàng)建模塊,用于創(chuàng)建命名管道;
添加模塊,用于將PE格式的待簽名文件添加至待簽名文件列表;
第一獲取模塊,用于依序從所述待簽名文件列表中獲取一待簽名文件;
簽名模塊,用于對所述一待簽名文件進行簽名,同時通過所述命名管道獲取簽名過程中生成的簽名信息;
判斷模塊,用于依據(jù)所述簽名信息判斷所述一簽名文件是否成功簽名;
第二獲取模塊,用于標(biāo)記所述一簽名文件或?qū)⑺鲆缓灻募瞥龃灻募斜?,同時獲取下一待簽名文件。
本發(fā)明的有益效果在于:區(qū)別于現(xiàn)有技術(shù)每次只能簽名一個文件,多個文件簽名容易出現(xiàn)重復(fù)簽名情況,且需要手動簽名,操作繁瑣的不足。本發(fā)明可以同時將多個待簽名文件添加至待簽名文件列表中,通過自動化的依序獲取待簽名文件,然后一一進行簽名操作,實現(xiàn)同時對多個文件進行簽名;在此基礎(chǔ)上,通過創(chuàng)建命名管道,建立與簽名工具的通信關(guān)系,能夠在簽名過程中獲取簽名信息,準確判斷文件的簽名狀態(tài),保證簽名準確性。本發(fā)明能夠同時對多個簽名文件進行簽名,且有效避免重復(fù)簽名;從而顯著提高簽名準確性和簽名效率。
附圖說明
圖1為本發(fā)明自動簽名的方法的流程示意圖;
圖2為本發(fā)明實施例一的流程示意圖;
圖3為本發(fā)明實施例二的流程示意圖;
圖4為本發(fā)明實施例二一鍵簽名整個文件夾的操作界面示意圖;
圖5為本發(fā)明實施例二中用戶UI界面的示意圖;
圖6為本發(fā)明自動簽名的系統(tǒng)的功能結(jié)構(gòu)示意圖;
圖7為本發(fā)明實施例三的功能結(jié)構(gòu)示意圖。
標(biāo)號說明:
1、創(chuàng)建模塊;2、添加模塊;3、第一獲取模塊;4、簽名模塊;
5、判斷模塊;6、第二獲取模塊;
21、判斷單元;22、遍歷單元;23、獲取單元。
41、獲取單元;42、簽名單元;43、讀取單元;44、確定單元;45、發(fā)送單元;
61、標(biāo)記判斷單元;62、列表判斷單元。
具體實施方式
為詳細說明本發(fā)明的技術(shù)內(nèi)容、所實現(xiàn)目的及效果,以下結(jié)合實施方式并配合附圖予以說明。
本發(fā)明最關(guān)鍵的構(gòu)思在于:同時將多個待簽名文件添加至待簽名文件列表中,自動化地依序獲取待簽名文件進行簽名;同時結(jié)合命名管道在簽名過程中獲取簽名信息,掌握簽名狀態(tài)。
請參照圖1,本發(fā)明提供自動簽名的方法,包括:
創(chuàng)建命名管道;
將PE格式的待簽名文件添加至待簽名文件列表;
依序從所述待簽名文件列表中獲取一待簽名文件;
對所述一待簽名文件進行簽名,同時通過所述命名管道獲取簽名過程中生成的簽名信息;
依據(jù)所述簽名信息判斷所述一簽名文件是否成功簽名;若是,標(biāo)記所述一簽名文件或?qū)⑺鲆缓灻募瞥龃灻募斜?,同時獲取下一待簽名文件。
由上述可知,本發(fā)明實現(xiàn)了一鍵簽名整個文件夾,不僅減小了用戶重復(fù)操作的步驟,節(jié)約了用戶時間;而且能夠提高簽名的準確性。
請參照圖2,進一步的,所述對所述一待簽名文件進行簽名,同時通過所述命名管道獲取簽名過程中生成的簽名信息,具體為:
獲取所述命名管道的讀取數(shù)據(jù)句柄和寫入數(shù)據(jù)句柄;
對所述一待簽名文件進行簽名,通過所述寫入數(shù)據(jù)句柄獲取簽名過程中生成的簽名信息,通過所述讀取數(shù)據(jù)句柄讀取所述簽名信息。
由上述描述可知,通過命名管道的讀取數(shù)據(jù)句柄獲取簽名過程的簽名信息,再通過讀取數(shù)據(jù)句柄讀取該簽名信息,使用戶能夠掌握當(dāng)前簽名文件的簽名狀態(tài)。
進一步的,所述對所述一待簽名文件進行簽名,通過所述寫入數(shù)據(jù)句柄獲取簽名過程中生成的簽名信息,通過所述讀取數(shù)據(jù)句柄讀取所述簽名信息,具體為:
將所述寫入數(shù)據(jù)句柄、預(yù)設(shè)的證書路徑以及簽名密碼作為簽名工具的啟動參數(shù),對所述一待簽名文件進行簽名;
使用所述讀取數(shù)據(jù)句柄循環(huán)讀取所述簽名工具簽名過程中通過所述寫入數(shù)據(jù)句柄獲取的簽名信息。
由上述描述可知,通過寫入數(shù)據(jù)句柄記錄簽名信息,通過讀取數(shù)據(jù)句柄獲取簽名信息,實現(xiàn)用戶對簽名文件簽名狀態(tài)的掌握,提高簽名準確性。
進一步的,所述將PE格式的待簽名文件添加至待簽名文件列表,具體為:
S01:依據(jù)字符串判斷所獲取的是文件還是文件夾;若為文件夾,則執(zhí)行S02;若為文件,則執(zhí)行S03;
S02:遍歷文件夾中所有文件,獲取PE格式的文件;執(zhí)行S03;
S03:依據(jù)配置文件判斷所獲取的PE格式的文件是否已簽名;若否,將所述文件作為待簽名文件添加至待簽名文件列表;所述待簽名文件列表為鏈表形式。
由上述描述可知,能夠自動化判斷所獲取數(shù)據(jù)的是文件還是文件夾,并自動獲取其中為PE格式的簽名文件,實現(xiàn)對整個文件夾里面的待簽名文件進行自動簽名。
請參照圖3,進一步的,所述對所述一待簽名文件進行簽名,具體為:
依據(jù)設(shè)置判斷是否需要在簽名過程中對所述待簽名文件打上時間戳;
若是,則在對所述一待簽名文件開始簽名時,通過命名管道將時間戳地址發(fā)送至簽名工具。
由上述描述可知,可以自定義設(shè)置是否在簽名過程打上時間戳,作為已簽名標(biāo)識。
進一步的,所述同時獲取下一待簽名文件,具體為:
若為標(biāo)記所述一簽名文件,則判斷所述待簽名文件列表中是否有未標(biāo)記的待簽名文件;若有,則獲取所述未標(biāo)記的待簽名文件;
若為將所述一簽名文件移出待簽名文件列表,則判斷所述待簽名文件列表是否為空,若否,則獲取下一待簽名文件。
由上述描述可知,通過將已成功簽名的文件移出待簽名文件夾,有效避免重復(fù)簽名;通過判斷待簽名文件夾內(nèi)是否還有文件,保證所有待簽名文件都經(jīng)過簽名,避免出現(xiàn)遺漏。
請參照圖6,本發(fā)明提供的另一個技術(shù)方案為:
自動簽名的系統(tǒng),包括:
創(chuàng)建模塊,用于創(chuàng)建命名管道;
添加模塊,用于將PE格式的待簽名文件添加至待簽名文件列表;
第一獲取模塊,用于依序從所述待簽名文件列表中獲取一待簽名文件;
簽名模塊,用于對所述一待簽名文件進行簽名,同時通過所述命名管道獲取簽名過程中生成的簽名信息;
判斷模塊,用于依據(jù)所述簽名信息判斷所述一簽名文件是否成功簽名;
第二獲取模塊,用于標(biāo)記所述一簽名文件或?qū)⑺鲆缓灻募瞥龃灻募斜恚瑫r獲取下一待簽名文件。
請參照圖7,進一步的,所述簽名模塊包括:
獲取單元,用于獲取所述命名管道的讀取數(shù)據(jù)句柄和寫入數(shù)據(jù)句柄;
簽名單元,用于將所述寫入數(shù)據(jù)句柄、預(yù)設(shè)的證書路徑以及簽名密碼作為簽名工具的啟動參數(shù),對所述一待簽名文件進行簽名;
讀取單元,用于使用所述讀取數(shù)據(jù)句柄循環(huán)讀取所述簽名工具簽名過程中通過所述寫入數(shù)據(jù)句柄獲取的簽名信息。
進一步的,所述添加模塊包括:
判斷單元,用于依據(jù)字符串判斷所獲取的是文件還是文件夾;若為文件夾,則執(zhí)行遍歷單元;若為文件,則執(zhí)行獲取單元;
遍歷單元,用于遍歷文件夾中所有文件,獲取PE格式的文件;
獲取單元,用于依據(jù)配置文件判斷所獲取的PE格式的文件是否已簽名;若否,將所述文件作為待簽名文件添加至待簽名文件列表;所述待簽名文件列表為鏈表形式。
進一步的,所述簽名模塊還包括:
確定單元,用于依據(jù)設(shè)置判斷是否需要在簽名過程中對所述待簽名文件打上時間戳;
發(fā)送單元,用于若所述確定單元的判斷結(jié)果為是,則在對所述一待簽名文件開始簽名時,通過命名管道將時間戳地址發(fā)送至簽名工具,通過簽名工具給所述一待簽名文件打上簽名時間戳。
實施例一
請參照圖2,本實施例提供自動簽名的方法,實現(xiàn)同時對多個待簽名文件自動化、準確地進行簽名,不僅能夠避免重復(fù)簽名,而且還能避免遺漏簽名;進一步的,還能使用戶隨時掌握各個待簽名文件的簽名狀態(tài)。
具體的,本實施例的方法可以包括以下步驟:
S1:創(chuàng)建命名管道;
優(yōu)選的,可以通過CreatePipe函數(shù)創(chuàng)建一個可讀寫的命名管道,所述CreatePipe函數(shù)為系統(tǒng)API;
S2:將PE格式的待簽名文件添加至待簽名文件列表;
具體的,可以通過CreateFile函數(shù)打開文件,讀取文件的頭兩個字節(jié),判斷是否等于0x4D\0x5A;等于則是PE格式文件;進一步的,再根據(jù)所述文件的配置文件判斷其是否已簽名,如果文件沒有簽名,則將其添加到等待簽名的待簽名文件夾中。所述待簽名文件可以是一個或者多個。
S3:依序從所述待簽名文件列表中獲取一待簽名文件;
優(yōu)選的,可以順序或逆序從待簽名文件列表中獲取待簽名文件,然后一一對其執(zhí)行S4的簽名操作。
S4:對所獲取的一待簽名文件進行簽名,同時通過所述命名管道獲取簽名過程中生成的簽名信息;
具體的,可以包括以下子步驟:
S41:獲取所創(chuàng)建的命名管道的讀取數(shù)據(jù)句柄和寫入數(shù)據(jù)句柄;
S42:對所述一待簽名文件進行簽名,通過所述寫入數(shù)據(jù)句柄獲取簽名過程中生成的簽名信息,通過所述讀取數(shù)據(jù)句柄讀取所述簽名信息。
所述S42還可以具體包括:
42.1、通過CreateProcess函數(shù)(創(chuàng)建進程函數(shù))啟動Signtool命令行工具;所述Signtool命令行工具為簽名工具,用于對文件進行數(shù)字簽名,以及驗證文件和時間戳文件中的簽名;
42.2、將寫入數(shù)據(jù)句柄、待簽名文件、簽名證書以及簽名密碼作為Signtool工具的啟動參數(shù)傳入。所述簽名證書以及簽名密碼為預(yù)先設(shè)置的參數(shù);在此,所述簽名證書指的是簽名證書的路徑;
42.3、使用ReadFile函數(shù)(讀取函數(shù)),打開讀取數(shù)據(jù)句柄,循環(huán)讀取Signtool工具在執(zhí)行簽名流程中返回的數(shù)據(jù),即所述寫入數(shù)據(jù)句柄所獲取的簽名信息。
S5:依據(jù)所述簽名信息判斷所述一簽名文件是否成功簽名;若是,標(biāo)記所述一簽名文件或?qū)⑺鲆缓灻募瞥龃灻募斜?,同時獲取下一待簽名文件。
具體的,解析讀取數(shù)據(jù)句柄讀取的返回數(shù)據(jù),根據(jù)解析后的信息判斷文件是否簽名成功,并在UI界面上顯示對應(yīng)的提示信息。
若簽名成功,標(biāo)記簽名成功的待簽名文件,或者將簽名成功的待簽名文件移出待簽名文件列表,避免再次對其進行簽名操作;
同時,獲取下一待簽名文件;若已簽名文件采用標(biāo)記方式,則依據(jù)標(biāo)記獲取下一個未簽名的待簽名文件,所述未簽名的待簽名文件可以是沒有進行標(biāo)記的文件,或者是標(biāo)記還未進行簽名的文件;然后返回S42;直至待簽名文件內(nèi)所有待簽名文件均已簽名標(biāo)記。
若已簽名文件采用移出方式,則判斷所述待簽名文件列表是否為空,若否,則獲取下一待簽名文件;然后返回S42;直至所述待簽名文件列表為空。
實施例二
請參照圖3、圖4和圖5,本實施例為實施例一基礎(chǔ)上的進一步延伸,相同之處不在復(fù)述,區(qū)別在于:
所述S2具體包括以下子步驟:
S01:依據(jù)字符串判斷所獲取的數(shù)據(jù)是文件還是文件夾;若為文件夾,則執(zhí)行S02;若為文件,則執(zhí)行S03;
S02:遍歷文件夾中所有文件,依據(jù)文件的頭兩個字節(jié),獲取PE格式的文件,并將其添加至待簽名文件夾;然后執(zhí)行S03;
S03:依據(jù)配置文件判斷所獲取的PE格式的文件是否已簽名;若否,將所述文件作為待簽名文件添加至待簽名文件列表;所述待簽名文件列表為鏈表形式。
所述S42中的2之后,還包括:
2.1:依據(jù)設(shè)置判斷是否需要在簽名過程中對所述待簽名文件打上時間戳;
若是,則在對所述一待簽名文件開始簽名時,通過命名管道將時間戳地址發(fā)送至簽名工具。通過時間戳地址可以獲取已簽名文件的簽名時間。
另外,所述待簽名文件列表為鏈表形式。優(yōu)選為單向鏈表,其特點是鏈表的鏈接方向是單向的,對鏈表中待簽名文件的訪問要通過順序讀取從頭部開始;鏈表是使用指針進行構(gòu)造的列表;又稱為結(jié)點列表,因為鏈表是由一個個結(jié)點組裝起來的;其中每個結(jié)點都有指針成員變量指向列表中的下一個結(jié)點;列表是由結(jié)點構(gòu)成,head指針指向第一個成為表頭結(jié)點,而終止于最后一個指向nuLL的指針。鏈表形式的待簽名文件列表能夠保證依序?qū)α斜碇械奈募M行簽名,不但不會重復(fù)簽名,而且還不會遺漏簽名。
優(yōu)選的,如圖5所示,通過命名管道獲取的簽名信息將顯示在可視化UI界面上,以便用戶實時掌握各個簽名文件的簽名結(jié)果。
如圖4所示,本實施例的所有操作都可以通過用戶在界面上的編輯操作來觸發(fā),如通過拖拽需要簽名的文件至待簽名文件列表;一鍵選擇簽名整個文件夾;勾選是否需要打入時間戳;整個簽名流程自動執(zhí)行,并有詳細信息反饋,包括能通過界面顯示各個待簽名文件的簽名狀態(tài)。本實施例可能實現(xiàn)使用戶遠離繁瑣和復(fù)雜的DOS界面,使整個簽名過程非常簡單和人性化。
實施例三
請參閱圖7,本實施例為實施例一和實施例二的基礎(chǔ)上提供的自動簽名的系統(tǒng),包括:
創(chuàng)建模塊1,用于創(chuàng)建命名管道;
添加模塊2,用于將PE格式的待簽名文件添加至待簽名文件列表;
第一獲取模塊3,用于依序從所述待簽名文件列表中獲取一待簽名文件;
簽名模塊4,用于對所述一待簽名文件進行簽名,同時通過所述命名管道獲取簽名過程中生成的簽名信息;
判斷模塊5,用于依據(jù)所述簽名信息判斷所述一簽名文件是否成功簽名;
第二獲取模塊6,用于標(biāo)記所述一簽名文件或?qū)⑺鲆缓灻募瞥龃灻募斜恚瑫r獲取下一待簽名文件。
所述簽名模塊4包括:
獲取單元41,用于獲取所述命名管道的讀取數(shù)據(jù)句柄和寫入數(shù)據(jù)句柄;
簽名單元42,用于將所述寫入數(shù)據(jù)句柄、預(yù)設(shè)的證書路徑以及簽名密碼作為簽名工具的啟動參數(shù),對所述一待簽名文件進行簽名;
讀取單元43,用于使用所述讀取數(shù)據(jù)句柄循環(huán)讀取所述簽名工具簽名過程中通過所述寫入數(shù)據(jù)句柄獲取的簽名信息。
所述添加模塊2包括:
判斷單元21,用于依據(jù)字符串判斷所獲取的是文件還是文件夾;若為文件夾,則執(zhí)行遍歷單元22;若為文件,則執(zhí)行獲取單元23;
遍歷單元22,用于遍歷文件夾中所有文件,獲取PE格式的文件;
獲取單元23,用于依據(jù)配置文件判斷所獲取的PE格式的文件是否已簽名;若否,將所述文件作為待簽名文件添加至待簽名文件列表;所述待簽名文件列表為鏈表形式。
優(yōu)選的,所述簽名模塊4進一步的還可以包括:
確定單元44,用于依據(jù)設(shè)置判斷是否需要在簽名過程中對所述待簽名文件打上時間戳;
發(fā)送單元45,用于若所述確定單元的判斷結(jié)果為是,則在對所述一待簽名文件開始簽名時,通過命名管道將時間戳地址發(fā)送至簽名工具,通過簽名工具給所述一待簽名文件打上簽名時間戳;
優(yōu)選的,所述第二獲取模塊6還可以包括:
標(biāo)記判斷單元61,用于若為標(biāo)記所述一簽名文件,則判斷所述待簽名文件列表中是否有未標(biāo)記的待簽名文件;若有,則獲取所述未標(biāo)記的待簽名文件;
列表判斷單元62,用于若為將所述一簽名文件移出待簽名文件列表,則判斷所述待簽名文件列表是否為空,若否,則獲取下一待簽名文件。
綜上所述,本發(fā)明提供的自動簽名的方法及其系統(tǒng);不僅支持單個文件的簽名;還支持一鍵自動化對整個文件夾里面的文件進行簽名,節(jié)省簽名時間,提高簽名效率;進一步的,還能保證簽名的準確性,杜絕個別文件夾遺漏簽名或者重復(fù)簽名的現(xiàn)象發(fā)生;再進一步的,整個簽名流程自動執(zhí)行,并有詳細信息反饋,再次提高簽名準確性;最后,還支持可視化UI界面操作,使操作更加便捷和人性化。
以上所述僅為本發(fā)明的實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等同變換,或直接或間接運用在相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。