comment puis-je décoder la valeur REG_BINARY HKLM \ Software \ Microsoft \ Ole \ DefaultLaunchPermission pour voir quels utilisateurs ont la permission?

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

Question

Je suis en train de trouver un moyen de décoder la valeur REG_BINARY pour « HKLM \ Software \ Microsoft \ Ole \ DefaultLaunchPermission » pour voir quels utilisateurs ont des autorisations par défaut, et si possible, une méthode que je peux également ajouter d'autres utilisateurs par leur nom d'utilisateur.

Au travail, nous utilisons DCOM et pour la plupart, nous donnons toujours les mêmes utilisateurs la permission, mais dans certains cas, nous sommes obligés d'accueillir nos clients et ajouter des utilisateurs personnalisés / groupes pour répondre à leurs besoins. Malheureusement, les utilisateurs personnalisés dont nous avons besoin d'ajouter des noms d'utilisateur au hasard, donc je ne suis pas d'ajouter que tous les utilisateurs et copier la valeur de la clé comme je l'ai fait avec les utilisateurs par défaut, nous utilisons 95% du temps.

Je travaille actuellement sur une application de ligne de commande exécutable où j'ai une commande pour définir des autorisations pour les utilisateurs prédéfinis mais je voudrais aussi être en mesure d'ajouter une option pour ajouter un utilisateur personnalisé (s) d'ajouter l'autorisation par défaut ainsi que notre liste des utilisateurs par défaut prédéfini.

À l'heure actuelle, pour définir la liste des utilisateurs par défaut avec mon application, je voudrais simplement taper:

Politiques MyTool.exe

Mais je voudrais être en mesure de rendre un peu plus bavard, plus proche de la façon dont la commande NET est utilisé pour les utilisateurs de Windows, quelque chose comme:

MyTool.exe Politiques / ADD: "MyCustomUsername"

Le problème est que les données stockées dans la valeur REG_BINARY ne semble pas être facile à décoder. Je suis capable de décoder la partie hexagonale en python, mais je suis parti avec une sorte de données binaires que je n'ai pas la moindre idée quoi faire avec que je ne sais même pas quel genre de codage utilisé en premier lieu à savoir quoi utiliser pour le décoder. : P

Je l'ai fait un peu de googler, mais je pense que mon manque de compréhension de la terminologie autour de ce sujet a sans doute m'a fait méconnais la réponse sans le reconnaître pour ce qu'il est.

Je suppose que ma première vraie question devrait être ce type d'encodage est utilisé pour la clé ci-dessus après qu'il a été décodé à partir hex?

Ou mieux encore, est-il même possible d'obtenir / modifier la valeur de la clé programme afin que je puisse obtenir une liste des utilisateurs qui sont actuellement définis et, si nécessaire, ajoutez des utilisateurs / groupes supplémentaires?

Je préférerais conserver cette demande écrite strictement en Python, si possible (ou WMI / WMIC), mais si nécessaire, je peux essayer de mettre en œuvre d'autres types de code dans mon application python si cela signifie que le travail soit enfin fait! Je suppose que ce serait également utile de mentionner que cette application est principalement utilisé sous Windows XP Professionnel et la plupart des versions de Windows Server, donc je ne suis pas inquiet si aucune solution ne sera pas compatible avec la version antérieure de Windows OS (s).

Toute aide, le code ou tout simplement une aide simple pour se familiariser avec ce sujet, seraient FORTEMENT apprécié!

Merci d'avance pour toute aide que vous pouvez fournir !! : D

Était-ce utile?

La solution

Eh bien REG_BINARY n'est pas un format particulier, il est juste une façon de dire au registre des données est un format binaire personnalisé. Vous avez raison d'avoir besoin de savoir ce qui est là-dedans.

En outre, que voulez-vous dire en convertissant les données de hex? Déballez-vous? Je doute que vous l'interpréter correctement jusqu'à ce que vous savez ce qui a été enregistré là-bas en premier lieu.

Une fois que vous trouverez ce qui est dans ce domaine de registre, le module struct de python sera votre meilleur ami.

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

Pour en savoir plus (vous avez probablement déjà vu ces)

Autres conseils

Nous avons rencontré des problèmes similaires lors de l'installation d'un serveur COM qui a été hébergé par notre service .NET, à savoir que nous voulions modifier les programme les COM ACLs dans notre logique d'installation. Je pense que vous trouverez qu'il est juste un format binaire ACL que vous pouvez manipuler dans .NET en utilisant la classe:

System.Security.AccessControl.CommonSecurityDescriptor

Alors désolé, je ne peux pas vous aider à obtenir une solution de Python, mais si votre dos est au mur et vous pouvez gérer .NET, un exemple de code ressemblerait à ceci:

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);

Vous prenez alors le tableau d'autorisation de lancement d'octets et l'écrire dans le registre. Si .NET est un non-starter, vous pouvez au moins jeter un oeil à la façon dont les classes .NET fonctionnent et voir ce que les fonctions win32 qu'ils utilisent. Vous pouvez utiliser le outil pour regarder à l'assemblée concernée, ou MSFT fait publier le source .NET.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top