حقن ملف تنفيذى و جعله يحمل مكتبة من صنعنا
#11
البرمتر من نوع Pchar ... عند استدعاء دالة المكتبة (dll) تقوم هذه الدالة بنتفيذ الدالة IputBox و تضع هذا البرمتر فى احد برمترات الدالة IputBox ... لاكن ضهر على شكل علامات اسفهام

إقتباس :ماذا نحط في الباراميتر؟

ضع اى شىء ... ليكتب فى البرمتر الاول ل الدالة IputBox
...
الان يصدر على شكل علامات اسفهام ... ساحاول ايجاد الحل لضهوره بالشكل الصحيح .

المهم فى المثال حقن المكتبة و استدعاء دالتها بنجاح ... ثم نهتم ب برمتراتها و كيفية التعامل مع نوع هذه البرمترات.
الرد
#12
دائما علامات استفهام

استعملة Pchar , ShortString
ShareMem Unit

دائما نفس المشكل ???? .
الرد
#13
بعد ليلة حرب ضارية مع Pchar تبن ان هاكذا نوع من المتغيرات لايمكن تخزين عنوانه فى EAX بل يجب ان يكون فى EDX

و عليه تصبح MyLibraryInjectedByte على هذا النحو

PHP كود :
MyLibraryInjectedByte: array[1..39] of Byte =
                       (

                       
//----------- Load the library and get the Handle -----------------//

                        
$68, 0, 0, 0, 0,    {PUSH XXXX}      // Password.dll
                        
$B8, 0, 0, 0, 0,    {MOV EAX XXXX}   // @LoadLibrary
                        
$FF, $D0,           {CALL EAX}       // Call LoadLibrary

                           
{
                              
Result of this function (LoadLibrary) is placed in the EAX
                                        EAX 
= Handle of loaded library
                                                                                         
}

                       
//---------------- Get Address of Function From DLL ----------------//

                        
$68, 0, 0, 0, 0,    {PUSH XXXX}      // Name of Function to call
                        
$50,                {PUSH EAX}       // Handle Of loaded library
                        
$B8, 0, 0, 0, 0,    {MOV EAX XXXX}   // @GetProcAddress
                        
$FF, $D0,           {CALL EAX}       // Call GetProcAddress


                           
{
                              
Result of this function (GetProcAddress) is placed in the EAX
                                     EAX 
= Address Of Function to call
                                                                                          
}

                       
//---------------------  Execute  Function  -------------------------//

                        
$BA, 0, 0, 0, 0,    {MOV EDX XXXX}   // Address Of Parametre  =  Pchar
                        
$52,                {PUSH EDX}       // Put Pchar value in the stack
                        
$FF, $D0,           {CALL EAX}       // Call Function

                        
$68, 0, 0, 0, 0,    {PUSH XXXX}      // JMP TO real Starting point
                        
$C3                 {RETN}
                        
//------------------------------------------------------------------//

                       
);

[
align=center] 
دالة المكتبة يمكن ان تكون على هذا الشكل
إقتباس :procedure Input_Boox(S: pAnsiChar); stdcall;
begin
InputBox(string(S), PChar(''), PChar('') );
end;
[/align]

الان تم الاستفادة من المكتبة المحقونة 100% اخى cargem Smile


الملفات المرفقة
.rar   Injection.rar (الحجم : 2.97 ك ب / التحميلات : 13)
الرد
#14
أخي Hanipino

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

ولي سؤال...عند التنقيح هل قمت بتنقيح ملف تنفيدي يستدعي المكتبة التي برمجتها...لأني لاحظت اخنلافا في تحميل مكتبات النظام و المكتبات التي نبرمجها...لأني قمت في اول محاولة بالتعديل على المرفق الأصلي لدالة shellExecute وباءت المحاولة بالفشل !

رغم أني أرى الكود صحيح في وجهة نظري

تحياتي لك


الملفات المرفقة
.rar   InjectMyDLL_OK.rar (الحجم : 217.49 ك ب / التحميلات : 23)
لا اله الا أنت سبحانك اني كنت من الضالمين
الرد
#15
إقتباس :تبن ان هاكذا نوع من المتغيرات لايمكن تخزين عنوانه فى EAX بل يجب ان يكون فى EDX

يمكن دلك أخي Hanipino ...هناك خدعة بسيطة أنظر للمرفق
لا اله الا أنت سبحانك اني كنت من الضالمين
الرد
#16
إقتباس :ولي سؤال...عند التنقيح هل قمت بتنقيح ملف تنفيدي يستدعي المكتبة التي برمجتها...لأني لاحظت اخنلافا في تحميل مكتبات النظام و المكتبات التي نبرمجها...لأني قمت في اول محاولة بالتعديل على المرفق الأصلي لدالة shellExecute وباءت المحاولة بالفشل !

نعم Smile و هذا الذى كنت اتكلم عليه منذ البداية ... الله اعلم بالنسبة لمكتبات النضام فعاوين دوالها ثابت
كما اشار tf6m عكس المكتبات التى نبرمجها نحن .


إقتباس :هناك خدعة بسيطة أنظر للمرفق

نعم Smile خدعة رائعة ... وضعت عنوان الدالة اولا فى stack ثم وضعت البرمتر ...
انت الذى عكست العملية ام انا الذى عكسها Smile (من المفروض من الصحيح Smile )

المهم اخى me&delphi بارك الله فيك و بالتوفيق .
الرد
#17
إقتباس :من الصحيح

هنا يجب فهم آلية عمل المكدس... يتم دفع البارامترات بشكل مقلوب .

أنظر لمثال MessageBoxA

إقتباس :ولي سؤال...عند التنقيح هل قمت بتنقيح ملف تنفيدي يستدعي المكتبة التي برمجتها.

لم تجب عن سؤالي أخي Hanipino
لا اله الا أنت سبحانك اني كنت من الضالمين
الرد
#18
إقتباس :لم تجب عن سؤالي أخي

نعم تتبعته بكلا المكتبتين مكتبات النضام و مكتبتنا

يوجد مثالين (MessageBox و ShellExecute) مكتبات النضام
و بالنسبة لمكتبة من برمجتنا ايضا

صنعت برنامج عادى يستعدى مكتبتنا و تتبعته كيف تعامل معها و حاولت تقليده ... ثم حقن كيف تعامل معها.
الرد
#19
إقتباس :صنعت برنامج عادى يستعدى مكتبتنا و تتبعته كيف تعامل معها و حاولت تقليده ... ثم حقن كيف تعامل معها.

بارك الله فيك أخي Hanipino

كان هدا المثال شيقا واستفدنا فيه والحمد لله...لأني صراحة مللت برمجة قواعد البيانات فالبرمجة ليست قواعد بيانات فقط

لأن جل مانفعله في العمل قواعد البيانات ...

بالتوفيق أخي
لا اله الا أنت سبحانك اني كنت من الضالمين
الرد
#20
تعديل آخر أخي HaniPino

PHP كود :
//---------------------  Exeute  Function  -------------------------//


                       // $50,                {PUSH EAX}       // Address Of Function to call
                        
$68, 0, 0, 0, 0,    {PUSH XXXX}      // First Parametre =  Pchar
                        
$FF, $D0,           {CALL EAX}       // Call This Function 

لسنا بحاجة لدفع عنوان دالتنا الى المكدس لأنه يتواجد في المسجل EAX لدا يكفي دفع البارامتر ثم تنفيد CALL EAX
لا اله الا أنت سبحانك اني كنت من الضالمين
الرد


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


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