Erlang Binary and Source Code Obfuscation
تستكشف هذه الورقة تقنيات فعالة لتعمية لغة إرلانج عبر مستويات تجميع متعددة من خلال استغلال الفجوات التمثيلية بين الدلالات عالية المستوى ونموذج تنفيذ BEAM منخفض المستوى لتعقيد الهندسة العكسية مع الحفاظ على التوافق أثناء التشغيل.
البحث الأصلي مرخَّص بموجب CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). هذا شرح مولَّده بالذكاء الاصطناعي للبحث أدناه. لم يكتبه المؤلفون ولم يصادقوا عليه. وللتحقق من الدقة التقنية، يرجى الرجوع إلى البحث الأصلي. اقرأ إخلاء المسؤولية الكامل
تخيل أن لديك وصفة سرية لكعكة لذيذة. قمت بكتابتها على ورقة (هذا هو الكود المصدري - Source Code). ثم قمت بخبز الكعكة، فقام الفرن بتحويل تلك الورقة إلى رغيف صلب وصالح للأكل (هذا هو بايت كود BEAM - BEAM Bytecode).
عادةً، إذا سرق شخص ما كعكتك، يمكنه تذوقها وتخمين المكونات. وإذا كان طباخاً ماهراً، فقد يتمكن حتى من إعادة كتابة الوصفة بمجرد تذوق الكعكة (الهندسة العكسية - Decompilation).
هذا البحث يتحدث عن لغة Erlang، وهي لغة برمجة تُستخدم لبناء أنظمة فائقة الموثوقية (مثل شبكات الهاتف). يتساءل المؤلفون: "كيف يمكننا خبز الكعكة بطريقة غريبة جداً بحيث لا يستطيع حتى الطباخ الماهر معرفة الوصفة، رغم أن طعم الكعكة يبقى كما هو تماماً؟"
يسمون هذا التعمية أو التمويه (Obfuscation). الأمر لا يتعلق بإفساد الكعكة، بل بجعل الكعكة تبدو وكأنها لغز.
إليك تفصيل لـ "تقنيات الخبز الغريبة" هذه باستخدام تشبيهات بسيطة:
1. "المُدقق" مقابل "الفرن"
اعتبر مترجم لغة إرلانج (Erlang Compiler) بمثابة مفتش سلامة أغذية صارم (المُدقق). قبل أن تتمكن من الخبز، يقوم المفتش بفحص وصفتك للتأكد من أنك لا تستخدم سموماً أو مكونات غير مقاسة. إذا بدت الوصفة غريبة، فسيقوم برفضها.
ومع ذلك، فإن الفرن (الآلة الافتراضية - Virtual Machine) مرن للغاية في الواقع. يمكنه خبز أي شيء تقريباً طالما أنه لن ينفجر.
- الخدعة: وجد المؤلفون طرقاً لكتابة تعليمات تبدو "غير قانونية" للمفتش الصارم، لكنها في الواقع سليمة للفرن.
- التشبيه: تخيل أن المفتش يقول: "يجب أن تضع البيض في الوعاء قبل الدقيق". لكن الفرن لا يهتم؛ فهو يخلط أي شيء موجود في الوعاء فحسب. وجد المؤلفون طريقة لتهريب الدقيق أولاً، وخداع المفتش ليعتقد أن الأمر على ما يرام، ثم خبزه. بالنسبة للشخص الذي يأكل الكعكة، فهي مثالية. أما بالنسبة للشخص الذي يحاول استعادة الوصفة، فهي عبارة عن فوضى مربكة.
2. حلقة "صندوق البريد"
في لغة إرلانج، تتواصل البرامج مع بعضها البعض عن طريق إرسال رسائل إلى صندوق بريد. عادةً، تكون الحلقة (تكرار مهمة ما) مثل حزام ناقل: افعل هذا، ثم افعل ذاك، ثم كرر.
- الخدعة: أظهر المؤلفون كيفية بناء حلقة باستخدام صندوق البريد بدلاً من الحزام الناقل. البرنامج ينتظر رسالة، يؤدي مهمة، يرسل رسالة لنفسه، ثم ينتظر مرة أخرى.
- التشبيه: بدلاً من المشي في دائرة على مضمار، تخيل أنك في غرفة بها باب. تقوم بمهمة، ثم تطرق الباب. شخص ما (أنت، في المستقبل) يفتح البوب، ويسلمك ملاحظة تقول "افعل ذلك مجدداً"، ثم تغلق الباب.
- لماذا يربك المخترقين: يتوقع مهندس الهندسة العكسية رؤية دائرة على الخريطة. بدلاً من ذلك، يرى غرفة بها باب وملاحظة. يبدو الأمر وكأنه طريق مسدود أو حدث عشوائي، مما يجعل تتبع المسار صعباً للغاية.
3. الصندوق "القابل للتعديل" السحري
تعتمد لغة إرلانج على قاعدة: بمجرد صنع قائمة من الأرقام، لا يمكنك تغييرها. إذا كنت تريد رقماً جديداً، عليك صنع قائمة جديدة بالكامل. هذا يشبه امتلاك قلعة من قطع الليغو؛ لا يمكنك مجرد استبدال قطعة واحدة، بل يجب عليك بناء قلعة جديدة.
- الخدعة: وجد المؤلفون طريقة لاستخدام "أداة سحرية خاصة" (كود آلة منخفض المستوى) للتسلل واستبدال قطعة في منتصف القلعة دون بناء قلعة جديدة.
- التشبيه: تخيل أن لديك منحوتة زجاجية. القاعدة هي "لا تلمسها". لكن المؤلفين وجدوا طريقة لاستخدام ليزر لصهر نقطة صغيرة جداً منها وإعادة تشكيلها، ثم تجميدها فوراً.
- النتيجة: بالنسبة للمخترق، يبدو الكود وكأنه يقوم بالشيء البطيء والآمن (بناء قلعة جديدة في كل مرة). لكن في الواقع، هو يستخدم الليزر السحري لتغيير القلعة الموجودة فوراً. إذا حاول المخترق نسخ الكود، فسوف يبنون بالخطوة عن طريق الخطأ النسخة البطيئة، وسيعمل برنامجهم أبطأ بـ 100 مرة من الأصل.
4. الكتاب "ذاتي التعديل"
عادةً، يكون الكتاب مطبوعاً، وتظل الكلمات ثابتة للأبد.
- الخدعة: تسمح لغة إرلانج لك باستبدال كتاب أثناء قراءته. أظهر المؤلفون كيف يمكن لبرنامج أن يقرأ تعليماته الخاصة، ويعيد كتابة صفحة، ثم يبدأ فوراً في قراءة الصفحة الجديدة.
- التشبيه: تخيل قصة حيث يقرأ البطل الفصل التالي، فيدرك أنه ممل، فيكتب نهاية جديدة، ثم يكمل قراءة النهاية الجديدة.
- لماذا يصعب اختراقه: إذا أخذ المخترق لقطة (Snapshot) للكود في الساعة 1:00 ظهراً، سيبدو شيئاً واحداً. وفي الساعة 1:01 ظهراً، سيكون قد غير نفسه. وبحلول الوقت الذي يحلل فيه الكود، ستكون النسخة "الأصلية" قد اختفت وحلت محلها نسخة أخرى.
الصورة الكبيرة
النقطة الرئيسية في البحث هي: الفجوة بين "الفكرة عالية المستوى" و"الواقع منخفض المستوى" هي المكان الذي يحدث فيه السحر.
- عالي المستوى: "أريد فرز هذه الأرقام." (نظيف، بسيط).
- منخفض المستوى: "أنا أحرك البايتات حول الذاكرة، وأتحقق مما إذا كان السجل فارغاً، وأنتظر رسالة." (فوضوي، معقد).
يقول المؤلفون إنك إذا أردت حماية برنامجك، فلا تكتفِ فقط بتشفير الحروف. بدلاً من ذلك، استخدم القواعد الخفية والغريبة لآلة إرلانج لإنشاء هيكل يبدو كفوضى للإنسان، ولكنه يعمل بشكل مثالي للحاسوب.
باختصار: هم يعلموننا كيفية كتابة كود يكون بمثابة "كعكة مثالية الخبز" للحاسوب، ولكن بمثابة "لغز قطع (Jigsaw Puzzle) مربك" لأي شخص يحاول سرقة الوصفة.
غارق في أبحاث مجالك؟
تصلك نشرة يومية بأحدث الأبحاث المطابقة لكلماتك البحثية المفتاحية — مع ملخصات تقنية، بلغتك.