如何解码REG_BINARY值HKLM \ Software \ Microsoft \ Ole \ DefaultLaunchPermission以查看哪些用户具有权限?

问题描述:

我试图找到一种方法来解码“HKLM \ Software \ Microsoft \ Ole \ DefaultLaunchPermission”的REG_BINARY值,以查看哪些用户默认具有权限,并且如果可能的话,还可以添加其他方法用户的用户名。如何解码REG_BINARY值HKLM Software Microsoft Ole DefaultLaunchPermission以查看哪些用户具有权限?

在工作中,我们使用DCOM,并且在大多数情况下,我们总是给予相同的用户权限,但在某些情况下,我们不得不容纳我们的客户并添加自定义用户/组以满足他们的需求。不幸的是,我们需要添加的自定义用户是随机的用户名,所以我无法添加所有的用户,并且像我95%的时间使用默认用户那样从密钥中复制值。

我目前正在一个命令行可执行应用程序中,我有一个命令来设置预定义用户的权限,但我也想添加一个选项来添加一个自定义用户添加默认权限以及我们预定义的默认用户列表。

目前,设置与我的应用程序的默认用户列表我只需要输入:

MyTool.exe政策

但是我想能够使其更有点冗长,更贴近指挥如何NET用于Windows用户来说,是这样的:

MyTool.exe政策/ ADD: “MyCustomUsername”

问题是存储在REG_BINARY值中的数据似乎不容易解码。我能够解码python中的十六进制部分,但我留下了一些二进制数据,我不知道该怎么办,因为我甚至不知道首先使用什么类型的编码知道用什么来解码它。 :P

我已经完成了相当多的Google搜索,但我认为我对这个主题的术语缺乏理解,可能导致我忽略了答案,而没有认识到它是什么。

我想我的第一个真正的问题将不得不是什么样的编码用于上述密钥后,它已经从十六进制解码?

或者更好的是,是否有可能以编程方式获取/修改密钥的值,以便我可以获取当前设置的用户列表,并在必要时添加其他用户/组?

如果可能的话(或者WMI/WMIC),我宁愿保留这个应用程序严格使用Python编写,但如果需要的话,我可以尝试在我的python应用程序中实现其他类型的代码,如果这意味着最终完成工作!我想这也应该提到这个应用程序主要用于Windows XP Professional和大多数Windows Server版本,所以我不担心如果任何可能的解决方案不会与早期的Windows操作系统版本兼容。

任何帮助,代码或只是一些简单的帮助,熟悉这个主题,将GREATLY赞赏!

在此先感谢您提供的任何帮助! :D

那么REG_BINARY没有任何特定的格式,它只是一种告诉注册表数据是一种自定义二进制格式的方式。所以你需要找出那里有什么是对的。

另外,你是什么意思通过从十六进制数据转换?你是否解开它?我怀疑你是否正确地解释它,直到你知道那里保存了什么为止。

一旦你找到注册表字段中的内容,python的结构模块将成为你最好的朋友。

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

更多阅读(你可能已经看到了这些)

+0

感谢您的及时响应:d 耶也看到这是当你过了太多的随机职位谷歌自己,而不是关于你的话题..足够的信息会发生什么;) 从一些我看了帖子,它暗示存储在密钥内的数据是某种二进制数据,然后被编码为十六进制。帖子似乎暗示这是这些类型的二进制条目的标准。其中一人也提到了关于md5编码的一些事情,尽管我可能会离开。 – AWainb 2009-04-22 05:02:04

我们来了acro在安装由我们的.NET服务托管的COM服务器时,也就是类似的问题,即我们想要以编程方式更改安装逻辑中的COM ACL。我想你会发现,它只是你可以在.NET中使用类操纵二进制ACL格式:

System.Security.AccessControl.CommonSecurityDescriptor

所以对不起,我不能帮你在得到一个Python的解决方案,但如果你的回是在墙上,你可以管理.NET,一些示例代码看起来像:

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

您再乘坐启动权限字节数组,并将其写入到注册表中。如果.NET是一个非启动器,你至少可以看看.NET类是如何工作的,看看他们使用的是什么win32函数。您可以使用reflector工具查看相关组件,或者使用MSFT publish the .NET source