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

هل كسر الحماية تتلخص في القفز

رائج
بدأه MSVS في 20 ديسمبر 2005 · 53 رد · 11,626 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#26

السلام عليكم

أخي عطية طبعاً لا اوافقك الرأي..فيما اتجهت اليه...لكن وافقتك الرأي حينما قلت "اغلب ....بطريقة واحدة أو متعددة"

وافقتك بعدد الطرق.

اعزائي لامناص من المنطقية في البرمجيات ...وارجوا ان تتفهموني ....يا صفر أو واحد ياهوووووووو :D

أخي Asm4all بارك الله فيك ...طبعا لم تستخدم أي مقارنة...وماذا عن الشفرات داخل iostream ؟ :blink:

#27
خالد الصالح كتب:
أخي  Asm4all بارك الله فيك ...طبعا لم تستخدم أي مقارنة...وماذا عن الشفرات داخل iostream  ؟  :blink:

لو تحب اكتبهولك أسمبلي كامل مفيش مانع , بس تعترف انه لا توجد تعليمة مقارنه واحدة على السيريال :P

#28
Main  PROC :DWORD, :DWORD, :DWORD, :DWORD
SN  DWORD  ?
.......... اقرأ السيريال من المستخدم بالطريقة التي تحبها
    lea    eax, Bad
    add    eax, SN
    call   eax
.......... كمل البرنامج مثل ما تحب
Main  ENDP
Bad   PROC
..... اكتب أي كود
Bad   ENDP
Other PROC
..... أي كود 
Other ENDP
Good  PROC
..... الكود المطلوب تنفيذه بعد ادخال سيريال صحيح
Good  ENDP

تشيل النقاط وتضع مكانها مقارنات مليش دعوه :D مش شغلتي

الكود الى الآن يفعل وظيفته ولا يحتوي على تعليمة مقارنة واحدة

#29

"مليش دعوه" حلوه منك

:D

نرجع للموضوع

".......... كمل البرنامج مثل ما تحب"

"الكود المطلوب تنفيذه بعد ادخال سيريال صحيح..." وكيف تعرف ان المستخدم ادخل سيريال صحيح؟

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

تحياتي لك

تم تعديل هذه المشاركة بواسطة خالد الصالح في 14 يناير 2006 في 20:32

#30

السلام عليكم

معليش أخي / Asm4all خلينا نمشي حبة حبة عشان نستفيد :)

أنا فهمت التالي :

تعلن عن ثلاث إجراءات ، كل إجراء له عنوان (مؤشر) في الذاكرة

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

ستستدعي الإجراء الذي عنوانه في الذاكرة نفس قيمة المتغير الذي أدخله المستخدم . تمام ؟

فإذا كان المستخدم أدخل القيمة الصحيحية ( التي تساوي مؤشر الإجراء الصحيح في الذاكرة ) فإن البرنامج سينفذ الإجراء الذي يدخل المستخدم للبرنامج .

وإلأ سيذهب به للـ ؟؟؟؟؟؟؟ الله أعلم .

أرجو الرد إذا كان فهمي صحيح أم لا ! لأن هناك أسئلة تتبع هذا الفهم .

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#31

كلام الاخ MSVC سليم 100% - في حال ادخال رقم خاطئ سيتم الانتقال الى عنوان غير معروف وقد يتم استدعاء سلاسل داخل او خارج البرنامج لا تمت لاجرائية بصلة.. بالتالي نحن بحاجة الى وضع مصيدة اخطاء للـ exceptions كي يتم تنفيذ اجرائية Bad ان كان هذا ما تريد.

كان بدها Q عشان امور الـ exceptions :D

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#32

كثييييييير أخي Xacker :lol:

اذا وضعنا مصيدة أخطاء فهذا يعني اما إجراء سليم أو خاطئ...بهذا تأتي العمة :D دالة المقارنة

انتوا تدوروا في حلقة(loop) لازم تطلعوا منها (jmp) ... :)

تم تعديل هذه المشاركة بواسطة خالد الصالح في 14 يناير 2006 في 22:52

#33

طالما اني صرت في الموضوع,

انا اتفق معك اخي خالد في امر هو ان التعامل مع البيانات اولا واخيرا سيتم عبر وحدة المعالجة وبالتالي هو 0 و 1 لكن السؤال هو, هل طرح "هل تملك جميع الحمايات تعليمة مقارنة؟" فانا لا اتفق على الاجابة بـ "نعم" لامر بسيط جدا, ليس برمجيا لكن منطقيا, المبرمج يتعامل مع ما يراه ويكتبه, هو لا يكتب وظيفة تقوم بالمقارنة بشكل مباشر بل يحاول قدر الامكان استخدام طرق اخرى في التحايل على القرصان.. نظريا, هذه الحماية لا تحوي على مقارنة من الشكل العام البرمجي لها. لكن عندما ناتي الى حيز التجميع والتنفيذ فطبعا هناك الكثير مما نجهله ونعلمه يدور ضمن المعالج ليتحكم بهذه التعليمات ويحدد نتيجتها.. كل تستطيع الجزم بان جميع ما يجري ضمن المعالج نتيجته مقارنة؟ لا اعتقد ذلك.. صحيح انه 0 و 1 لكن قد يتم على هذا الـ 0 والـ 1 في وظيفة lstrcmp مثلا عمليات بوليانية في المعالج.. ان كان هناك مصدر يتحدث بلغة الاسمبلي ويقوم بان بعض تعليمة في المعالج مصيرها ان تنفذ بشكل مقارنة فاتنا به لنستفيد...

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#34

السلام عليكم

هلا أخوي خالد

لدي نقطة أود أن توضحها لكي تتضح الصورة بشكل أكبر:

هل تقصد بوجود تعليمة مقارنة (ولو حتى مقارنة واحدة) في الحماية أنها كفيلة بكسر البرنامج أم تقصد وجودها بغض النظر في تأثيرها على كسر الحماية؟

#35
اقتباس
ستستدعي الإجراء الذي عنوانه في الذاكرة نفس قيمة المتغير الذي أدخله المستخدم . تمام ؟

تصحيح بسيط :

تستدعي الاجراء الذي عنوانه في الذاكرة يفرق عن عنوان اجراء أخر قيمة المتغير الذي أدخله المستخدم

يعني انا مش باخد العنوان نفسه لأن البرنامج مش بيشتغل في مكان ثابت , لكن انا واخد عنوان اجراء أخر كمرجع , واخذ من المستخدم البعد بين الاجراء المرجع والاجراء المطلوب

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

function1();
function2();
.....
.....
functionx();
main() {
  .....
  { // خطوات البرنامج الرئيسية
    .....
    .....
    .....
  }
  .....
}

نحولها لهذا الشكل

function1();
function2();
.....
MyTarget()  { // خطوات البرنامج الرئيسية
    .....
    .....
    .....
}
.....
functionx();
main() {
  ....
  DWORD  i, SN = 0;
  char   Msg[10] = {'\0'};
  ReadFile(GetStdHandle(STD_INPUT_HANDLE), Msg, sizeof(Msg)-1, &i, NULL);
  SN = atoi(Msg);
  _asm lea  eax, Function1
  _asm add  eax, SN
  _asm call eax
......
}

هات أي مثال , وجرب معه هذه الفكرة , وحاول كسره بعملية تبديل Jxx أو شيء مثل هذا

المشكلة ليست في وجود تعليمات مقارنة في الكود ككل , ولكن وجود مقارنة للتأكد من صحة السيريال

هذه الفكرة لا تتأكد اصلا من صحة السيريال , مش مشكلتي السيريال صح ولا غلط , مشكلة المستخدم , هو اللي البرنامج هينفجر في وشه لما يدخل سيريال غلط :rolleyes:

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

وليه تعقد نفسك وتبحث عن مصادر , ما نرجع الموضوع لأصله - هي تعليمة المقارنة بتتم كيف أصلا داخليا في المعالج ؟

عن طريق عملية الطرح , والتأثير على الـ Flags

بعدها تأتي تعليمات Jxx المشروطة - بالاعتماد على الـ Flags

طيب اذا استخدمت تعليمات لا تؤثر على الـ Flags , فهل القفز المشروط بعدها له معنى ؟ بالطبع لا

تركيبة المقارنة والقفذ تدخل في الجمل التي نقول فيها "لو كذا افعل كذا"

لكن برنامج يسير دون أي اختبارات فمن اين تأتي له تعليمة مقارنة ؟

#36
اقتباس
طيب اذا استخدمت تعليمات لا تؤثر على الـ Flags , فهل القفز المشروط بعدها له معنى ؟ بالطبع لا

حلو هالكلام وانا معك فيه, مسالة المقارنة واستخدام IF ليس امرا حتميا, كما في اي برنامج تشفير ملف, لفك تشفير هذا الملف يجب ان ازوده بكلمة السر الصحيحة, بهذه الكلمة يتم اجراء تغييرات في الملف بغض النظر عن صحة الكلمة.. بالنهاية لدينا اما ملف سليم يعمل بدون مشاكل او يحوي وجوه ضاحكة من رموز الالة :P

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#37
Xacker كتب:
حلو هالكلام وانا معك فيه, مسالة المقارنة واستخدام IF ليس امرا حتميا, كما في اي برنامج تشفير ملف, لفك تشفير هذا الملف يجب ان ازوده بكلمة السر الصحيحة, بهذه الكلمة يتم اجراء تغييرات في الملف بغض النظر عن صحة الكلمة.. بالنهاية لدينا اما ملف سليم يعمل بدون مشاكل او يحوي وجوه ضاحكة من رموز الالة :P

يا سلاااام , مثال في الصميم , حتى الاختبار اللي بيتم بيكون على الـ CRC فقط , ولو حاولت كسره انت الخسران لأنك هيطلعلك مثل ما بيقول X وجوه ضاحكة وتخاريف ما لها معنى :rolleyes:

تم تعديل هذه المشاركة بواسطة Xacker في 15 يناير 2006 في 23:07

#38

يعني اللي فهمته انو رايح تبني برنامجك بصيغة رياضية بحته ؟!!

وإلا لن يعمل البرنامج...

بذلك لن تستطيع عمل اي برنامج الا القليل منها والتي تعتمد على الحسابات وهذا امر غير مجدي

اضافة إلى انه لابد من وجود دالة رياضية تزودك بالنتائج الصحيحة وهذا صعب جدا

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

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

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

تحياتي لكم

تم تعديل هذه المشاركة بواسطة خالد الصالح في 15 يناير 2006 في 17:43

#39

ايه دخل الرياضيات المعقدة في الموضوع , وما سبب استنتاجك ان البرامج يجب ان تعتمد على الحسابات لعمل الفكرة معها ؟

الفكرة بمنتهى البساطة , لو عندك برنامج (اي برنامج) يحتوي على 100 إجراء ويوجد اجراء رئيسي (صلب البرنامج) , يمكن أخذ اكبر كم من صلب البرنامج ووضعه في اجراء جديد يبقى معانا 101 اجراء بدل 100 فقط

رتب الاجراءات في الذاكرة بحيث تضع الاجراء الجديد بعد بعض الاجرائات

حدد اجراء من هذه الاجراءات واختاره كمرجع بالنسبة لك

السيريال المطلوب عو الفرق في العناوين بين الاجراء القاعدة والاجراء الهدف

تعالى ننفذ الكود هذا سطر سطر

_asm lea  eax, Function1
 _asm add  eax, SN
 _asm call eax

في السطر الأول , نأخذ عنوان بداية الاجراء Function1 (نعتبره القاعده)

في السطر الثاني , نجمع على هذا العنوان السيريال الذي أدخله المستخدم ( لم نختبره هل صحيح أم خطأ)

السطر الثالث , نستدعي العنوان الموجود في eax (لا نعرف عنه شيء)

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

اما لو ادخل قيمة خطأ , فالبرنامج أيضا سوف يستدعي عنوان خطأ

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

وطالما انك مقتنع وبشدة ان لكل حماية دالة مقارنة مهما تغير اسلوبها , فلن يثنيك عن هذا الكلام أحد

لأني انتهيت من توضيح الفكرة, على ما أعتقد

#40

كلامك واضح جداً يا أخي / Asm4all

فعلاً سينفذ البرنامج الإجراء الصحيح في حال تم إدخال السريال الصحيح .

ولكن ..........

هل هذا الحل عملي ؟

ماذا تسفعل عندما يدخل المستخدم سريال خاطئ ؟

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#41
MSVS كتب:
ماذا تسفعل عندما يدخل المستخدم سريال خاطئ ؟

لن أفعل شيء

المستخدم هو من سيفعل

المستخدم هيخبط دماغه في الحيط لما البرنامج يهنج معاه :lol: عشان دخل سيريال غلط

تخيل بدل ما تطلع الرساله التافهه سبب كسر البرامج اللي بتخبر المستخدم ان السيريال خطأ , لا انا اريح دماغي ومش مشغل البرنامج خالص , لما يبقى يجيب السيريال السليم يبقى يشوف البرنامج :D

#42

هلا أخوي خالد

لم تجاوب على تساؤلي السابق.

#43
اقتباس
ماذا تسفعل عندما يدخل المستخدم سريال خاطئ ؟

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

هنا تكمن حماية

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#44

http://www.freewebtown.com/fusionrulez/dat...eyMe(Fixed).zip

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

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#45

السلام عليكم

بعد غيبة طويلة ولظروف لم تسمح لي للاتصال بالمنتدى العزيز وهذه الظروف قد ابعدتني يئا ما عن عالم الكمبيوتر

اريد ان اشكر الاخوة المشرفين جميعا على عملهم المتواصل

اريد ان اعطي وجهة نظر في هذا الموضوع واظن اننا توصلنا الى انه يمكن برمجة ما ذكر دون الولوج الى مقارنة ما كما ذكر في المثال

_asm lea eax, Function1

_asm add eax, SN

_asm call eax

وعلى سبيل المثال هناك طريقة اخرى يمكن ان تستعمل في هذا السياق كمثل ان نضع قطعة من اكود في السيريال نفسه ولا بد ان يكون كل واحد قد عثر مرة ما على سيريال طويل يحتوي على عدة ارقام قد تكون سوى كود وقد يزاد له بعض المرات التشفير او غير ذلك

والطريقة كما يلي :

ناخذ قطعة من الكود في وسط البرنامج وسيكون هذا هو السيريال الذي يجب الحصول عليه وقد يكون ايضا على شكل ملف dat او licence او غيرها ونعطي سيريال او ملف license للبرنامج الغير مسجل حيث يكون فيه الكود مغاير سواء نبرمج فيه شئا خطئا عمدا يعطينا exception او كود تنقصه بعض الوظيفات. وهكذا حين يشتغل البرنامج يقوم بتحميل الكود اللي عندك في مكانه وسط البرنامج وسيشتغل بدون مقارنة حيث اذا كان البرنامج غير مسجلا سيعمل بوظائف ناقصة او سيعطي خطئا ويتوقف واذا كان عندك الكود الصحيح والذي سياخذ من وسط ملف ما و من وسط الرجستري فستكون المور كما يرام. وهذه الطريقة قد تشبه شئا ما لوظائف بعض الدنغل.

الى اللقاء

#46
MSVS كتب:
خذ هذا المثال :

عندي برنامج بعد أن إنتهت مدته التجريبية يظهر زر تنفيذ البرنامج غير ممكن .

أكتشفت عندها أن البرنامج له أكثر من حماية حتى الآن :

2- هناك إجراء يتحقق من الفترة الزمنية .

الحماية الثانية ، ما هي الطريقة لحلها ؟

أو أن هناك طرق أخرى ؟

*hint*

The GetSystemTime function retrieves the current system date and time

so

BP GetSystemTime

تم تعديل هذه المشاركة بواسطة fish3r في 22 ديسمبر 2006 في 19:56

#47
اقتباس
ماذا تسفعل عندما يدخل المستخدم سريال خاطئ ؟

لن أفعل شيء

المستخدم هو من سيفعل

المستخدم هيخبط دماغه في الحيط لما البرنامج يهنج معاه عشان دخل سيريال غلط

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

لا برافوو w6w20050411134107651e12869.gif

اخى انت فعلا اثبت انه يمكن عمل حماية بدون مقارنة لكن فى البرامج التجارية الكبيرة

يكون دائما هدف البرنامج هو منع خطا المستخدم (مش اوديه فى داهة ويا عالم العنوان الى هيرحله تنفيز البرنامج فيه ايه" مثلا لوب مفتوح كان اغلاقة او وضع حد له موجود فى سطر سابق" احرقله المعالج) دى طبعا مش هتنفع

كما اننا لو رجعنا اصلا للمقارنة تعليمة CMP وهى عملية طرح عددين من بعضهم اى انها مثل طريقتك

ويقوم المعالج بالباقى بعد رفع راية ZF

نحن نريد طريقة عملية يصعب كسرها وليس برنامج يتحول الى Virus :P اذا ادخل المستخدم السيريال خطا :D

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#48

وهذا Patch Me لا يعتمد على القفزة في حما يته

ال Patch Me لصاحبه Mr Paradox من فريق AT4RE

PatchMe06

#49
AND كتب:
وهذا Patch Me لا يعتمد على القفزة في حما يته

PatchMe06

الأمثلة كثيرة

وكل شيئ متوقف على مدى ابداع مبرمج الحماية

d4baa0.gif
#50

قبل ان تصل الى هاذه النقطه

هنالك التشفير والضغط وغيرها الكثير

اما القفزات فلا تعتمد كليا على هاذا الشي

:wacko:

Programming Yemen

www.pryem.com

mail:pirate_yemen@hotmail.com

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

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

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

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

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