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

مبدأ من مبادئ الهندسة العكسية 3 : للمبتدئين

بدأه Z3r0n3 في 20 يونيو 2010 · 7 رد · 3,076 مشاهدة · في منتدى تحليل التطبيقات البرمجية وحمايتها
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

التشفير من الأشياء التي ستعترضك كثيرا في مجال الهندسة العكسية

مافائدة التشفير :

1/ تصغير حجم البرنامج

2/ حماية البرامج التجارية من كسر حمايتها ( الخوف من مبرمجي اللأسمبلي )

3/ الحماية من سرقة أفكار أو الطرق التي برمج بها و الدوال المستعملة في البرنامج ( الخوف من عكس الكود من قبل مبرمجي الأسمبلي )

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

نعود الى موضوعنا, في هذا الدرس سنتعلم فك تشفير يدوي للمشفر الشهير upx و هو أسهل تشفير يمكنك فكه في عالم الهندسة العكسية

بنية التشفير :

ستجد هذه الأوامر في بداية أي برنامج مشفر ب upx

pushad ; دفع قيم المسجلا في المكدس (stack)

| ;/

| ;|

| ;|

| ;|

| ;| كود التشفير الخاص ب upx

| ;|

| ;|

| ;\

popad ; إسترجاع قيم المسجلات من المكدس

jmp OriginalEntryPoint ; يقفز الى بداية البرنامج ( نقطة الإدخال الأصلية)

حمل البرنامج المرفق و هو برنامج upx لكن مشفر (مشفر نفسه بنفسه J) و إفتحه ب ollydbg ستظهر شاشة dos إضغط على Minimize [-] و تظهر رسالة تقول أن البرنامج مشفر أو مضغوط شاهد الصورة :

post-228541-068091100 1277066249_thumb.j

بنية التشفير في البرنامج :

post-228541-007694100 1277066199_thumb.j

ماذا لدينا :

pushad ; دفع قيم المسجلا في المكدس (stack) : في العنوان 446480

كود التشفير الخاص ب upx : من العنوان 446481 الى العنوان 4465DC

popad ; إسترجاع قيم المسجلات من المكدس : في العنوان 4465E2

jmp OriginalEntryPoint ; يقفز الى بداية البرنامج ( نقطة الإدخال الأصلية) : في العنوان 4465E3

مبدأ عن التشفير : إن وجدت في برنامج مشفر القفزة الى نقطة الإدخال الأصلية فإعتبر نفسك فككت التشفير

فك التشفير :

اللأدوات اللازمة :

olly plugin (لاحق) و هو ollydump

ستجده في الملف المرفق قم بإخراجه و نسخه في مجلد ollydbg

مراحل فك التشفير :

نفتح البرنامج داخل ollydbg و ننفذ الحطوات التالية

1/نضع نقطة توقف (break point) في القفزة الى بداية البرنامج (في العنوان 4465E3)

2/نشغل البرنامج (نضغط F9 من لوحة المفاتيح)

3/سيتوقف في breakpoint نقوم بتنفيذ أمر القفز بالضغط على F8

4/نستخدم ‍ollydump ( لنستخرج البرنامج مفكوك التشفيرمن الذاكرة) و إصلاح نقطة بداية الكود الأصلية للبرنامج وهي 1000 : لأن كود أي البرنامج يبدأ من 1000 وهي إجرائات الملف التنفيذي pe

نشرع في فك التشفير :

1/ إضغط على CTRL+G أكتب العنوان 4465E3 ثم موافق, ثم إضغط على F2 لوضع نقطة توقف

2/ نضغط F9 لنشغل البرنامج

3/ إضغط على ‍F8 لتنفيذ أمر القفزة

4/ البرنامج الآن مفكوك التشفير في الذاكرة, نستخرجه ب ollydump نفذ التالي :

Plugins ---> OllyDump ---> OllyDump debugged process

ثم نفذ ما في الصورة :

post-228541-090356400 1277066231_thumb.j

البرنامج الآن هو مفكوك التشفير :

أغلق برنامج ollydbg ثم إفتح البرنامج من جديد ب ollydbg

ماذا تلاحظ :

1/ الرسالة تنذرك بأن البرنامج مشفر أو مضغوط إختفت

2/ تغير كود البرنامج تماما

3/ زاد حجم البرنامج

إنتهى الدرس

ملاحظة :

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

Z3r0n3-RE.zip

المرفقات
1.JPG2.JPG3.JPG
1
#2

سأضع عدداً من التعليقات، ناقشني فيها حتى تقتنع من ثم قم بتغييرها في مقالتك بشطب القديم وإضافة الجديد، حتى يتعرف القارئ على الأخطاء التي قد يقع فيها ويعرف الصواب منها ومن ناحية أخرى حتى ينتبه من قام بقراءة المقال في المرة الأولى إلى ما تم تعديله في المرة الثانية، طبعاً لو اقتنعت أساساً باقتراحاتي هذه :)

بسم الله نبدأ

Z3r0n3 كتب:

مافائدة التشفير :

1/ تصغير حجم البرنامج

تصغير الحجم يتم بالضغط packing/compressing وليس بالتشفير، التشفير قد يؤدي لزيادة حجم البرنامج.

Z3r0n3 كتب:

نعود الى موضوعنا, في هذا الدرس سنتعلم فك تشفير يدوي للمشفر الشهير upx و هو أسهل تشفير يمكنك فكه في عالم الهندسة العكسية

تشفير

ضغط

Z3r0n3 كتب:

4/نستخدم ‍ollydump ( لنستخرج البرنامج مفكوك التشفيرمن الذاكرة) و إصلاح نقطة بداية الكود الأصلية للبرنامج وهي 1000 : لأن كود أي البرنامج يبدأ من 1000 وهي إجرائات الملف التنفيذي pe

ليس بالضرورة أن يبدأ عند الإزاحة 0x1000

"وهي إجراءات الملف التنفيذي pe"

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

بالمناسبة، غالباً ما يستلزم بعد فك ضغط/تشفير أي تطبيق إصلاح للـ Import Address Table والاستدعاءات CALL داخل البرنامج إلى الدوال. هذا يتم عادة باستخدام برنامج Import Reconstructor (اختصاراً ImpRec)

هل تأكدت من أن البرنامج يعمل بعد أخذ dump للنسخة من الذاكرة ؟

نعم، الإضافة تقوم بعمل rebuild للـ IAT لكنها لا تنجح دوماً (ربما تنجح مع UPX ولكن ليس مع باقي البرامج)

تأكد من أن البرنامج يعمل بشكل تام بعد أن حصلت على dump منه.

Do as I say, not as I do

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

#3

آسف على الأخطاء

أنت خبير و تعلم ما لا أعلمه

أنا نبتدأ في الهندسة العكسية, وليس لدي خبرة في الأسمبلي. أنا في هده الفترة أتعلمها و إن شاء الله أتعلم أصول الهندسة العكسية و لن ترى هده الأخطاء مجددا

يمكنك تصحيح المعلومات الخاطئة كما تشاء

شكرا على التنبيه

#4

لم تناقش باقي الأفكار، ربما أكون على خطأ.

ومن ناحية أخرى عليك أن تسأل "لماذا" وليس أن تأخذ بما يقال لك أمراً مسلماً به.

Do as I say, not as I do

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

#6

حسنا لنناقش الموضوع و نسأل لمادا

1/ التشفير : حماية البرامج من الكسر

2/ التشفير

التصحيح : فك الضغط

هل هدا صحيح ؟

إن صحيح : أ ريد أن أفهم مادا يفعل التشفير و كيف يعمل ؟

#8

السلام عليكم ورحمة الله

اقتباس
التشفير : حماية البرامج من الكسر

ليس شرطا ضد الكسر،

قد يكون ضد التعديل او التلاعب بالمحتوى (كمثال تغيير اسم صاحب البرنامج)

قد يكون ضد الكشف من مضاد فيروسات او برنامج حماية (فيرروس، Malware)

يمكن ان نقول ان التشفير هو تغيير المحتوى (البرنامج) من شكل لاخر لهدف ما

d4baa0.gif

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