Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Code Signing - Veränderungen erkennen (https://www.delphipraxis.net/151561-code-signing-veraenderungen-erkennen.html)

Ares 23. Mai 2010 09:21


Code Signing - Veränderungen erkennen
 
Hallo!

Im Moment beschäftige ich mich mit dem Thema Code Signing. Der Beitrag zur Erstellung und Nutzung eigener Zertifikate hat mir schon sehr weiter geholfen. Vor dem Kauf eines "echten" Zertifikates wollte ich die Technik mit einem eigenen Zertifikat ausprobieren.

Das Erstellen eines Zertifikates und die Dateisignierung funktioniert auch prima. Ich bin allerdings davon ausgegangen, dass sich mit dem Zertifikat auch Veränderungen im Programm erkennen lassen.

Ich habe also ein kleines Hallo-Welt-Programm geschrieben, die EXE signiert und anschließend mit einem HEX-Editor ein Byte verändert. Trotz dieser Änderung zeigt mir
Code:
signtool.exe verify /pa /v HalloWelt_verändert.exe
an:
"Successfully verified: HalloWelt_verändert.exe

Wie kann das sein? Anhand des Hashes müsste doch eigentlich die Änderung der Datei erkannt werden, oder nicht?

Habe ich das Prinzip des Code Signings falsch verstanden und Änderungen werden gar nicht erkannt? Wenn eine Signierte Datei dennoch beliebig manipuliert werden kann, wäre das ganze Signing doch ziemlich sinnlos oder nicht?

Was mache ich falsch bzw. was habe ich falsch verstanden?

Besten Dank
Ares

BUG 23. Mai 2010 11:04

Re: Code Signing - Veränderungen erkennen
 
[geraten]
Ich könnte mir vorstellen, das nicht die ganze PE-Datei signiert wird, sondern nur die relevanten Teile (Daten- und Codesegmente, Ressourcen, usw.).
Probiere es mal an einer Stelle, die garantiert zum Programm gehört, zB. einem String, der von dir definiert wurde.

Ares 24. Mai 2010 07:43

Re: Code Signing - Veränderungen erkennen
 
Hallo BUG, du hast gut geraten :-)

Zuvor hatte ich einfach das letzte Byte der Datei gekippt, dass scheinbar nicht von der Signatur erfasst wird. Ändert man andere Stellen liefert SignTool.exe "Die digitale Signatur des Objektes konnte nicht bestätigt werden."

Gibt es nun eine Methode mit der eine signierte EXE ihre eigene Signatur überprüfen kann? Kann also ein Programm selber feststellen ob es verändert wurde?

himitsu 24. Mai 2010 08:00

Re: Code Signing - Veränderungen erkennen
 
Zitat:

Zitat von Ares
Hallo BUG, du hast gut geraten :-)

Zuvor hatte ich einfach das letzte Byte der Datei gekippt, dass scheinbar nicht von der Signatur erfasst wird. Ändert man andere Stellen liefert SignTool.exe "Die digitale Signatur des Objektes konnte nicht bestätigt werden."

Gibt es nun eine Methode mit der eine signierte EXE ihre eigene Signatur überprüfen kann? Kann also ein Programm selber feststellen ob es verändert wurde?

Ich weiß jetzt nicht, ob SignTool nur irgendeine API aufruft, welche die Signatur prüft
und die man dann auch selber aufrufen kann,

aber notfalls könnte man die signtool.exe mit ausliefen und diese via ShellExecute/CreateProcess aufrufen.

PS: Wenn du diese Signierung nur zur Erkennung auf Veränderungen benutzen willst und dir kein 1000%iger Schutz auf absichtliche Änderungen von Nöten ist, dann ginge auch noch sowas.
http://www.delphipraxis.net/internal...=811141#811141
Dieses legt einen Hash über die gesamte EXE innerhalb sich selber ab und prüft diese bei Programmstart.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz