السلام عليكم ورحمة الله ,,,
هذا الموضوع عبارة عن مقدمة لفهم أنواع المعالجات , لأن فهم الأنواع المختلفة
من المعالجات تؤهلك لأن تكون محترف في البرمجة العكسية
وتستخدم أدوات المحترفين ,, مثل
http://www.heyrick.co.uk/images/assembler/debgscrn.gif
سنأخذ أمثلة في معالجات ARM , والأنظمة المبنية على هذة المعالجات
مثل نظام وندوز CE للأجهزة الكفية , ونظام Symbian للهواتف المتحركة
هذا هو المعالج :

وفي هذا الموضوع سنقوم بإستخدام برنامج IDA pro , تجدة هنا
--
والنقطة الثانية : كنت أتمنى وجود برنامج لعرض النتائج , لأن الأغلبية لا يملكون هذة الأنظمة , راجع هذة الرابط
--
المهم نبدأ في الموضوع , لكي نأخذ فكرة + الأساسيات
نعرف بأن كل معالج لة لغة وأوامر , فما هي أوامر المعالج ARM
أهم الأوامر وأكثرها إستخدام في البرمجة العكسية
MOV : تعليمة النقل المعروفة
CMP : تعلمية المقارنة
BEQ : إقفز إذا كان يساوي , تقابل تعليمة JE
BNE : إقفز إذا كان لا يساوي , تقابل التعليمة JNE
BHI : إقفز إذا كان أكبر , تقابل JG
B : إقفز دائماَ , تقابل JMP
NOP : تعليمة الطمس المعروفة
LDR : تعليمة لتحميل عنوان أو قيمة إلى مسجل
ADD : عملية الجمع
SUB : عملية الطرح
TEQ : عملية إختبار معرفة , وتقابل التعليمة test
BL : إتصال بإجراء أو عملية , وتقابل تعليمة CALL
يكفي أن تعرف هذة الأوامر
بعد ذلك , يجب أن نتعلم بعض الأساسيات عن المعالج ARM
مثل المسجلات , تقسم الذاكرة...( تجد شرح بالأمثلة والصور في هذا الكتاب )
http://www.heyrick.co.uk/assembler/
والآن أمثلة بسيطة لكي نأخذ فكرة عن الموضوع
مثال في أنظمة وندوز CE الخاص بالأجهزة الكفية
هذا المثال عبارة عن تغيير في برنامج مشهور ولكني لا أريد أن أعرض
إسم البرنامج لكي لا نخالف قواعد المنتدى , أهم شيء تعلم الفكرة
لأن الأفكار كلها متشابهة في أغلب البرامج
هذا البرنامج , يطلب إدخال الرقم التسلسلي , إذا كان خطأ يعرض لك رسالة خطأ
بعد إدخال البرنامج المستهدف إلى برنامج الإسمبلي IDA pro
إضغط على نافذة الدوال المستوردة , لتظهر لك دالة المسج , قم بالإنقال إليها لترى
0001678C EOR R3, R2, R1 00016790 CMP R3, R0 <- مقارنة مسجلين 00016794 BEQ 000167E0 <- إقفز إذا كان يساوي إلى عنوان يتجاوز رسالة الخطأ 00016798 LDR R0, 00021428 0001679C MOV R1, 9C00 000167A0 MOV R3, 64 000167A4 LDR R0, [R0] 000167A8 ADD R2, SP, 10 000167AC ORR R1, R1, 54 000167B0 BL LoadStringW <- تحميل محتوى رسالة الخطأ 000167B4 MOV R3, 40000 000167B8 LDR R2, 00022C74 000167BC ORR R3, R3, 10 000167C0 ADD R1, SP, 10 000167C4 MOV R0, 0 000167C8 BL MessageBoxW <- الإتصال بدالة المسج وإظهار الخطأ 000167CC B 00016850
ولتغيير مجرى البرنامج وتسجيل أي رقم تقوم بإدخالة , غير التالي
00016794 BEQ 000167E0 <- إقفز إذا كان يساوي إلى 00016794 B 000167E0 <- إقفز دائما أو إلى 00016794 BNE 000167E0 <- إقفز إذا لم يكن يساوي
وبعد هذا التغيير البسيط , إحفظ البرنامج , لترى النتيجة
--
مثال لنظام Symbian الخاص بالهواتف المتحركة
وهذا المثال على برنامج لأجهزة الجوال نوكيا
عندما تقوم بتشغيل البرنامج على الجوال تظهر لك رسالة
Unregistered .........
أي أن البرنامج غير مسجل وسيتم إنهائة بعد فترة
إنقل البرنامج إلى جهاز الكمبيوتر , وقم بإدخالة إلى برنامج IDA pro
ثم إبحث عن نص الرسالة لتجد النتيجة التالية
10007E9C DCB 0x55; " U " 10007E9D DCB 0; 10007E9E DCB 0x6E; " n " 10007E9F DCB 0; 10007EA0 DCB 0x72;" r " 10007EA1 DCB 0; 10007EA2 DCB 0x65; " e " 10007EA3 DCB 0; 10007EA4 DCB 0x67; " g " 10007EA5 DCB 0; 10007EA6 DCB 0x69; " i " 10007EA7 DCB 0; 10007EA8 DCB 0x73; " s " 10007EA9 DCB 0; 10007EAA DCB 0x74;" t " 10007EAB DCB 0; 10007EAC DCB 0x65; " e " 10007EAD DCB 0; 10007EAE DCB 0x72;" r " 10007EAF DCB 0; 10007EB0 DCB 0x65; " e " 10007EB1 DCB 0; 10007EB2 DCB 0x64; " d " 10007EB3 DCB 0;
لاحظ نص الرسالة بترميز اليونيكود
إحفظ عنوان بداية الرسالة وهو العنوان
10007E9C
إبحث عن هذا العنوان في قسم الشفرة
ستجد تعليمة لتحميل النص إلى الذاكرة
1000580C LDR R1, 10007E9C <- لاحظ عنوان رسالة الخطأ
والآن لو إطلعت على الكود الذي يسبق هذة التعليمة
100057F4 BL 1000538C <- إتصال بأمر للتحقق من تسجيل البرنامج 100057F8 CMP R0, 0 <- مقارنة نتيجة التحقق من التسجيل 100057FC BNE 100058B4 <- إقفز إذا كان لايساوي , تلاحظ بأن العنوان يتجاوز تحميل نص الخطأ 10005800 BL 10006168 10005804 MOV R4, R0 10005808 ADD R0, SP, 20 1000580C LDR R1, 10007E9C <- تحميل عنوان رسالة الخطأ , لاحظ العنوان 10005810 BL 10005B48 <- إتصال إلى أوامر إظهار رسالة الخطأ
والمطلوب تغييرة لكي نتجاوز تسجيل البرنامج , غير
100057FC BNE 100058B4 <- إقفز إذا كان لا يساوي إلى 100057FC BEQ 100058B4 <- إقفز إذا كان يساوي
وأخيرا إحفظ الملف , وقم بتشغيلة في الجهاز المحمول لترى النتيجة
--
وبهذا نكون قد أخذنا فكرة , وفي مواضيع قادمة سنتعمق في هذا المجال أكثر
وبالتوفيق ,,,
-