2010-09-15 19 views
6

jestem podpisanie dot net exe, korzystającJak odczytać klucz publiczny z podpisem C# exe

signcode.exe with an spc/pvk combo 

Plik musi przeczytać swój własny klucz publiczny w czasie wykonywania w celu zweryfikowania niektórych danych. Przeszedłem wiele różnych dróg.

Próbowałem

X509Certificate executingCert = X509Certificate.CreateFromSignedFile(exe); 

executingCert jest wtedy zerowa. Domyślam się, że signcode nie tworzy pliku z podpisem X509, ale jeśli istnieje przełącznik, który można zmienić, cieszę się, że tak się dzieje.

edytowany Okazuje się, że powyżej działa .... miałem zerową kontrolę tyłu (= = ==!) :)

Assembly asm = Assembly.GetExecutingAssembly(); 
string exe = asm.Location; 
X509Certificate executingCert = X509Certificate.CreateFromSignedFile(exe); 

if (executingCert != null) 
{ 
    Console.WriteLine("Assembly is signed"); 
    byte[] assemblyKey = executingCert.GetPublicKey(); 
} 

Odpowiedz

3

Kod znaku (dla .Net 1.0 i 1.1) korzysta z podpisywania Authenticode, o ile mi wiadomo, brakuje interfejsu zarządzanego .Net Framework. Prawdopodobnie będziesz musiał użyć P/Invoke do wywoływania procedur w API Win32, takich jak te znajdujące się w tym KB article: How To Get Information from Authenticode Signed Executables. Prawdopodobnie będziesz musiał użyć CryptQueryObject, który dostarczy Ci certyfikat , który prawdopodobnie będziesz musiał znaleźć inną procedurę, aby pobrać klucz publiczny.

Sprawdź to związane StackOverflow pytanie, które ma wiele odpowiedzi: WinVerifyTrust to check for a specific signature?

+0

Dzięki, wygląda na to, że powinno zadziałać, jeśli mogę usunąć wszystkie p/wywołując – Fiacc

+0

To ma C# odpowiedź http://stackoverflow.com/a/28835034/82410 – Rohit

0

Spróbuj czegoś takiego:

Assembly.GetEntryAssembly().GetName().GetPublicKey() 

W tym przypadku użyłem GetEntryAssembly, ale oczywiście można wywołać metodę na dowolnym załadowanym zespole.

+2

To jest odczytanie klucza publicznego silnej nazwy nie mają podpisu cyfrowego opartego na certyfikatach! –