تقييم الموضوع :
  • 3 أصوات - بمعدل 3.33
  • 1
  • 2
  • 3
  • 4
  • 5
كيف تحمي تطبيقك بشكل جيد باستخدام الدنغل(Dongle)
#1
المشاركة الأصلية كتبت بواسطة ArbCracker في 21-07-2008 الساعة 03:01 PM:
مقدمة:
أكثر الناس اليوم و خصوصا في عالمنا العربي, يسيئ استخدام الدنغل او يستخدمه بشكل غير لائق مما يؤدي بالنهاية إلى كسر البرنامج المحمي به بثواني, النقطة الاضعف في حماية برنامج ما بدنغل هي دمج او ربط حماية الدنغل(Dongle) في البرنامج نفسه وهذا ما يقوم به المبرمج وليس الشركة المصنعة للدنغل(Dongle), و لا تعتقد نهائيا أنك بمجرد استخدامك لدنغل في حمايتك لبرنامج هذا يعني أنّ برنامجك أصبح من الصعب كسره, إذا هدفك أنت كمبرمج تريد أن تصعب كسر تطبيقاتك على الكراكر هو أن تقوم بربط برنامجك بالدنغل بطريقة قوية بحيث تجعل عمل برنامجك بدون الدنغل شيئ مستحيل فصله, ودائما ليس هناك شيئ مستحيل!.
إذا رأيت إي شركة مصنعة للدناغل تقول لك أنّه يمكن حماية التطبيق بدنغل الخاصة بها بطريقة لا يمكن كسرها نهائيا, فاعلم تماما أنهم يضحكون عليك و أنهم يصطادون في الماء العكرة, و هم فقط يروجون لمنتجهم للأشخاص الذين يجهلون قوة ادوات الكراكر و يجهلون خبرتهم في كسر البرامج.
شعارك دائما: لا يوجد برنامج يعمل ولا يمكن كسره. و تختلف درجة هذه الصعوبة من نوع حماية إلى حماية آخرى, و كل الكراكر متفقون على أنّ الحماية بالدنغل هي من أصعب الحمايات, هذا فيما إذا تم استخدامها بالطريقة الصحيحة.
كيف يعمل الكراكر, فكرة مبسطة:
أهم اداة لدى الكراكر هي ال debug tool مثل برنامج Olly الشهير, بحيث تمكنه من المشي على الكود الخاص بك خطوة بخطوة طبعا الكود يكون بصيغة الاسمبلي, هذا فيما لو كان Win32, بعدها يستطيع تحديد جميع ال Calls أو الاستدعاءات التي قمت بها إلى الدنغل و تغييرها بطريقة بحيث يعمل برنامجك في حال وجود الدنغل أو عدمه و هنا يكون برنامجك قد تم كسره, Cracked.
نصائح لحماية تطبيقك بشكل جيد باستخدام الدنغلDongle
1- قراءة ال Manuals و الاطلاع على ال SDKs:
على المبرمج ان يقرأ ال Manuals او ال SDK التي تعطى مع الدونغل, و هي أهم خطوة في طريقك لحماية الدنغل بشكل صحيح, وقد رأيت الكثير من الناس الذين يستخدمون حماية الدنغل دون قراءة سطر واحد في ال Manual الذي يأتي مع الدنغل, لعلهم يستصعبون الامر و يجدونه معقد بحيث يبعدهم عن قرائته. حيث أنّ التعامل مع الدنغل ليس Standard و يختلف من شركة مصنعة لشركة آخرى.و كل شركة لها توابعها و مكتباتها الخاصة ويجب الاطلاع عليها كلها, بل و تمحيصها.
2- بعثر توابع استدعاء الدنغل (Distribute Function Calls)
قم بتوزيع ال Function calls الخاصة بالدنغل في برنامجك و ليس فقط استدعاءها عند إقلاع البرنامج, طبعا هذا سوف يصعب على الكراكر المهمة, فإزالة عدة إستدعاءات مبعثرة في التطبيق اصعب بكثير من استدعاء واحد يتم عند إقلاع التطبيق. فيجب أن يكون الاستدعاء الاول عند بداية البرنامج فقط هو بوابة المتاهة التي سوف يدوخ بها الكراكر.
3- فحص متكرر(Frequent Check)
يجب أن تقوم بعمل تفحص لوجود الدنغل بشكل متكرر, إي أن تقوم بفحص وجوده كل دقيقة مثلاً, فليس من المعقول أن يتم التفحص فقط عند بداية فتح البرنامج, هذا سوف يمكن المستخدم من استخدام عدة نسخ, ماذا تقول كيف هذا؟!لو قام المستخدم بتنصيب عدة نسخ على عدة كمبيوترات متقاربة من بعضها, و لو فرضنا أنك تقوم بفحص وجود الدنغل فقط عند بدء التشغيل, سوف يضع الدنغل في الحاسب الاول و يشغل البرنامج فيعمل, و من ثم يضعه في الحاسب الثاني و من ثم يشغل البرنامج فيعمل و هكذا...., ولو كان هناك فحص متكرر لوجود الدنغل مثلا باستخدام Timer لما تمكن المستخدم من فعل هذا.
4- استخدام ذاكرة الدنغل:
1- استخدم ذاكرة الدنغل في أمور تجعل من عمل البرنامج بدونها مستحيل, مثلا:جزء من الكود هام جدا, مثلا يكون هذا الكود هو المسؤول عن إقلاع البرنامج, و يتم جلبه من الدنغل و إضافته إلى البرنامج عند بدء التشغيل.
2- بعض البارامترات و المتحولات الهامة لعمل البرنامج, و يتم جلبها إيضا من الدنغل في كل مرة نحتاج إليها.
3- إذا كان لديك خوارزميات تشفير ما تستخدمها في البرنامج, فضع ال Keys الخاصة بها داخل ذاكرة الدنغل.
4- بعض الارقام العشوائية في الذاكرة الغير مستخدمة و تقوم بفحص وجودها و تطابقها من البرنامج
5- يمكنك ايضا فتح ميزات أو سماحيات في برنامجك بناء على ذاكرة الدنغل, حيث لكل ميزة ثمنها, لتوضيح الفكرة أكثر, لو فرضنا أن البرنامج الذي تقوم بعمله هو يقوم بالقراءة و الكتابة من ملف, فيمكن عمل نسختين من البرنامج, الاولى قراءة فقط, و الاخرى قراءة و كتابة و كل نسخة لها ثمنها.
5- لا تستخدم شروط فحص بسيطة:
بعد قراءة قيم المتحولات من ذاكرة الدنغل استخدم شروط فحص معقدة بعض الشيئ عوضا عن شروط الفحص العادية, على سبيل المثال:
إذا أردت فحص قيمة متحول تساوي 255 فلا تقوم بفحصها هكذا

If (MyVar = 255)…..
و إنما حاول استخدام صيغة أعقد مثلا,
If ((MyVar + 90)/7 = SQRT (MyVar)*3)…..
صدقني أن ال Cracker سوف يمضي الكثير من الوقت في فهم هذه الصيغة و خصوصا أنّ الكود الذي يراه منخفض المستوى(اسمبلي).
6- استخدام ال Key الخاص بالدنغل:
أغلب الدناغل اليوم تأتي بحيث تستطيع وضع 128 bit key بداخلها, و يمكن عمل الكثير من الامور باستخدامه, خاصية التشفير و فك التشفير, نقوم مثلا بتشفير بعض القيم باستخدام غالبا باستخدام البرنامج الذي يأتي لبرمجة الدنغل, وتخزين هذه القيم في التطبيق مشفرة, بعدها نقوم بأرسال النص الغير مشفر إلى الدنغل ليقوم بتشفيره باستخدام ال Key و يعيد النتائج لنقوم بمقارنته مع القيم المشفرة. فإذا كانت متطابقة نقوم بتشغيل البرنامج و إلا نقوم بإغلاقه.
7- استخدم الحماية الخاصة بالشركة:
دائما يأتي برنامج من الشركة يقوم بحماية البرنامج بشكل تلقائي وحتى بدون كتابة اي سطر كود واحد, فقط يطلب منك البرنامج بدون الكود لكي يقوم بحمايته, من الافضل استخدام هذه الحماية فوق الحماية التي تقوم بها أنت فهم يقومون على الاغلب بتشفير الكود داخل التطبيق حسب ال 128 bit key المخزن داخل الدنغل و يتم فك التشفير عند بدأ تشغيل البرنامج , و يضعون الكثير من الحمايات و العقبات التي تعيق تقدم الكراكر في كسر البرنامج و هي مفيدة جدا.
مثلا يقدمون حمايات كالتالي:

Compress sections.
Merge sections.
Protect Sections.
Force Trim Sections.
Quit if debugged.

8-الحماية من ال Emulator:
أولا ما هو ال Emulator: هو عبارة عن برنامج software يحاول محاكاة اي تقليد عمل الدنغل بحيث يعمل البرنامج بدون وجود الدنغل الاصلي و إنما باستخدام هذا ال Software ,حيث يعتمد مبدأ عمله على التنصت على ال Port الخاص بالدنغل ليراقب جميع المخرجات و المدخلات على هذا ال Port و بعدها ليقوم بتقليدها. اصبحت هذه البرامج اليوم كثيرة الانتشار, ولكن لها دواء ناجع و شافي, و هو توليد أرقام عشوائية باستخدام التابع Random مثلا, و إرسالها إلى الدنغل ليتم تشفيرها. و من ثم نقوم بإرسال القيم المعادة(المشفرة) لكي يتم فك تشفيره و من ثم نقارنها مع القيمة البدائية التي تم توليدها بواسطة التابع Random.
مثال توضيحي:
لو فرضنا تم إعادة الرقم 364732 من خلال التابع Random, بعد إرساله إلى الدنغل ليقوم بتشفيره(Encrypt) باستخدام 128 bit key حصلنا على القيمة 894837199, ثم نقوم بإعادة إرساله إلى الدنغل ليقوم بفك تشفيرها (Decrypt) فإذا حصلنا على القيمة 364732 نتأكد أن الدنغل موجود وأنّ القيم لم يتم إعادتها باستخدام Emulator, حيث أنّ ال Emulator يعتمد على التسجيل و بما أنّ نستخدم التابع Random فالتوليد عشوائي فماذا سوف يسجل ال Emulator؟!
ملاحظة: جميع الدناغل تحتوي على توابع تشفير و فك التشفير لقيم نصية ترسلها إلى الدنغل و يتم هذا التشفير باستخدام خوارزميات تشفير معقدة(AES) باستخدام مفتاح تشفير 128 bit.
في النهاية: إذا اتبعت النصائح الموجود أعلاه إن شاء الله سوف يصبح من المستحيل كسر برنامجك بدون حصول ال Cracker على دنغل
و أغلب إن لم يكن 99% من ال Crackers ليس لديهم ثمن الدنغل الاصلي و لن يشتروه لكي يحاولوا كسر برنامجك,و حتى لو استطاع أحدهم الحصول عليه سصبح المشوار بعيد جدا على ال Cracker وصدقني سوف يقضي الكثير من الوقت لكي يستطيع كسره, و خصوصاً إذا وضعت بعض الفلفل و الملح على التطبيق بحيث لا يستطيع تذوقه بالشكل المناسب.
طبعا إذا وقع دنغل ما بيد كراكر نقطة الضعف سوف تكون بعد تشغيل البرنامج سوف يكون هناك نسخة غير مشفرة من البرنامج في الذاكرة و بعدها يستطيع عمل Dump و من ثم استخلاص نسخة غير مشفرة و بعدها يستطيع التعامل معها كما هو الحال في البرنامج الذي قمت بكسره.
طبعا مطوروا شركة الدنغل أكتشفوا هذا الشيئ, لذلك تراهم يقسمون البرنامج إلى قطع كثيرة و لكنها مشفرة و تبقى قطعة واحدة غير مشفرة و هي التي تقوم بفك تشفير إي قطعة من هذه القطع حسب الطلب.و هنا سوف يكون من الصعب جدا على القرصان تجميع هذه القطع و استخلاص برنامج غير مشفر....
و هذا كله يتم باستخدام أداة الحماية التي يوفرونها مع دناغلهم لذلك من الضروري الاعتماد عليها فوق الحماية التي تقوم بها.
أرحب بإي فكرة أو نقد و لكم جزيل الشكر على القراءة,و السلام عليكمSmile.
قطرة الماء تـثـقب الحجر.. لا بالعنف. لكن بتكرار المحاولة
أخي لن تنال العلم إلا بستة... ذكاء و حرص و اجتهاد و بلغة...و صحبة أستاذ و طول زمان
أعضاء أعجبوا بهذه المشاركة : M!X0R , M!4re , devpro , [email protected] , vosiyons
#2
كلام رائع اخي
في الحقيقة انا متابع لبرامج المحمية بالدانقل هناك برامج سهل كسرها وهناك برامج صعب كسرها لأنهم يضيفون تشفير على نصوص وهناك دالة أيضا يضيفونها تقوم بتغيير عناوين برنامج مما يصعب تتبعها
أعضاء أعجبوا بهذه المشاركة :
#3
جميل
حقيقه بدات من مده قصيره عل مشروع لعمل دونغل للحمايه بدوائر opensource
ك اردوينو و esp32 و غيرها ، ربما ساضعه في القريب العاجل
أعضاء أعجبوا بهذه المشاركة : الباحث , x-member , devpro , alaa2003


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 3 ) ضيف كريم