私のアプリケーションでは、署名されているかどうかを確認する必要があります。署名されている場合は実行を継続し、そうでない場合はアプリケーションを終了します。 signtoolを使用してアプリケーションに署名します。 これを行うためのC#コードはありますか?ここで実行ファイルが署名されているかどうかを確認する(signtoolがそのexeに署名するために使用される)
答えて
はそれをしないのユーティリティメソッドです:
var signed = IsSigned(@"c:\windows\explorer.exe");
...
public static bool IsSigned(string filePath)
{
if (filePath == null)
throw new ArgumentNullException(nameof(filePath));
var file = new WINTRUST_FILE_INFO();
file.cbStruct = Marshal.SizeOf(typeof(WINTRUST_FILE_INFO));
file.pcwszFilePath = filePath;
var data = new WINTRUST_DATA();
data.cbStruct = Marshal.SizeOf(typeof(WINTRUST_DATA));
data.dwUIChoice = WTD_UI_NONE;
data.dwUnionChoice = WTD_CHOICE_FILE;
data.fdwRevocationChecks = WTD_REVOKE_NONE;
data.pFile = Marshal.AllocHGlobal(file.cbStruct);
Marshal.StructureToPtr(file, data.pFile, false);
int hr;
try
{
hr = WinVerifyTrust(INVALID_HANDLE_VALUE, WINTRUST_ACTION_GENERIC_VERIFY_V2, ref data);
}
finally
{
Marshal.FreeHGlobal(data.pFile);
}
return hr == 0;
}
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
private struct WINTRUST_FILE_INFO
{
public int cbStruct;
public string pcwszFilePath;
public IntPtr hFile;
public IntPtr pgKnownSubject;
}
[StructLayoutAttribute(LayoutKind.Sequential)]
private struct WINTRUST_DATA
{
public int cbStruct;
public IntPtr pPolicyCallbackData;
public IntPtr pSIPClientData;
public int dwUIChoice;
public int fdwRevocationChecks;
public int dwUnionChoice;
public IntPtr pFile;
public int dwStateAction;
public IntPtr hWVTStateData;
public IntPtr pwszURLReference;
public int dwProvFlags;
public int dwUIContext;
public IntPtr pSignatureSettings;
}
private const int WTD_UI_NONE = 2;
private const int WTD_REVOKE_NONE = 0;
private const int WTD_CHOICE_FILE = 1;
private static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
private static readonly Guid WINTRUST_ACTION_GENERIC_VERIFY_V2 = new Guid("{00AAC56B-CD44-11d0-8CC2-00C04FC295EE}");
[DllImport("wintrust.dll")]
private static extern int WinVerifyTrust(IntPtr hwnd, [MarshalAs(UnmanagedType.LPStruct)] Guid pgActionID, ref WINTRUST_DATA pWVTData);
それは解決策として非常に複雑です、私はちょうど真偽が必要です:exeは署名され、exeは署名されていません –
私はあなたが多くの選択肢があるとは思わない。 Authenticodeチェックはそれほど簡単ではありません。コードをコピーして最後の関数を呼び出してください:internal static uint WinVerifyTrust(string fileName)。返された0は署名されていることを意味します。 –
@AnasehがSimonの指摘しているように、署名の検証は単なる真偽以外にもあります。署名の有無、有効性、署名を作成するために使用された証明書の有効性、タイムスタンプの有効性、タイムスタンプの署名に使用される証明書を決定する必要があります。 –
private bool IsAssemblySigned()
{
var assembly = Assembly.GetAssembly(GetType());
var assemblyName = assembly.GetName();
var key = assemblyName.GetPublicKey();
return key.Length > 0;
}
私にそれを打つ、私はAssemblyName.GetPublicKey()を提案しようとしていたhttp://msdn.microsoft.com/en-us/library/system.reflection.assemblyname.getpublickey%28VS.80% 29.aspx – pstrjds
ありがとうございますが、アセンブリ署名を使用していないため、このソリューションは機能しません。アプリケーションに署名するためにsigntoolを使用しています。 –
はい、signtoolはAuthenticode署名を作成します。強い名前の鍵の署名。下の私の答えを見てください。 –
私はあなたが 'CryptUIWizDigitalSign' APIを使用することをお勧め。 This linkを参照として使用できます。
Try
Dim objCertificate As New Security.Cryptography.X509Certificates.X509Certificate2(Security.Cryptography.X509Certificates.X509Certificate.CreateFromSignedFile(strFile))
Return True
Catch ex As Exception
Return False
End Try
- 1. 署名されたXMLファイルの署名を確認する方法
- 2. 署名されたJARを確認するためのJavaユーティリティ
- 3. itextsharpを使用して署名フィールドに署名しているかどうかを確認します
- 4. 署名されていないアセンブリに署名する
- 5. S3事前署名されたURL - URLが使用されたかどうかを確認しますか?
- 6. 実行可能ファイルに署名するために使用されるIDが無効になった
- 7. マニフェストファイルが署名されているかどうか
- 8. ナゲットパッケージで署名されていないアセンブリに署名する方法は?
- 9. 自己署名証明書で署名されたバイナリを確認するにはどうすればよいですか?
- 10. 署名されていない署名からMySQLまたはPHPで署名された32ビット整数をキャストする方法はありますか?
- 11. すでに署名されたドキュメントにGPG署名を追加しますか?
- 12. 自動生成されたレポートに署名して確認する
- 13. Cの整数変数が署名されているかどうかを確認するにはどうすればよいですか?
- 14. Eclipseの署名されていないプラグインの確認
- 15. 証明書が自己署名されているかどうかを確認するにはどうすればよいですか?
- 16. ファイルの署名と署名データベースを比較するにはどうすればよいですか?
- 17. 署名された.apkファイルと署名されていない.apkファイルのAndroidの違いは?
- 18. iOSアプリケーションの署名を確認する
- 19. 実行時にAndroidアプリケーションがプロダクション用に署名されているのかデバッグされているのかを判断する方法はありますか?
- 20. 署名されたmsiインストーラをインストールすると「プログラム名」が奇妙になる
- 21. ファイルに署名して確認する方法は?
- 22. Internet Explorerでダウンロードしたときにデジタル署名された実行可能ファイルがブロックされる
- 23. カーネルからファイルのデジタル署名を確認する
- 24. PEMファイルからパブリックキーをロードする署名の確認方法
- 25. 署名を確認するFacebook Connect
- 26. Androidでデジタル署名を確認する
- 27. デジタル署名された実行可能ファイルが、証明書の詳細を表示するまで署名なしとして扱われる理由
- 28. OpenSSLを使用してC++で署名を確認する
- 29. ブラウザで使用するためにJavaアプレットに署名するにはどうすればよいですか?
- 30. フルスクリーンアプリケーションが実行されているかどうかを確認するには?
あなたはアプリに署名するために何を使用していますか? – Lazarus
実際、私はsigntoolを使用しています。 –