Come posso convalidare le firme digitali per il formato Portable Executable di Microsoft nel codice portatile?

Sto cercando un codice di esempio (o librerie) che possa aiutarmi a convalidare le firme digitali per i file di Windows PE (.exe, .dll, .cab, .etc) su piattaforms non Windows che usano C ++. Sto cercando un approccio indipendente dalla piattaforma.

Grazie!

È ansible controllare l’ implementazione WinVerifyTrust di WINE per un metodo programmatico completo.

E, in realtà, ecco un buon link Come verificare le firme digitali eseguibili sotto Linux? che si lamenta dell’implementazione di WINE (che risale al 2008) e, quindi, spiega il processo in modo abbastanza “portatile”, a patto che tu abbia qualcosa di simile a OpenSSL disponibile nella tua piattaforma.

Non c’è una risposta generale a questo, soprattutto perché non hai specificato su quanto lontano vuoi portarlo. Linux su x86 con librerie open source sarà più facile, uCos su MIPS32 o Arduino sarà quasi imansible.

Per prima cosa, ovviamente, devi essere in grado di leggere e analizzare il formato PE stesso, in particolare devi essere in grado di ottenere i contenuti di singole sezioni e cancellarli, come .text, .data ecc. Per approfondire come è stato messo insieme, guarda qui:

http://msdn.microsoft.com/en-us/magazine/cc301805.aspx http://msdn.microsoft.com/en-us/magazine/ms809762.aspx

Ora vuoi che questo sia portatile, in modo che tu possa o rotolare il tuo lettore PE / scrittore limitato, o guardare in giro in alcuni dei progetti open source che già lo fanno. Prova ReactOS o Mono. Oppure, se sei felice di eseguire python, prova questo http://code.google.com/p/pefile/

In secondo luogo, poiché si tratta di crittografia, firme digitali e certificati X.509, è necessario disporre di una libreria crittografica portatile completa per eseguire la firma, la convalida della catena di certificati e così via. Se sei soddisfatto di GPL, prova OpenSSL o CyaSSL o Botan se vuoi la licenza BSD.

Il formato preciso delle firme Authenticode, il processo di firma e il processo di validazione è descritto qui: http://www.microsoft.com/whdc/winlogo/drvsign/Authenticode_PE.mspx (Authenticode_PE.docx)

Richiederà un bel po ‘di codice per riunire tutto.

Microsoft Authenticode non è certamente un grande segreto segreto e puoi scaricare le specifiche tecniche e altro su come funziona Authenticode. È anche ansible scaricare informazioni tecniche sul formato di file di Windows PE . Dal momento che non hai indicato chiaramente il tempo che volevi per Linux, Mac o uno smartphone, non posso fornirti una soluzione adeguata. Tuttavia, con le informazioni che ti ho fornito sopra, insieme a OpenSSL , dovresti essere in grado di creare il tuo programma per farlo nella lingua e sistema operativo di tua scelta.

La domanda è piuttosto vecchia, ma metto la mia risposta per coloro che stanno ancora affrontando lo stesso problema.

È ansible utilizzare lo strumento osslsigncode per verificare le firme MS Authenticode su Linux o altri sistemi * nix. Tuttavia lo strumento verifica solo la firma stessa e non controlla la revoca del certificato, la validità del timestamp, ecc. Sebbene sia ansible estrarre i dati dalla firma e farlo manualmente.