2009-04-22 2 views
1

J'essaie 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 dans laquelle je peux également ajouter d'autres utilisateurs par leur nom d'utilisateur. Au travail, nous utilisons DCOM et pour la plupart, nous donnons toujours la permission aux mêmes utilisateurs, mais dans certains cas, nous sommes obligés d'accueillir nos clients et d'ajouter des utilisateurs/groupes personnalisés en fonction de leurs besoins. Malheureusement, les utilisateurs personnalisés que nous devons ajouter sont des noms d'utilisateur aléatoires, donc je ne peux pas ajouter tous les utilisateurs et copier la valeur de la clé comme j'ai fait avec les utilisateurs par défaut que nous utilisons 95% du temps.comment puis-je décoder la valeur REG_BINARY HKLM Software Microsoft Ole DefaultLaunchPermission pour voir quels utilisateurs ont l'autorisation?

Je travaille actuellement sur une application exécutable en ligne de commande où j'ai une commande pour définir des permissions pour des utilisateurs prédéfinis mais je voudrais aussi pouvoir ajouter une option pour ajouter un utilisateur (s) à ajouter à l'autorisation par défaut avec notre liste prédéfinie d'utilisateurs par défaut.

Actuellement, pour définir la liste des utilisateurs par défaut avec mon application, je voudrais simplement taper:

MyTool.exe Politiques

Mais je voudrais être en mesure de rendre un peu plus bavard, plus à 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 semblent pas faciles à décoder. J'ai été capable de décoder la partie hexadécimale en python mais il me reste une sorte de données binaires dont je ne sais pas quoi faire car je ne sais même pas quel type d'encodage a été utilisé en premier lieu pour Sachez quoi utiliser pour le décoder. : P

J'ai fait beaucoup de googling mais je pense que mon manque de compréhension de la terminologie autour de ce sujet m'a probablement fait oublier la réponse sans la reconnaître pour ce qu'elle est.

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

Ou mieux encore, est-il même possible d'obtenir/modifier la valeur de la clé par programme afin que je puisse obtenir une liste des utilisateurs actuellement définis et, si nécessaire, ajouter des utilisateurs/groupes supplémentaires? Je préférerais garder cette application écrite strictement en Python si possible (ou WMI/WMIC), mais si nécessaire, je peux essayer d'implémenter d'autres types de code dans mon application python si cela veut dire que le travail est enfin terminé! Je suppose qu'il serait également utile de mentionner que cette application est principalement utilisée sur Windows XP Professionnel et la plupart des versions de Windows Server, donc je ne suis pas inquiet si une solution possible ne sera pas compatible avec les versions antérieures du système d'exploitation Windows.

Toute aide, code ou juste une aide simple pour se familiariser avec ce sujet, serait GREATLY apprécié!

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

Répondre

0

Bien REG_BINARY n'est pas un format particulier, c'est juste un moyen de dire au registre que les données sont un format binaire personnalisé.Vous avez donc raison de savoir ce qu'il y a dedans.

En outre, que voulez-vous dire en convertissant les données de l'hexagone? Est-ce que vous le déballez? Je doute que vous l'interprétiez correctement jusqu'à ce que vous sachiez ce qui a été sauvé là-bas en premier lieu. Une fois que vous aurez découvert ce qu'il y a dans ce champ de registre, le module struct de python sera votre meilleur ami.

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

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

+0

Merci pour votre réponse rapide: D ouais bien voir ce qui se passe quand vous vous google sur trop de messages aléatoires et pas assez d'informations au sujet de votre sujet ..;) De quelques-uns des messages que je lis, Cela impliquait que les données stockées dans la clé sont des sortes de données binaires qui ont ensuite été codées en hexadécimal. Les messages semblaient impliquer que ceci soit standard pour ce type d'entrées binaires. L'un d'eux a également mentionné quelque chose au sujet de l'encodage de md5 bien que je sois probablement loin. – AWainb

+0

Vous avez raison sur votre section "Further reading", je connais bien les deux liens, et j'utilise beaucoup _winreg bien que je viens de découvrir struct aujourd'hui pendant que je faisais des recherches sur ce sujet. vous avez probablement raison de supposer que je l'interprète incorrectement car je ne suis pas sûr du type de données binaires dont je traite et que j'ai été incapable de trouver quelque chose d'assez bête pour que je puisse le comprendre. Des idées sur la façon dont je peux comprendre "ce qui est sauvegardé là-dedans" pour que je puisse passer à l'étape suivante? – AWainb

+0

Il semble qu'une ACL entre dans cette valeur. Vous aurez besoin de trouver la structure des listes de contrôle d'accès au registre pour savoir comment en créer une en binaire et l'y insérer. - http://msdn.microsoft.com/en-us/magazine/cc982153.aspx - http://isg.ee.ethz.ch/tools/realmen/det/dacl.en.html I saisir ProcMon de sysinternals. Exécutez-le sur un processus dont vous savez qu'il définit correctement cette clé de registre et surveillez cet événement dans ProcMon. Vous pourriez alors probablement attraper ce qu'un autre programme met là dedans. –

2

Nous sommes venus acro ss problèmes similaires lors de l'installation d'un serveur COM qui était hébergé par notre service. NET, c'est-à-dire que nous voulions modifier par programmation les ACL COM 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 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'octets d'autorisation de lancement et l'écrire dans le registre. Si .NET est un non-démarreur, vous pouvez au moins voir comment les classes .NET fonctionnent et voir quelles fonctions win32 elles utilisent. Vous pouvez soit utiliser l'outil reflector pour voir l'assembly concerné, soit MSFT en réalité publish the .NET source.

Questions connexes