我正在尋找可以幫助我在使用C++的非Windows平臺上驗證Windows PE文件(.exe,.dll,.cab,.etc)的數字簽名的示例代碼(或庫)。我正在尋找一種獨立於平臺的方法。如何在便攜式代碼中驗證Microsoft的可移植可執行文件格式的數字簽名?
謝謝!
我正在尋找可以幫助我在使用C++的非Windows平臺上驗證Windows PE文件(.exe,.dll,.cab,.etc)的數字簽名的示例代碼(或庫)。我正在尋找一種獨立於平臺的方法。如何在便攜式代碼中驗證Microsoft的可移植可執行文件格式的數字簽名?
謝謝!
對此沒有普遍的答案,特別是因爲您尚未指定您想要移植多遠。使用開放源代碼庫的x86上的Linux將變得更容易,在MIPS32或Arduino上運行的uCos幾乎是不可能的。
首先,您顯然必須能夠讀取和解析PE格式本身,特別是您必須能夠在得到各個部分的內容和哈希他們一樣的.text,等等。數據對於深入瞭解其是如何放在一起,看看這裏:
http://msdn.microsoft.com/en-us/magazine/cc301805.aspx http://msdn.microsoft.com/en-us/magazine/ms809762.aspx
現在,你想這是便攜式,所以你可以推出自己的PE閱讀器/有限的作家,或者瀏覽一些已經做到這一點的開源項目。試試ReactOS或Mono。 或者如果你很高興運行python,試試這個http://code.google.com/p/pefile/
其次,當你在處理密碼學,數字簽名和X.驗證等。如果您對GPL感到滿意,請嘗試使用OpenSSL或CyaSSL或Botan,如果您需要BSD許可證。
驗證碼簽名的精確格式,簽名過程和驗證過程在這裏desribed: http://www.microsoft.com/whdc/winlogo/drvsign/Authenticode_PE.mspx(Authenticode_PE.docx)
這將需要相當多的代碼來拉都在一起。
OpenSSL不是一個完整的加密庫 - 僅限於SSL。另一方面,[CryptoPP](http://cryptopp.com/)是一個完整的加密庫 - 他們確實有[關於X.509證書的章節](http://www.cryptopp.com/ wiki/X.509),如果這實際上是PE使用的格式。 (關於CryptoPP的好處是,它也是公有領域:) –
比利:上一次我檢查了OpenSSL [加密](http://www.openssl.org/docs/crypto/crypto.html)和[X509證書處理] (http://www.openssl.org/docs/crypto/x509.html#)就好了。 – sehe
@sehe:嗯..它比我想象的要多。 (也就是說,它仍然比Crpyto ++中的少得多,Crypto ++有更好的許可證) –
您可以在WINE的WinVerifyTrustimplementation中查看完整的程序化方法。
而且,實際上,這是一個很好的鏈接How to verify executable digital signatures under Linux?,它抱怨WINE的實現(這是早在2008年),因此,如果您有類似於OpenSSL中可用的你的平臺。
微軟Authenticode肯定不是一個大噓祕密,你可以download technical specs and more關於Authenticode如何工作。您也可以下載有關Windows PE file format的技術信息。由於您沒有清楚地說明天氣,因此您想要Linux,Mac或智能手機,我無法爲您提供適當的解決方案。但是,根據我上面提供的信息以及OpenSSL,您應該能夠創建自己的程序,以便在您選擇的語言和操作系統中執行此操作。
這個問題相當古老,但我爲那些仍然面臨同樣問題的人提出了我的答案。
您可以使用osslsigncode tool在Linux或其他* nix系統上驗證MS Authenticode簽名。然而,該工具只是驗證簽名本身,並不檢查證書撤銷,時間戳有效性等,儘管您可以從簽名中提取數據並手動執行。
+1稍微修改標題以表示數字簽名而不是文件簽名。 (例如。MZ,「PE \ 0 \ 0」等) –