come posso decodificare il valore REG_BINARY HKLM \ Software \ Microsoft \ Ole \ DefaultLaunchPermission per vedere quali utenti hanno il permesso?

StackOverflow https://stackoverflow.com/questions/775365

Domanda

Sto cercando di trovare un modo per decodificare il valore REG_BINARY per " HKLM \ Software \ Microsoft \ Ole \ DefaultLaunchPermission " per vedere quali utenti hanno i permessi di default, e, se possibile, un metodo in che posso anche aggiungere altri utenti, comunicando il proprio nome utente.

Al lavoro ci avvaliamo di DCOM e per la maggior parte abbiamo sempre dare il permesso stessi utenti, ma in alcuni casi siamo costretti a soddisfare i nostri clienti e aggiungere utenti custom / gruppi per soddisfare le loro esigenze. Purtroppo gli utenti personalizzati abbiamo bisogno di aggiungere nomi utente sono casuali, quindi sono in grado di aggiungere solo tutti gli utenti e copiare il valore dalla chiave, come ho fatto con gli utenti predefiniti che usiamo il 95% del tempo.

Al momento sto lavorando su un'applicazione riga di comando eseguibile dove ho un comando per impostare le autorizzazioni per gli utenti predefiniti, ma vorrei anche essere in grado di aggiungere un opzione per aggiungere un utente personalizzato (s) da aggiungere alla l'autorizzazione predefinita insieme con la nostra lista di utenti predefiniti predefinito.

Al momento, per impostare l'elenco degli utenti di default con la mia domanda vorrei solo scrivere:

MyTool.exe Politiche

Ma mi piacerebbe essere in grado di renderlo un po 'più dettagliato, più vicino a come comando NET è utilizzato per gli utenti Windows, qualcosa come:

Politiche MyTool.exe / ADD: "MyCustomUsername"

Il problema è che i dati memorizzati nel valore REG_BINARY non sembra essere facilmente decodificato. Sono stato in grado di decodificare la parte esagonale in Python, ma io sono rimasto con una sorta di dati binari, che non ho la minima idea di cosa fare con come io non so nemmeno che tipo di codifica è stato utilizzato in primo luogo per sapere cosa usare per decodificarlo. : P

Ho fatto un po 'di googling, ma penso che la mia mancanza di comprensione della terminologia intorno a questo argomento ha probabilmente causato me a trascurare la risposta senza riconoscerlo per quello che è.

Credo che la mia prima vera domanda dovrebbe essere il tipo di codifica viene utilizzato per la chiave di cui sopra dopo che è stato decodificato da esadecimale?

O meglio ancora, è ancora possibile ottenere / modificare il valore della chiave di programmazione in modo che possa ottenere un elenco degli utenti che attualmente impostati, e, se necessario, aggiungere ulteriori utenti / gruppi?

io preferirei mantenere questa applicazione scritta rigorosamente in Python, se possibile (o WMI / WMIC), ma, se necessario, posso tentare di implementare altri tipi di codice in mia applicazione python se questo significa ottenere il lavoro fatto finalmente! Credo che sarebbe anche utile ricordare che questa applicazione è utilizzato principalmente su Windows XP Professional e la maggior parte delle versioni di Windows Server, quindi non sono preoccupato se qualsiasi soluzione possibile, non sarà compatibile con la versione precedente del sistema operativo Windows (s).

Tutta l'assistenza, il codice o solo qualche semplice aiuto con ottenere familiarità con questo argomento, sarebbe NOTEVOLMENTE apprezzato!

Grazie in anticipo per qualsiasi aiuto che potete fornire !! : D

È stato utile?

Soluzione

Bene REG_BINARY non è un qualsiasi particolare formato, è solo un modo per dire al registro dei dati è un formato binario personalizzato. Quindi hai ragione circa la necessità di scoprire cosa c'è dentro.

Inoltre, che cosa si intende per la conversione dei dati da esadecimale? Sei disimballaggio? Dubito che stai interpretando correttamente finché non si sa quello che è stato salvato in là, in primo luogo.

Una volta a scoprire cosa c'è in quel campo Registro di sistema, il modulo struct di pitone sarà il vostro migliore amico.

http://docs.python.org/library/struct.html

Letture consigliate (probabilmente avete già visto queste)

Altri suggerimenti

Ci siamo imbattuti in problemi simili quando si installa un server COM che è stato ospitato dal nostro servizio .NET, cioè abbiamo voluto apportare modifiche a livello di codice i gli ACL COM nella nostra logica di installazione. Penso che troverete che è solo un formato binario ACL che è possibile manipolare in .NET utilizzando la classe:

System.Security.AccessControl.CommonSecurityDescriptor

Mi dispiace non posso aiutare a ottenere una soluzione Python, ma se la schiena è al muro ed è possibile gestire .NET, alcuni esempi di codice sarà simile:

int launchMask = (int) (COM_RIGHTS.EXECUTE | COM_RIGHTS.EXECUTE_LOCAL | COM_RIGHTS.ACTIVATE_LOCAL);

SecurityIdentifier sidAdmins = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
SecurityIdentifier sidInteractive = new SecurityIdentifier(WellKnownSidType.InteractiveSid, null);

DiscretionaryAcl launchAcl = new DiscretionaryAcl(false, false, 3);
launchAcl.AddAccess(AccessControlType.Allow, sidAdmins, launchMask, InheritanceFlags.None, PropagationFlags.None);
launchAcl.AddAccess(AccessControlType.Allow, sidInteractive, launchMask, InheritanceFlags.None, PropagationFlags.None);

CommonSecurityDescriptor launchSD = new CommonSecurityDescriptor(false,
                                                                    false,
                                                                    ControlFlags.DiscretionaryAclPresent | ControlFlags.SelfRelative,
                                                                    sidAdmins,
                                                                    sidAdmins,
                                                                    null,
                                                                    launchAcl);


byte[] launchPermission = new byte[launchSD.BinaryLength];
launchSD.GetBinaryForm(launchPermission, 0);

È poi prendere la matrice di byte autorizzazione di avvio e scrivere al Registro di sistema. Se .NET è un non-starter si può almeno avere uno sguardo a come le classi .NET lavoro e vedere quali funzioni Win32 che utilizzano. È possibile utilizzare la riflettore strumento per osservare l'assemblea in questione, o in realtà MSFT pubblicare il fonte .NET .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top