برنامج فك التشفير

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

مقدمة

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

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

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

تصميم

يمكن اعتبار برامج فك التشفير مكونة من سلسلة من المراحل، تساهم كل منها بجوانب محددة من عملية فك التشفير الشاملة.

لودر

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

التفكيك

تتمثل المرحلة المنطقية التالية في تفكيك تعليمات لغة الآلة إلى تمثيل وسيط مستقل عن الآلة (IR). على سبيل المثال، تعليمات آلة بنتيوم

mov eax , [ ebx + 0x04 ]

قد تُترجم إلى لغة العلاقات الدولية

eax : = m [ ebx + 4 ] ;

المصطلحات

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

cdq eax ; edx يتم تعيينها إلى امتداد الإشارة ≠ edi,edi +(tex)push xor eax , edx sub eax , edx

يمكن ترجمتها إلى

eax := abs(eax);

بعض التسلسلات الاصطلاحية مستقلة عن الجهاز؛ وبعضها الآخر يتضمن تعليمة واحدة فقط. على سبيل المثال، تقوم هذه التعليمة بمسح السجل (تعيينه إلى الصفر). يمكن تنفيذ ذلك باستخدام قاعدة تبسيط مستقلة عن الجهاز، مثل ...xoreax,eaxeaxa = 0

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

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

تحليل البرامج

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

mov eax ,[ ebx + 0x04 ] add eax ,[ ebx + 0x08 ] sub [ ebx + 0x0C ], eax

قد ينتج عن ذلك التمثيل الوسيط التالي بعد انتشار التعبير:

m[ebx+12] := m[ebx+12] - (m[ebx+4] + m[ebx+8]);

إن التعبير الناتج أقرب إلى لغة برمجة عالية المستوى، وقد تم فيه أيضاً الاستغناء عن استخدام سجل الآلة eax. وقد تستغني التحليلات اللاحقة عن هذا ebxالسجل.

تحليل تدفق البيانات

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

تحليل الأنواع

يقوم برنامج فك تشفير لغة الآلة الجيد بتحليل أنواع البيانات. هنا، تؤدي طريقة استخدام المسجلات أو مواقع الذاكرة إلى قيود على النوع المحتمل للموقع. على سبيل المثال، andتشير تعليمة معينة إلى أن المعامل عدد صحيح؛ ولا تستخدم البرامج مثل هذه العملية على قيم الفاصلة العائمة (إلا في أكواد مكتبات خاصة) أو على المؤشرات . addينتج عن تعليمة معينة ثلاثة قيود، حيث يمكن أن يكون كلا المعاملين عددًا صحيحًا، أو عددًا صحيحًا ومؤشرًا (مع نتائج عدد صحيح ومؤشر على التوالي؛ ويأتي القيد الثالث من ترتيب المعاملين عندما يكون نوعهما مختلفًا). [ 2 ]

يمكن التعرف على العديد من التعبيرات عالية المستوى التي تُفعّل التعرف على البنى أو المصفوفات. ومع ذلك، يصعب التمييز بين العديد من الاحتمالات، نظرًا للمرونة التي تتيحها لغة الآلة، أو حتى بعض لغات البرمجة عالية المستوى مثل لغة C، فيما يتعلق بتحويل الأنواع وحساب المؤشرات.

قد ينتج عن المثال الوارد في القسم السابق الكود عالي المستوى التالي:

struct T1 { int v0004 ; int v0008 ; int v000C ; }; struct T1 * ebx ; ebx -> v000C -= ebx -> v0004 + ebx -> v0008 ;

الهيكلة

تتضمن المرحلة قبل الأخيرة من عملية فك التجميع هيكلة التمثيل الوسيط إلى بنيات ذات مستوى أعلى مثل whileالحلقات if/then/elseوالعبارات الشرطية. على سبيل المثال، شفرة الآلة

xor eax , eax l0002: or ebx , ebx jge l0003 add eax ,[ ebx ] mov ebx ,[ ebx + 0x4 ] jmp l0002 l0003: mov [ 0x10040000 ], eax

يمكن ترجمتها إلى:

eax = 0 ; while ( ebx < 0 ) { eax += ebx -> v0000 ; ebx = ebx -> v0004 ; } v10040000 = eax ;

يُعدّ تحويل الشيفرة غير المهيكلة إلى شيفرة مهيكلة أكثر صعوبة من تحويل الشيفرة المهيكلة أصلاً. وتشمل الحلول تكرار بعض الشيفرة، أو إضافة متغيرات منطقية. [ 3 ]

توليد الكود

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

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

تقنيات أخرى

تم تطوير برامج فك التشفير باستخدام الشبكات العصبية . ويمكن تدريب هذه البرامج باستخدام تقنيات التعلم الآلي لتحسين دقتها بمرور الوقت. [ 4 ]

الشرعية

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

في الولايات المتحدة، تم الاستناد بنجاح إلى مبدأ الاستخدام العادل لحقوق النشر في قضايا فك التشفير. فعلى سبيل المثال، في قضية سيجا ضد أكوليد ، قضت المحكمة بأنه يجوز لأكوليد قانونًا اللجوء إلى فك التشفير للتحايل على آلية قفل البرامج المستخدمة في أجهزة ألعاب سيجا. [ 7 ] إضافةً إلى ذلك، يتضمن قانون الألفية الرقمية لحقوق النشر (القانون العام 105-304 [ 8 ] ) استثناءات مناسبة لكل من اختبار وتقييم الأمان في المادة 1201(i)، والهندسة العكسية في المادة 1201(f). [ 9 ]

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

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

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

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

  1. لا يتم استخدام حق فك التجميع بشكل متكرر، وبالتالي قد يكون حق فك التجميع غير ضروري.
  2. إن حق فك التشفير يعمل بشكل جيد ويوفر قدراً كافياً من اليقين القانوني بحيث لا يؤدي إلى نشوء نزاعات قانونية أو
  3. لا يتم اكتشاف عمليات فك التشفير غير القانونية إلى حد كبير.

في تقرير صدر عام 2000 بشأن تطبيق توجيه البرمجيات من قبل الدول الأعضاء في الاتحاد الأوروبي، بدت المفوضية الأوروبية وكأنها تدعم التفسير الثاني. [ 11 ]

انظر أيضاً

برامج فك تجميع جافا

برامج فك التشفير الأخرى

مراجع

  1. سيفوينتيس، كريستينا؛ غوف، ك. جون (يوليو 1995). "فك تجميع البرامج الثنائية". البرمجيات: الممارسة والخبرة . 25 (7): 811-829 . CiteSeerX 10.1.1.14.8073 . doi : 10.1002/spe.4380250706 . S2CID 8229401 .  
  2. مايكروفت، آلان (1999). "فك التجميع القائم على النوع". في سويرسترا، إس. دويتس (محرر). لغات البرمجة والأنظمة: الندوة الأوروبية الثامنة حول لغات البرمجة والأنظمة . سبرينغر-فيرلاغ . ص 208-223 . ISBN  3-540-65699-5.
  3. سيفوينتيس، كريستينا (1994). "الفصل 6". تقنيات الترجمة العكسية (ملف PDF) (أطروحة دكتوراه). جامعة كوينزلاند للتكنولوجيا . مؤرشف (ملف PDF) من الأصل بتاريخ 22 نوفمبر 2016. تم الاطلاع عليه بتاريخ 21 ديسمبر 2019 .)
  4. تيان، يواندونغ؛ فو، تشنغ (27 يناير 2021). "تقديم N-Bref: إطار عمل لفك التشفير قائم على الشبكات العصبية" . تم الاطلاع عليه بتاريخ 30 ديسمبر 2022 .
  5. رولاند، ديان (2005). قانون تكنولوجيا المعلومات ( الطبعة الثالثة). كافنديش. ISBN  1-85941-756-6.
  6. "مكتب حقوق النشر الأمريكي - قانون حقوق النشر: الفصل 1" . مؤرشف من الأصل بتاريخ 25-12-2017 . تم الاطلاع عليه بتاريخ 10-04-2014 .
  7. "شرعية فك التشفير" . Program-transformation.org. 2004-12-03. مؤرشف من الأصل في 2010-09-22 . تم الاطلاع عليه في 2010-09-15 .
  8. "قانون حقوق النشر للألفية الرقمية" (ملف PDF) . الكونغرس الأمريكي . 28 أكتوبر 1998. مؤرشف (ملف PDF) من الأصل بتاريخ 10 ديسمبر 2013. تم الاطلاع عليه بتاريخ 15 نوفمبر 2013 .
  9. "السجل الفيدرالي :: طلب الوصول" . 26-10-2018. مؤرشف من الأصل في 25-01-2022 . تم الاسترجاع في 31-01-2021 . 
  10. تشارنوتا، بريدجيت؛ هارت، روبرت ج. (1991). الحماية القانونية لبرامج الحاسوب في أوروبا: دليل لتوجيهات المفوضية الأوروبية . لندن: بتروورثز تولي . ISBN 0-40600542-7.
  11. «تقرير من المفوضية إلى المجلس والبرلمان الأوروبي واللجنة الاقتصادية والاجتماعية بشأن تنفيذ وآثار التوجيه 91/250/EEC بشأن الحماية القانونية لبرامج الحاسوب» . مؤرشف من الأصل بتاريخ 4 ديسمبر 2020. تم الاطلاع عليه بتاريخ 26 ديسمبر 2020 .