كيف تجعل برامجك أصعب للكسر

عام 0 geek4arab الوسوم:,

أنا لا أقول أبدا أنة يمكن منع كسر البرامج بشكل قطعي ونهائي , فحسب معلوماتي أن كبار شركات العالم لم تستطع تحقيق هذا الهدف …. ! , لذلك تبدو عبارة جعل البرامج أصعب للكسر أفضل من حماية البرامج من الكسر .. وهذا سر إختياري لعنوان الموضوع

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

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

-لا تستخدم أسماء ذات معنى للتوابع والإجرائيات إذا كنت مهتم بالحماية .مثال : • function RegistrationOK: Boolean;

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

-لا تستخدم أبدا رسائل-إعلام إنتهاء الصلاحية أو عدم سماحية كلمة المرور .مثال :
Invaled Password , please try agine ?
بالتأكيد لن يقوم الهاكر بتفحص 500 كيلوبايت مثلا من شفرة لغة التجميع Assimply لكي يعرف أين يوجد الجزء الخاص من الكود الذي يجب علية تعديلة لكسر كلمة مرورك . ولكنة سيجرب أولا إدخال كلمة عشوائية لكي يعرف ماهي رسالة-إعلام عدم سماحية كلمة المرور , ويترقب الرسالة الناتجة , والتي تكون مخزنة بصيغة نصية في الملف التنفيذي ويسهل العثور عليها , ثم يبحث عنها في شفرة الآلة لملفك التنفيذي , وبالتأكيد هذا هو الجزء من الشفرة الذي يحوي شرط سماحية كلمة المرور والذي يمكن تعطيلة أو قلبة ببساطة فائقة .. لذلك لا تسمح لة بتحديد موقع العمل بسهولة , تجنب كتابة هذا النوع من الرسائل , أو إفصلة بعيدا عن الجزء الخاص بإختبار كلمة المرور , ويفضل أن تشفرة بطريقة ما.

-جزء برنامجك إلى ملفات متعددة
صدقني إن هذا الجزء مهم وجيد , كما أن لة فوائد عديدة أخرى غير حماية البرنامج (ترقية البرنامج بسهولة ) .

-لا تستخدم أبدا أسماء ملفات ذات معنى .
مثال:
License.Dat
لا تجعل الهاكر يتوقع أي ملف يجب أن يبدأ بة أولا , وحاول تضليلة بتشتيت الإجراءات في عدة ملفات بدلا من تجميعها في ملف واحد , فإذا كانت أسماء الملفات تدل على معناها , أظن أنك تكون خدمت الهاكر خدمة كبيرة وسهلت علية .

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

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

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

-أضف شفرات checksums خاصة.
مثل شفرات التعرف على حجوم ملفات برنامجك ومنع البرنامج من العمل بشكل صحيح عند حدوث أي تغيير في حجوم الملفات , . لإن معظم حالات كسر البرامج يحدث معها تغيير بالزيادة أو النقصان على حجم البرنامج المكسور .

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

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

-خزن كلمات المرور في أماكن غير معتادة .
بالتأكيد لن تخزن كلمة مرورك في ملف نصي بالإسم Password.txt في نفس مجلد البرنامج ؟؟؟؟
بإمكانك تخزينها في أحد حقول قاعدة البيانات المستخدمة , أو خزنها بملف وأعطة إمتداد DLL وضعة في مجلد النظام SYSTEM32 مثلا , وليكن إسمة RDC123.dll على سبيل المثال …..

-إذا أردت إستخدام رسائل توضيحية للمستخدم , لا تستخدم سلاسل محرفية مخزنة .
إن أول شيء سيحاول الهاكر البحث عنة هو الرسائل النصية لإنة يستطيع بواستطها تحديد أجزاء الكود المختلفة ومعرفة المكان الذي يجب العمل فية , فسيعرف الجزء الخاص بإختبار كلمة المرور مثلا من رسالة : ‘شكرا لتسجيل الدخول’
لذلك أنصحك بتخزينها جميعها في مكان واحد , على شكل إجراءات مثلا ولتكن في ملف DLL خاص يتم إستدعائها منة ويفضل تنفيذ خوارزمية تشفير معينة مثل عمليات النسخ من السلاسل ,, لإن ذلك سيقطع علية طريق معرفة المكان المناسب للبدء ,..

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

-إستخدم أسماء محجوزة أو شبيهه بها أو أسماء للنظام .
بالتأكيد لن تقول لي أنك تخزن كلمة المرور في متحول بالإسم Password ؟؟؟؟
إستخدم أسماء تبدو وكأنها من تعليمات البرنامج والنظام , أو تبدو كأنها رموز ست عشرية
مثال : ’73AF’ or ‘GetWindowText ‘or ‘handle73’).
ربما ستقطع بذلك علية إمكانية التوقع السهل لمتحولاتك .

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

PHP CODE:
0001
0002
0003
0004
0005
0006

<?php • {$IFDEF trial}
• ... no action here ...
• {$ELSE}
• ... advanced functionality for registered user ...
• {$ENDIF}

?>

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

لمتابعة الموضوع على المنتدى :

http://www.arabteam2000-forum.com/index.php?showtopic=57371

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة