ما هو التعتيم على الكود؟ كيفية إخفاء الرمز الخاص بك لجعله أكثر أمانًا

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

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

ثم جاء الإنترنت وغير كل شيء.

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

وفي أغلب الأحيان ، يمتلك هؤلاء الأشخاص المهارات اللازمة لاستغلال التعليمات البرمجية المعيبة.

و هذا يأخذنا إلى اليوم. إنه وقت تهديدات الأمن السيبراني غير المسبوقة. ويبدو أن أخبار الهجمات الإلكترونية تأتي يوميًا.

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

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

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

ما هو التعتيم على الكود؟

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

والأهم من ذلك ، أن تقنيات تشويش الكود قد تغير البنية والطرق التي يستخدمها البرنامج للعمل ، لكنها لا تغير مخرجات البرنامج أبدًا.

تكمن المشكلة في أن العديد من تقنيات التعتيم على الكود يمكن أن تضيف إلى حمل البرنامج وتزيد من وقت التنفيذ.

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

فيما يلي تقنيات تشويش التعليمات البرمجية الستة الأكثر استخدامًا المستخدمة اليوم.

1. إزالة البيانات الزائدة

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

سيؤدي القيام بذلك إلى تبسيط قاعدة التعليمات البرمجية وتقليل سطح الهجوم الذي تدافع عنه.

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

2. تحويل البيانات

الشيء التالي الذي يجب فعله هو تحويل البيانات التي تعالجها التعليمات البرمجية الخاصة بك لجعلها غير قابلة للتعرف عليها.

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

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

String s = "Hello World"; Into: String s = new String(decryptString("SGVsbG8gV29ybGQ="));

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

وعند دمجها مع بعض تقنيات تشويش الكود الأخرى ، فإن تحويلات البيانات هي خط دفاع أول فعال.

3. استخدم تشويش أمر العملية

أحد المتطلبات الصعبة للتعتيم على الشفرة هو أنك لا تزال بحاجة إلى الكود الخاص بك للعمل على النحو المنشود عند الانتهاء.

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

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

كمثال ، ألق نظرة على المقتطف التالي ، الذي يحسب مجموع ومتوسط ​​100 رقم:

int i=1, sum=0, avg=0 while (i = 100) { sum+=i; avg=sum/i; i++; }int i=1, sum=0, avg=0 while (i = 100) { sum+=i; avg=sum/i; i++; }

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

في المقتطف التالي ، يُنشئ المتغير الشرطي "عشوائي" بنية كود أكثر تعقيدًا مما يجعل فك التشفير أكثر صعوبة:

int random = 1; while (random != 0) { switch (random) { Case 1: { i=0; sum=1; avg=1; random = 2; break; } case 2: { if (i = 100) random = 3; else random = 0; break; } case 3: { sum+=i;avg=sum/i ; i++; random = 2; break; } } }

4. حاول تصحيح الأخطاء

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

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

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

5. استخدم العنوان العشوائي

For almost thirty years, errors related to memory handling have been the most common software vulnerabilities hackers exploit – even though every programmer knows that the problem persists.

And it's not just among beginners. Around 70% of the vulnerabilities in Google's Chrome web browser stem from memory errors.

The reality is, it's all but impossible to prevent all memory programming errors, especially if you're using languages like C and C++. But what you can do is include some memory randomization features in your code that will help.

At execution, if your code and data's virtual addresses get assigned random values, it gets much harder to find and exploit any unpatched vulnerabilities.

Plus, it adds another benefit, too. It makes it so that even a successful hack of your code is difficult – if not impossible – to replicate. That alone makes it much less likely that an attacker will waste their time trying to hack your software.

6. Rotate the Obfuscated Code

As much as the above techniques work to frustrate attackers, they're far from a perfect defense. Anyone with enough time and skills will still find a way to defeat them. But that brings us to one of the most essential obfuscation techniques of all.

Since all obfuscation techniques aim to increase the complexity of an attacker's work, anything you can do to set them back to square one is a great defensive measure. So, to keep your code protected, use the internet to your advantage.

You can issue periodic updates that rotate the nature and specifics of the obfuscation techniques you're using. Every time you do, all the work someone may have been putting into cracking your software becomes a waste of time.

If you rotate your obfuscation tactics often enough, it won't be worth it for anyone to try and keep up an analysis long enough to succeed.

Security Through Obscurity

The bottom line here is that there's no such thing as 'unhackable' code. No matter how hard a programmer tries, there's always going to be a vulnerability somewhere. Not that you shouldn't keep trying, though.

But in the real world, your code doesn't have to be perfect. It just has to be hard enough to crack that nobody in their right mind would bother trying. And for those who aren't in their right mind, it just has to be complicated and time-consuming enough to keep them at bay.

And that's just what the six tactics above can help you accomplish. But remember, no defense comes without a cost. When deploying these options, make sure to weigh the execution-time penalties they may create against the benefits they provide.

If you're working on something especially sensitive, throwing every possible curveball might be worth it. But if you're writing a quote of the day generator – maybe don't worry as much.

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

صورة مميزة بواسطة ThisIsEngineering من Pexels.