التمويه (البرمجيات)
في تطوير البرمجيات ، يُعرف التمويه بأنه إنشاء شفرة مصدرية أو شفرة آلية يصعب على البشر أو الحواسيب فهمها عمدًا. وكما هو الحال في تمويه اللغة الطبيعية ، قد يتضمن تمويه الشفرة استخدام طرق ملتوية غير ضرورية لكتابة التعليمات. قد يُموّه المبرمجون الشفرة لإخفاء غرضها أو منطقها أو قيمها المُضمّنة. وتتمثل الأسباب الرئيسية لذلك في منع التلاعب ، وردع الهندسة العكسية ، أو إنشاء لغز أو تحدٍّ ترفيهي لفك تشفير الشفرة، وهو تحدٍّ يُدرج غالبًا في ألعاب فك التشفير . ورغم إمكانية التمويه يدويًا، إلا أنه يُنفّذ عادةً باستخدام برامج التمويه . [ 1 ]
ملخص
قد تجعل بنية وخصائص بعض اللغات من السهل إخفاءها أكثر من غيرها. [ 2 ] [ 3 ] لغة C ، [ 4 ] ولغة C++ ، [ 5 ] [ 6 ] ولغة البرمجة بيرل [ 7 ] هي بعض الأمثلة على اللغات التي يسهل إخفاؤها. كما أن لغة هاسكل قابلة للإخفاء إلى حد كبير [ 8 ] على الرغم من اختلاف بنيتها اختلافًا كبيرًا.
إن الخصائص التي تجعل اللغة قابلة للتشويش ليست واضحة على الفور.
التقنيات
تشمل أنواع التمويه استبدال الكلمات الرئيسية البسيط، واستخدام أو عدم استخدام المسافات البيضاء لإنشاء تأثيرات فنية، والبرامج ذاتية التوليد أو المضغوطة بشدة.
بحسب نيك مونتفورت ، قد تشمل التقنيات ما يلي:
- التمويه في التسمية، والذي يشمل تسمية المتغيرات بطريقة لا معنى لها أو خادعة؛
- الخلط بين البيانات/الرمز/التعليقات، والذي يتضمن جعل بعض الرموز الفعلية تبدو وكأنها تعليقات أو الخلط بين بناء الجملة والبيانات؛
- الترميز المزدوج، والذي يمكن أن يعرض الكود في شكل شعري أو أشكال مثيرة للاهتمام. [ 9 ]
توجد أيضًا تقنيات أكثر تطورًا تعمل على إخفاء البرنامج على المستوى الدلالي من خلال تحويلات البرنامج (بدلاً من مستوى المصدر). وتشمل هذه التقنيات ما يلي:
- تحويلات إخفاء تدفق التحكم، مثل دمج حساب التعبيرات غير ذات الصلة وتقسيم حساب التعبيرات ذات الصلة، وعشوائية ترتيب العبارات التي يمكن حسابها بأي ترتيب، وإدراج المسندات التي تكون قيمها معروفة للمخفي ولكن يتم حسابها بطرق غير واضحة؛ [ 10 ]
- تحويلات إخفاء بنية البيانات، مثل تعديل بنية المصفوفات وإعادة ترتيب مخطط التوريث؛ [ 11 ]
- إخفاء تحولات البنية الإجرائية للبرنامج عن طريق إدخال تجريدات إجرائية جديدة وتغيير التجريدات الإجرائية الموجودة لتغيير بنية البرنامج بالكامل؛
- إخفاء تدفق البيانات في البرنامج. [ 12 ]
مثال
يوضح المثال التالي عملية بسيطة لإخفاء شفرة المصدر. كلا البرنامجين يطبعان نفس المخرجات، لكن النسخة الثانية أصعب في الفهم عمداً.
مسح الرمز:
#include <stdio.h>int main ( void ) { int x = 5 ; int y = 7 ; printf ( "%d \n " , x + y ); return 0 ; }الكود المشفر:
#include <stdio.h> int main (){ int _ = 5 , __ = 7 ; printf ( "%d \n " , _ -~ __ -1 );}في النسخة المبهمة، تتم إزالة أسماء المتغيرات ذات المعنى وإعادة كتابة التعبيرات الحسابية بشكل أقل قابلية للقراءة، مع الحفاظ على سلوك البرنامج.
تشفير الحمولة للتهرب من البرامج الضارة
يُعدّ تشفير XOR وتشفير Base64 من الطرق الشائعة لإخفاء البرامج الضارة عن برامج مكافحة الفيروسات . وتعمل كلتا الطريقتين عن طريق تغيير شكل الشيفرة الخبيثة في ملفها، مما يمنع برامج الحماية من التعرّف على الأنماط الخطيرة.
في عملية التمويه باستخدام XOR، يختار المهاجم مفتاحًا سريًا ويُطبق عملية XOR الثنائية على ملف البرمجية الخبيثة. يُحوّل هذا الملف التنفيذي إلى ما يبدو كبيانات عشوائية. تختفي أسماء الدوال في جدول الاستيراد، وتتلف رؤوس ملفات PE ، ويفقد الملف بأكمله بنيته. ثم تُدمج الحمولة المُموّهة في برنامج تحميل (Dropper) ، وهو ملف تنفيذي يبدو عاديًا ولكنه يحتوي على البرمجية الخبيثة المخفية كمورد أو قسم بيانات. عندما يُشغّل المستخدم برنامج التحميل، يُجري عملية XOR مرة أخرى باستخدام المفتاح نفسه لإعادة بناء البرمجية الخبيثة الأصلية، ثم يُنفّذها إما مباشرةً من الذاكرة أو يكتبها على القرص قبل تشغيلها. [ 13 ]
تُزيل هذه العملية العديد من المؤشرات التي تعتمد عليها برامج مكافحة الفيروسات. يتم إخفاء رأس MZ - وهو التوقيع الثنائي "MZ" الذي يُشير إلى بداية كل ملف تنفيذي لنظام ويندوز -تمامًا بواسطة عملية XOR. غالبًا ما تفحص برامج الأمان هذا التوقيع الثنائي عند البحث عن الملفات التنفيذية المُضمنة. يُحقق ترميز Base64 نتائج مماثلة من خلال طريقة مختلفة: فهو يُحوّل البيانات الثنائية إلى نص ASCII بحيث يبدو الملف التنفيذي كنص عادي (بدلاً من أن يبدو كبرنامج).
أظهرت الأبحاث التي أجريت في مسابقة التهرب الأمني باستخدام التعلم الآلي لعام 2020 أن هذه الأساليب قادرة على تجاوز أنظمة الكشف الحديثة. استخدم المشاركون مزيجًا من ترميز XOR، وترميز Base64، وإدخال التعليمات البرمجية غير المستخدمة للتحايل على جميع نماذج المسابقة الثلاثة بأقل من خمس محاولات لكل عينة. كما فشل الكشف القائم على الانتروبيا، وفي بعض الحالات، أدى ترميز Base64 فعليًا إلى خفض الانتروبيا مقارنةً بملفات البرامج الضارة الأصلية. [ 14 ]
إن بساطة هذه التقنيات هي ما يجعلها خطيرة للغاية. فعمليات التشفير XOR وBase64 لا تتطلب سوى مهارات برمجية أساسية لتطبيقها، ومع ذلك فقد أثبتت فعاليتها ضد مصنفات التعلم الآلي المتقدمة . وقد دفع هذا الأمر باحثي الأمن إلى البحث عن وسائل دفاع جديدة، بما في ذلك أدوات استعادة مفاتيح XOR الآلية والتحليل المعمق للموارد المضمنة في الملفات التنفيذية.
الأدوات الآلية
تتوفر أدوات متنوعة لتنفيذ أو المساعدة في إخفاء الشيفرة البرمجية. تشمل هذه الأدوات أدوات بحث تجريبية طوّرها أكاديميون، وأدوات هواة، ومنتجات تجارية كتبها محترفون، وبرامج مفتوحة المصدر . بالإضافة إلى ذلك، توجد أدوات لفك التشفير، تهدف إلى عكس عملية التشفير.
بينما تقوم معظم حلول التمويه التجارية بتحويل إما شفرة المصدر للبرنامج أو الشفرة البايتية المستقلة عن النظام الأساسي، أي الشفرة القابلة للنقل (كما هو مستخدم في Java و .NET )، فإن بعضها يعمل أيضًا بشكل مباشر على الملفات الثنائية المترجمة.
ترفيهي
قد يكون كتابة وقراءة شفرة المصدر المُبهمة لغزاً محيراً . وتُكافئ العديد من مسابقات البرمجة أكثر الشفرات المُبهمة إبداعاً، مثل مسابقة شفرة C المُبهمة الدولية ومسابقة شفرة Perl المُبهمة .
قد تُستخدم برامج بيرل القصيرة والمشفرة في توقيعات مبرمجي بيرل، والمعروفة باسم JAPHs (" مجرد مخترق بيرل آخر "). [ 21 ]
التشفير
استكشف علماء التشفير فكرة إخفاء الشيفرة البرمجية بحيث يصعب فك تشفيرها . وقد تمّ إضفاء الطابع الرسمي على هذه الفكرة في العديد من المقترحات المتعلقة بإخفاء عدم التمييز ، وهو عنصر أساسي في التشفير، إذا أمكن بناؤه بشكل آمن، فإنه سيسمح بإنشاء أنواع أخرى كثيرة من التشفير، بما في ذلك أنواع جديدة تمامًا لا يعرف أحد كيفية إنشائها. (أما مفهوم أقوى، وهو إخفاء الصندوق الأسود ، فمن المعروف أنه مستحيل بشكل عام). [ 22 ] [ 23 ]
مساوئ التمويه
- على الرغم من أن التعتيم قد يجعل قراءة البرنامج وكتابته وهندسته العكسية أمراً صعباً ومستهلكاً للوقت، إلا أنه لا يجعله مستحيلاً بالضرورة. [ 24 ]
- يُضيف ذلك وقتاً وتعقيداً إلى عملية البناء بالنسبة للمطورين.
- قد يجعل ذلك عملية تصحيح الأخطاء بعد إخفاء البرنامج أمراً بالغ الصعوبة.
- بمجرد توقف صيانة الكود، قد يرغب الهواة في صيانته، أو إضافة تعديلات عليه، أو فهمه بشكل أفضل. يُصعّب التشفير على المستخدمين النهائيين القيام بأمور مفيدة باستخدام الكود.
- يمكن لبعض أنواع التمويه (أي التعليمات البرمجية التي ليست مجرد ملف ثنائي محلي وتقوم بتنزيل ملفات ثنائية مصغرة من خادم الويب حسب الحاجة) أن تؤدي إلى تدهور الأداء و/أو تتطلب الاتصال بالإنترنت.
إشعار المستخدمين بالرموز المشفرة
تقوم بعض برامج مكافحة الفيروسات، مثل AVG AntiVirus [ 25 ] ، بتنبيه مستخدميها عند زيارة موقع ويب يحتوي على شفرة برمجية مُشفرة يدويًا، إذ يُعد إخفاء الشفرات البرمجية الخبيثة أحد أهداف التشفير. مع ذلك، قد يلجأ بعض المطورين إلى تشفير الشفرة لتقليل حجم الملفات أو تعزيز الأمان. قد لا يتوقع المستخدم العادي أن يُنبهه برنامج مكافحة الفيروسات بشأن شفرة برمجية غير ضارة، خاصةً من شركات موثوقة، لذا قد تُثني هذه الميزة المستخدمين عن استخدام البرامج المشروعة.
تمنع كل من موزيلا وجوجل إضافات المتصفح التي تحتوي على شفرة مشفرة في متاجر إضافات المتصفح الخاصة بهما ( فايرفوكس وكروم ، على التوالي). [ 26 ] [ 27 ]
التمويه وتراخيص حقوق النسخ
دار نقاش حول ما إذا كان التحايل على تراخيص البرمجيات ذات حقوق النسخ المفتوحة (Copyleft) بنشر شفرة المصدر بصيغة مشوشة يُعدّ مخالفًا للقانون، كما في الحالات التي يتردد فيها المؤلف في إتاحة شفرة المصدر. وقد تناولت رخصة جنو العمومية العامة (GNU GPL) هذه المسألة ، إذ اشترطت إتاحة "الصيغة المُفضّلة لإجراء التعديلات". [ 28 ] وينص موقع جنو الإلكتروني على أن "شفرة المصدر المشوشة ليست شفرة مصدر حقيقية ولا تُعتبر شفرة مصدر". [ 29 ]
برامج فك التشفير
برنامج فك التشفير هو أداة تُستخدم لتحليل شفرة المصدر من ملف تنفيذي أو مكتبة برمجية. تُعرف هذه العملية أحيانًا بهجوم "الرجل في النهاية" (أو هجوم "الرجل في المنتصف")، وهو مستوحى من هجوم "الرجل في المنتصف " التقليدي في علم التشفير. غالبًا ما تكون شفرة المصدر المُفكَّكة صعبة القراءة، إذ تحتوي على أسماء دوال ومتغيرات عشوائية، وأنواع متغيرات غير صحيحة، ومنطق يختلف عن شفرة المصدر الأصلية نتيجةً لتحسينات المُصرِّف.
تشويش النموذج
يُعدّ تشويش النموذج أسلوبًا لإخفاء البنية الداخلية لنموذج التعلّم الآلي . [ 30 ] يحوّل التشويش النموذج إلى صندوق أسود، وهو ما يتعارض مع الذكاء الاصطناعي القابل للتفسير . كما يمكن تطبيق نماذج التشويش على بيانات التدريب قبل إدخالها إلى النموذج لإضافة ضوضاء عشوائية، مما يخفي المعلومات الحساسة حول خصائص العينات الفردية ومجموعات العينات. [ 31 ]
انظر أيضاً
مراجع
- ↑ "ما هو التمويه (obfu)؟ - تعريف من موقع WhatIs.com" . موقع SearchSoftwareQuality . مؤرشف من الأصل في 2 فبراير 2019. تم الاطلاع عليه في 1 فبراير 2019 .
- ↑ بينستوك، أندرو (6 مارس 2003). "التشويش: إخفاء شفرتك عن أعين المتطفلين" . مؤرشف من الأصل في 20 أبريل 2008. تم الاطلاع عليه في 25 نوفمبر 2013 .
- ↑ أتوود، جيف (15 مايو 2005). "جيف أتوود، 15 مايو 2005" . Codinghorror.com. مؤرشف من الأصل في 9 يناير 2010. تم الاطلاع عليه في 25 نوفمبر 2013 .
- ↑ "التمويه" . Kenter.demon.nl. مؤرشف من الأصل في 4 مارس 2016. تم الاطلاع عليه في 25 نوفمبر 2013 .
- ↑ "دروس لغة C++ - الشيفرة المبهمة - مقدمة بسيطة" . DreamInCode.net. مؤرشف من الأصل في 28 يونيو 2008. تم الاطلاع عليه في 25 نوفمبر 2013 .
- ↑ "دروس لغة C - شفرة مبهمة بلغة C" . 7 يوليو 2011. مؤرشف من الأصل في 27 ديسمبر 2013. تم الاطلاع عليه في 25 نوفمبر 2013 .
- ↑ اعتبارًا من 25 نوفمبر 2013، الساعة 18:22 بتوقيت غرينتش. "Pe(a)rls in line noise" . Perlmonks.org. مؤرشف من الأصل في 16 يناير 2009. تم الاطلاع عليه في 25 نوفمبر 2013 .
{{cite web}}: صيانة CS1: الأسماء الرقمية: قائمة المؤلفين ( رابط ) - ↑ "التشويش - ويكي هاسكل" . 16 فبراير 2006. مؤرشف من الأصل في 30 أغسطس 2017. تم الاطلاع عليه في 3 مارس 2020 .
- ↑ مونتفورت، نيك. "الرمز المشفر" (ملف PDF) . مؤرشف من الأصل (ملف PDF) في 24 أبريل 2019. تم الاطلاع عليه في 24 نوفمبر 2017 .
- ↑ كولبيرغ، كريستيان؛ ثومبورسون، كلارك؛ لو، دوغلاس (21 يناير 1998). "تصنيع هياكل مبهمة رخيصة ومرنة وخفية" . وقائع الندوة الخامسة والعشرين لجمعية ACM SIGPLAN-SIGACT حول مبادئ لغات البرمجة - POPL '98 . نيويورك، نيويورك، الولايات المتحدة الأمريكية: جمعية آلات الحوسبة. الصفحات 184-196 . doi : 10.1145/268946.268962 . ISBN 978-0-89791-979-1.
- ↑ كولبيرغ، سي.؛ ثومبورسون، سي.؛ لو، دي. (يونيو 1998). "كسر التجريدات وتفكيك هياكل البيانات". وقائع المؤتمر الدولي للغات الحاسوب لعام 1998 (رقم التصنيف 98CB36225) . الصفحات 28-38 . doi : 10.1109/ICCL.1998.674154 . ISBN 0-8186-8454-2.
- ↑ لين، كولين؛ ديبري، سوميا (27 أكتوبر 2003). إخفاء التعليمات البرمجية القابلة للتنفيذ لتحسين مقاومتها للتفكيك الثابت . الصفحات 290-299 . doi : 10.1145/948109.948149 . ISBN 1-58113-738-9تم الاطلاع عليه بتاريخ 11 مارس 2026 .
{{cite book}}تم|website=تجاهله ( مساعدة ) - ↑ سيشين، فابريسيو؛ بوتاسين، ماركوس؛ لودرز، غابرييل؛ غوميز، هيتور موريلو؛ أوليفيرا، لويز س.؛ غريجيو، أندريه (2020). "لا حاجة لتعليم حيل جديدة للبرمجيات الخبيثة القديمة: الفوز في تحدي التهرب باستخدام عينات معادية قائمة على XOR". وقائع ندوة الاتجاهات العكسية والهجومية . الصفحات 1-10 . doi : 10.1145/3433667.3433669 .
- ↑ سيشين، فابريسيو؛ بوتاسين، ماركوس؛ لودرز، غابرييل؛ غوميز، هيتور موريلو؛ أوليفيرا، لويز س.؛ غريجيو، أندريه (2020). "لا حاجة لتعليم حيل جديدة للبرمجيات الخبيثة القديمة: الفوز في تحدي التهرب باستخدام عينات معادية قائمة على XOR". وقائع ندوة الاتجاهات العكسية والهجومية . الصفحات 1-10 . doi : 10.1145/3433667.3433669 .
- ↑ بن كورتوفيتش. "إخفاء عبارة "مرحباً بالعالم!"" . benkurtovic.com . مؤرشف من الأصل في 14 سبتمبر 2017. تم الاطلاع عليه في 18 أكتوبر 2017 .
- ↑ "لغة بايثون المبهمة" . wiki.c2.com . مؤرشف من الأصل في 14 فبراير 2017. تم الاطلاع عليه في 18 أكتوبر 2017 .
- ↑ "المحتوى السنوي الأول لشفرة بايثون" . code.activestate.com . مؤرشف من الأصل في 25 مايو 2023. تم الاطلاع عليه في 18 أكتوبر 2017 .
- ↑ domas (3 نوفمبر 2022)، xoreaxeaxeax/movfuscator ، مؤرشف من الأصل في 12 نوفمبر 2022 ، تم استرجاعه في 5 نوفمبر 2022
- ↑ حطمني 00 مُحوِّل الحركة: تحويل ملفات mov إلى كابوس RE مُحطِّم للروح، كريستوفر دوماس ، 25 سبتمبر 2015، مؤرشف من الأصل في 21 أكتوبر 2022 ، تم استرجاعه في 5 نوفمبر 2022
- ↑ ويليامز، آل (21 مارس 2021). "تعليمات واحدة تحكمها جميعًا: مُصرّف لغة سي يُصدر أمر MOV فقط" . هاكاداي . تم الاسترجاع في 23 أكتوبر 2023 .
- ↑ "JAPH – مجرد مخترق بيرل آخر" . pm.org . بيرل مونجرز. مؤرشف من الأصل في 16 مايو 2013. تم الاطلاع عليه في 27 فبراير 2015 .
- ↑ "اختراق في علم التشفير قد يجعل البرمجيات غير قابلة للاختراق" . مجلة وايرد . الرقم الدولي الموحد للدوريات 1059-1028 . مؤرشف من الأصل في 14 أبريل 2022. تم الاطلاع عليه في 14 مارس 2021 .
- ↑ جاين، أيوش؛ لين، هويجيا ؛ ساهي، أميت (2020). "التمويه غير القابل للتمييز من خلال افتراضات راسخة" . أرشيف الطباعة الإلكترونية لعلم التشفير . arXiv : 2008.09317 . مؤرشف من الأصل في 3 مارس 2022. تم الاسترجاع في 14 مارس 2021 .
- ↑ ""هل يمكننا إخفاء البرامج؟" بقلم بوعز باراك . Math.ias.edu. مؤرشف من الأصل في 23 مارس 2016. تم الاطلاع عليه في 25 نوفمبر 2013 .
- ↑ "حظر موقع ويب، والحل الوحيد هو تعطيل بروتوكول HTTPS... | AVG" . support.avg.com . ٢١ يوليو ٢٠٢٠. مؤرشف من الأصل في ٤ فبراير ٢٠٢٢. تم الاطلاع عليه في ٤ فبراير ٢٠٢٢ .
- ↑ في الساعة 05:01، توماس كلابورن في سان فرانسيسكو، 2 أكتوبر 2018. "جوجل تتخذ إجراءات ضد الشيفرة المُقنّعة في متجر كروم الإلكتروني" . www.theregister.co.uk . مؤرشف من الأصل في 12 نوفمبر 2019. تم الاطلاع عليه في 12 نوفمبر 2019 .
{{cite web}}: صيانة CS1: الأسماء الرقمية: قائمة المؤلفين ( رابط ) - ↑ سيمبانو، كاتالين. "موزيلا تعلن حظر إضافات فايرفوكس التي تحتوي على شفرة مشفرة" . زد نت . مؤرشف من الأصل في 5 مارس 2020. تم الاطلاع عليه في 12 نوفمبر 2019 .
- ↑ «الأساس المنطقي لعبارة "الشكل المفضل للعمل لإجراء تعديلات عليه" في رخصة جنو العمومية» . Lwn.net. مؤرشف من الأصل في 2 ديسمبر 2013. تم الاطلاع عليه في 25 نوفمبر 2013 .
- ↑ "ما هو البرمجيات الحرة؟" . gnu.org. مؤرشف من الأصل في 14 أكتوبر 2013. تم الاطلاع عليه في 18 ديسمبر 2014 .
- ^ تشو، مينجي؛ جاو، شيانغ؛ وو، جينغ؛ جراندي ، جون سي. تشن، شياو. تشن، تشونيانغ؛ لي، لي (2023). "نموذج التعتيم لتأمين الشبكات العصبية المنتشرة" .
{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal= - ↑ تشانغ، تيانوي؛ هي، زيتشنغ؛ لي، روبي ب. (12 يوليو 2018). "التعلم الآلي الحافظ للخصوصية من خلال إخفاء البيانات". arXiv : 1807.01860 [ cs.CR ].
للمزيد من القراءة
- سيد حمزة، جواد، ABCME: محرك تحويلي جديد ، المؤتمر الوطني السابع عشر للحاسوب، جامعة شريف للتكنولوجيا، طهران، إيران، 2012.
- ب. باراك، أ. غولدريتش، ر. إمباغليازو، س. روديتش، أ. ساهي، س. فادان، و ك. يانغ. "حول (استحالة) إمكانية إخفاء البرامج" . المؤتمر الدولي السنوي الحادي والعشرون لعلم التشفير ، سانتا باربرا، كاليفورنيا، الولايات المتحدة الأمريكية. دار نشر سبرينغر، سلسلة محاضرات في علوم الحاسوب، المجلد 2139، 2001.
- ماتياس، مايكل؛ نيك مونتفورت. "صندوقٌ مُظلم: التعتيم، واللغات الغريبة، وجماليات البرمجة" (ملف PDF) . وقائع المؤتمر السادس للفنون والثقافة الرقمية، جامعة كوبنهاغن لتكنولوجيا المعلومات، 1-3 ديسمبر 2005 ، الصفحات 144-153 . أُرشف (ملف PDF) من النسخة الأصلية في 23 يونيو 2008. تم الاطلاع عليه في 28 يونيو 2008 .
روابط خارجية
- المسابقة الدولية لشفرة C المبهمة
- حماية كود جافا عبر تشويش الكود ، مجلة ACM Crossroads، عدد ربيع 1998
- هل يمكننا إخفاء البرامج؟
- يوري ليفشيتس. ملاحظات المحاضرة حول إخفاء البرامج (ربيع 2005)
- c2: حساب الصندوق الأسود
- إخفاء البرمجيات
- شفرة المصدر
- تحويل البرنامج
