كيف يمكنني فك تشفير قيمة REG_BINAY HKLM Software Microsoft OLE DefaultLaunchpermission لمعرفة أي المستخدمين لديهم إذن؟

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

سؤال

أحاول إيجاد طريقة لفك تشفير القيمة REG_BINAL ل "hklm software microsoft ole defaultlaunchpermission"لمعرفة المستخدمين الذين لديهم أذونات افتراضيا، وإذا كان ذلك ممكنا، طريقة يمكنني أيضا إلحاق المستخدمين الآخرين أيضا باسم المستخدم الخاص بهم.

في العمل، نستفيد من DCOM والجزء الأكبر نقدم دائما إذن المستخدمين دائما، لكن في بعض الحالات التي أجبرنا على استيعاب عملائنا وإضافة مستخدمي / مجموعات مخصصة لتناسب احتياجاتهم. لسوء الحظ، يحتاج المستخدمون المخصصون إلى إضافة أسماء مستخدمين عشوائية لذلك أنا غير قادر على إضافة جميع المستخدمين ونسخ القيمة من المفتاح كما فعلت مع المستخدمين الافتراضيين نستخدم 95٪ من الوقت.

أنا أعمل حاليا على تطبيق قابل للتنفيذ لسطر الأوامر حيث لدي أمر لتعيين أذونات للمستخدمين المحددين مسبقا ولكن أود أيضا أن أكون قادرا على إضافة خيار لإلحاق مستخدم (مستخدمين) مخصصين للإضافة إلى الإذن الافتراضي جنبا إلى جنب مع قائمة المستخدمين الافتراضيين محددة مسبقا.

حاليا، لتعيين قائمة المستخدمين الافتراضيين مع طلبي، أود فقط كتابة:

سياسات mytool.exe

لكنني أرغب في أن أكون قادرا على تحقيق ذلك أكثر إثباتا، أقرب إلى كيفية استخدام صافي الأمر لمستخدمي Windows، شيء مثل:

سياسات / إضافة mytool.exe: "mycustomusername"

المشكلة هي أن البيانات المخزنة في القيمة REG_BINAY لا يبدو أن فك تشفيرها بسهولة. كنت قادرا على فك شفرة الجزء HEX في بيثون، لكنني غادرت مع نوع من البيانات الثنائية التي ليس لدي أدنى فكرة ما يجب القيام به مع عدم معرفة أي نوع من الترميز المستخدم في المقام الأول ل تعرف ما يجب استخدامه لفك تشفيره. : P.

لقد فعلت الكثير من googling ولكنني أعتقد أن قلة فهم المصطلحات حول هذا الموضوع قد تسبب لي بالتغاضي عن الإجابة دون الاعتراف به لما هو عليه.

أعتقد أن أول سؤال حقيقي لي يجب أن يكون نوع الترميز المستخدم للمفتاح أعلاه بعد فكه من عرافة؟

أو الأفضل من ذلك، هل من الممكن الحصول على / تعديل قيمة المفتاح برمجيا حتى أتمكن من الحصول على قائمة من المستخدمين المحددة حاليا، وإذا لزم الأمر، إلحاق مستخدمين / مجموعات إضافية؟

أفضل أن أحتفظ بهذا التطبيق مكتوب بدقة في بيثون إذا كان ذلك ممكنا (أو WMI / WMIC)، ولكن إذا لزم الأمر، يمكنني محاولة تنفيذ أنواع أخرى من التعليمات البرمجية في تطبيق بيثون الخاص بي إذا كان ذلك يعني الحصول على المهمة أخيرا! أعتقد أنه سيكون من المفيد أيضا أن نذكر أنه يستخدم هذا التطبيق في المقام الأول على إصدارات Windows XP Professional و Microsoft Windows Server لذلك أنا لست قلقا إذا لم يكن أي حل ممكن متوافقا مع إصدار Windows OS Windows السابق.

أي مساعدة، رمز أو بعض المساعدة البسيطة في التعرف على هذا الموضوع، ستكون الى حد كبير محل تقدير!

شكرا مقدما على أي مساعدة يمكن أن تقدم!! :د

هل كانت مفيدة؟

المحلول

حسنا Reg_Binary ليس أي تنسيق معين، إنها مجرد وسيلة لإخبار التسجيل أن البيانات هي تنسيق ثنائي مخصص. لذلك أنت على حق في الحاجة إلى معرفة ما هو هناك.

أيضا، ماذا تقصد بتحويل البيانات من عرافة؟ هل أنت تفريغها؟ أشك في تفسيرها بشكل صحيح حتى تعرف ما تم حفظه هناك في المقام الأول.

بمجرد اكتشاف ما هو في حقل التسجيل هذا، ستكون وحدة بيوت بايثون أفضل صديق لك.

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

المزيد من القراءة (ربما رأيت هذه بالفعل)

نصائح أخرى

لقد صادفنا مشكلات مماثلة عند تثبيت خادم COM الذي استضافته خدمة .NET لدينا، أي نحن أردنا تغيير برمجيا ACLS COM في منطق التثبيت لدينا. أعتقد أنك ستجد أنه مجرد تنسيق ACL ثنائي يمكنك التعامل معه في .NET باستخدام الفصل:

system.security.accesscontrol.commonsecuritydescristor.

آسف للغاية لا أستطيع مساعدتك في الحصول على حل ثعبان، ولكن إذا ظهر ظهرك على الحائط ويمكنك إدارة .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