Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

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

python-decompile3

مفكك شيفرة بايثون للإصدارات 3.7-3.8، تم تجريده من uncompyle6 لإعادة هيكلته والبدء في إصلاح بعض المشاكل القديمة.

عرض المستودع
1.3k166منذ 29 أيامتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

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

|packagestatus|

.. contents::

decompyle3

مفكك أصلي متعدد الإصدارات بلغة Python ومفكك أجزاء. إعادة صياغة لـ uncompyle6_.

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

مقدمة

decompyle3 يترجم البايت كود الخاص بلغة Python مرة أخرى إلى شيفرة مصدرية مكافئة. يقبل البايت كود من إصدار Python 3.7 فصاعدًا.

لفك تجميع البايت كود الأقدم في Python، انظر uncompyle6_.

لماذا هذا؟

Uncompyle6 رائع، لكن لديه مشكلة أساسية في طريقة تعامله مع تدفق التحكم. في الأيام الأولى لـ Python، عندما كان التحسين قليلًا وكانت الشيفرة تُنشأ بطريقة موجهة نحو القوالب، كان يمكن معرفة هياكل تدفق التحكم ببساطة من خلال النظر إلى أنماط الشيفرة.

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

المحاولة الأولى لإصلاح هذه المشكلة كانت بإضافة علامات في تيار التعليمات، وكانت هذه العلامة في البداية عبارة عن تعليمة COME_FROM، ثم استخدامها في اكتشاف الأنماط.

على مر السنين، قمت بتوسيع ذلك ليكون أكثر تحديدًا، فأضيفت COME_FROM_LOOP و COME_FROM_WITH. وأضفت فحوصات في وقت تقليل القواعد للتأكد من تطابق القفزات مع أهداف COME_FROM المفترضة.

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

في هذا المشروع، بدأنا إعادة كتابة وإعادة هيكلة القواعد.

ومع ذلك، حتى هذا لا يكفي. يحتاج تدفق التحكم إلى المعالجة باستخدام المهيمنات (dominators) والمهيمنات العكسية (reverse-dominators)، وهو ما يمكن أن يقدمه مشروع python-control-flow_.

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

المتطلبات

يمكن تشغيل الشيفرة هنا على إصدارات Python 3.7 أو 3.8. تم اختبار ملفات البايت كود التي يمكن قراءتها على بايت كود Python من الإصدارين 3.7 و 3.8.

التثبيت

يمكنك التثبيت من PyPI باستخدام الاسم decompyle3::

root@kitploit:~
pip install decompyle3

للتثبيت من الشيفرة المصدرية، يستخدم هذا المشروع setup.py، لذا يتبع الروتين القياسي لـ Python::

root@kitploit:~
$ pip install -e .  # set up to run from source tree

أو::

root@kitploit:~
$ python setup.py install # may need sudo

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

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

::

make check

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

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

الاستخدام

قم بتشغيل

::

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

لمعرفة تعليمات الاستخدام:

::

$ decompyle3 -h

التحقق

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

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

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

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

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

نحن ندعم فقط الإصدارات المنشورة، وليس الإصدارات المرشحة. لاحظ مع ذلك أن السحر (magic number) للإصدار المنشور عادة ما يكون نفس آخر إصدار مرشح قبل الإصدار.

نحن أيضًا لا نتعامل مع كود PJOrion_ أو أي كود مشوش. بالنسبة لـ PJOrion جرب: PJOrion Deobfuscator_ لفك تشويش البايت كود والحصول على بايت كود صالح قبل استخدام هذه الأداة; قد يساعدك pydecipher_ في ذلك.

هذا البرنامج لا يمكنه فك تجميع ملفات Windows EXE التي تم إنشاؤها بواسطة Py2EXE_، على الرغم من أنه يمكننا على الأرجح فك تجميع الشيفرة بعد استخراج البايت كود بشكل صحيح. قد يساعد Pydeinstaller <https://github.com/charles-dyfis-net/pydeinstaller>_ في تفكيك مجمعات Pyinstaller.

معالجة قوائم طويلة مرضيًا من التعبيرات أو العبارات تكون بطيئة. نحن لا نتعامل مع Cython_ أو MicroPython، اللذان لا يستخدمان البايت كود.

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

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

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

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

انظر أيضًا

  • https://github.com/andrew-tavera/unpyc37/ : شوكة غير مباشرة لـ https://code.google.com/archive/p/unpyc3/ تستخدم المشاريع المذكورة أعلاه تقنية فك تجميع مختلفة عن تلك المستخدمة هنا. يتم تتبع التعليمات. بعض التعليمات تستخدم المكدس لتوليد سلاسل، بينما لا يفعل البعض الآخر. نظرًا لأن تدفق التحكم لا يُتعامل معه مباشرة، فإنه يعاني أيضًا من نفس المشكلات التي تعاني منها برامج uncompyle و decompyle المختلفة.
  • https://github.com/rocky/python-xdis : مفكك عبر إصدارات Python
  • https://github.com/rocky/python-xasm : مجمع عبر إصدارات Python
  • https://github.com/rocky/python-decompile3/wiki : وثائق ويكي تصف الشيفرة وجوانبها بمزيد من التفصيل

.. |buildstatus| image:: https://dl.circleci.com/status-badge/img/gh/rocky/python-decompile3/tree/master.svg?style=svg :target: https://dl.circleci.com/status-badge/redirect/gh/rocky/python-decompile3/tree/master .. |packagestatus| image:: https://repology.org/badge/vertical-allrepos/python:uncompyle6.svg :target: https://repology.org/project/python:decompyle3/versions .. _Cython: https://en.wikipedia.org/wiki/Cython .. _MicroPython: https://micropython.org .. _uncompyle6: https://pypi.python.org/pypi/uncompyle6 .. _python-control-flow: https://github.com/rocky/python-control-flow .. _trepan: https://pypi.python.org/pypi/trepan3k .. _compiler: https://pypi.python.org/pypi/spark_parser .. _HISTORY: https://github.com/rocky/python-decompile3/blob/master/HISTORY.md .. _debuggers: https://pypi.python.org/pypi/trepan3k .. _remake: https://bashdb.sf.net/remake .. _unpyc37: https://github.com/andrew-tavera/unpyc37/ .. _this: https://github.com/rocky/python-decompile3/wiki/Deparsing-technology-and-its-use-in-exact-location-reporting .. |TravisCI| image:: https://travis-ci.org/rocky/python-decompile3.svg :target: https://travis-ci.org/rocky/python-decompile3 .. |CircleCI| image:: https://circleci.com/gh/rocky/python-decompile3.svg?style=svg :target:

.. _PJOrion: http://www.koreanrandom.com/forum/topic/15280-pjorion-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-%D0%B4%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B eight%D1%8F-%D0%BE%D0%B1%D1%84 .. _Deobfuscator: https://github.com/extremecoders-re/PjOrion-Deobfuscator .. _Py2EXE: https://en.wikipedia.org/wiki/Py2exe .. |Supported Python Versions| image:: https://img.shields.io/pypi/pyversions/decompyle3.svg .. |Latest Version| image:: https://badge.fury.io/py/decompyle3.svg :target: https://badge.fury.io/py/decompyle3 .. |PyPI Installs| image:: https://pepy.tech/badge/decompyle3/month .. _pydecipher: https://github.com/mitre/pydecipher

تنزيل الأداة
https://circleci.com/gh/rocky/python-decompile3