منتديات المحمدية
الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching Pcnet001
منتديات المحمدية
الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching Pcnet001
منتديات المحمدية
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.



 
الرئيسيةالبوابةالتسجيلأحدث الصوردخول
منتديات المحمدية تبحث عن كل ما هو جديد ومفيد لتعرضة لاعضاء المنتديات الكرام لتعطى فكر جديد لكل المشتركين

 

 الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching

اذهب الى الأسفل 
كاتب الموضوعرسالة
almohammdih
منتديات المحمدية
منتديات المحمدية
almohammdih


ذكر عدد المساهمات : 922
نقاط : 2354
تاريخ التسجيل : 14/01/2010

الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching Empty
مُساهمةموضوع: الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching   الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching I_icon_minitimeالأحد مارس 14, 2010 6:53 pm


الهندسة العكسية للمبتدئين الدرس الثاني







قم بتحميل الأدوات


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]






نقوم بفتح OllyDBG وتابع كما بالصور


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

مسار UDD يتم به حفظ تحليل البرامج حتي لا يقوم البرنامج بنفس العمل كل مرة

مسار Plugins أعتقد أنه يشرح نفسه




بعد تحديد المسارات سيحتاج البرنامج لغلقه و إعادة تشغيله مرة أخري


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

و سيتم شرح الأزرار المستخدمة خلال الشرح



في الأدوات التي قمت بتحميلها بأعلي ستجد ملف إسمه lesson1Test.


قم بسحبه إلي البرنامج -Drag ـ أو منFile ثم open ثم إختار الملف أو من الزر الأول الذي يأخذ شكل الفولدر


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


عند تشغيل البرنامج الصغير Lesson 1 test ستظهر كما بالصورة




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



[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]



إضغط Ok و إغلق


قم بتحميل الملفين الآتيين


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]




بعد إنتهاء التحميل قم بفك الضغط عن الملفين و ضع الملفات التي تم فكها في فولدر Plugins




ثم قم بتشغيل Olly مرة أخري , و إسحب برنامج الدرس مرة أخري وتابع كما بالصورة


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


قم بإختيار ملف Win32 help الذي قمت بتحميله ووضعته في فولدر Plugins


عند تشغيل البرنامج ظهرت لنا رسالة تقول أن البرنامج نسخة تجريبية هذه الرسالة


تسمي Message Box



تابع كما بالصورة


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


واضح كما بالصورة تعريف Message Box



إستخدم Win32 Help في كل مرة للتعرف علي الأوامر المختلفة



نعود إلي كود البرنامج مرة أخري


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

كود البرنامج صغير جدا سنقوم بدراسته خطوة خطوة


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]



لو عدت إلي الدرس الأول ستعلم أن الأمر Mov هو عبارة عن نقل داتا من مكان إلي مكان وهنا الأمر سيقوم بنقل 1 بايت إلي AL Register



لاحظ byte ptr عرفنا أنه سيتم نقل 1 بايت ولو أردنا نقل 2 بايت لكنا رأينا الأمر word ptr


ول أردنا نقل 4 بايت لكنا رأينا الأمر dword ptr



لكن ما الذي يوجد بالذاكرة 403000 لاحظ الصورة


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


الأمر الثاني هو CMP AL, 00

و الأمر يقوم بمقارنة0x00l ب Al ونتيجة المقارنة تظهر في z-flag


إما صفر أو واحد




jne 0040101c



لو عدت إلي الدرس الأول ستجد أن Jne تعني Jmp if not equal


لاحظ أن Al =1 و أن المقارنة تتم بين al و 0 و النتيجة ستظهر في Z-Flag وهي التي ستحدد إن كان سيتم القفز أم لا


هنكا أكثر من طريقة حتي نصل لهدفنا وهو النسخة الكاملة


لكن قبل ذلك نعود Olly



ولاحظ ما يحدث للكود وقارن بين الصورتين


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


إضغط F8 أو [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


حتي يتم تشغيل البرنامج خطوة خطوة ودائما و أبدا سنفعل ذلك



ولاحظ ما يحدث للكود وقارن بين الصورتين



[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

أعتقد انه واضح أن في الصورة الأولي AL = 0 وهو واضح في EAX

وفي الصورة الثانية وبعد نقل 1 بايت فإن AL = 1 وواضح أيضا في EAX



الآن إضغط F8 مرة أخري


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

لاحظ
أن نتيجة المقارنة ظهرت في Z-Flag = 0 و بناءا عليها لن يتم القفز وسيتم
الإستكمال وهو سيقودنا إلي رسالة Trial Version لكن لاحظ إن تم القفز سيتم
القفز إلي 0040101E وهي موجودة كما بالصورة



[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]



أعتقد أنه واضح الآن كيف سنحل هذا الدرس


الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://almohammdih.yoo7.com
almohammdih
منتديات المحمدية
منتديات المحمدية
almohammdih


ذكر عدد المساهمات : 922
نقاط : 2354
تاريخ التسجيل : 14/01/2010

الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching Empty
مُساهمةموضوع: رد: الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching   الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching I_icon_minitimeالأحد مارس 14, 2010 6:54 pm

هناك أربعة طرق للوصول إلي الهدف

الأولي أن نجعل Al = 0
فكما
رأينا قبل ذلك أنه حتي نصل إلي 403000 والتي تقودنا إلي النسخة الكاملة
يجب أن تكون Al = 1 راجع الصورة 11 والمقارنة التي تحدد القفز إلي النسخة
الكاملة هي 0

إذن لنجعل 403000 تبدأ عند صفر بدلا من 1
وهو ما سنقوم به عن طريق Olly
تابع الصور

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

لاحظ أن تقوم بعمل كليك يمين عند 01 بالضبط

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

بعد ان قمنا بالتعديل كليك يمين مرة أخري


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

بعد الحفظ قم بتجربة الملف الجديد

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]
وقم بتجربته ب Olly ولاحظ ما يحدث خطوة خطوة F8





الطريقة الثانية هي أن نجعل المقارنة بين AL و 1 بدلا من الصفر وبالتاي ستكون نتيجة المقارنة في Z-Flag هي 1 أي سيتم القفز

نعود للملف الأصلي ب Olly

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

وبعد ذلك إحفظ الملف بإسم آخر وقم بتجربته كما فعلت في الطريقة الأولي


الطريقة الثالثة أن نغير أمر القفز فبدلا من أن يكون الأمر JE نجعله Jne
ويعني Jump if not equal وبالتالي سيقوم البرنامج بالقفز كل مرة إلي العنوان الصحيح
,من المكن أن نغير الأمر لنجعله JNZ أي Jump if not zero وسيؤدي نفس المهمة


ونقوم بالتغيير بالعودة للملف الأصلي للدرس في Olly وعند أمر القفز نضغط
كليك يمين ثم Assemble أو نضغط Space ثم نقوم بتغيير Je إلي Jne ونحفظ
الملف ونقوم بتجربته كما فعلا سابقا


الطريقة الرابعة وهي إستبدال أمر المقارنة ب Nop أي No Operation


يتبع.......
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://almohammdih.yoo7.com
almohammdih
منتديات المحمدية
منتديات المحمدية
almohammdih


ذكر عدد المساهمات : 922
نقاط : 2354
تاريخ التسجيل : 14/01/2010

الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching Empty
مُساهمةموضوع: رد: الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching   الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching I_icon_minitimeالأحد مارس 14, 2010 6:56 pm

في الأدوات التي تم تحميله سابقا ستجد ملف إسمه ReverseMe إضغط عليه لنري ماذا سيحدث

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


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


للتسهيل ستستخدم هذه المرة نسخة معدلة من OllyDBG لها إختلافات كثيرة ستراها وسنعود للنسخة الأصلية لتوضيح بعض الأشياء عند الحاجة


الآن حمل هذه النسخة من Olly


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]



نقوم بفتح برنامج Olly النسخة المعدلة ونسحب reverseme إلي olly


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]



الأمر Push يعني Push Onto Stack إنظر إلي خانة Stack في Olly وشاهد ما يحدث

الأمر Call يعني Call Subroutine أعتقد أن الأمر يشرح نفسه فهو يستدعي جزء من كود البرنامج



الآن قم بعمل Step للبرنامج كما فعلنا بالسابق بإستخدام F8 إلي ان نصل كما بالصورة


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


أعتقد أن الكود ما قبل هذه لا يوجد به شيء مثير يهمنا لكن عند النقطة التي توقفنا عندها 00401073 هناك شيء جديد كما تلاحظ
Create FileA

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


إذن
ReverseMe يقوم بالبحث عن ملف حتي يقرأ منه حالة البرنامج هل هو مسجل أم
لا و إسم الملف في حالتنا ليس صعب إكتشافه فهو موجود بالأمر السابق كما
بالصورةKeyfile.dat لكن هذا الملف غير موجود لذلك البرنامج يظهر غير مسجل
في كل مرة



الآن F8 مرة أخري


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]



الآن F8


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

JNZ SHORT 0040109A

إذن القفز لن ينفذ حيث أن نتيجة المقارنة هي صفر وفي هذه الحالة فإن القفز لن يتم وهو ما سيؤدي إلي رسالة النسخة إنتهت




إذن يجب أن نقفز حتي الا تظهر رسالة النسخة إنتهت وهذه المرة لن نقوم بتغيير أمر القفز لكن سنقوم بتغيير القيمة الموجودة ب Z-Flag


بدلا من 1 سنجعلها صفر لكن لاحظ أن Z-Flag هي جزء من المعالج وليست جزء من
كود البرنامج فالقيمة التي سنقوم بتغييرها ستتغير مؤقتا ولمرة واحدة فقط
لكن إن أردنا تثبيت القفز سنغير الأمر ذاته لكن بما إننا غير متأكدين حتي
الآن من مكان الباتش فسنقوم بتغيير القيمة في Z-Flag




فقط إضغط بالماوس مرتين علي القيمة 1 بجوار Z حتي تتغير إلي صفر



[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

قبل أن نقفز opcode وبجوار أمر قفز إضغط مرتين بالماوس في خانة

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

ما
فعلناه هو أننا وضعنا BP أي Break Point بما أننا عرفنا أن هذه القفزة
مهمة بالنسبة انا وهي أول ما نريده في البرنامج فبدلا من أن نبحث عنها في
كل مرة نضع BP وسيتوقف Olly عند هذه النقطة في كل مرة سيتضح إستخدامها بعد
قليل




أعتقد انه واضح الآن أننا سنقوم بالقفز و أننا عندما غيرنا القيمة في
Z-Flag جعلنا البرنامج يفهم أن الملف KeyFile.dat الذي يبحث عنه موجود
إضغط F8 لنري ماذا سيحدث حتي نصل كما يالصورة



[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


أعتقد أن ما نراه هو جديد علينا ReadFile و أعتقد أننا نعرف الآن كيف سنصل إلي معناها

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

هذا يعني أن ReadFile يحاول أن يقرأ عدد محدد من البايت من KeyFile.dat ويضعها بعنوان معين بالذاكرة في حالة نجاحه في قرائتها


ولو لاحظت أن القيمة في ال Stack وفي EAX Register هي FFFFFFFF والقيمة تظهر Hex و تعني أن الملف غير موجود


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

لو
نظرت اسفل ReadFile ستجد مجموعة من القفزات المشروطة إذن واضح ان هذا ليس
ما نريده حيث أن هذا سيرجع بنا إلي نفس الرسالة السابقة


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

TEST
.... , TEST .... في 99% من الحالات الأمر يأتي TEST EAX , TEST EAX وهو
يقوم بإجراء عملية منطقية AND حيثAND Dest , Source والعملية تكون Dest: =
Dest /\ Source و Dest إختصار Destination وهذه العملية لا تقوم بحفظ
القيم ولكن تقوم بتغيير القيمة في Z-Flag , وتقوم بتفريغ O-Flag و C-FLag
فتخيل لو لديك

10010101100101001101
ولو قمت بإجراء عملية AND بإستحدام حاسبة الويندوز ( لاحظ الأرقام Binary ) فستكون النتيجة 0001000100


الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://almohammdih.yoo7.com
almohammdih
منتديات المحمدية
منتديات المحمدية
almohammdih


ذكر عدد المساهمات : 922
نقاط : 2354
تاريخ التسجيل : 14/01/2010

الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching Empty
مُساهمةموضوع: رد: الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching   الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching I_icon_minitimeالأحد مارس 14, 2010 6:57 pm

الآن F8


لاحظ الأمر الذي يأتي بعد TEST EAX , TEST EAX هو JNE وبالتأكيد لن نقفز لإن EAX =00000000 و Z-Flag = 1



الآن F8


ولكن الأمر الذي يليه هو قفز غير مشروط JMP


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]

كما تري فإن السهم يشير إلي المكان الذي سيتم القفز إليه ( Plugin مضاف إلي النسخة المعدلة )

وواضح كما بالصورة إنه ليس المكان الذي نبحث عنه لإن البرنامج لم يجد Keyfile.dat وبالتالي أعطي رسالة إنه غير صالح


الآن F8 حتي تظهر الرسالة


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]



الآن إضغط Ok


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]



الآن قم بعمل ريستارت [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


أو Ctrl+F2



وبعد ذلك إضغط Run او F9




ستجد نفسك عند ال BP -Break Point التي قمنا بوضعها من قبل قم بتغيير Z-Flag كما فعلنا من قبل وبعد ذلك F8 حتي نصل كما بالصورة


[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


أعتقد أننا نعلم إننا إذا لم نقفز سنذهب إلي الرسالة التي لا نريدها إذن يب ان نقفز و أعتقد أننا نعلم كيف سنفعل هذا


بالطبع تغيير القيم الموجودة ب Z-Flag من 1 إلي صفر




الآن F8

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]
ما فعلناه هو أننا عندما قفزنا جعلنا البرنامج يعتقد أن الملف KeyFile.dat موجود و أنه يقرأ منه





حيث Dest: = Dest \/ Source وتقوم بتفريغ ال O-Flag وال C-Flag وتحديد Z-Flag


فلو إفترضنا أنها ستكون بين






فالنتيجة ستكون 1100011011 جرب العملية بإستخدام الحاسبة


لاحظ أنها تكون هكذا XOR EAX,EAX


فالنتيجة في النهاية ستكون EAX = 0


لإنك تقوم بعمل XOR بين نفس القيميتن


الآن F8


XOR هو عملية منطقية أخري لقيم Binary تقوم بعمل OR Dest , Source 1001010110 0101001101
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


لنري إلي أين ستذهب بنا هذه القفزة



واضح أن هذه القفزة ستعطينا نفس الرسالة ألا نقفز لكن هذه المرة لكن لاحظ
أن هذه JL ولذلك ان نستخدم Z-FLag و لكن سنستخدم S-Flag واضح ماذا سنفعل
سنغير القيمة الموجودة في S-Flag من 1 إلي 0



[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]


الآن F8

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]



الآن F8


حتي نصل كما بالصورة



[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذه الصورة]



إذن كل القفزات التي قمنا بتعديلها سنحتاج إلي تثبيتها حتي يفعل ReverseMe هذه التعديلات كل مرة


قم بعمل ريستارت ل ReverseMe و إضغط Run حتي تصل إلي BP التي قمنا بوضعها
من قبل وكما فعلنا في الدرس السابق ستقوم بعمل Assemble ونغير JNZ ب JMP


الآن إضغط مرتين علي لBP لحذفها لإننا لا نريدها مرة أخري


وقم بضغط F8 حتي تصل إلي القفزة الثانية الي قمنا بتعديلها و هكذا حتي تصل إلي القفزةالأخيرة


( ستقوم بتغيير JNZ إلي JMP وتقوم بتغيير إلي NOP وهناك طريقة أخري بدلا من NOP ذكرتها في الدرس السابق سأتركها لمن يريد أن يجربها )


ثم قم بحفظ التغييرات كما فعلنا سابقا و إحفظ الملف بإسم لآخر وقم بتجربته


( لاحظ أننا عندما نقوم بالتغيير في ال Flags فإننا نغير القيمة الموجودة بالذاكرة مؤقتا ولم نغير بكود البرنامج )

الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://almohammdih.yoo7.com
 
الهندسة العكسية للمبتدئين الدرس الثاني Basic Patching
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-
» الهندسة العكسية للمبتدئين الدرس الثالث Nag Removal +Aesthetic Patching
» الهندسة العكسية للمبتدئين = الدرس الأول = Reversing for Newbies
» •-=:[¯*^~ تكنيكات الكونج فو للدفاع عن النفس ~^*¯]:=-•
» دورة أختراق الاجهزه المتكامله
» مكتبتى لتعليم الكنج فو

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
منتديات المحمدية  :: منتديات الكمبيوتر والانترنت :: منتدى الهاكر والاختراق :: قسم الهندسة العكسية-
انتقل الى: