Puis-je supprimer une signature numérique à partir d'une DLL?
Mon installateur construire des "signes" une DLL à l'aide d'un certificat de Signature de Code pendant le processus de génération.
J'ai remarqué que si j'essaie de construire deux fois de suite, la deuxième génération échoue parce que la DLL est déjà signée signcode étouffe. Évidemment, je peux résoudre ce problème par la signature d'une copie de la DLL dans le build, mais le problème qui m'a intrigué:
Est-il possible de "unsign" une DLL, et si non, pourquoi pas?...
Vous devez vous connecter pour publier un commentaire.
Sûr que c'est possible, mais pas triviale.
Bien qu'il serait plus facile d'enregistrer une copie de la presigned DLL.
Cette signature numérique n'est guère plus qu'une section supplémentaire ajouté à la fin d'un fichier PE. Vous pourriez écrire un programme qui a supprimé la signature, si vous le souhaitez.
Ce n'est pas tout à fait aussi simple que le fait de tronquer le fichier; vous devez supprimer les références à la signature dans le fichier d'en-tête. Il pourrait se compliquer si la DLL a plusieurs signatures et vous voulez juste pour en enlever une.
Le format d'un fichier PE est publiquement documentés ici
Vous pouvez utiliser delcert.exe à partir de ce Post sur le Forum XDA.
ImageRemoveCertificate
API, et fonctionne très bien.signtool est disponible dans le SDK de Windows, et doit être au moins à partir de Windows 8 SDK (kit de version 6.2.9200.20789) pour avoir l'
remove
de commande pris en charge.remove
de commande. Vérifiez vous-même. Il n'est pas répertorié sur le lien que vous avez fourni. Donc je me demande, ce que signtool.exe de version que vous utilisez quand vous avez écrit cette réponse? J'ai vérifié avec la version du produit 6.1.7600.16385.C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>signtool /? Usage: signtool <command> [options] Valid commands: sign -- Sign files using an embedded signature. timestamp -- Timestamp previously-signed files. verify -- Verify embedded or catalog signatures. catdb -- Modify a catalog database. remove -- Remove embedded signature(s) or reduce the size of an embedded signed file. For help on a specific command, enter "signtool <command> /?"
remove
de commande ainsi que les versions supérieures. Afin d'avoir accès, vous devez télécharger au moins windwos 8 version du SDK. Malheureusement je n'ai pas pu trouver la page de documentation MSDNremove
de commande.Il est assez facile de supprimer la signature d'une .fichier dll à l'aide de la ImageRemoveCertificate API.
Vous n'avez pas de langue spécifiée dans vos balises, mais cet article montre comment implémenter en C#. Supprimer la signature numérique d'un fichier à l'aide de C#
Autre que cela, si vous êtes à la recherche d'un outil simple pour faire le travail pour vous, vous pouvez utiliser FileUnsigner.
Une autre option possible est de passer à la SignTool.exe. Il est livré avec la Windows SDK et la signature d'un binaire qui a déjà été signé ne génère pas d'erreur. J'utilise signtool.exe dans mon processus de construction et n'ont pas de difficultés avec elle, même quand quelque chose est déjà signé.
Vérifiez aussi la question Quelle est la principale différence entre signcode.exe et signtool.exe?
Vérifier si votre outil de construction prend en charge "de la Re-signature". Cela devrait remplacer toutes les signatures existantes.
Si non, vous pouvez utiliser Stud_PE pour retirer le bloc de signature.
Ouvrir le fichier DLL ou EXE dans Stud_PE, allez à l'onglet sections, cliquez-droit sur la signature numérique et sélectionnez l'option "Supprimer l'article". Toutefois, cela doit interaction de l'utilisateur. Les anciennes versions de l'outil pourrait détruire le fichier.