25-06-2011, 06:03 PM
- 'هل هاذا يعنى انا عنوان الدالة دائما ثابت و لا يتغير ... لذالك يمكن تخزينه مباشرتا فى المصفوفة .
اذا العناوين ثابت لماذا ...???'
لاحظ عند جلب عنوان الـ MessageBoxA , يتم كتابته في القالب (4 بايتات الحمراء)
يعني من البايت 16 بقدر 4 بايتات , التي ستحمل عنوان الدالة المستهدفة :
- العناوين بالنسبة لـ Api : هنا
-'كيف يمكن استثمار هذه الدالة ... على ما يؤشر lpImportAddr ... من اين احصل عليه'
- المكتبة التي نبرمجها , تحتوي دوال/إجراءات تنفذ مجموعه تعليمات لذا يجب كتابت قوالب
مكافئة لهده الإجراءات (بعد التنقيح) , ليس كدوال الـ Api واظحة (عدد و نوع البراماتر) .
اذا العناوين ثابت لماذا ...???'
كود :
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}
);كود :
CopyMemory(@MyMSGByte[16], @pMsgBoxA, 4);كود :
B8 [COLOR=Red]EA 07 3D 7E [COLOR=Black]//[/COLOR] [/COLOR]MOV EAX,user32.[COLOR=Red]MessageBoxA[/COLOR]-'كيف يمكن استثمار هذه الدالة ... على ما يؤشر 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

