Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
python-uncompyle6 — مفكك بايتكود بايثون عبر الإصدارات | Kitploit
أدوات/GitHubGitHub/rocky/python-uncompyle6
التحليل الثابتالهندسة العكسيةمصممي الأخطاءتحليل الملفات الثنائية
GitHubrocky/python-uncompyle6

python-uncompyle6

مفكك بايتكود بايثون عبر الإصدارات

عرض المستودع
4.3k46214منذ 11س 30دتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

|buildstatus| |Pypi Installs| |Latest Version| |Supported Python Versions|

|packagestatus|

.. contents::

uncompyle6

أداة فك ترجمة أصلية لـ Python عبر الإصدارات وأداة فك ترجمة للشظايا. خليفة decompyle و uncompyle و uncompyle2.

ألقيت محاضرة حول هذا في BlackHat Asia 2024 <https://youtu.be/H-7ZNrpsV50?si=nOaixgYHr7RbILVS>_.

مقدمة

يقوم uncompyle6 بترجمة البايتكود الخاص بـ Python مرة أخرى إلى كود مصدر Python مكافئ. يقبل البايتكود من إصدار Python 1.0 إلى الإصدار 3.8، على مدى أكثر من 24 عامًا من إصدارات Python. نقوم بتضمين بايتكود Python 2.5 الخاص بـ Dropbox وبعض بايتكود PyPy.

لماذا هذا؟

حسنًا، سأقولها: هذا البرنامج مذهل. إنه أكثر من مجرد مفكك هاكي عادي. باستخدام تقنية compiler_، يقوم البرنامج بإنشاء شجرة تحليل للبرنامج من التعليمات؛ عقد في المستويات العليا تشبه قليلاً ما قد يأتي من AST الخاص بـ Python. لذلك يمكننا حقًا تصنيف وفهم ما يحدث في أقسام بايتكود Python.

بناءً على ذلك، فإن الشيء الآخر الذي يجعل هذا مختلفًا عن مفككات بايتكود CPython الأخرى هو القدرة على فك ترجمة شظايا فقط من الكود المصدري وإعطاء معلومات الكود المصدري حول إزاحة بايتكود معينة.

أستخدم شظايا الشجرة لفك ترجمة شظايا الكود في وقت التشغيل داخل أدوات التصحيح trepan_ الخاصة بي. لهذا الغرض، يتم تسجيل إزاحات البايتكود وربطها بشظايا الكود المصدري. هذا الغرض، على الرغم من توافقه مع النية الأصلية، إلا أنه مختلف قليلاً. راجع this_ لمزيد من المعلومات.

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

كانت (ولا تزال) عدة فروع لـ decompyle و uncompyle و uncompyle2 و uncompyle3. يأتي الكثير منها أساسًا من نفس قاعدة الكود، و(تقريبًا؟) جميعها لم تعد نشطة الصيانة. أحدها كان جيدًا حقًا في فك ترجمة Python 1.5-2.3، وآخر جيد حقًا في Python 2.7، ولكن فقط ذلك. آخر يعالج Python 3.2 فقط؛ آخر قام بتصحيح ذلك وعالج فقط 3.3. لقد فهمت الفكرة. هذا الكود يجمع كل هذه الفروع معًا ويتقدم للأمام. هناك بعض إعادة الهيكلة والتنظيف الجادة في قاعدة الكود هذه مقارنة بتلك الفروع القديمة. حتى إعادة هيكلة تجريبية أكثر تجري في decompyle3_.

من الواضح أن هذا الأفضل في فك ترجمة Python عبر جميع إصدارات Python. وحتى عندما يكون هناك مشروع آخر يوفر فقط فك الترجمة لمجموعة فرعية من إصدارات Python، فإننا عمومًا نكون أفضل بشكل واضح لتلك أيضًا.

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

نستخدم عمليات آلية للعثور على الأخطاء. في متتبعات المشكلات لمفككات أخرى، ستجد العديد من الأخطاء التي وجدناها على طول الطريق. القليل جدًا منها تم إصلاحه في المفككات الأخرى.

المتطلبات

يمكن تشغيل الكود في مستودع git من Python 2.4 إلى أحدث إصدار Python، باستثناء Python 3.0 حتى 3.2. المتطوعون مرحب بهم لمعالجة هذه النواقص إذا كانت هناك رغبة في ذلك.

الطريقة التي يفعل بها ذلك، مع ذلك، هي عن طريق فصل إصدارات Python المتتالية إلى فروع git:

master Python 3.11 وما فوق (يستخدم تثبيت poetry، وعبارات Python الأحدث) python-3.6-to-3.10 Python 3.6 حتى 3.10 (يستخدم f-strings الأحدث، وعبارات أكثر حداثة، وتعليقات نوع أكثر حداثة) python-3.3-to-3.5 Python 3.3 حتى 3.5 (Python 3 عام) python-3.0-to-3.2 Python 3.0 حتى 3.2 (Python 3 المبكر؛ 3.0 كان في بعض المناطق أقرب إلى Python 2.6 منه إلى Python 2.7) python-2.4-to-2.7 Python 2.4 حتى 2.7 (Python 2 عام)

PyPy من الإصدار 2.4 فصاعدًا يعمل أيضًا.

ملفات البايتكود التي يمكنه قراءتها تم اختبارها على بايتكود Python من الإصدارات 1.4، 2.1-2.7، و 3.0-3.8 وإصدارات PyPy اللاحقة.

التثبيت

لإصدارات Python الحديثة (Python 3.11+)، يمكنك التثبيت من PyPI باستخدام الاسم uncompyle6::

pip install uncompyle6

لإصدارات Python قبل 3.11، لا تقم بالتثبيت باستخدام PyPI، بل قم بالتثبيت باستخدام ملف في قسم إصدارات GitHub. كان Python الأقدم يستخدم easy_install <https://python101.pythonlibrary.org/chapter29_pip.html#using-easy-install>_. لكن هذا لم يعد مدعومًا على PyPi أو إصدارات Python الأحدث. والعكس صحيح، poetry ولا pip، (الطرق الأحدث) غير مدعومة على إصدارات Python الأقدم.

إذا كان إصدار Python الذي تقوم بتشغيل uncompyle6 عليه بين Python 2.4 حتى 2.7، استخدم tarball باسم uncompyle6_24-x.y.z.tar.gz.

إذا كان إصدار Python الذي تقوم بتشغيل uncompyle6 عليه بين Python 3.0 حتى 3.2، استخدم tarball باسم uncompyle6_30-x.y.z.tar.gz.

إذا كان إصدار Python الذي تقوم بتشغيل uncompyle6 عليه بين Python 3.3 حتى 3.5، استخدم tarball باسم uncompyle6_33-x.y.z.tar.gz.

إذا كان إصدار Python الذي تقوم بتشغيل uncompyle6 عليه بين Python 3.6 حتى 3.11، استخدم tarball باسم uncompyle6_36-x.y.z.tar.gz.

إذا كان إصدار Python الذي تقوم بتشغيل uncompyle6 عليه هو 3.11 أو أحدث، استخدم tarball باسم uncompyle6-x.y.z.tar.gz.

يمكنك أيضًا تجربة eggs أو wheels التي لها نفس تعيين الإصدار، على سبيل المثال، uncompyle6-x.y.z-py39-none-any.whl لتثبيت Python 3.9. *ومع ذلك، لاحظ أن الإصدار بدون التعيين يعني Python 3.11 أو أعظم.

وبالمثل، يعمل tarball بدون _xx فقط من Python 3.11 أو أعظم.

المنطق وراء استخدام فروع Git +++++++++++++++++++++++++++++++

من المستحيل حاليًا (إن لم يكن غير عملي) أن يكون لديك كود مصدر Python واحد بهذا التعقيد وبهذه الميزات يمكن تشغيله على كل من Python 2.7 و Python 3.13+. اللغات تباعدت كثيرًا، والتعبئة مختلفة تمامًا. في الواقع، ممارسة التعبئة لـ Python 3.11+ غير متوافقة مع Python 2.7 (وما قبلها حتى Python 2.4)، والتي كانت تفضل "easy_install".

التثبيت من النص المصدر +++++++++++++++++++++++

للتثبيت من الكود المصدري، تأكد من أن لديك فرع Git الصحيح. راجع قسم المتطلبات لأسماء فروع Git.

بعد تعيين الفرع الصحيح::

$ pip install -e .  # إعداد للتشغيل من شجرة المصدر

يتم أيضًا توفير GNU Makefile، لذا :code:make install (ربما كجذر أو sudo) سيقوم بالخطوات أعلاه.

تشغيل الاختبارات

::

make check

تمت إضافة ملف make من GNU لتسهيل إعداد وتشغيل الأمر الصحيح، وتشغيل الاختبارات من الأسرع إلى الأبطأ.

إذا كان لديك remake_ مثبتًا، يمكنك رؤية قائمة جميع المهام بما في ذلك الاختبارات عبر :code:remake --tasks

الاستخدام

تشغيل

::

$ uncompyle6 compiled-python-file-pyc-or-pyo

لمساعدة الاستخدام:

::

$ uncompyle6 -h

التحقق

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

إذا كنت تريد التحقق من صحة بناء الجملة لعملية فك الترجمة، أضف الخيار :code:--syntax-verify. ولكن نظرًا لتغير بناء جملة Python. يجب عليك استخدام هذا الخيار إذا كان البايتكود هو البايتكود الصحيح لمترجم Python الذي سيتحقق من بناء الجملة.

يمكنك أيضًا مقارنة النتائج مع إصدار آخر من uncompyle6 حيث توجد أحيانًا تراجعات في فك ترجمة بايتكود معين، مع تحسن الجودة الإجمالية.

بالنسبة لـ Python 3.7 و 3.8، الكود في decompyle3_ أفضل بشكل عام.

أو جرب مفكك Python آخر مثل uncompyle2_ أو unpyc37_ أو pycdc_. نظرًا لأن الأخيرين يعملان بشكل مختلف، فإن الأخطاء هنا غالبًا لا تكون موجودة هناك، والعكس صحيح.

هناك فئة مثيرة للاهتمام من هذه البرامج متاحة بسهولة لتقديم تحقق أقوى: تلك البرامج التي، عند تشغيلها، تختبر نفسها. تتضمن مجموعتنا الاختبارية هذه.

وتأتي Python مع مجموعة أخرى من البرامج مثل هذا: مجموعة اختباراتها للمكتبة القياسية. لدينا بعض الكود في :code:test/stdlib لتسهيل هذا النوع من الفحص أيضًا.

الأخطاء/القيود المعروفة

أكبر مشكلة معروفة وقابلة للإصلاح (ولكنها صعبة) تتعلق بمعالجة تدفق التحكم. (Python لديها على الأرجح أكثر مجموعة متنوعة وغريبة من العبارات المركبة التي رأيتها على الإطلاق؛ هناك عبارات "else" على الحلقات وكتل try التي أشك في أن العديد من المبرمجين لا يعرفون عنها).

جميع مفككات Python التي نظرت إليها لديها مشاكل في فك ترجمة تدفق التحكم في Python. في بعض الحالات، يمكننا اكتشاف فك ترجمة خاطئ والإبلاغ عن ذلك.

تنزيل الأداة