السلام عليكم
اخي اولا كلمة EP او OEP ليس بينهم فرق ولا وجود لها كل ما عليك معرفته هو انه اي برنامح يتم تنفيذه داخل المعالج ينفذ بالترتيب تعليمة ثم اللتي تليها واي ملف او برنامج هو عبارة عن list من التعليمات وكل تعليمة تعتمد علي التعليمة اللتي قبلها
مثلا تعليمة لجمع عددين
2+1=3 لكي تجمع العددين يجب اولا وضع القيم في المسجلات ثم جمع المسجلات والناتج يضع في المسجل الاول
لذلك سوف تضع العدد الاول 1 في مسجل ولنقل المسجل ecx و العدد 2 في المسجل edx ثم تقول للمعالج اجمع ecx مع edx
اذا
mov ecx,1 نفل العدد 1 للمسجل
mov edx,2 نفل العدد 2 للمسجل
add ecx,edx جمع المسجلات
الناتج سيوضع في ecx
انت لا تستيع تنفيذ امر add 1,2 لانه اين سيخزن الناتج الي الان هذا كلام اعتقد انك تعلمه
الان يمكن القول ان برنامج جمع عددين يتكون من ثلاث اسطر السابقة
وانت تعلم انه كل تعليمة تعظى عنوان
لكي ينفذ هذا البرنامج بشكل صحيح يجب ان يبدء من السطر الاول اي mov ecx,1 ثم mov edx,2 ثم add ecx,edx فقط اذا نفذتها بهذا الترتيب سيكون المسجل ecx قيمته 3
المعالج لا يعرف من اين يبدء لذلك انت يجب ان تقول له ابدء من السطر الاول ولذلك تضع القيمة اللتي سوف يبدء منها في PE entry point
يذهب المعالج لهذه القيمة ياخذها و يبدء التنفيذ من عندها
في برنامجنا البسيط اللذي يجمع عددين سوف تكون قيمة PE entry point هي عنوان امر mov ecx,1 يبدء منها ومن ثم اللتي تليها حتي يصل لامر جمع المسجلات وينفذه لكي تصبح قيمة المسجل ecx تساوي ثلاثه
تخيل لو وضعنا قيمة PE entry point عنوان السطر الثاني اذا المعالج سوف يقوم بتنفيذ تعليمتان فقط سوف يضع القيمة 2 في المسجل edx ثم يجمع المسجلات دون وضع القيمة 1 في ecx وفي هذه الحالة قيمة ال ecx صفر او اي شيء اخر ولذلك الناتج الله اعلم كم هو حسب القيمة المجهوله في مسجل ecx
لذلك تنفيذ اي برناج من نقطة غير صحيحة يولد نتائج خاطئة و يعتبر الكود البرمجي لا معنا له دون معرفة من اين يبدا
اذا برنامج بدون نقطة بداية صحيحة يساوي صف احرف دون معنى
ثانيا
عند تشغيل اي برنامج بعد النقر عليه المعالج لا يتعامل مع البرنامج و هو في الهارديسك السبب انه الهاردسك بطيء جدا بالنسبة لسرعة الرام في نقل البيانات لذلك تاخذ نسخة من برنامج من الهاردسك الي الرام نسخة طبق الاصل ثم يتعامل معها المعالج من الرام
الان حان وقت فهم التشفير
اذا اردنا تشفير برنامج هذا يعني اننا سو نبعثر التعليمات بدلا من انها مرتبة تسلسلي طبعا الاساليب كثيرة وهذا ما يميز نوع حماية عن اخرى
في مثالنا هذا برنامج جمع العددين سوف نبعثر التعليمات اي سيصبح
mov edx,2 نفل العدد 2 للمسجل
add ecx,edx جمع المسجلات
mov ecx,1 نفل العدد 1 للمسجل
لكن المشكلة انه المعالج لا يفم الا تنفيذ التعليمات بالترتيب لذلك لن تكون النتائج صحيحة بعد البعثرة لانه PE entry point هو عنوان اول تعليمة, اذا الحل هو كتابة لودر يقوم باعادة ترتيب البيانات بالشكل الصحيح حتي تكون النتائج صحيحة
لكي نفعل ذلك اولا اللودر يكتب او يحقن عند اول تعليمة اي عند عنوان PE entry point لانه المعالج سو يبدء من هنا و يتم نقل برنامجنا المبعثر الي عناوي اخره اثناء بدء اللودر سوف يقوم باعادم ترتيب الاسطر الثلاث الي شكلها الصحيح ول نقل سيرتبها تحت منه اي عند اكتمال اخر تعليمة من اللودر يجب ان تكون الاسطر الثلاث مرتبة صحيحا و الامر التالي بعد اخر تعليمة من اللودر هيا mov ecx,1 وثم الباقي
معني هذا انه لا يوجد شيء اسمه الخروج من اللودر و OEP -- ال OEP اصبحت ماهي الا تعليمة عادية مثل باقي التعليمات
اللودر موجود في الذاكرة وبرنامجك ضمن هذه التعليمات و كلمة OEP تعبير يشير الي اول تعليمة في الكود السليم بعد تصحيحة
هذا كلام مبسط كي نتخيل ما اللذي يحدث
شكرا لجميع الاخوة واتمني ان اكون اوضحت شيء ما
اخي اولا كلمة EP او OEP ليس بينهم فرق ولا وجود لها كل ما عليك معرفته هو انه اي برنامح يتم تنفيذه داخل المعالج ينفذ بالترتيب تعليمة ثم اللتي تليها واي ملف او برنامج هو عبارة عن list من التعليمات وكل تعليمة تعتمد علي التعليمة اللتي قبلها
مثلا تعليمة لجمع عددين
2+1=3 لكي تجمع العددين يجب اولا وضع القيم في المسجلات ثم جمع المسجلات والناتج يضع في المسجل الاول
لذلك سوف تضع العدد الاول 1 في مسجل ولنقل المسجل ecx و العدد 2 في المسجل edx ثم تقول للمعالج اجمع ecx مع edx
اذا
mov ecx,1 نفل العدد 1 للمسجل
mov edx,2 نفل العدد 2 للمسجل
add ecx,edx جمع المسجلات
الناتج سيوضع في ecx
انت لا تستيع تنفيذ امر add 1,2 لانه اين سيخزن الناتج الي الان هذا كلام اعتقد انك تعلمه
الان يمكن القول ان برنامج جمع عددين يتكون من ثلاث اسطر السابقة
وانت تعلم انه كل تعليمة تعظى عنوان
لكي ينفذ هذا البرنامج بشكل صحيح يجب ان يبدء من السطر الاول اي mov ecx,1 ثم mov edx,2 ثم add ecx,edx فقط اذا نفذتها بهذا الترتيب سيكون المسجل ecx قيمته 3
المعالج لا يعرف من اين يبدء لذلك انت يجب ان تقول له ابدء من السطر الاول ولذلك تضع القيمة اللتي سوف يبدء منها في PE entry point
يذهب المعالج لهذه القيمة ياخذها و يبدء التنفيذ من عندها
في برنامجنا البسيط اللذي يجمع عددين سوف تكون قيمة PE entry point هي عنوان امر mov ecx,1 يبدء منها ومن ثم اللتي تليها حتي يصل لامر جمع المسجلات وينفذه لكي تصبح قيمة المسجل ecx تساوي ثلاثه
تخيل لو وضعنا قيمة PE entry point عنوان السطر الثاني اذا المعالج سوف يقوم بتنفيذ تعليمتان فقط سوف يضع القيمة 2 في المسجل edx ثم يجمع المسجلات دون وضع القيمة 1 في ecx وفي هذه الحالة قيمة ال ecx صفر او اي شيء اخر ولذلك الناتج الله اعلم كم هو حسب القيمة المجهوله في مسجل ecx
لذلك تنفيذ اي برناج من نقطة غير صحيحة يولد نتائج خاطئة و يعتبر الكود البرمجي لا معنا له دون معرفة من اين يبدا
اذا برنامج بدون نقطة بداية صحيحة يساوي صف احرف دون معنى
ثانيا
عند تشغيل اي برنامج بعد النقر عليه المعالج لا يتعامل مع البرنامج و هو في الهارديسك السبب انه الهاردسك بطيء جدا بالنسبة لسرعة الرام في نقل البيانات لذلك تاخذ نسخة من برنامج من الهاردسك الي الرام نسخة طبق الاصل ثم يتعامل معها المعالج من الرام
الان حان وقت فهم التشفير
اذا اردنا تشفير برنامج هذا يعني اننا سو نبعثر التعليمات بدلا من انها مرتبة تسلسلي طبعا الاساليب كثيرة وهذا ما يميز نوع حماية عن اخرى
في مثالنا هذا برنامج جمع العددين سوف نبعثر التعليمات اي سيصبح
mov edx,2 نفل العدد 2 للمسجل
add ecx,edx جمع المسجلات
mov ecx,1 نفل العدد 1 للمسجل
لكن المشكلة انه المعالج لا يفم الا تنفيذ التعليمات بالترتيب لذلك لن تكون النتائج صحيحة بعد البعثرة لانه PE entry point هو عنوان اول تعليمة, اذا الحل هو كتابة لودر يقوم باعادة ترتيب البيانات بالشكل الصحيح حتي تكون النتائج صحيحة
لكي نفعل ذلك اولا اللودر يكتب او يحقن عند اول تعليمة اي عند عنوان PE entry point لانه المعالج سو يبدء من هنا و يتم نقل برنامجنا المبعثر الي عناوي اخره اثناء بدء اللودر سوف يقوم باعادم ترتيب الاسطر الثلاث الي شكلها الصحيح ول نقل سيرتبها تحت منه اي عند اكتمال اخر تعليمة من اللودر يجب ان تكون الاسطر الثلاث مرتبة صحيحا و الامر التالي بعد اخر تعليمة من اللودر هيا mov ecx,1 وثم الباقي
معني هذا انه لا يوجد شيء اسمه الخروج من اللودر و OEP -- ال OEP اصبحت ماهي الا تعليمة عادية مثل باقي التعليمات
اللودر موجود في الذاكرة وبرنامجك ضمن هذه التعليمات و كلمة OEP تعبير يشير الي اول تعليمة في الكود السليم بعد تصحيحة
هذا كلام مبسط كي نتخيل ما اللذي يحدث
شكرا لجميع الاخوة واتمني ان اكون اوضحت شيء ما