# تعتيم (برمجة)

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

## ملخص

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

## التقنيات

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

### أدوات آلية

توجد مجموعة متنوعة من الأدوات التي تساعد في تعتيمالتعليمات البرمجية أو تنفيذها. وتشمل هذه الأدوات أدوات البحث التجريبية التي أنشأها الأكاديميون، وأدوات الهواة، والمنتجات التجارية التي كتبها المحترفون، وبرامج المصدر المفتوح. توجد أيضًا أدوات إزالة التعتيم التي تحاول إجراء التحويل العكسي.
على الرغم من أن غالبية حلول التعتيم التجارية تعمل عن طريق تحويل إما كود مصدر البرنامج، أو الكود الثنائي المستقل عن النظام الأساسي كما يستخدمه جافا ودوت نت، هناك أيضًا بعض البرامج التي تعمل مباشرةً على الثنائيات المترجمة.
* يمكن العثور على بعض أمثلة بلغة بايثون في الأسئلة الشائعة الرسمية حول برمجة بايثون وفي أماكن أخرى.
* يستخدم مُجمِّع movfuscator C الخاص بـ x86_32 ISA تعليمات mov فقط من أجل الشويش.

### للترفيه

يمكن أن يكون كتابة وقراءة الكود المصدري المُشوش أمرًا مثيرًا للعقل. تُقدِّم العديد من مسابقات البرمجة مكافأة للكود الأكثر تشويشًا بشكل إبداعي، مثل مسابقة الكود C المشوش الدولي ومسابقة الكود Perl المشوش.
يمكن استخدام برامج بيرل القصيرة والمشوشة في توقيعات مبرمجي بيرل Perl.

### التعمية

لقد استكشف خبراء التعمية فكرة تعتيم النص المصدري بحيث تصبح عملية الهندسة العكسية للبرنامج صعبة من الناحية التعموية. وقد ظهر ذلك رسميًا في العديد من المقترحات الخاصة بتعتيم عدم التمييز (indistinguishability obfuscation)، وهي بدئية تعمية من شأنها، إذا أمكن بناؤها بشكل آمن، أن تسمح بإنشاء العديد من أنواع التعمية الأخرى، بما في ذلك أنواع جديدة تمامًا لا يعرف أحد كيفية صنعها. (من المعروف أن فكرة التعتيم باستخدام الصندوق الأسود (black-box obfuscation) أقوى من غيرها، ومن المستحيل تطبيقها بشكل عام.)

## عيوب التعتيم

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

### إخطار المستخدمين بكود التعتيم

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

### التعتيمورخص copyleft

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

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

يمكن لبرنامج فك التشفير إجراء هندسة عكسية لكود المصدر من ملف قابل للتنفيذ أو مكتبة. يُطلق على فك التشفير أحيانًا اسم "هجوم الرجل في النهاية" (man-in-the-end, mite)، استنادًا إلى الهجوم التشفيري التقليدي المعروف باسم "هجوم الرجل في المنتصف". إنه يضع كود المصدر في أيدي المستخدم، على الرغم من أن كود المصدر هذا غالبًا ما يكون من الصعب قراءته. من المحتمل أن يحتوي كود المصدر على أسماء دوال ومتغيرات عشوائية، وأنواع متغيرات غير صحيحة، ويستخدم منطقًا مختلفًا عن كود المصدر الأصلي (بسبب تحسينات المترجم).

## التعتيمالنموذجي

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