الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف تحمي تطبيقك بشكل جيد باستخدام الدنغل(dongle)

بدأه Wael Dalloul في 21 يوليو 2008 · 10 رد · 13,294 مشاهدة · في منتدى تحليل التطبيقات البرمجية وحمايتها
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مقدمة:

أكثر الناس اليوم و خصوصا في عالمنا العربي, يسيئ استخدام الدنغل او يستخدمه بشكل غير لائق مما يؤدي بالنهاية إلى كسر البرنامج المحمي به بثواني, النقطة الاضعف في حماية برنامج ما بدنغل هي دمج او ربط حماية الدنغل(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 و من ثم استخلاص نسخة غير مشفرة و بعدها يستطيع التعامل معها وكسرها.

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

و هذا كله يتم باستخدام أداة الحماية التي يوفرونها مع دناغلهم لذلك من الضروري الاعتماد عليها فوق الحماية التي تقوم بها.

أرحب بإي فكرة أو نقد و لكم جزيل الشكر على القراءة,و السلام عليكم:).

تم تعديل هذه المشاركة بواسطة Wael Dalloul في 21 يوليو 2008 في 15:57

3

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#2

السلام عليكم

ياعيني عليك ياوائل شرحك حلو كتير :clapping:

بس عندي إضافة بسيطة لا تكثر من الاستدعاءات للدنغل في البرنامج احتمال يصير بطيء :blush:

وهذا ينبني على التجربة . :happy:

#3

بهار آخر للتشتيت

أستخدام دوال لانفع لها ( مثل استفسار عن اسم ملف ) تحمل اسم دالة حماية

#4
اقتباس
أستخدام دوال لانفع لها ( مثل استفسار عن اسم ملف ) تحمل اسم دالة حماية

هذه لم تعد تنفع ,, عيون الكراكرز أصبحت اوسع مع الوقت :lol:

البهارات الحقيقية في نظري هي الـCode Obfuscation+Virtualizing ثم الـCode Obfuscation+Virtualizing ثم الـCode Obfuscation+Virtualizing ثم الـCode Obfuscation+Virtualizing ...

سيحتاج الكراكر على الأقل الى 12 عين و 5 رؤوس و وكيس بن محوج كي يستطيع فهم جزء من الكود اذا استخدمت التقنية باحتراف .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#5
اقتباس
بس عندي إضافة بسيطة لا تكثر من الاستدعاءات للدنغل في البرنامج احتمال يصير بطيء

لا أعتقد أنه هناك مشكلة في الاستدعاءات فالامر يتم بغاية السرعة و خصوصا مع USB Dongle ولن يؤثر نهائيا على سرعة التطبيق.

اقتباس
البهارات الحقيقية في نظري هي الـCode Obfuscation+Virtualizing ثم الـCode Obfuscation+Virtualizing ثم الـCode Obfuscation+Virtualizing ثم الـCode Obfuscation+Virtualizing ...

هل تقصد تكرار عملية Code Obfuscation أكثر من مرة على نفس الكود؟ أخشى أنه في النهاية لن يعمل!

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#6

لا لا ,, انا كررت الجملة للتأكيد فقط :lol:

وبالفعل اذا تم تكرار الأمر فلن يعمل البرنامج .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#8

السلام عليكم ورحمة الله

ما شاء الله موضوع رائع ومفيد جداً

بارك الله فيك وجعله في ميزان حسناتك

واسمح لي بنقل الموضوع لمنتديات الأقصر سيستمز للاستفادة

بارك الله فيك

مختار أحمد

موقع الويب : http://www.luxorsystems.com

منتدياتنا :http://www.luxorsystems.com/forum/index.php

للمراسلة

luxorsystems@hotmail.com

للاتصال التليفوني

00201228085123

#9

الف شكر لكل الشباب عموما وللأخ وائل خصوصا على هالموضوع االراااااااااااااااااااااااااااائع

--==iceDragon==--
ماجستير نظم دعم القرار الذكية IDSS

#10

شكراً جزيلاً أخي وائل... الله يعطيك ألف عافية...

فعلاً موضوع رائع وجميل جداً :thumb_up:

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

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

والله أعلم...

تم تعديل هذه المشاركة بواسطة أنس العم في 7 أكتوبر 2009 في 02:07

أنس العم

#11

السلام عليكم ورحمة الله وبركاته .

موضوع قيم جدا ومشاركات فعالة من الإخوة الأعضاء .

ولكن ما هو دور برنامج Dotfuscator في هذا الموضوع ، أنا اطلعت عليه ولم أفهم كثيرا آلية عمله .

لو ممكن التوضيح ولكم الشكر .

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…