2013-06-17 18 views
5

Abbiamo un'applicazione nativa di terze parti (scritta in C, credo) che vogliamo eseguire più istanze di una macchina.Come creare una 'sandbox' con un registro virtualizzato per un'applicazione?

tuttavia l'applicazione legge e scrive da una particolare chiave di registro per trovare il percorso di un file di configurazione. Legge questa posizione continuamente durante la sua corsa. La chiave di registro è in HKLM. questo significa che se proviamo a eseguire 2 diverse istanze dell'app con 2 diverse posizioni per il file di configurazione, i processi calpestano le dita degli altri.

E 'possibile "virtualizzare" il registro (o eseguire ogni processo in una sandbox) che i processi stanno utilizzando in modo che possano pensare di scrivere in una singola posizione, ma in realtà stanno scrivendo e leggendo da qualche parte diversi e non si calpesteranno l'un l'altro?

risposta

5

Ci sono diverse opzioni per virtualizzare un programma:
https://en.wikipedia.org/wiki/Portable_application_creators

creando il software di virtualizzazione propria è molto più complicata e richiederebbe un intero grossolano sulla programmazione e aggancio chiamate di libreria utilizzando l'SDK di Windows.

Tuttavia, un'opzione più semplice che non richiede l'installazione e l'esecuzione di software aggiuntivo per ogni copia del programma, suggerisco di creare più copie del programma e di esadecimale modificando ogni eseguibile.

fare quante copie della domanda di cui hai bisogno per funzionare, quindi aprire il file dell'applicazione in un editor esadecimale e cercare il nome della chiave di registro, vale a dire:
HKLM \ System \ CurrentControlSet \ Control \ Session Manager

quindi modificare l'ultimo byte per una cifra per ogni versione diversa (1 byte, 0-9) vale a dire:
HKLM \ System \ CurrentControlSet \ Control \ Session Manage1
HKLM \ System \ CurrentControlSet \ Control \ Session Manage2
HKLM \ System \ CurrentControlSet \ Control \ Session Manage3

Per oltre 10 differenze (2 byte, 00-99) utilizzano gli ultimi due byte:
HKLM \ System \ CurrentControlSet \ Control \ Session Manag01
HKLM \ System \ CurrentControlSet \ Control \ Session Manag02
HKLM \ System \ CurrentControlSet \ Control \ Session Manag03

+0

idea interessante. Ho controllato la DLL e ho trovato la chiave di registro lì, quindi quando avrò la possibilità cercherò di verificarlo. Non è una soluzione ideale (come vorremmo essere un po 'più dinamici con la nostra creazione di processi) ma questo potrebbe funzionare e potrebbe essere semplice –

+0

Ho appena provato questo e sembra funzionare. Grazie. Aspetterò altri suggerimenti, ma questo dovrebbe risolvere il problema anche se non è disponibile un'altra soluzione. Grazie! –

+0

Benvenuto, sono contento di essere stato in grado di aiutarti! –

1

Sì, è possibile virtualizzare l'applicazione, questa tecnologia si chiama Application Virtualization. Prova http://www.cameyo.com/. Cameyo è un software utilizzato per creare un'applicazione virtuale.

Un'applicazione virtuale è un singolo file EXE che contiene un'intera applicazione inclusi file, DLL e registro. Le app virtuali sono isolate dal tuo sistema e possono essere copiate & spostate da un computer a un altro senza installazione.

3

Mentre la soluzione di Joshua funzionerà per questa particolare applicazione, potrebbe non funzionare per altri (ad esempio, dove il percorso del registro è costruito in codice o quando l'applicazione è firmata).

Pertanto, suggerirei di utilizzare DLL injection e intercettare le chiamate su RegOpenKey(Ex), RegCreateKey(Ex), ecc.In questo modo, puoi armeggiare con il percorso del registro prima di passare la chiamata al vero Windows Advapi32.dll.

Alcuni grandi articoli su API di aggancio:

API Hooking and DLL Injection on Windows

API Hooking with MS Detours

1

Sì, Sandboxie possibile eseguire più istanze di un app, ciascuno in un proprio "Sandbox", che si ritiene essere l'intero universo. Ma puoi anche accedere ai dati direttamente attraverso i normali modi, se necessario.

Quindi, in altre parole, Sandboxie ti consente di vedere tutte le modifiche al registro che sono state apportate nelle operazioni della app e puoi ripristinarle se lo desideri.