2016-05-20 7 views
0

Lassen Sie mich mein Dilemma erklären. Ich habe meine Hauptsoftware, die eine Option hat, ein kleineres Modul der Software zu installieren, indem ein Benutzer sein MSI-Installationsprogramm speichern und später auf einem Remotecomputer ausführen kann.Welchen Teil einer signierten ausführbaren/MSI-Datei kann ich ändern, um die digitale Signatur nicht zu beeinflussen?

Dieses MSI-Installationsprogramm wurde ursprünglich von meinem Code-Signing-Zertifikat digital signiert.

Das Problem, das ich habe, ist, wie einige minimale Daten in diesem MSI übergeben werden, die dynamisch von der Hauptanwendung generiert werden können? So etwas wie der Registrierungsname und einige minimale softwarebezogene Parameter, die ein Benutzer über die Benutzeroberfläche ausgewählt hat.

Zuerst dachte ich, die MSI Inhalte dynamisch von der App zu ändern, aber das würde die digitale Signatur brechen. (Ich kann es natürlich nicht neu signieren, da ich meinen privaten Schlüssel für das digitale Zertifikat in dieser App nicht offen legen möchte.)

Also an dieser Stelle bin ich neugierig, ob es irgendeinen Teil davon gibt MSI-Datei, die nicht von der digitalen Signatur betroffen sind? Ich weiß, dass der Dateiname nicht betroffen ist, aber das gibt mir nicht viel Spielraum, um meine Daten hinzuzufügen.

Antwort

1

Ich bin davon überzeugt, dass Sie eine signierte Datei nicht umgehen können, weil das ein großes Sicherheitsproblem wäre. Welches Tool verwenden Sie, um Ihr MSI zu erstellen? Das betrifft auch das.

Es gibt ein paar Möglichkeiten, die funktionieren sollten, wenn dies zur Installationszeit möglich ist. Es ist jedoch nicht klar, was genau die Daten sind und wo Sie sie in der MSI-Datei haben.

  1. Eine benutzerdefinierte Aktion kann Daten sammeln und vorhandene Tabellen (zum Beispiel Registry) bevölkert Zeit installieren, das Ergebnis ist, dass die In-Memory-MSI-Datenbank der Änderungen machen Sie benötigen, wenn sie das Produkt installiert.

  2. Normalerweise würden Sie eine Transformationsdatei (eine .mst-Datei) erstellen und das MSI mit der TRANSFORMS = [mst-Datei] installieren, aber es ist möglich, dass die mst-Datei mit einer signierten MSI signiert werden muss, aber Da bin ich mir nicht sicher. Das ist ein einfacher Test - benutze Orca, um eine mst-Datei zu generieren, die etwas in der Property-Tabelle ändert, installiere dann die MSI mit TRANSFORMS = ..... und schaue, ob die unsignierte Transformation nicht erlaubt ist.

+0

Ich benutze WiX ... – c00000fd

0

Sie können nicht ein einziges Byte innerhalb MSI ohne die digitale Signatur zu brechen, ändern, denn das ist genau der Zweck der Signatur - um sicherzustellen, dass der Inhalt nicht verändert wird. Beachten Sie, dass es nicht spezifisch für MSI ist, sondern für jede signierte Datei.

Als Idee, wenn Sie nicht wollen, dass Sie privaten Schlüssel an die Kunden "geben", können Sie möglicherweise die MSI auf dem Server erstellen (und halten Sie den Schlüssel privaten Schlüssel auf dem Server) vielleicht?

+0

Nun, das macht es auch. Wenn ich diese serverseitige Signierung zur Verfügung stelle, kann sich jemand einfach mit ihr verbinden und ihre Datei signieren. Ein bisschen wie ein privater Schlüssel. – c00000fd

+0

Sie könnten Authentifizierung verwenden. Bedeutet, Benutzer muss identifiziert werden, bevor Sie den Dienst verwenden. – Nikolay

+0

Nein. Das ist zu kompliziert. Benutzer müssen sich auf dem Server registrieren und sich dann anmelden, um diese kleine Funktion zu installieren. – c00000fd