almohammdih منتديات المحمدية
عدد المساهمات : 922 نقاط : 2354 تاريخ التسجيل : 14/01/2010
| موضوع: الهندسة العكسية للمبتدئين الدرس الثالث Nag Removal +Aesthetic Patching الأحد مارس 14, 2010 7:07 pm | |
|
هذا الدرس من أصعب الدروس ويحتاج إلي تركيز شديد فستجد به العديد من المطلحات الهامة جدا التي يجب فهمها وهذا الموضوع يعتبر مدخل رئيسي إلي ال Pakers و ال Protectors بعض البرامج عند بداية تشغيلها في بداية تشغيلها تقوم بإظهار رسالة تطلب منك التسجيل أو تطلب منك الإنتظار لثوان قبل أن تبدأ في تشغيل البرامج وبعضها يكون الرسالة في نهاية البرنامج عند غلقه هذه الرسائل تسمي nag screens ال nags سواء ظهرت في بداية أو نهاية البرنامج فمن الطبيعي أنها قبل أن تظهر يكون هناك سؤال هل البرنامج مسجل أم لا وبناءا علي الإجابة يتم تحديد ظهور ال nag من عدمه
في هذا الدرس سنري كيفية التخلص من ال nags سنقوم في البداية بالدراسة علي برنامج صغير صمم لهذا الغرض Register Me وبعدها سنقوم بالدراسة علي برنامج حقيقي حمل الملف بالمرفقات
وبالطبع سنستخدم OllyDBG النسخة الأصلية غير مضاف إليها أي إضافات [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] قم بتشغيل Register Me و لا حظ ما يحدث
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]
إضغط ok
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]
قم بغلق البرنامج
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]
إذن هناك nag في بداية التشغيل وفي نهاية التشغيل
الآن قم بفتح Register Me بإستخدام OllyDBG وتابع
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]
F8
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة] [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]
F8
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]
F8
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]
F8
من الواضح و إذا نظرنا لما بعد القفز سنجد أن هذا الأمر هو الذي سيحدد ظهور الناج سكرين من عدمه و إذا نظرت إلي Z-FLAG ستجد أنه يساوي صفر أي أنه لن يتم القفز وبالتالي ستظهر الناج ونحن نعلم من الدرس الأول كيفية عبور هذه المشكلة بأكثر من طريقة و سنقوم بتغيير ال Z-FLAG من 0 إلي 1
F8 و إستمر حتي تظهر شاشة البرنامج الرئيسية إغقلها و إستمر F8 حتي تظهر ال nag الثانية والآن قم بغلقها و إستمر F8 حتي تظهر كلمة Terminated في OLLY واضح أننا تخلصنا فقط من ال nag الأولي ومازالت الثانية موجودة لكن لا يوجد أمر قفز حتي نقوم بتغييره
الأن أعد تشغيل البرنامج مرة أخري في Olly و إستمر F8 حتي أمر القفز JE
قبل التعرف علي طرق التخلص من ال nags تابع معي
The Portable Executable - PE هو أنواع الملفات التي تستخدم بواسطة نظام الويندوز بإصداراته المختلفة وتشمل .exe, .dll, .ocx, .sys, .scr هذه الملفات تحوي المعلومات اللازمة والتي سيستخدمها نظام التشغيل في إدارة البرنامج بما فيها ال dll و إستدعاءال Windows API من النظام لإستخدامها بواسطة البرنامج بالطبع هذا ببساطة شديدة إقرأمن فضلك التعريف بالكامل بالإنجليزية لتفهم بالضبط هذا المصطلح
A PE file consists of a number of headers and sections, which together tell the dynamic linker how to map the file into memory. Because an executable image consists of several different regions which require different memory protections, the start of each section must be aligned to a page boundary. For instance, typically the .text section (which holds program code) is mapped execute/readonly, and the .data section (holding global variables) is mapped no-execute/readwrite. However, to avoid wasting space the different sections are not page aligned on disk. Part of the job of the dynamic linker is to map each section individually and assign the correct permissions to the resulting regions, according to the instructions found in the headers.
One section of note is the import address table (IAT). The IAT is used as a lookup table when the application is calling a Windows API function. Because a compiled PE DLL/EXE cannot know in advance where the other DLLs it depends upon are located in memory, an indirect jump is required. As the dynamic linker loads modules and joins them together, it writes jump instructions into the IAT slots which point to the actual location of the destination function. Though this adds an extra jump over the cost of an intra-module call, the performance hit is mostly negligible and easily worth the flexibility of dynamic libraries. If the compiler knows ahead of time that a call will be inter-module (via a dllimport attribute) it can produce more optimised code that simply results in an indirect call opcode.
An application programming interface (API) is a source code interface that a computer system or program library provides to support requests for services to be made of it by a computer program. An API differs from an application binary interface in that it is specified in terms of a programming language that can be compiled when an application is built, rather than an explicit low level description of how data is laid out in memory.
The software that provides the functionality described by an API is said to be an implementation of the API. The API itself is abstract, in that it specifies an interface and does not get involved with implementation details.
لاحظ أن ال Data Structure للملف PE الموجودة بالديسك هي نفسها التي يتم تحميلها بالذاكرة عند تشغيل البرنامج أي أنك إذا أردت الوصول لعنوان ما ستجده في الملف يالديسك وستجده بالذاكرة مع ملاحظة إختلاف Offset
PE Data Structure
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]
ما يهمنا في هذه المرحلة هو التعرف علي شكل المصطلحات و سنري عمليا كل مصطلح خاصة عند التعامل مع Packers & Protectors
لا حظ الجدول السابق و الهيكل الذي يتكون منه ال PE ال PE Header موجود في ال Imagebase و الذي هو العنوانن الذي يبدأ فيه البرنامج يالتحميل في الذاكرة
A module is a piece of code+data+resources+other misc stuff that is loaded into memory. The offset that the module is loaded from is called the image base. The module is loaded into memory from the image base until imagebase + module size.
| |
|
almohammdih منتديات المحمدية
عدد المساهمات : 922 نقاط : 2354 تاريخ التسجيل : 14/01/2010
| موضوع: رد: الهندسة العكسية للمبتدئين الدرس الثالث Nag Removal +Aesthetic Patching الأحد مارس 14, 2010 7:09 pm | |
| | |
|