Admin Admin
المساهمات : 83 تاريخ التسجيل : 12/03/2013
| موضوع: سلسلة حماية البرمجيات (منع الباتش و إسترجاع الكود) الثلاثاء مارس 12, 2013 4:24 pm | |
| فى الحقيقة كنت لا أنوى تكملة هذه السلسلة و لكن وردتنى رسائل خاصة من أعضاء أقدرهم و كذلك طلبات من أعضاء و مشرفين على العام لدرجة إنى خجلان من نفسي
اليوم سنبدأ بدرس جميل عن منع الباتش و إسترجاع الكود أولا ما هو الباتش هو طريقة لتغيير أحد شروط البرنامج فمثلا لو أنت كتبت فى الأوتوبلاى if serial== 123456 فإنها تترجم عند أرجل المعالج بنتيوم إلى cmp ,eax 123456 je xxxxxxxxx حيث xxxxxxxx هو عنوان بدء التفعيل و التسجيل و كلمة je هى jump if equal و cmp هى إختصار compare أى مقارنة فماذا يفعل الكراكر الكراكر غالبا ما تكون قدراته البرمجية محدودة و لماذا يهتم بالبرمجة ما دامت الصيغة التى ستظهر عليها كل المقارنات فى الأسمبلى متشابهة لأنه فى الظلام كل البقرات سوداء كذلك فى الأسمبلى كل المقارنات هى cmp متبوعة ب je لذلك يكتفى الكراكر بتحويل je إلى jne التحويل من jump if equal إلى jump if not equal و يعدل المقطع البرمجى كالآتى من cmp ,eax 123456 je xxxxxxxxx إلى cmp ,eax 123456 jne xxxxxxxxx يعنى التغيير من je إقفز فقط لو تساوي السيريال مع الصحيح إلى jne إقفز فقط لو لم يساوى السيريال الصحيح لدينا طريقتين هنا الطريقة الأولى منع الكراك بجعل الملف يتلف لو تم عمل باتش و هى طريقة مضمونة 100% و لها عيب واحد و هو أنها تتأثر بالفيرس و لكن إكتشفت طريقة لحل تلك المشكلة الطريقة الثانية جعل البرنامج يقبل الباتش ثم عند تشغيله يسترجع كوده الأصلى
نهاية الحلقة الأولى أترككم لطرح أى إستفسارات و أعدكم بالمواصلة غدا فى المشاركة الأولى لأن هذا أمر شرحه يطول و أنا الليلة مشغول
الحلقة الثانية سنبدأ بأول سيناريو للحماية و هو إسترجاع الكود بعد إنتهاءك تماما من كتابة كل أكوادك و تعليقاتك و قبل تصدير المشروع أضف الكود الآتى لصفحة التسجيل التى إسمها مثلا page1
[ - الكود:
-
s1 = Application.GetPageScript("Page1", "On Show"); s2 = Application.GetPageScript("Page2", "On Show"); s3 = Application.GetPageScript("Page3", "On Show"); s4 = Application.GetPageScript("Page4", "On Show"); s5 = Application.GetPageScript("Page5", "On Show"); ser = 123456 if s1~=s2 then Page.Jump("Page5"); elseif s5~=s2 then Page.Jump("Page4"); else end ما هذا ؟؟؟؟ المشروع ليس به إلا صفحة واحدة و أنت تقارن حتى صفحة 5 ؟؟ هل تمزح ؟؟
8-) 8-) 8-) لا أعزائى حاشا لله و لكن بعد قليل سنقوم بتكرار هذه الصفحة بالأمر duplicate حتى نصنع منها 5 نسخ متطابقة و لاكن ............................ إنتظر قم بنسخ زر التسجيل فى نفس الصفحة و أزد عليه الكود الآتى - الكود:
-
bk1 = Page.GetObjectScript("Button1", "On Click"); bk2 = Page.GetObjectScript("Button2", "On Click"); user = Input.GetText("Input1"); ser = 123456 if bk1 ~= bk2 then result = Dialog.Message("Notice", "not matched", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); elseif user+0 == ser+0 then Dialog.Message("Notice", "good", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); else result = Dialog.Message("Notice", "bad", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); end طبعا ستغيرون طريقتكم للتسجيل كما تشاؤون المهم لابد من الأسطر 1 و 2 و 5
و لا تنسوا إخفاء الزر الجديد المنسوخ حديثا الإجراء الأخير قم بتغيير كود الصفحة 3 و الصفحة 4 بحيث تستدعيان بعضهما البعض يعنى صفحة 3 بها إقفز للصفحة 4 و الصفحه 4 بها إقفز للصفحة 3
ما هذا ؟؟؟؟؟؟؟؟؟؟ حلقة مفرغة ؟؟؟؟؟؟؟؟؟ ههههههههههه نعم لكن من سيقع فيها هو الكراكر فلا تنزعجوا
كيفيه و آلية العمل سيبدأ الكراكر بمحاولة تغيير كود الصفحة فإن غيرها سيحدث الآتى سيقارن البرنامج بين كود الصفحة 1 و الصفحة 2 فإذا لم يكونا متساويين سينتقل البرنامج إلى الصفحة 5 و هى طبعا نسخة من الكود الأصلى و على سبيل الإحتياط ستتم المقارنة بين الصفحة 5 و الصفحة 2 فلو كانتا متساويتين سيعمل البرنامج أما لو كان الكراكر عنيد و قام أيضا بتعديل الصفحة 2 إذا فقد طفح منه الكيل فليذهم إلى جحيم الصفحة 4 عندها سيدور فى حلقة لا نهائية 34343434 إلى الأبد و لكن أنت طبعا ستجرب فلو وصلت لهذه الحالة بسبب التجربه فقم بإستدعاء مدير المهام alt+ctrl+del وقم بإنهاء البرنامج و ماذا لو حاول الكراكر تغيير الشرط من يساوى إلى لا يساوى ؟؟ هذا الكود موجود فى زر التسجيل و زر التسجيل يقارن نفسه مع الزر غير النشط و المخفى الذى يحتوى على الكود الأصلى و يعطى رسالة غير مطابق و هنا سيعتقد أن الذى لا يطابق هو السيريال بينما الذى لا يطابق هو كود الزرين حاولو تغيير أكواد الصفحة عند on show و شغلو البرنامج ثم غيرو شرط المقارنة فى زر التسجيل و شغلوا البرنامج و أنا جاهز لإستفساراتكم
أتطلع إلى ألا يسألنى أحد السؤال التقليدى و ماذا لو قرأ الكراكر السيريال من الكود و هو 123456 و كتبه بكل بساطه فإجابة هذا السؤال موجودة فى توقيعى و فى درس منع قنص السيريال
أترككم للإستفسار و معكم الملف المفتوح
http://www.multiupload.com/6LEG86JXW7 استفساري الاول : سوف اشرح لك شئ بسيط لان سؤالى مبني على هذا الشرح ....
نفترض اني وضعت في برنامجي الاكواد التاليه في on startup وليس في on preload للصفحه ..
اذا كان البرنامج اول تشغيل اظهر للمستخدم رساله ان البرنامج تجريبي لمدة 10 أيام ثم تابع تشغيل البرنامج ... ثم بعد انتهاء ال 10 ايام سوف يقفز البرنامج الى ديالوج التسجيل وليس صفحه
مش ممكن ان الباتش يجعل البرنامج لا يشعر بكود التحقق من انتهاء الفتره التجريبيه وبالتالي يتابع البرنامج عمله .. من دون الدخول من الاساس الى التفاصيل التي تفضلت بشرحها
يتبع ...
ولا لا يعطى البرنامج أى رسائل خطأ إلا فى حالة واحدة و هى عندما لا تدخل سيريال من الأساس و ليتك أرفقت صورة الخطأ ثانيا الكود الخاص بأخذ سكربت الصفحة كود مرن جدا و يسمح لك بأى صفحه و أى إجراء و يمكنك إستعمال أكثر من صفحة للمقارنة و سوف تختار الصفحات التى بها الأكواد التى تخشى عليها و سوف تختار الإجرائية المناسبة من هذه الصفحة يعنى on preload on show إلخ و لا تعتمد على مقارنة مرة واحدة و إليك نصيحة ذهبية قم بعمل نسخة من الصفحة التى تظهر للمسجلين ليشعر الكراكر بأنه قد كسر البرنامج لكنها صفحة ستكون خالية هى و أزرارها من أى أكواد و قم بإستدعائها إذا شعرت بتغير الكود و أظهر فيها رسالة نظام مزورة تقول فيها إن الملف الفلانى تشاجر مع الملف العلانى و ذهبا سويا لقسم الشرطة الفلانى عندها سيعتقد الكراكر أن الملف قد تلف نتيجة الباتش فقط عندما تحس بتغير فى الكود و ليس سريال خطأ
النصيحة البرونزية كرر كود التحقق من تطابق الصفحات فى كل أزرار المشروع حتى زر الخروج و حتى زر الثلاجة إن أمكنك لا تزعل من المزاح فالموضوع جاف نوعا و صعب و لابد من بعض المزاح
و دعنا نرجع للجد للديالوج قم بعمل أكثر من نسخة من الديالوج و هنا سنستخدم الدالة Application.GetDialogScript و ممكن إرجاع محتوياته للأصل عن طريق Application.SetDialogScript وواضح من إسمها أنها تتبع الفئة Application وهى الأخرى متوفرة بشكل إفتراضى بالبرنامج طبعا بفرض أنك كررت الديالوج أكثر من مرة بغرض المقارنة
كذلك عندك طريقة أن تقوم بمراقبة أى عدد من الصفحات من صفحة المشروع بالأمر Application.GetPageScript و إعادة كود أى صفحة لما كانت عليه Application.SetPageScript و لكن أنا لا أعتقد بوجود كود يراقب كود المشروع و نظرا لهذا فلابد من وجود نقطة أخرى للمقارنة و لاحظ أن كل الأكواد المذكورة هنا فى الرد أو الموضوع و الخاصة بالإسكربت كلها لها شقين GET و SET و لاحظ أن SET وظيفته إرجاع الإسكربت السابق تخزينه فى متغير أو صفحة أو زر أو أى ماكان فمثلا يمكنك تخزين كود صفحة فى كود زر لن يستعمل فى المشروع الخلاصة شغل خيالك و لكن كرر ما تقرره أكثر من مرة
و أنا منتظر أى إستفسار عذرا اخ خالد نرجو منك ان تتحمل اسئلتنا فقد تبدو لك بسيطه ولكن بالنسبه لنا صعبه لان الموضوع جديد بالنسبه لنا ....
هل لو وضعت كود التحقق من اكواد الصفحه التي تحتوي على اكواد التسجيل فقط يكون كافي بدون عمل اي مقارنات للصفحات الاخرى ..؟
نفترض ان الصفحات لا تشمل اي اكواد بالفعل لان اكواد البرنامج في ازرار فقط كيف يمكن عمل المقارنه ؟
يتبع ... لسؤال مش واضح حتى لو وضعت كود التحقق ...... لازم تحدد فين يعنى فى نفس الصفحة ؟ فى زر عليها ؟ فى صفحة المشروع؟؟ فى صفحة أو زر ثانى ؟؟ ...... حدد لو تكرمت لو كان قصدك متقارنش بين صفحات يبقى لازم تكون مخزن الكود الأصلى و ناوى تسترجعه و ممكن فى الحالة دى تحضره بدالة get ثم من دالة text تخزنه و لازم تشفره لأنه مش معقول تحط اكوادك بدون تشفير و ممكن تخلى صفحة أو عدة صفحات من المشروع تراقب صفحة المشروع و فى الحالة دى حتقارن الكود الحالى مع كود تكون مخزنه و لو قصدك إنه متعملش مقارنات خالص و تعمل إسترجاع للكود كل مرة تبقى جميلة جدا علشان مفيهاش مقارنة تثير الكراكر بس لاحظ إن بعد ما ترجع الكود لازم لازم تعمل منقارنة من أي صفحة من المشروع لأنك لو إكتفيت كل مرة بإرجاع الكود فقط حيبقى سهل تنكسر على فكرة ممكن تستخدم كود الخروج من ضمن الأماكن إلى تعمل منها مقارنة لأنه مش مشكوك فيه و طبعا مش شرط زر الخروج أنا بقول كود الخروج يعنى موجود فى كل الصفحات فى الحدث on shutdown فى صفحة المشروع و فى الحدث on close للصفحه العادية و أحداث صفحة المشروع لن تكون مثيرة للشك لو اجابتى مش كافية أعد صياغة سؤالك بتوضيح أكثر فكرة مش بطالة
| |
|