الهندسة العكسية لبرامج الجوال والأجهزة الكفية – أساسيات برمجة المعالج ARM –

عام 0 geek4arab
Spread the love
الهندسة العكسية لبرامج الجوال والأجهزة الكفية – أساسيات برمجة المعالج ARM –
JAAScois.com » أبحاث ودراسات »
الكاتب: JAAScois
تاريخ النشر: 06/12/2004 م
هذا الموضوع عبارة عن مقدمة لفهم أنواع المعالجات , لأن فهم الأنواع المختلفة
من المعالجات تؤهلك لأن تكون محترف في تصحيح وإختبار البرامج!

سنأخذ أمثلة في معالجات ARM , والأنظمة المبنية على هذة المعالجات
مثل نظام وندوز CE للأجهزة الكفية , ونظام Symbian للهواتف المتحركة
هذة صورة للمعالج :

قبل أن نبدأ في الموضوع تجد أهم المراجع
موقع ARM
http://www.arm.com

وأهم كتاب ARM ASSEMBLER
asmsite.zip
أولاً مسجلات المعالج ARM :
عددها 27 وهي

R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13
R14
R15
///////////
R13_svc
R14_svc
//////////
R13_irq
R14_irq
/////////
R8_fiq
R9_fiq
R10_fiq
R11_fiq
R12_fiq
R13_fiq
R14_fiq

أهم التعليمات للمعالج ARM :

نعرف بأن كل معالج لة لغة وأوامر , فما هي أوامر المعالج ARM
أهم الأوامر وأكثرها إستخدام في إختبار البرامج

MOV : تعليمة النقل المعروفة
CMP : تعلمية المقارنة
BEQ : إقفز إذا كان يساوي , تقابل تعليمة JE
BNE : إقفز إذا كان لا يساوي , تقابل التعليمة JNE
BHI : إقفز إذا كان أكبر , تقابل JG
B : إقفز دائماَ , تقابل JMP
NOP : تعليمة الطمس المعروفة
LDR : تعليمة لتحميل عنوان أو قيمة إلى مسجل
ADD : عملية الجمع
SUB : عملية الطرح
TEQ : عملية إختبار معرفة , وتقابل التعليمة test

BL : إتصال بإجراء أو عملية , وتقابل تعليمة CALL

//////////////

والآن أمثلة بسيطة تشرح لك طريقة كسر حماية برامج الجوال
لكي نأخذ فكرة لزيادة حماية برامجنا

مثال في أنظمة وندوز 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

وبعد هذا التغيير البسيط , إحفظ البرنامج , لترى النتيجة
//////////////////
مثال لنظام 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 <- إقفز إذا كان يساوي

وأخيرا إحفظ الملف , وقم بتشغيلة في الجهاز المحمول لترى النتيجة

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

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة