delphi4arab منتديات دلفي للعرب
حقن ملف تنفيذى و جعله يحمل مكتبة من صنعنا - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : حقن ملف تنفيذى و جعله يحمل مكتبة من صنعنا (/showthread.php?tid=3234)

الصفحات: 1 2 3 4


حقن ملف تنفيذى و جعله يحمل مكتبة من صنعنا - hanipino - 11-07-2011

السلام عليكم

هذه طريقة اخرى اخى me&delphi احسن من الاولى و اوضح Smile

PHP كود :
procedure MSG;
 
asm
   PUSHAD
   PUSH 0
   PUSH $FFFFFFFF
   PUSH $FFFFFFFF
   PUSH 0
   MOV EAX
, $7E3D07EA //@MessageBoxA
   
CALL EAX
   POPAD
   PUSH $FFFFFFFF
   RET
 end
; 

كود :
CopyMemory(@bFile[Pos_code_injection], @[color=Red]MSG[/color], _SizeOfProc);

حاولت كاتبت العناوين بعد حسابها فى الدالة MSG بدلا من كتابتها مباشرتا فى الملف المحقون .. لاكن لم استطع .


حقن ملف تنفيذى و جعله يحمل مكتبة من صنعنا - hanipino - 11-07-2011

توصلت لطريقة لكتابت العناوين فى الاجراء MSG ... ثم كتابت الاجراء ككل فى الملف المحقون .. هذه الطريقة مؤخوذة من المثال AHPacker

تخزين العناوين فى الاجراء
PHP كود :
procedure PatchMyProc(Proc: Pointer; NewValue: Pointer; OffsInProc: Dword; Size: Dword );
var
  
Writ: cardinal;
begin
  asm
    MOV EAX
, Proc         // EAX نخزين عنوان الاجراء  فى
    
ADD EAX, OffsInProc    //استخراج عنوان بايت معين فى هدا الاجراء
    
MOV Proc, EAX         // تخزين العنوان الاخير فى متغير نتمكن من تعامل معه
  
end;
  
WriteProcessMemory(GetCurrentProcess, Proc, NewValue, Size, Writ);
end; 

الاستعمال .. مثلا تخزين عنوان ذو حجم 4 بايت مكانه يبدء من البايت 9
كود :
PatchMyProc(@MSG, @Adresse,{Pos Byte In Proc}9, 4);



حقن ملف تنفيذى و جعله يحمل مكتبة من صنعنا - me_delphi - 12-07-2011

جيد أخي hanipino من خلال البحث يتعلم الانسان الكثير

بالنسبة للحصول على عنوان MessageboxA تلقائيا فقد عدلت على المرفق الدي طرحت الحل بسيط بدون استعمال أي اجراءات أخري

بالتوفيق أخي .