как я могу декодировать значение REG_BINARY HKLM\Software\Microsoft\Ole\DefaultLaunchPermission, чтобы узнать, какие пользователи имеют разрешение?

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

Вопрос

Я пытаюсь найти способ декодировать значение REG_BINARY для "HKLM\Software\Microsoft\Ole\DefaultLaunchPermission", чтобы узнать, какие пользователи имеют разрешения по умолчанию, и, если возможно, метод, с помощью которого я также могу добавлять других пользователей по их имени пользователя.

В работе мы используем DCOM и по большей части всегда предоставляем одни и те же разрешения пользователям, но в некоторых случаях мы вынуждены идти навстречу нашим клиентам и добавлять пользовательских пользователей/группы в соответствии с их потребностями.К сожалению, пользовательские пользователи, которых нам нужно добавить, представляют собой случайные имена пользователей, поэтому я не могу просто добавить всех пользователей и скопировать значение из ключа, как я сделал с пользователями по умолчанию, которых мы используем в 95% случаев.

В настоящее время я работаю над исполняемым приложением командной строки, где у меня есть команда для установки разрешений для заранее определенных пользователей, но я также хотел бы иметь возможность добавить возможность добавления пользовательских пользователей для добавления к разрешению по умолчанию. вместе с нашим предопределенным списком пользователей по умолчанию.

В настоящее время, чтобы установить список пользователей по умолчанию для моего приложения, я просто набираю:

Политики MyTool.exe

Но мне бы хотелось сделать это немного более подробным, ближе к тому, как команда NET используется для пользователей Windows, например:

Политики MyTool.exe /ADD: «MyCustomUsername»

Проблема в том, что данные, хранящиеся в значении REG_BINARY, нелегко декодировать.Мне удалось декодировать шестнадцатеричную часть в Python, но у меня остались какие-то двоичные данные, с которыми я понятия не имею, что делать, поскольку даже не знаю, какой тип кодировки использовался в первую очередь для знать, что использовать для его декодирования.:П

Я довольно много погуглил, но думаю, что мое непонимание терминологии по этой теме, вероятно, заставило меня упустить из виду ответ, не узнав, что это такое.

Я думаю, мой первый реальный вопрос должен заключаться в том, какая кодировка используется для вышеуказанного ключа после его декодирования из шестнадцатеричного кода?

Или, что еще лучше, возможно ли получить/изменить значение ключа программным путем, чтобы я мог получить список пользователей, которые в данный момент установлены, и, если необходимо, добавить дополнительных пользователей/групп?

Я бы предпочел, чтобы это приложение было написано строго на Python, если это возможно (или WMI/WMIC), но при необходимости я могу попытаться реализовать другие типы кода в моем приложении Python, если это означает, что работа будет наконец выполнена!Думаю, было бы также полезно упомянуть, что это приложение в основном используется в Windows XP Professional и большинстве версий Windows Server, поэтому я не беспокоюсь, если какое-либо возможное решение не будет совместимо с более ранними версиями ОС Windows.

Любая помощь, код или просто простая помощь в ознакомлении с этой темой будет полезна. ОТЛИЧНО оценил!

Заранее спасибо за любую помощь, которую вы можете оказать!:D

Это было полезно?

Решение

Ну, REG_BINARY — это не какой-то конкретный формат, это просто способ сообщить реестру, что данные представляют собой специальный двоичный формат.Так что вы правы, что нужно выяснить, что там.

Кроме того, что вы подразумеваете под преобразованием данных из шестнадцатеричного формата?Ты его распаковываешь?Я сомневаюсь, что вы правильно это интерпретируете, пока не узнаете, что там вообще было сохранено.

Как только вы узнаете, что находится в этом поле реестра, модуль структуры Python станет вашим лучшим другом.

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

Дальнейшее чтение (вероятно, вы это уже видели)

Другие советы

Мы столкнулись с аналогичными проблемами при установке COM-сервера, размещенного в нашей службе .NET, т.е.мы хотели программно изменить списки ACL COM в нашей логике установки.Я думаю, вы обнаружите, что это просто двоичный формат ACL, которым вы можете манипулировать в .NET с помощью класса:

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 они используют.Вы можете использовать отражатель инструмент для просмотра соответствующей сборки или MSFT на самом деле опубликовать исходный код .NET.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top