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

[ تمت الإجابة ]مادا تعني هده التعليمات في Olly؟

بدأه soufianosse في 23 يناير 2010 · 8 رد · 1,233 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كتيرا ما افتح برامج تحت Olly قصد التنقيح واتصادف مع اكواد غريبة نوعا ما

متل هدا الامر

[MOV DWORD PTR FS:[EDX],ESP

التعليمة مفهومة باكملها لكن الغريب هو المسجل FS

لم اسمع يوما بهدا المسجل ممكن تفاصيل عنه ؟

التعليمة التانية

MOV EDX,[LOCAL.4]

مادا تعني LOCAL ؟

جربت عمل Assemble لها فاعطاني كود اخر MOV EAX,DWORD PTR SS:[EBP-20] يقوم بجلب بعض البيانات من المكدس ويخزنها في EAX

ممكن تفسير فلسفة هده الكلمة LOCAL

امر اخر هو الكلمة SHORT بعد عملية القفز

ما الفرق بين JMP SHORT ADRESS وبين JMP ADRESS ؟

امر اخير لا افهمه في المنقح Olly هو هده العبارات

0040A120   .  FFFFFFFF      DD FFFFFFFF
0040A124   .  04000000      DD 00000004
0040A128   .  2E 74 6D 70 0>ASCII ".tmp",0
0040A12D      00            DB 00
0040A12E      00            DB 00
0040A12F      00            DB 00
0040A130   .  49 6E 6E 6F 5>ASCII "InnoSetupLdrWind"
0040A140   .  6F 77 00      ASCII "ow",0
0040A143      00            DB 00
0040A144   .  53 54 41 54 4>ASCII "STATIC",0
0040A14B      00            DB 00
0040A14C   .  FFFFFFFF      DD FFFFFFFF
0040A150   .  10000000      DD 00000010
0040A154   .  2F 53 4C 35 3>ASCII "/SL5="$%x,%d,%d,"
0040A164   .  00            ASCII 0
0040A165      00            DB 00
0040A166      00            DB 00
0040A167      00            DB 00
0040A168   .  FFFFFFFF      DD FFFFFFFF
0040A16C   .  02000000      DD 00000002
0040A170   .  22 20 00      ASCII "" ",0
0040A173      00            DB 00
0040A174      00            DB 00
0040A175      00            DB 00
0040A176      00            DB 00
0040A177      00            DB 00
0040A178      00            DB 00
0040A179      00            DB 00
0040A17A      00            DB 00
0040A17B      00            DB 00
0040A17C      00            DB 00
0040A17D      00            DB 00
0040A17E      00            DB 00
0040A17F      00            DB 00
0040A180      00            DB 00

ما هي هده الكتابات وما مكانها من البرنامج ؟

اعتدر عن كترة الاسئلة لكني لم اجد من يفسر لي هده الامور

تم تعديل هذه المشاركة بواسطة soufianosse في 23 يناير 2010 في 17:39

#2
soufianosse كتب:

التعليمة مفهومة باكملها لكن الغريب هو المسجل FS

لم اسمع يوما بهدا المسجل ممكن تفاصيل عنه ؟

انظر للجزء التالي من المقال الكامل..

http://www.microsoft...chive/s2ce.aspx

FS في user mode يشير إلى TIB

في kernel mode يشير إلى KPCR..

عادة سترى FS كثيراً في التطبيقات التي تتضمن exception handler

باعتبار أنك تكتب بـ ++C عند اللزوم

جرب التالي

 int main()
{
 __try
 { int i = 0;

 }
 __except( 1 )
 { int j = 1: }


 return 0;
}

وانظر للمقابل له في الأسمبلي، و/أو: راجع هذا المقال أيضاً.. http://www.winasm.ne...?showtopic=2082

اقتباس

التعليمة التانية

MOV EDX,[LOCAL.4]

مادا تعني LOCAL ؟

عندما تكتب إجرائية procedure في برنامج، يمكنك استخدام متحولات محلّية local variables يمكن الوصول إليها فقط من داخل الإجرائية، يتم إنشاؤها عند الدخول للإجرائية أول مرة وتدميرها عند الخروج منها.

نقوم بالأسمبلي بكتابتها بالشكل

someProcedure	proc
	LOCAL	localVar1	:DWORD
	LOCAL	localVar2	:BYTE
	LOCAL	localVar3[10]	:BYTE

	...
	...
someProcedure	endp

Olly يستطيع تمييز هذه المتحولات المحلّية ويقوم بتسميتها لك بالشكل الذي رأيت.

المتحولات المحلّية تحجز في الـ stack.

اقتباس

امر اخر هو الكلمة SHORT بعد عملية القفز

ما الفرق بين JMP SHORT ADRESS وبين JMP ADRESS ؟

لا فرق، إن كانت القفزة داخل المقطع نفسه وضمن مجال إزاحة [-127,127]

راجع: /index.php?showtopic=212018

اقتباس

امر اخير لا افهمه في المنقح Olly هو هده العبارات

0040A120 . FFFFFFFF DD FFFFFFFF
0040A124 . 04000000 DD 00000004
0040A128 . 2E 74 6D 70 0>ASCII ".tmp",0
0040A12D 00 DB 00
0040A12E 00 DB 00
0040A12F 00 DB 00
0040A130 . 49 6E 6E 6F 5>ASCII "InnoSetupLdrWind"
0040A140 . 6F 77 00 ASCII "ow",0
0040A143 00 DB 00
0040A144 . 53 54 41 54 4>ASCII "STATIC",0
0040A14B 00 DB 00
0040A14C . FFFFFFFF DD FFFFFFFF
0040A150 . 10000000 DD 00000010
0040A154 . 2F 53 4C 35 3>ASCII "/SL5="$%x,%d,%d,"
0040A164 . 00 ASCII 0
0040A165 00 DB 00
0040A166 00 DB 00
0040A167 00 DB 00
0040A168 . FFFFFFFF DD FFFFFFFF
0040A16C . 02000000 DD 00000002
0040A170 . 22 20 00 ASCII "" ",0
0040A173 00 DB 00
0040A174 00 DB 00
0040A175 00 DB 00
0040A176 00 DB 00
0040A177 00 DB 00
0040A178 00 DB 00
0040A179 00 DB 00
0040A17A 00 DB 00
0040A17B 00 DB 00
0040A17C 00 DB 00
0040A17D 00 DB 00
0040A17E 00 DB 00
0040A17F 00 DB 00
0040A180 00 DB 00

ما هي هده الكتابات وما مكانها من البرنامج ؟

أي عبارات تقصد بالضبط؟

تم تعديل هذه المشاركة بواسطة Xacker في 23 يناير 2010 في 20:48

1

Do as I say, not as I do

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

#3

عدرا اخي لكني لم افهم المقال جيدا لضعفي في الانجليزية

ممكن تعطينا ملخص ؟

يضهر ان TIB KPCR هما Structure لكن ما دورهما ؟ ما علاقة المسجل FS بهما ؟

---

بالنسبة للسؤال الاخير فاقصد تلك البيانات ما دورها في البرنامج ؟

هل هي بيانات البرنامج المخزنة في data section ؟

#4

حسب ما فهمت فمتلا هدا الامر mov eax, dword ptr fs: [00000124h]

fs مؤشر الى TIB Structure في الـUser mode

ويضع في eax احد عناصر هده الـStrcuture حسب الازاحة

لكن ما دور هده Structure ولمادا دائما عندما اريد تنقيح برنامج يضهر لي هدا المسجل مستعملا في الكود ؟

اضن الجواب على هدا السؤال هو تفسير دور كل من KPCR و TIB

تم تعديل هذه المشاركة بواسطة soufianosse في 23 يناير 2010 في 21:40

#5

GM أكثر خبرة مني بهذه المساءل، ربما يجيبك عليها إن شاء الله.

Do as I say, not as I do

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

#6

شكرا لك اخي Xacker

في انتضار GM ...

#7

كما قال X ، المسجل FS يشير الى عنوان في الذاكرة هو Processor Control Region اذا كان الـThread يعمل في kernel-mode او يشير الى Thread Environment Block اذا كان يعمل في user-mode .

كلا العنوانين السابقين يتم التعامل معهما باعتبارهما Structures وهو يختلف باختلاف اصدارة الكرنل .

كلا التركيبتين (Structures) السابقتين يروّسهما تركيبة TIB وتركيبها كالتالي :

 +0x000 ExceptionList	: Ptr32 _EXCEPTION_REGISTRATION_RECORD
 +0x004 StackBase 	: Ptr32 Void
 +0x008 StackLimit 	: Ptr32 Void
 +0x00c SubSystemTib 	: Ptr32 Void
 +0x010 FiberData 	: Ptr32 Void
 +0x010 Version 	: Uint4B
 +0x014 ArbitraryUserPointer : Ptr32 Void
 +0x018 Self 	: Ptr32 _NT_TIB

فعندما تجد تعليمة بهذا الشكل :

mov eax, dword ptr fs:[0x0]

فهذا غرضه ان يتم يحميل المسجل eax بأول dword من عنوان الـPCR/TEB وهو دائما يكون العنصر ExceptionList ، ويتم هذا عادة عند تنصيب او معالجة الاستثناءات .

هل مازال الامر غامضا ؟

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#8

شكرا لك اخي GM

الامر مفهوم لكن ما هو دور هده Structure

هل يتم وضع الاستتناء في احصد عناصر ExceptionLis

ليتم التعامل معه من بعد ام مادا ؟

ومادا عن تلك البيانات في Olly

تم تعديل هذه المشاركة بواسطة soufianosse في 25 يناير 2010 في 03:14

#9

نعم يتم وضعها كـChain .

اقتباس
ومادا عن تلك البيانات في Olly

بيانات في البرنامج ، نصوص او اعداد او اي شئ اخر ...

لا يمكنني التنبؤ بدورها في البرنامج ، عليك عمل reversing ان كنت تريد معرفة اهميتها !

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…