حقن ملف تنفيذى و جعله يحمل مكتبة من صنعنا
#6
- 'هل هاذا يعنى انا عنوان الدالة دائما ثابت و لا يتغير ... لذالك يمكن تخزينه مباشرتا فى المصفوفة .
اذا العناوين ثابت لماذا ...???'

كود :
const MyMSGByte: array[1..27] of Byte = ( $6A, $00, {PUSH 0} $68, 0, 0, 0, 0, {PUSH XXXX} // title $68, 0, 0, 0, 0, {PUSH XXXX} // text $6A, $00, {PUSH 0} // owner $[COLOR=Blue]B8[/COLOR], [COLOR=Red]0[/COLOR], [COLOR=Red]0[/COLOR], [COLOR=Red]0[/COLOR],[COLOR=Red] 0[/COLOR], {MOV EAX MessageBoxA} $FF, $D0, {CALL EAX} $68, 0, 0, 0, 0, {PUSH XXXX} // JMP TO real Starting point $C3 {RETN} );
لاحظ عند جلب عنوان الـ MessageBoxA , يتم كتابته في القالب (4 بايتات الحمراء)
كود :
CopyMemory(@MyMSGByte[16], @pMsgBoxA, 4);
يعني من البايت 16 بقدر 4 بايتات , التي ستحمل عنوان الدالة المستهدفة :
كود :
B8 [COLOR=Red]EA 07 3D 7E [COLOR=Black]//[/COLOR] [/COLOR]MOV EAX,user32.[COLOR=Red]MessageBoxA[/COLOR]
- العناوين بالنسبة لـ Api : هنا
-'كيف يمكن استثمار هذه الدالة ... على ما يؤشر lpImportAddr ... من اين احصل عليه'
كود :
function GetImportFunAddr(lpImportAddr: Pointer): Pointer; begin Result := PPointer(PPointer(Cardinal(lpImportAddr) + 2)^)^; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessageFmt('%p',[GetImportFunAddr(@MessageBoxA)]); {GetProcAddress(LoadLibrary('user32.dll'), 'MessageBoxA')} end;
- المكتبة التي نبرمجها , تحتوي دوال/إجراءات تنفذ مجموعه تعليمات لذا يجب كتابت قوالب
مكافئة لهده الإجراءات (بعد التنقيح) , ليس كدوال الـ Api واظحة (عدد و نوع البراماتر) .
I'M Fly Like A G6

الرد


الردود في هذا الموضوع
حقن ملف تنفيذى و جعله يحمل مكتبة من صنعنا - بواسطة TF6M - 25-06-2011, 06:03 PM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم