في أحد دروس jaas بعنوان : أساليب البرمجة المتقدمة للملفات التنفيذ على هذا الرايط
يقول jaas:
اقتباسكيف سنعرف مكان وعنوان تنفيذ برنامجنا بداخل أي عملية
لكي نبدأ بتكوين بيئة للملف التنفيذي , الحل بسيط عن طريق قانون أبسط
قانون تعليمة JMP و CALL
أنا متأكد أن أغلبكم تتبع وراقب طريقة عمل فايروس أو shellcode
وقد تستغرب من أن هذا الشل كود يبدأ بعشرات JMP و Call دون أي تنفيذ ودون سبب واضح؟!
وللمعلومة : فايروس ساسر يبدأ ب 20 تعليمة jmp .. تقريباً
هذة الطريقة لتحديد عناوين الكود بداخل أي عملية .... كيف ؟
أولاً : تعليمة JMP و Call لهما نفس العمل وقد لايكون هنالك إختلاف , إلى في العمل الإضافي للمعالج
عندما ينفذ المعالج تعليمة jmp فإنة ينقل التنفيذ فقط , ولكن عندما ينفذ تعليمة call
فإن المعالج ينقل التنفيذ + يقوم بتخزين عنوان الرجوع للتعليمة التالية , وهنا وجد الحل
الآن نريد تحديد أي عنوان بالبايت داخل برنامجنا , نبدأ بتعليمة jmp وننقل التنفيذ
إلى العنوان الذي نريد معرفته , بعد ذلك ننفذ تعليمة call , مباشرة يقوم المعالج بشكل
تلقائي بدفع عنوان العودة إلى المكدس بواسطة الأمر push
نحن نقوم بكل بساطة بسحب عنوان العودة بتعليمة pop إلى أي مسجل وبهذا نكون قد حددنا موقعنا
0012FE1C: JMP SHORT 0012FE1F 0012FE1E: NOP 0012FE1F: CALL 0012FE62 xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxx 0012FE62: POP EDI
الحقيقة أني لم أفهم لماذا يريد تحديد العنوان!! ثم عنوان أي برنامج يقصد هل البرنامج الضحية أم البرنامج الذي يكتبه!