أداة التفكيك

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

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

يسمح كود المصدر بلغة التجميع عمومًا باستخدام الثوابت وتعليقات المبرمج . وعادةً ما يقوم المُجمِّع بإزالة هذه العناصر من كود الآلة المُجمَّع . في هذه الحالة، سينتج عن مُفكِّك الكود الذي يعمل على كود الآلة تفكيكٌ يفتقر إلى هذه الثوابت والتعليقات؛ مما يجعل تفسير الناتج المُفكَّك أكثر صعوبةً على الإنسان من كود المصدر الأصلي المُعلَّق. توفر بعض مُفكِّكات الكود ميزةً مُدمجةً لإضافة التعليقات، حيث يتم إثراء الناتج المُولَّد بتعليقاتٍ حول دوال واجهة برمجة التطبيقات (API) المُستدعاة أو مُعاملاتها. تستخدم بعض مُفكِّكات الكود معلومات تصحيح الأخطاء الرمزية الموجودة في ملفات الكائنات مثل ELF . على سبيل المثال، يسمح برنامج IDA للمستخدم بإنشاء رموزٍ تذكيريةٍ للقيم أو أجزاء الكود في جلسةٍ تفاعلية: غالبًا ما يُوازي الفهم البشري المُطبَّق على عملية التفكيك الإبداع البشري في عملية كتابة الكود.

التحديات

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

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

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

كما لا تستطيع برامج تفكيك التعليمات البرمجية التعامل مع التعليمات البرمجية التي تتغير أثناء التنفيذ، حيث لا يمكن للتحليل الثابت أن يأخذ في الاعتبار التعديلات التي تحدث أثناء التشغيل.

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

التفكيك الثابت مقابل التفكيك الديناميكي

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

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

على الرغم من أن كليهما قوي على حدة، إلا أن برامج التفكيك الحديثة غالباً ما تجمع بين كلا النهجين لتحسين الدقة في الملفات الثنائية الأكثر تعقيداً. [ 2 ]

أمثلة على برامج التفكيك

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

أي مصحح أخطاء تفاعلي سيتضمن طريقة ما لعرض تفكيك البرنامج الذي يتم تصحيحه. غالبًا ما يتم تضمين أداة التفكيك نفسها كمفكك مستقل يتم توزيعه مع مصحح الأخطاء. على سبيل المثال، objdump ، وهو جزء من GNU Binutils ، مرتبط بمصحح الأخطاء التفاعلي gdb . [ 3 ]

برامج التفكيك والمحاكاة

يمكن دمج مُفكِّك الشفرة الديناميكي في مُخرَج المُحاكي أو المُشرف الافتراضي لتتبُّع تنفيذ تعليمات الآلة في الوقت الفعلي، وعرضها سطرًا بسطر. في هذا الإعداد، إلى جانب شفرة الآلة المُفكَّكة، يُمكن للمُفكِّك إظهار التغييرات التي تطرأ على السجلات أو البيانات أو عناصر الحالة الأخرى (مثل رموز الحالة) الناتجة عن كل تعليمة. يُوفِّر هذا معلومات تصحيح أخطاء قوية لحل المشكلات. مع ذلك، قد يصبح حجم المُخرَج كبيرًا جدًا، خاصةً إذا كان التتبُّع نشطًا طوال فترة تنفيذ البرنامج. طُرحت هذه الميزات لأول مرة في أوائل سبعينيات القرن الماضي بواسطة شركة OLIVER كجزء من مُنتَج تصحيح أخطاء CICS الخاص بها ، وهي مُدمجة الآن في مُنتَج XPEDITER من شركة Compuware .

أداة تفكيك الطول

مُفكِّك الطول ، المعروف أيضًا باسم مُحرك مُفكِّك الطول ( LDE )، هو أداة تُخرج، عند إعطائها سلسلة من البايتات (التعليمات)، عدد البايتات التي تشغلها كل تعليمة مُحلَّلة. من أبرز مشاريع المصادر المفتوحة لبنية x86: ldisasm [ 10 ] ، و Tiny x86 Length Disassembler [ 11 ] ، و Extended Length Disassembler Engine for x86-64 [ 12 ] .

انظر أيضاً

مراجع

  1. ^ أندريس ، ديون. تشن، شياوفى. فان دير فين، فيكتور؛ سلوينسكا، جوانا؛ بوس، هربرت (2016). “تحليل متعمق للتفكيك على ثنائيات x86/x64 واسعة النطاق” (PDF) . وقائع الندوة الأمنية الخامسة والعشرون لـ USENIX . أوستن، تكساس: جمعية USENIX.
  2. بانغ، تشاو؛ يو، روي؛ تشين، يوان؛ كوسكينين، إريك؛ بورتوكاليديس، جورجيوس؛ ماو، بو؛ شو، جيان (2021). "SoK: كل ما أردت معرفته عن تفكيك ثنائي x86/x64 ولكنك كنت تخشى السؤال عنه" (ملف PDF) . وقائع ندوة IEEE للأمن والخصوصية لعام 2021 (SP) . IEEE.
  3. 1 2 "Hopper" . مؤرشف من الأصل بتاريخ 2022-01-08 . تم الاطلاع عليه بتاريخ 2022-01-25 .
  4. "Binary Ninja" . مؤرشف من الأصل بتاريخ 24 يناير 2022. تم الاطلاع عليه بتاريخ 25 يناير 2022 .
  5. ^ بول ماتياس ر. (30/07/1997). "Kapitel II.5. Allgemeines: Undokumentierte Möglichkeiten von DEBUG" [ الميزات غير الموثقة لـ DEBUG ] . NWDOS-TIPs نصائح وحيل لتشغيل Novell DOS 7، مع النقر على تفاصيل التفاصيل والأخطاء والحلول البديلة . MPDOSTIP (باللغة الألمانية) (3 ed.). مؤرشفة من الأصلي بتاريخ 2017-09-10 . تم الاسترجاع 2014/09/06 . (ملاحظة: يُعدّ ملف NWDOSTIP.TXT مرجعًا شاملًا حول نظامي التشغيل Novell DOS 7 و OpenDOS 7.01 ، ويتضمن وصفًا للعديد من الميزات والتفاصيل الداخلية غير الموثقة. وهو جزء من مجموعة MPDOSTIP.ZIP الأكبر حجمًا التي احتفظ بها المؤلف حتى عام 2001، والتي تم توزيعها على العديد من المواقع في ذلك الوقت. يشير الرابط المرفق إلى نسخة أقدم من ملف NWDOSTIP.TXT تم تحويلها إلى صيغة HTML.)
  6. "PEExplorer Windows Disassembler for Win 32-bit Program EXE DLL OCX, Code Binary Analysis Tool" . تم الاطلاع عليه بتاريخ 25-04-2022 .
  7. "Rizin" . مؤرشف من الأصل بتاريخ 28-11-2023 . تم الاطلاع عليه بتاريخ 09-12-2023 .
  8. "قاطع" . مؤرشف من الأصل بتاريخ 28-11-2023 . تم الاطلاع عليه بتاريخ 09-12-2023 .
  9. برنامج Sourcer - برنامج تفكيك التعليقات ( إصدار سبتمبر 1989 ). شركة V Communications، 1988. رقم الجزء S0989-164 . تاريخ الاسترجاع: 21 ديسمبر 2019 . 
  10. "ldisasm" . GitHub . مؤرشف من الأصل بتاريخ 28-10-2020 . تم الاطلاع عليه بتاريخ 26-02-2020 .
  11. "مفكك برمجيات صغير الحجم x86" . جيت هاب . مؤرشف من الأصل بتاريخ 31 أكتوبر 2020. تم الاطلاع عليه بتاريخ 10 ديسمبر 2019 .
  12. "محرك تفكيك ممتد الطول لـ x86-64" . جيت هاب . مؤرشف من الأصل بتاريخ 2020-10-08 . تم الاطلاع عليه بتاريخ 2019-12-10 .

للمزيد من القراءة

  • فينسيغيرا، لوري؛ إم. ويلز، ليندا؛ كيجريوال، نيدهي؛ مارتينو، بول؛ فينسيغيرا، رالف إل. (2003). "إطار تجريبي لتقييم أدوات التفكيك والترجمة العكسية للغة C++ وجافا". المؤتمر العاشر للعمل حول الهندسة العكسية، 2003. WCRE 2003. وقائع المؤتمر . الصفحات 14-23 . doi : 10.1109/WCRE.2003.1287233 . ISBN  0-7695-2027-8. S2CID 10398240 . 
  • شوارتز، بنيامين؛ ديبري، سوميا؛ أندروز، غريغوري (2002). "إعادة النظر في تفكيك الشيفرة التنفيذية". وقائع المؤتمر التاسع حول الهندسة العكسية (WCRE) . قسم علوم الحاسوب، جامعة أريزونا : 45-54 . CiteSeerX 10.1.1.85.6387 .