這幾天想測試一下使用dpinst安裝驅動,由於驅動程式沒有簽名因此安裝失敗,藉此研究一下如何為sys/cat檔案生成測試簽名。本文參考了看雪論壇上的一篇文章:win x64平台驅動測試數字簽名,並對其中一些錯誤(可能是作者前後兩次實驗導致的偏差)做了修改。
驅動在開發/測試階段時是沒有數字簽名的,所以一般都會開機後進入f8,選擇禁止數字簽名強制,但是這個辦法的麻煩之處就是每次開機都要這樣操作,要是虛擬機器的話,一不小心錯過了會很麻煩。msdn上對這個有個解決方案就是使用測試簽名。假設編譯好的驅動的位置是: e:\winddk\my_test\objchk_win7_amd64\amd64
1. 製作乙個測試使用的數字證書:
使用管理員許可權開啟命令列(可以用ddk提供的checked/free build environment)進入驅動的路徑,然後輸入以下命令:
makecert -r -pe -ss privatecertstore -n cn=contoso.com(test) my_test.cer
(注:privatecertstore和contoso.com(test)可以隨意命名),這個時候在目錄下會生成乙個my_test.cer的測試證書;如果不使用管理員許可權可能會失敗;如果使用cmd可能會失敗;
2. 修改inf檔案並生成目錄檔案:
修改inf檔案[version]節,在這個節點的最後增加乙個
catalogfile.ntamd64 = my_test_amd64.cat
需要注意的是這個catalogfile只有catalogfile.ntamd64 catalogfile.nt catalogfile三個情況;然後將inf檔案也放到驅動sys檔案的路徑下
在checked/free build environment輸入下面的命令:
inf2cat.exe /driver:e:\winddk\my_test\objchk_win7_amd64\amd64\ /os:7_x64
如果想對其他系統平台生成cat檔案,可以參考這篇文章:inf2cat應用的引數使用詳細介紹(inf2cat生成cat檔案)
3. 對cat檔案簽名:
使用以管理員許可權開啟wdk帶的命令列,定位到驅動程式路徑下,輸入下面的命令:
signtool sign /a /v /s privatecertstore /n contoso.com(test) /t my_test_amd64.cat
這裡需要聯網,不聯網會有乙個警告,因為它需要去生成時間戳;另外,執行signtool時的/s和/n引數後面跟的字串要分別對應執行makecert時的-ss -n引數的內容(原作者這塊內容可能筆誤寫錯了,導致簽名失敗)
4. 註冊測試數字證書:
定位到驅動檔案路徑下,輸入以下命令:
certmgr.exe /add my_test.cer /s /r localmachine root
5. 對驅動檔案簽名:
定位到驅動檔案路徑下,輸入以下命令:
signtool sign /a /v /s privatecertstore /n contoso.com(test) /t ***x.sys
這裡同樣需要聯網,不聯網會有乙個警告,因為它需要去生成時間戳;
6. 安裝測試簽名:
在目標機上,將***.sys ***.inf my_test.cer my_test_amd64.cat,以及certmgr.exe放在乙個路徑下,然後以管理員許可權開啟cmd命令列定位到這個目錄,
輸入以下命令來註冊證書以及開啟測試模式:
(這兩步很重要,筆者嘗試過在沒有註冊證書的目標機上用dpinst來安裝簽過名的sys和cat,結果就是沒有成功安裝驅動包)
certmgr.exe /add my_test.cer /s /r localmachine root
certmgr.exe /add my_test.cer /s /r localmachine trustedpublisher
cd c:\windows\system32\
bcdedit.exe /set testsigning on
測試模式開啟一次後,即使重啟電腦也不用再次設定,除非顯式的關閉它;窗體右下角會提示目前是在測試模式,關閉的命令是bcdedit.exe /set testsigning off
需要注意的事項:
1. 如果目標機上沒有certmgr.exe,那麼可以從主機上直接拷貝乙個64位的certmgr.exe過去的;
2. 如果重新生成了sys檔案而沒有修改inf檔案的話,那麼只需要在生成sys檔案後再次執行對驅動檔案的重新簽名即可;測試證書和目錄檔案都不需要重新生成;
驅動檔案生成測試簽名
驅動在開發 測試階段時是沒有數字簽名的,所以一般都會開機後進入f8,選擇禁止數字簽名強制,但是這個辦法的麻煩之處就是每次開機都要這樣操作,要是虛擬機器的話,一不小心錯過了會很麻煩。msdn上對這個有個解決方案就是使用測試簽名。對驅動檔案簽名 定位到驅動檔案路徑下,輸入以下命令 signtool si...
jarsigner為apk檔案簽名
jarsigner verbose keystore feelyou.keystore storepass feelyou.info signedjar signed.apk digestalg sha1 sigalg md5withrsa unsigned.apk feelyou 解釋 1 key...
使用jks檔案為apk簽名
參與的專案近期要求安全檢測,apk不達標並且無法修復的話會要求使用官方加固包。加固之後的包簽名會失效,所有需要重新進行簽名。今天藉此機會記錄一下整個操作流程。原來apk是使用jks格式的簽名檔案來操作的,還有一種是keystore檔案格式。我們先來看jks檔案格式怎麼操作 一 jks格式操作步驟 1...