الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

API Hook مثال بسيط

مغلقرائج
بدأه B.M.AbdelAziZ في 8 مايو 2006 · 64 رد · 9,157 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#51

طبعا نسيت ان اقول ،

ال error الحمد لله تم تصحيحه ،

والبرنامج تنفذ لكن بقيت مشكلة اثناء الضغط على زر ال hook ،

سأحاول ان احلها بعون الله ،،

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#52

السلام عليكم

الاخير زمانه كتب:
function NewOne(hProcess: THandle; uExitCode: UINT): BOOL; stdcall;

begin
 if MessageBox(Form1.Handle, 'Close ?', 'API HooK',
	MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) = IDYES then
  begin
	WriteProcessMemory(DWORD(-1), @HookeD, @OldBytes, SizeOf(OldBytes), Dw);
	HookeD(hProcess, uExitCode);
  end;
end;

هذه هي دالة NewOne وما تحويه ،

تمام ؟؟

طيب أين ال main

في هذا السؤال ؟؟

من أين يبدأ و أين ينتهي ؟؟

الدالة الجديدة NewOne تظهر MessageBox وتسال المستخدم ان اراد الخروج

في حالة ضغطه للزر نعم تعيد 6 بايت المحفوظة، اي تلغي عمل Hook ثم تستدعى الدالة

اي الدالة الأصلية وينتهى البرنامج

هل تقصد main البرنامج الرئيسي ؟

الاخير زمانه كتب:
ولو كان مثلا نستخدم ايعاز jmp

ماذا سيتغير ؟؟

فقط محتوى ال struct ؟؟

و هل سيكون هكذا

T5Bytes = packed record
	J: Byte;
	addr: Pointer;

صحيح

سنقراء 5 بايت ونكتب 5 بايت

لا حظ ان OpCode امر القفز JMP يتغير، يمكنك استخدام E9 مثلا

راجع المشاركة #17

d4baa0.gif
#53

السلام عليكم ،

بارك الله فيك اخي الكريم ،

اقتباس
الدالة الجديدة NewOne تظهر MessageBox وتسال المستخدم ان اراد الخروج

في حالة ضغطه للزر نعم تعيد 6 بايت المحفوظة، اي تلغي عمل Hook ثم تستدعى الدالة

اي الدالة الأصلية وينتهى البرنامج

هل تقصد main البرنامج الرئيسي ؟

الدالة NewOne ما بيها اشكال اخي ،

نعم انا اقصد main البرنامج الرئيسي ؟؟

لا يوجد main ؟؟ !!

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#54

نسيت استفسار بسيط ،

هذا المثال فقط على برنامجنا ،

ماذا لو اردنا ان نعممه ،

يعني هل نستخدم نفس طريقة ال system hook ، نقوم بعمل dll خاصة بنا ، ام هنا الامر مختلف ؟؟

ارجو التوضيح اخي محمد ولو بصورة سريعة

السلام عليكم

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#55
الاخير زمانه كتب:
نعم انا اقصد main البرنامج الرئيسي ؟؟

لا يوجد main ؟؟ !!

يا سيدي دي لغة غير لغة السي ومرادفاتها (C, C++, C#, Java , ...)

دالة الـ main لا يكتب لها اسم , فقط تبدأ بـ begin و تنتهي بـ end.

في المثال هذه هي الـ main

 begin 

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

اقتباس
نسيت استفسار بسيط ،

هذا المثال فقط على برنامجنا ،

ماذا لو اردنا ان نعممه ،

يعني هل نستخدم نفس طريقة ال system hook ، نقوم بعمل dll خاصة بنا ، ام هنا الامر مختلف ؟؟

ارجو التوضيح اخي محمد ولو بصورة سريعة

:D ليس استفسار بسيط ولا يوضح بصورة سريعة , نحتاج لحقن الكود داخل process اخرى

اصبر :)

تم تعديل هذه المشاركة بواسطة Asm4all في 3 سبتمبر 2006 في 12:54

#56

الاخير زمانه مااعرف كيف تحاول تفهم api hook وانت تسئل عن main في البورلاند دلفي

يااخي خليتني اضرب الاخماس في الاسداس عشان افهم ايش هو main هذا

بالاخير طلعت بداية التطبيق begin ,,, end

ياتكون في الـ++c ياتكون في Borland Delphi

#57

السلام عليكم ،،

اقتباس
ليس استفسار بسيط ولا يوضح بصورة سريعة , نحتاج لحقن الكود داخل process اخرى

اصبر

شكرا اخي على المرور ،

اخ احمد المشكلة انه بقي شهر على الدوام وسيبدأ الدرس ،، وانا للأن لم افعل شيء ،، (أقصد المشروع)

ولهذا عاوز اسرع !!

جزاك الله خيرا على تعاونك معي وعلى كل ما تقدمه لي ..

اخي محمد ،

بارك الله بك على سعة صدرك ..

اقتباس
في مثال مقبل ان شاء الله

نحن في الانتظار ،،

لا تتأخر علينا ،،

ياريت يكون هو نفس هذا المثال مع محاولة تطويره ..

في الانتظار ..

اخي xc-delphi-cx

اقتباس
الاخير زمانه مااعرف كيف تحاول تفهم api hook وانت تسئل عن main في البورلاند دلفي

يااخي خليتني اضرب الاخماس في الاسداس عشان افهم ايش هو main هذا

بالاخير طلعت بداية التطبيق begin ,,, end

ياتكون في الـ++c ياتكون في Borland Delphi

انا اعمل على لغة سي ولم اتعامل مع لغة دلفي ابدا ولا مع لغة باسكال ,,

وبصراحة ليس لدي الوقت (اطلاقا) لتعلمها الان ،،

انا دخلت هنا فقط لغرض المثال الذي وضعه استاذ محمد ،

وبالفعل .. و لله الحمد .. افتهمت ولو شيء بسيط عن فكرة عمل ال api -hook وكيف تعمل ،،

جزا الله خيرا اخونا محمد على هذا المثال ،، ولا انسى Asm4all لأنه حول البرنامج الى لغة السي ،،

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#58

السلام عليكم ،

اخ محمد ها قد عدت بسؤال صغير(سؤالين ;) ) ..

هنا

هذا السؤال

اقتباس
ولو كان مثلا نستخدم ايعاز jmp

ماذا سيتغير ؟؟

فقط محتوى ال struct ؟؟

و هل سيكون هكذا

T5Bytes = packed record
	J: Byte;
	addr: Pointer;

و هذه اجابتك اخي

اقتباس
صحيح

سنقراء 5 بايت ونكتب 5 بايت

لا حظ ان OpCode امر القفز JMP يتغير، يمكنك استخدام E9 مثلا

هنا الن نحتاج الى ايعاز ret ،

يعني عندما قفزنا الى ايعاز دالتنا كيف نعود الى البرنامج ؟؟

،،

اخي محمد

انا لسه ما فاهم اهم شغلة (صلي على النبي ولا تغضب .. صلى الله على محمد صلى الله عليه وسلم )

كيف بمجرد ان نعمل push لعنوان دالتنا تتنفذ هذه الدالة ،

يعني انا بمعلوماتي البسيطة في الاسمبلي كنا نعمل push ل المتغيرات ثم ايعاز call للدالة ،

كيف هنا وضعنا فقط push

اخونا Asm4all قال

اقتباس
هي بالحرف تعني :

jmp XXXX

يعني push = jmp

،،

اخي Asm4all تعب معي بتحويل البرنامج الى لغة سي جزاه الله خيرا ،

وهذا السؤال عن فكرة البرنامج ولذا وضعته هنا ،،

راجيا ردك بارك الله فيك ،،

و السلام عليكم

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#59
الاخير زمانه كتب:
هنا الن نحتاج الى ايعاز ret ،

يعني عندما قفزنا الى ايعاز دالتنا كيف نعود الى البرنامج ؟؟

،،

كيف بمجرد ان نعمل push لعنوان دالتنا تتنفذ هذه الدالة ،

يعني انا بمعلوماتي البسيطة في الاسمبلي كنا نعمل push ل المتغيرات ثم ايعاز call للدالة ،

كيف هنا وضعنا فقط push

السلام عليكم

اظن تم شرح الأمر في احد الردود السابقة في الصفحة الأولى...

ساحاول مرة ثانية، تتبع جيدا

الأمر RET ماهو الاامر قفز للقيمة الموجودة في المكدسة

اي كتابة RET هي مثل كتابة POP AX و JMP AX

Push XXXX نضع القيمة XXXX في المكدسة Stack

-

مثلا لدينا امر قفز لموضع ما في الذاكرة و ليكن ZZZZ

للقفز لذلك الموضع يمكن استخدام:

الأمر CALL ZZZZ

او الأمر JMP ZZZZ

او Push ZZZZ متبوعة ب RET

وربما هناك طرق اخرى...

طبعا هناك اختلاف بين الطرق الثلاث لكن النتيجة تقريبا واحدة

لمزيد من الفهم عليك بالقرائة عم كيفية عمل Procedure و Function و كيفية استخدام Parameters

ان لم تفهت اكتب رد دون حرج، في الأخير كلنا نتعلم :lol:

d4baa0.gif
#60

و عليكم السلام ورحمة الله ،،

اقتباس
مثلا لدينا امر قفز لموضع ما في الذاكرة و ليكن ZZZZ

للقفز لذلك الموضع يمكن استخدام:

الأمر CALL ZZZZ

او الأمر JMP ZZZZ

او Push ZZZZ متبوعة ب RET

جميل جدا ،

أظنني فهمت :lol:

لكن بقي شيء ،

ايعاز call هو يقوم ب push في البداية ثم يقوم ب ret عند النهاية ،

هكذا كنا نكتبه على ما اذكر -_-

بقي ايعاز ال jmp يعني وصلنا للعنوان ،، كيف نعود ؟؟

هل يحوي على ايعاز عودة ضمنيا ؟

اقتباس
لمزيد من الفهم عليك بالقرائة عم كيفية عمل Procedure و Function و كيفية استخدام Parameters

فعلا هذا ما سأفعله ،،

بوركت اخي وتحياتي لك

السلام عليكم

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#61

السلام عليكم ورحمة الله وبركاته

بصراحة موضوع مهم وفعال وبدا في أوله صعب لكنه بشرح من وضعه اصبح سهلاً ومفيدا جداً...

واود ان اضيف ..:

1- ما هي الاداة التي تمكني من تصفح دوال ملف الــ Dll ومعرفة عواملها ( Parameters ) ..هل هي الـ DLL Explorer أم ماذا ....( أنا أعرف ولكن لتوضيح الفكرة للجميع ) ولكني لا أملك تلك الأداة أو أنها تحتاج لكراك...أرجو من يملكها ان يرفقها ..

2- النقطة الثانية وهي اقتراح على المشرفين والقائمين على المنتدى بجعل المشاركات فيها إضافة وفعالة ولن اقول بحذف أي إضافة ليست بها إلا شكر ومدح ولكن لنرجئها خلف الإضافات التي بها قيمة إضافة للموضوع وذلك لأننا نرى موضوع به مثلاً 10 صفحات يبدأ بالفكرة وإضافات جيدة يعقبها 8 صفحات شكر ومديح ومش عارف مين بيسلم على مين ومن ثم تأتي الصفحة رقم 9 و10 ونجد بها إضافات لها معنى...هل يتعين علينا أن نقرأ كل الصفحات التي لا تحتوي على معلومة لنصل للصفحات الاخيرة.....

3- نقطة اخيرة فيها اقتراح أيضا ...كل منا يقوم بعمل برنامج خاص به ويريد أن يحميه وتوجد طرق عدة للحماية..

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

4- نقطة بعد الأخيرة ومعذرةً ...أرجو أيضا من المشرفين والقائمين على المنتدى إعطاء الموضوعات تقديرات مثل.......... مبتأ......متوسط........محترف...

وممكن أيضا تقسيم المواضيع إلى ( برمجة شبكات و قواعد بيانات ومالتي ميديا وإلى آخره....)

وذلك للتيسير وتوضيح الأفكار...

وبارك الله لكم أرجو أن تفيد تلك الاقتراحات وإن لم تصل للمشرفين والقائمين أن يوصلها لهم من يعرفعهم..

تم تعديل هذه المشاركة بواسطة kingbode في 11 سبتمبر 2006 في 09:27

#62

السلام عليكم

اقتباس
ايعاز ال jmp يعني وصلنا للعنوان ،، كيف نعود ؟؟

هل يحوي على ايعاز عودة ضمنيا ؟

لا نعود، لاننا لا نحتاج للعودة حسب مجرى تنفيذ برنامجنا

بطريقة اخرى معلومات العودة موجودة سابقا قبل bytes التي قمنا بتغييرها

kingbode كتب:
1- ما هي الاداة التي تمكني من تصفح دوال ملف الــ Dll ومعرفة عواملها ( Parameters ) ..هل هي الـ DLL Explorer أم ماذا ....( أنا أعرف ولكن لتوضيح الفكرة للجميع ) ولكني لا أملك تلك الأداة أو أنها تحتاج لكراك...أرجو من يملكها ان يرفقها ..

المنتدى ليس لطلب البرامج واهم شيئ ممنوع كلب سريال او كر اك...

يمكن تحميل نسخة تجريبة من ذلك البرنامج وبرامج غيره من http://www.windll.com

kingbode كتب:
2- النقطة الثانية وهي اقتراح على المشرفين والقائمين على المنتدى بجعل المشاركات فيها إضافة وفعالة ولن اقول بحذف أي إضافة ليست بها إلا شكر ومدح ولكن لنرجئها خلف الإضافات التي بها قيمة إضافة للموضوع وذلك لأننا نرى موضوع به مثلاً 10 صفحات يبدأ بالفكرة وإضافات جيدة يعقبها 8 صفحات شكر ومديح ومش عارف مين بيسلم على مين ومن ثم تأتي الصفحة رقم 9 و10 ونجد بها إضافات لها معنى...هل يتعين علينا أن نقرأ كل الصفحات التي لا تحتوي على معلومة لنصل للصفحات الاخيرة.....

بهذا الموضوع ردود كثيرة مخفية ولا يمكنك مشاهذتها الأن...

انت مثلا، ما دخل النقط التي كتبتها بالموضوع؟!!! اليس هذا خروج عن الموضوع :)

kingbode كتب:
3- نقطة اخيرة فيها اقتراح أيضا ...كل منا يقوم بعمل برنامج خاص به ويريد أن يحميه وتوجد طرق عدة للحماية..

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

طرح مواضيع نعم لكن انشاء قسم خاص لا اظن ذلك...

فلنقل ان كثر عدد المواضيع وكان هناك مشاركات فعالة حينها يمكن انشاء قسم خاص

المنتدى مفتوح للجميع اطرح افكارك في مواضيع متفرقة ولنرى...

kingbode كتب:
4- نقطة بعد الأخيرة ومعذرةً ...أرجو أيضا من المشرفين والقائمين على المنتدى إعطاء الموضوعات تقديرات مثل.......... مبتأ......متوسط........محترف...

وممكن أيضا تقسيم المواضيع إلى ( برمجة شبكات و قواعد بيانات ومالتي ميديا وإلى آخره....)

وذلك للتيسير وتوضيح الأفكار...

فكرة جيدة، ان شاء الله يتم تطبيقها

d4baa0.gif
#63
محمدعبد العزيز كتب:

انت مثلا، ما دخل النقط التي كتبتها بالموضوع؟!!! اليس هذا خروج عن الموضوع :)

الحمد لله أنك يا محمد قرأت رأيي وقمت بالرد عليه...

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

بالنسبة لي اعرف البرنامج الخاص بالـ DLL والحمد لله أعرف أجيب أي كراك ولكني طرحت الفكرة والطلب لتعم الفائدة وكي يعلم من لا يعلم...

ولكني لست الآن على جهازي الخاص كي ارفق البرنامج.

تم تعديل هذه المشاركة بواسطة kingbode في 11 سبتمبر 2006 في 14:20

#64
اقتباس
النقاط التي كتبتها كانت تعقيب بعد ردي وأعتقد انها تصب في مصلحة المنتدى ولم اجد موضوع للاقتراحات للتعديل في المنتدى...

نقطة مهمة :)

ساثبت موضوع للإقتراحات

ماهي اقتراحاتكم لقسم دلفي

d4baa0.gif
#65

السلام عليكم ،

اقتباس
لا نعود، لاننا لا نحتاج للعودة حسب مجرى تنفيذ برنامجنا

تمام ،

قرأت هذه الايعازات ،، والان وضحت الصورة تمام بالنسبة لأستخدام هذه الايعازات ،

فعلا نحن لسنا بحاجة الى العودة ،

المشكلة ret هي التي لخبطتني :) لم اكن ادري ما هو عملها ،

لكن الان عرفت بعد ان قرأت قليلا عن ال stack

مشكور اخي الكريم على صبرك علي ;)

اقتباس
ولكي تنفذ دالتنا يكفي تغيير الأوامر الأولى بأمر قفز لدالتنا أي JMP بلغة التجميع

و يمكننا أيضا أن نستعمل أمر إستدعاء Call

لكن في حالتنا نستخدم Retرجوع و لنقل لسبب ما لا يهما الأن...

اخي

اذا كان السبب علمي فأرجو ان تذكره لكي نستفاد ،

***

اخي محمد ،،

ماهي مساوئ هذه الطريقة ؟؟

طبعا انا الان اقرء في الطرق الاخرى ،

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

جزاك الله كل خير

تحياتي لك ..

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

هذا الموضوع مغلق.

مواضيع مشابهة