التعامل مع الريجستري في الويندوز من خلال لغة البايثون

الريجستري في الويندوز من خلال لغة البايثون - بايثونات

نظام تشغیل مایكروسوفت ویندوز هو النظام الأكثر انتشارًا في العالم مما یجعله الأكثر عرضة للقرصنة ومحاولات الإختراق من قبل المخترقین. نتیجةً لذلك، أصبح تخصص التحقیق الجنائي الرقمي رائجًا بشكل ملحوظ في السنوات الأخیرة. یقوم المحققون الجنائیون “الرقمیون” بعملیة البحث في الملفات المخفیة داخل النظام والتي یقوم نظام ویندوز بشكل ممتاز، بتسجیل جمیع الحركات وعملیات الاتصال والعملیات الداخلیة، سواء من قبل المستخدم أو النظام نفسة. كل ذلك یتم تسجیله في ملفات التسجیل التي یخفیها النظام بعنایة. في هذا المقال من بايثونات سنتعلم كیف نصل لملفات الريجستري في الويندوز ونستعرض محتویاتها.

اظهار ملفات الريجستري في الويندوز

یمكن إظهار تلك الملفات في ویندوز عن طریق تنفيذ أمر regedit في موجه الأوامر run:

تشغيل امر regedit

تُظهر الصورة أعلاه مفتاح الخلیة HKEY_LOCAL_MACHINE وما یوجد في داخله من مفاتیح و قیم، وهي ببساطة مجلدات و ملفات تسجل جمیل التحركات وما یحدث داخل نظام التشغیل سواء الناتجة من تفاعل المستخدم المباشر أو تفاعل النظام مع أي جهة خارجیة عن طریق اتصالات الشبكة.

تماما كما في لغة البایثون و قوامیسها من حیث المبدأ، أنه لكل مفتاح قیمة، نجد أن جمیع تلك المجلدات تسمى مفاتیح والملفات تسمى قیم. من الممكن أن یحتوي المفتاح الواحد على عدة مفاتیح في داخلة و قیم. لنفهم أولاً ماذا یوجد لدینا وماهي الوظائف والعملیات التي یمكننا استخدامها لتحقیق ذلك.

لتحقيق ذلك، لابد من الاستعانة بأدوات خارجیه تمكننا من تصدیر تلك المفاتیح بشكل یسهل الولوج لمحتویاتها عن طریق بایثون. سنحتاج أولا لأداة regfileExport المجانیة التي یمكن الحصول علیها من الرابط التالي:

RegFileExporter

نحتاج لاتباع تعلیمات الاستخدام لتصدیر ملفات التسجیل من خلال الأداة. نحن لسنا بصدد تعلم ذلك الآن ولكننا بصدد كشف محتویات بعض المفاتیح والقیم بواسطة بایثون.

لهذا المقال، استخرجنا المفتاح SOFTWARE  من خلال الأداة، وسنقوم بالتجول فیه وعرض محتویاته.

التعامل مع الريجستري في الويندوز من خلال البايثون

سنحتاج إلى تثبیت مكتبة python-registry من خلال الأمر التالي:

[pastacode lang=”python” manual=”pip%20install%20python-registry” message=”” highlight=”” provider=”manual”/]

والأن لنتعرف على ما یوجد بشكل عام ونفهم كیفیة الوصول لمفاتيح وقيم الريجستري في الويندوز عن طریق ما تقدمه مكتبة python-registry.

عمليات python-registery

و نلخص أهم وظائفها التي سنحتاجها هنا كما یلي:

جدول العملیات على المفاتیح (المجلدات):

[spbtbl_sc id=11]

جدول عملیات القیم (الملفات):

[spbtbl_sc id=13]

والآن لنكتب بعض البرامج التي تعرض لنا المحتویات التالیة كما في المسار في الصورة:

python-registery

أداة تصدير registry

[pastacode lang=”python” manual=”%23%20%20%D8%A7%D8%B3%D8%AA%DB%8C%D8%B1%D8%A7%D8%AF%20%D9%81%D8%A6%D8%A9Registry%20%20%D9%85%D9%86%20%D9%85%D9%83%D8%AA%D8%A8%D8%A9python-registry%0Afrom%E2%80%8B%20Registry.Registry%20%E2%80%8Bimport%E2%80%8B%20Registry%0A%0A”’%0A%D8%A7%D8%B3%D8%AA%DB%8C%D8%B1%D8%A7%D8%AF%20%D9%85%D9%83%D8%AA%D8%A8%D8%A9%20os%0A%D9%84%D9%84%D8%AD%D8%B5%D9%88%D9%84%20%D8%B9%D9%84%D9%89%20%D8%AE%D8%AF%D9%85%D8%A9%20%D8%AA%D9%86%D8%B8%DB%8C%D9%81%20%D8%A7%D9%84%D8%B4%D8%A7%D8%B4%D8%A9%20%D9%85%D9%86%20%D9%86%D8%B8%D8%A7%D9%85%20%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%DB%8C%D9%84%0A”’%0Aimport%E2%80%8B%20os%0A%0A%23%D8%A7%D9%86%D8%B4%D8%A7%D8%A1%20%D9%83%D8%A7%D8%A6%D9%86%20%D8%AA%D8%B3%D8%AC%DB%8C%D9%84%20%D9%84%DB%8C%D9%83%D9%88%D9%86%20%D8%A7%D9%84%D8%AE%D9%84%DB%8C%D8%A9%20%D8%A7%D9%84%D9%83%D8%A8%DB%8C%D8%B1%D8%A9%20%D8%B0%D8%A7%D8%AA%20%D9%85%D8%B3%D8%A7%D8%B1%20%D8%B3%D9%88%D9%81%D8%AA%D9%88%DB%8C%D8%B1%0Aregistry_hive%20%3D%20Registry(%E2%80%8B’SOFTWARE’%E2%80%8B)%0Aos.system(%E2%80%8B’clear’%E2%80%8B)%20%E2%80%8B%23%20%D8%AA%D9%86%D8%B8%DB%8C%D9%81%20%D8%A7%D9%84%D8%B4%D8%A7%D8%B4%D8%A9%0A%0A%23%D9%81%D8%AA%D8%AD%20%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%B1%20%D8%A7%D9%84%D9%85%D8%B1%D8%A7%D8%AF%20%D8%AF%D8%A7%D8%AE%D9%84%20%D8%A7%D9%84%D8%AE%D9%84%DB%8C%D8%A9%20%D9%84%D9%84%D9%88%D8%B5%D9%88%D9%84%20%D9%84%D9%85%D9%81%D8%AA%D8%A7%D8%AD%20%D8%A7%D9%84%D8%AA%D8%B3%D8%AC%DB%8C%D9%84%20%D8%A7%D9%84%D9%85%D8%B9%D9%86%D9%8A%0Aregistry_key%20%3D%20registry_hive.open(%E2%80%8B’Microsoft%5CWindows%5CCurrentVersion’%E2%80%8B)%0A%0A%23%D8%A7%D9%84%D8%AA%D8%AC%D9%88%D9%84%20%D9%88%20%D8%B9%D8%B1%D8%B6%20%D9%85%D8%AD%D8%AA%D9%88%DB%8C%D8%A7%D8%AA%20%D8%AC%D9%85%DB%8C%D8%B9%20%D8%A7%D9%84%D9%85%D9%81%D8%A7%D8%AA%DB%8C%D8%AD%20%D9%81%D9%8A%20%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%B1%0Afor%E2%80%8B%20k%20%E2%80%8Bin%E2%80%8B%20registry_key.values()%3A%0A%09print(%E2%80%8B’name%20%3A%20’%E2%80%8B%2Ck.name())%0A%09print(%E2%80%8B’type%20%3A%20’%E2%80%8B%2Ck.value_type_str())%0A%09print(%E2%80%8B’data%20%3A%20’%E2%80%8B%2Ck.value())%0A%09print(%E2%80%8B’%5Cn’%E2%80%8B%2B%E2%80%8B’*’%E2%80%8B%20*%20%E2%80%8B10%E2%80%8B)” message=”” highlight=”” provider=”manual”/]

ممتاز والآن لنختبر المزید بشكل آخر لمسار آخر ونستعرض المفاتیح الفرعیة فیه:

[pastacode lang=”python” manual=”from%E2%80%8B%20Registry.Registry%20%E2%80%8Bimport%E2%80%8B%20Registry%0Aimport%E2%80%8B%20os%0Aos.system(%E2%80%8B’clear’%E2%80%8B)%0Ahive%20%3D%20Registry(%E2%80%8B%22SOFTWARE%22%E2%80%8B)%0Ar_key%20%3D%20hive.open(%E2%80%8B%22Microsoft%5CWindows%20NT%22%E2%80%8B)%0Aprint(r_key.subkeys())” message=”” highlight=”” provider=”manual”/]

لنجد المخرجات كما یلي:

[pastacode lang=”bash” manual=”%5B%3CRegistry.Registry.RegistryKey%20object%20at%20%E2%80%8B0x104496940%E2%80%8B%3E%5D” message=”” highlight=”” provider=”manual”/]

ممتاز له مفتاح فرعي واحد، وذلك المفتاح له قیم ألیس كذلك؟ لنختبر قیمة الإسم لدیه ولنضف سطرا یقوم بالمرور على جمیع المفاتیح (في حال كانت أكثر من واحد) لیأخذ أسماءها و یضعها في قائمة. سنستخدم lambda لذلك. قم بإضافة السطر التالي لبرنامجك:

[pastacode lang=”python” manual=”print(list(map(%20%E2%80%8Blambda%E2%80%8B%20sub%20%3A%20sub.name()%20%2Cr_key.subkeys())))%0Aprint(%E2%80%8B’%5Cn’%E2%80%8B%20%2C%20%E2%80%8B’*’%E2%80%8B%20*%20%E2%80%8B20%E2%80%8B)” message=”” highlight=”” provider=”manual”/]

و المخرجات ستكون:

[pastacode lang=”bash” manual=”%5B%3CRegistry.Registry.RegistryKey%20object%20at%20%E2%80%8B0x10b550908%E2%80%8B%3E%5D%0A%5B%E2%80%8B’CurrentVersion’%E2%80%8B%5D” message=”” highlight=”” provider=”manual”/]

قمنا للوصول لإسم المفتاح الفرعي الوحید CurrentVersion وإضافته في قائمة.

و الآن لنرى ما یحویه من قیم بإضافة الاسطر التالیة:

[pastacode lang=”python” manual=”print(r_key.subkey(%E2%80%8B’CurrentVersion’%E2%80%8B).values())%0Aprint(%E2%80%8B’%5Cn’%E2%80%8B%20%2C%20%E2%80%8B’*’%E2%80%8B%20*%20%E2%80%8B20%E2%80%8B)” message=”” highlight=”” provider=”manual”/]

المخرجات:

[pastacode lang=”bash” manual=”%5B%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ec8a58%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ec8ac8%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ec8b38%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ec8ba8%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ec8c18%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ec8c88%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ec8cf8%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ec8d68%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ec8dd8%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ec8e48%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ec8eb8%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ec8f28%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ec8f98%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ecb048%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ecb0b8%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ecb128%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ecb198%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ecb208%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ecb278%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ecb2e8%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ecb358%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ecb3c8%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ecb438%E2%80%8B%3E%2C%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ecb4a8%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ecb518%E2%80%8B%3E%2C%0A%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x102ecb588%E2%80%8B%3E%5D%0A********************” message=”” highlight=”” provider=”manual”/]

نجد أنه یحتوي على قیم كثیرة، لنختبر طباعة أسماءها وذلك بالمرور علیها بحلقة تكراریة واستدعاء وظیفة الإسم لكل منها. و لكن قبل ذلك، لنستدعي وظیفة عرض المسار:

[pastacode lang=”python” manual=”print(r_key.subkey(%E2%80%8B’CurrentVersion’%E2%80%8B).path())%0Aprint(%E2%80%8B’%5Cn’%E2%80%8B%20%2C%20%E2%80%8B’*’%E2%80%8B%20*%20%E2%80%8B20%E2%80%8B)” message=”” highlight=”” provider=”manual”/]

المخرجات:

[pastacode lang=”bash” manual=”ROOT%5CMicrosoft%5CWindows%20NT%5CCurrentVersion” message=”” highlight=”” provider=”manual”/]

وللأسماء:

[pastacode lang=”python” manual=”for%E2%80%8B%20v%20%E2%80%8Bin%E2%80%8B%20r_key.subkey(%E2%80%8B’CurrentVersion’%E2%80%8B).values()%3A%0Aprint(v.name())%0Aprint(%E2%80%8B’%5Cn’%E2%80%8B%20%2C%20%E2%80%8B’*’%E2%80%8B%20*%20%E2%80%8B20%E2%80%8B)” message=”” highlight=”” provider=”manual”/]

لتكون المخرجات على النحو الآتي:

[pastacode lang=”bash” manual=”SystemRoot%0ABuildBranch%0ACurrentBuild%0ACurrentMajorVersionNumber%0ACurrentMinorVersionNumber%0ACurrentType%0ACurrentVersion%0AEditionID%0AInstallationType%0AInstallDate%0AProductName%0AReleaseId%0ASoftwareType%0AUBR%0APathName%0ACustomizations%0ABuildLabExBuildLab%0AProductId%0ADigitalProductId%0ADigitalProductId4%0ACurrentBuildNumber%0ABuildGUID%0ARegisteredOrganization%0ARegisteredOwner%0AInstallTime” message=”” highlight=”” provider=”manual”/]

رائع جدًا،  ولكن قبل الختام لنختبر سطرًا برمجیًا أخیرًا. لنأخذ إسمًا من تلك الأسماء و نطبع قیمته:

[pastacode lang=”python” manual=”print(r_key.subkey(%E2%80%8B’CurrentVersion’%E2%80%8B).value(%E2%80%8B’PathName’%E2%80%8B))” message=”” highlight=”” provider=”manual”/]

و النتیجة:

[pastacode lang=”bash” manual=”%3CRegistry.Registry.RegistryValue%20object%20at%20%E2%80%8B0x104d1e5c0%E2%80%8B%3E” message=”” highlight=”” provider=”manual”/]

لماذا ذلك؟ مع أننا استدعینا وظیفة طباعة قیمته مباشرة ؟ ببساطة، لأن تلك القیمة تحتوي قیمة تحتوي قیمة بداخلها وكأنها مفتاح بذاته. إذًا سنقوم بالتعدیل التالي لنرى النتیجة:

[pastacode lang=”python” manual=”print(r_key.subkey(%E2%80%8B’CurrentVersion’%E2%80%8B).value(%E2%80%8B’PathName’%E2%80%8B).value())” message=”” highlight=”” provider=”manual”/]

و النتیجة C:\WINDOWS
و ستجد نفسك كثیرا في مواقف مماثلة 🙂
البدایة…

 

مقالات مشابهة

  • تطبيقات لغة بايثون في إنترنت الأشياء

    تطبيقات لغة بايثون في إنترنت الأشياء

    تطبيقات لغة بايثون في إنترنت الأشياء من المواضيع التي يزداد البحث عنها خلال الوقت
    ابراهيم البحيصي
    By ابراهيم البحيصي
    تعرف على المزيد
  • مكاتب بايثون Playwright لأتمتة الصفحات - بايثونات

    مكتبة Playwright – بديل مايكروسوفت لأتمتة متصفحات الإنترنت

    مكاتب بايثون Playwright لأتمتة الصفحات : مكاتب بايثون بلايورايت : تنوعت أنشطة مايكروسوفت مؤخرًا
    Naser Alostath
    By Naser Alostath
    تعرف على المزيد
  • تصميم قواعد بيانات اوراكل عملي بإستخدام البايثون - بايثونات

    قواعد البيانات الأوراكل والبايثون –كيف نتعامل مع الاوراكل من كود بايثون

    قواعد البيانات الأوراكل هي أحد أقوى قواعد البيانات، وتعتمد عليها الكثير من الشركات عالميًا.
    ابراهيم البحيصي
    By ابراهيم البحيصي
    تعرف على المزيد
  • مكتبة requests بايثون - بايثونات

    مكتبة requests في البايثون – كيف تُرسل طلبات HTTP من بايثون

    مكتبة requests في البايثون هي أحد أشهر المكتبات التي تُستخدم في العديد من المشاريع
    ابراهيم البحيصي
    By ابراهيم البحيصي
    تعرف على المزيد

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *