2013-06-17 10 views
5

Wir haben eine native Anwendung von Drittanbietern (geschrieben in C Ich glaube), die wir mehrere Instanzen von auf einem Computer ausführen möchten.Wie erstelle ich eine "Sandbox" mit einer virtualisierten Registrierung für eine Anwendung?

jedoch die Anwendung liest und schreibt von einem bestimmten Registrierungsschlüssel, um den Speicherort einer Konfigurationsdatei zu finden. Es liest diesen Ort während des Laufens kontinuierlich. Der Registrierungsschlüssel befindet sich in HKLM. Das heißt, wenn wir zwei verschiedene Instanzen der App mit 2 verschiedenen Orten für die Konfigurationsdatei ausführen, treten die Prozesse auf die Zehenspitzen.

Ist es möglich, die Registry zu "virtualisieren" (oder jeden Prozess in einer Sandbox auszuführen), die die Prozesse verwenden, so dass beide denken, sie schreiben an einen einzigen Ort, aber tatsächlich schreiben und lesen sie von irgendwoher anders und sie werden sich nicht gegenseitig auf die Zehen treten?

Antwort

5

Es gibt mehrere Möglichkeiten, ein Programm virtualisieren:
https://en.wikipedia.org/wiki/Portable_application_creators

Ihre eigene Virtualisierungssoftware zu schaffen, ist viel komplizierter und würde eine ganze grob über die Programmierung und Einhaken Bibliothek Anrufe mit dem Windows SDK erforderlich.

Eine einfachere Option, die keine zusätzliche Software für jede Kopie des Programms einrichten und ausführen muss. Ich empfehle, mehrere Kopien des Programms zu erstellen und jede ausführbare Datei hexadezimal zu bearbeiten.

Machen Sie so viele Kopien der Anwendung, wie Sie ausführen müssen, dann in einem Hex-Editor die Anwendungsdatei öffnen und für den Namen des Registrierungsschlüssels, dh suchen:
HKLM \ System \ CurrentControlSet \ Control \ Session Manager

Dann das letzte Byte für jede andere Version auf eine Ziffer ändern (1 Byte, 0-9), dh:
HKLM \ System \ CurrentControlSet \ Control \ Session Manage1
HKLM \ System \ CurrentControlSet \ Control \ Session Manage2
HKLM \ System \ CurrentControlSet \ Steuerung \ Sitzung Manage3

Seit mehr als 10 Unterschiede (2 Bytes, 00-99) verwenden, um die letzten zwei Bytes
HKLM \ System \ CurrentControlSet \ Control \ Session Manag01
HKLM \ System \ CurrentControlSet \ Control \ Session Manag02
HKLM \ System \ CurrentControlSet \ Control \ Session Manag03

+0

interessante Idee. Ich habe die DLL überprüft und den Registrierungsschlüssel dort gefunden. Wenn ich eine Chance bekomme, werde ich das testen. Keine ideale Lösung (wir würden gerne etwas dynamischer mit unserer Prozesserstellung arbeiten), aber das könnte funktionieren und könnte einfach sein. –

+0

Ich habe das gerade getestet und es scheint zu funktionieren. Vielen Dank. Ich warte auf andere Vorschläge, aber das sollte unser Problem lösen, auch wenn keine andere Lösung verfügbar ist. Vielen Dank! –

+0

Willkommen, ich bin froh, dass ich Ihnen helfen konnte! –

1

Ja, können Sie die Anwendung virtualisieren, diese Technologie Application Virtualization genannt. Versuchen Sie http://www.cameyo.com/. Cameyo ist eine Software zum Erstellen virtueller Anwendungen.

Eine virtuelle Anwendung ist eine einzelne EXE-Datei, die eine gesamte Anwendung einschließlich Dateien, DLLs und Registrierung enthält. Virtuelle Apps sind von Ihrem System isoliert und können ohne Installation von einem Computer auf einen anderen kopiert werden.

3

Während die Lösung von Joshua für diese bestimmte Anwendung funktioniert, funktioniert es möglicherweise nicht für andere (z. B. wo der Registrierungspfad in Code erstellt wird oder wenn die Anwendung signiert ist).

Daher würde ich empfehlen, DLL injection und abfangen Anrufe an RegOpenKey(Ex), RegCreateKey(Ex) usw.Auf diese Weise können Sie mit dem Registrierungspfad umgehen, bevor Sie den Aufruf an das echte Windows Advapi32.dll übergeben.

Einige große Artikel über API Haken:

API Hooking and DLL Injection on Windows

API Hooking with MS Detours

1

Ja, Sandboxie mehrere Instanzen einer Anwendung ausgeführt werden können, die jeweils in einem eigenen "Sandbox", die es glaubt, dass die gesamte zu sein Universum. Sie können jedoch bei Bedarf auch direkt auf die normalen Daten zugreifen.

Mit anderen Worten, Sandboxie lässt Sie alle Registrierungsänderungen sehen, die in den Operationen der App vorgenommen wurden, und Sie können sie zurückrollen, wenn Sie möchten.

Verwandte Themen