طبعا نسيت ان اقول ،
ال error الحمد لله تم تصحيحه ،
والبرنامج تنفذ لكن بقيت مشكلة اثناء الضغط على زر ال hook ،
سأحاول ان احلها بعون الله ،،
اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ
طبعا نسيت ان اقول ،
ال error الحمد لله تم تصحيحه ،
والبرنامج تنفذ لكن بقيت مشكلة اثناء الضغط على زر ال hook ،
سأحاول ان احلها بعون الله ،،
اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ
السلام عليكم
الاخير زمانه كتب: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
السلام عليكم ،
بارك الله فيك اخي الكريم ،
اقتباسالدالة الجديدة NewOne تظهر MessageBox وتسال المستخدم ان اراد الخروجفي حالة ضغطه للزر نعم تعيد 6 بايت المحفوظة، اي تلغي عمل Hook ثم تستدعى الدالة
اي الدالة الأصلية وينتهى البرنامج
هل تقصد main البرنامج الرئيسي ؟
الدالة NewOne ما بيها اشكال اخي ،
نعم انا اقصد main البرنامج الرئيسي ؟؟
لا يوجد main ؟؟ !!
اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ
نسيت استفسار بسيط ،
هذا المثال فقط على برنامجنا ،
ماذا لو اردنا ان نعممه ،
يعني هل نستخدم نفس طريقة ال system hook ، نقوم بعمل dll خاصة بنا ، ام هنا الامر مختلف ؟؟
ارجو التوضيح اخي محمد ولو بصورة سريعة
السلام عليكم
اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ
الاخير زمانه كتب:نعم انا اقصد main البرنامج الرئيسي ؟؟لا يوجد main ؟؟ !!
يا سيدي دي لغة غير لغة السي ومرادفاتها (C, C++, C#, Java , ...)
دالة الـ main لا يكتب لها اسم , فقط تبدأ بـ begin و تنتهي بـ end.
في المثال هذه هي الـ main
begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.
:D ليس استفسار بسيط ولا يوضح بصورة سريعة , نحتاج لحقن الكود داخل process اخرىاقتباسنسيت استفسار بسيط ،هذا المثال فقط على برنامجنا ،
ماذا لو اردنا ان نعممه ،
يعني هل نستخدم نفس طريقة ال system hook ، نقوم بعمل dll خاصة بنا ، ام هنا الامر مختلف ؟؟
ارجو التوضيح اخي محمد ولو بصورة سريعة
اصبر :)
تم تعديل هذه المشاركة بواسطة Asm4all في 3 سبتمبر 2006 في 12:54
الاخير زمانه مااعرف كيف تحاول تفهم api hook وانت تسئل عن main في البورلاند دلفي
يااخي خليتني اضرب الاخماس في الاسداس عشان افهم ايش هو main هذا
بالاخير طلعت بداية التطبيق begin ,,, end
ياتكون في الـ++c ياتكون في Borland Delphi
السلام عليكم ،،
اقتباسليس استفسار بسيط ولا يوضح بصورة سريعة , نحتاج لحقن الكود داخل process اخرىاصبر
شكرا اخي على المرور ،
اخ احمد المشكلة انه بقي شهر على الدوام وسيبدأ الدرس ،، وانا للأن لم افعل شيء ،، (أقصد المشروع)
ولهذا عاوز اسرع !!
جزاك الله خيرا على تعاونك معي وعلى كل ما تقدمه لي ..
اخي محمد ،
بارك الله بك على سعة صدرك ..
اقتباسفي مثال مقبل ان شاء الله
نحن في الانتظار ،،
لا تتأخر علينا ،،
ياريت يكون هو نفس هذا المثال مع محاولة تطويره ..
في الانتظار ..
اخي xc-delphi-cx
اقتباسالاخير زمانه مااعرف كيف تحاول تفهم api hook وانت تسئل عن main في البورلاند دلفييااخي خليتني اضرب الاخماس في الاسداس عشان افهم ايش هو main هذا
بالاخير طلعت بداية التطبيق begin ,,, end
ياتكون في الـ++c ياتكون في Borland Delphi
انا اعمل على لغة سي ولم اتعامل مع لغة دلفي ابدا ولا مع لغة باسكال ,,
وبصراحة ليس لدي الوقت (اطلاقا) لتعلمها الان ،،
انا دخلت هنا فقط لغرض المثال الذي وضعه استاذ محمد ،
وبالفعل .. و لله الحمد .. افتهمت ولو شيء بسيط عن فكرة عمل ال api -hook وكيف تعمل ،،
جزا الله خيرا اخونا محمد على هذا المثال ،، ولا انسى Asm4all لأنه حول البرنامج الى لغة السي ،،
اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ
السلام عليكم ،
اخ محمد ها قد عدت بسؤال صغير(سؤالين ;) ) ..
هنا
هذا السؤال
اقتباسولو كان مثلا نستخدم ايعاز 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 تعب معي بتحويل البرنامج الى لغة سي جزاه الله خيرا ،
وهذا السؤال عن فكرة البرنامج ولذا وضعته هنا ،،
راجيا ردك بارك الله فيك ،،
و السلام عليكم
اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ
الاخير زمانه كتب:هنا الن نحتاج الى ايعاز 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:
و عليكم السلام ورحمة الله ،،
اقتباسمثلا لدينا امر قفز لموضع ما في الذاكرة و ليكن ZZZZللقفز لذلك الموضع يمكن استخدام:
الأمر CALL ZZZZ
او الأمر JMP ZZZZ
او Push ZZZZ متبوعة ب RET
جميل جدا ،
أظنني فهمت :lol:
لكن بقي شيء ،
ايعاز call هو يقوم ب push في البداية ثم يقوم ب ret عند النهاية ،
هكذا كنا نكتبه على ما اذكر -_-
بقي ايعاز ال jmp يعني وصلنا للعنوان ،، كيف نعود ؟؟
هل يحوي على ايعاز عودة ضمنيا ؟
اقتباسلمزيد من الفهم عليك بالقرائة عم كيفية عمل Procedure و Function و كيفية استخدام Parameters
فعلا هذا ما سأفعله ،،
بوركت اخي وتحياتي لك
السلام عليكم
اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ
السلام عليكم ورحمة الله وبركاته
بصراحة موضوع مهم وفعال وبدا في أوله صعب لكنه بشرح من وضعه اصبح سهلاً ومفيدا جداً...
واود ان اضيف ..:
1- ما هي الاداة التي تمكني من تصفح دوال ملف الــ Dll ومعرفة عواملها ( Parameters ) ..هل هي الـ DLL Explorer أم ماذا ....( أنا أعرف ولكن لتوضيح الفكرة للجميع ) ولكني لا أملك تلك الأداة أو أنها تحتاج لكراك...أرجو من يملكها ان يرفقها ..
2- النقطة الثانية وهي اقتراح على المشرفين والقائمين على المنتدى بجعل المشاركات فيها إضافة وفعالة ولن اقول بحذف أي إضافة ليست بها إلا شكر ومدح ولكن لنرجئها خلف الإضافات التي بها قيمة إضافة للموضوع وذلك لأننا نرى موضوع به مثلاً 10 صفحات يبدأ بالفكرة وإضافات جيدة يعقبها 8 صفحات شكر ومديح ومش عارف مين بيسلم على مين ومن ثم تأتي الصفحة رقم 9 و10 ونجد بها إضافات لها معنى...هل يتعين علينا أن نقرأ كل الصفحات التي لا تحتوي على معلومة لنصل للصفحات الاخيرة.....
3- نقطة اخيرة فيها اقتراح أيضا ...كل منا يقوم بعمل برنامج خاص به ويريد أن يحميه وتوجد طرق عدة للحماية..
وأرجو أن يخصص قسم لطرق حماية البرامج المبرمجة للدلفي أو حتى نجعله عام لطرق الحماية بصفة عامة للغات البرمجة كلها..
4- نقطة بعد الأخيرة ومعذرةً ...أرجو أيضا من المشرفين والقائمين على المنتدى إعطاء الموضوعات تقديرات مثل.......... مبتأ......متوسط........محترف...
وممكن أيضا تقسيم المواضيع إلى ( برمجة شبكات و قواعد بيانات ومالتي ميديا وإلى آخره....)
وذلك للتيسير وتوضيح الأفكار...
وبارك الله لكم أرجو أن تفيد تلك الاقتراحات وإن لم تصل للمشرفين والقائمين أن يوصلها لهم من يعرفعهم..
تم تعديل هذه المشاركة بواسطة kingbode في 11 سبتمبر 2006 في 09:27
السلام عليكم
اقتباسايعاز ال jmp يعني وصلنا للعنوان ،، كيف نعود ؟؟هل يحوي على ايعاز عودة ضمنيا ؟
لا نعود، لاننا لا نحتاج للعودة حسب مجرى تنفيذ برنامجنا
بطريقة اخرى معلومات العودة موجودة سابقا قبل bytes التي قمنا بتغييرها
kingbode كتب:1- ما هي الاداة التي تمكني من تصفح دوال ملف الــ Dll ومعرفة عواملها ( Parameters ) ..هل هي الـ DLL Explorer أم ماذا ....( أنا أعرف ولكن لتوضيح الفكرة للجميع ) ولكني لا أملك تلك الأداة أو أنها تحتاج لكراك...أرجو من يملكها ان يرفقها ..
المنتدى ليس لطلب البرامج واهم شيئ ممنوع كلب سريال او كر اك...
يمكن تحميل نسخة تجريبة من ذلك البرنامج وبرامج غيره من http://www.windll.com
kingbode كتب:2- النقطة الثانية وهي اقتراح على المشرفين والقائمين على المنتدى بجعل المشاركات فيها إضافة وفعالة ولن اقول بحذف أي إضافة ليست بها إلا شكر ومدح ولكن لنرجئها خلف الإضافات التي بها قيمة إضافة للموضوع وذلك لأننا نرى موضوع به مثلاً 10 صفحات يبدأ بالفكرة وإضافات جيدة يعقبها 8 صفحات شكر ومديح ومش عارف مين بيسلم على مين ومن ثم تأتي الصفحة رقم 9 و10 ونجد بها إضافات لها معنى...هل يتعين علينا أن نقرأ كل الصفحات التي لا تحتوي على معلومة لنصل للصفحات الاخيرة.....
بهذا الموضوع ردود كثيرة مخفية ولا يمكنك مشاهذتها الأن...
انت مثلا، ما دخل النقط التي كتبتها بالموضوع؟!!! اليس هذا خروج عن الموضوع :)
kingbode كتب:3- نقطة اخيرة فيها اقتراح أيضا ...كل منا يقوم بعمل برنامج خاص به ويريد أن يحميه وتوجد طرق عدة للحماية..وأرجو أن يخصص قسم لطرق حماية البرامج المبرمجة للدلفي أو حتى نجعله عام لطرق الحماية بصفة عامة للغات البرمجة كلها..
طرح مواضيع نعم لكن انشاء قسم خاص لا اظن ذلك...
فلنقل ان كثر عدد المواضيع وكان هناك مشاركات فعالة حينها يمكن انشاء قسم خاص
المنتدى مفتوح للجميع اطرح افكارك في مواضيع متفرقة ولنرى...
kingbode كتب:4- نقطة بعد الأخيرة ومعذرةً ...أرجو أيضا من المشرفين والقائمين على المنتدى إعطاء الموضوعات تقديرات مثل.......... مبتأ......متوسط........محترف...وممكن أيضا تقسيم المواضيع إلى ( برمجة شبكات و قواعد بيانات ومالتي ميديا وإلى آخره....)
وذلك للتيسير وتوضيح الأفكار...
فكرة جيدة، ان شاء الله يتم تطبيقها
محمدعبد العزيز كتب:انت مثلا، ما دخل النقط التي كتبتها بالموضوع؟!!! اليس هذا خروج عن الموضوع :)
الحمد لله أنك يا محمد قرأت رأيي وقمت بالرد عليه...
النقاط التي كتبتها كانت تعقيب بعد ردي وأعتقد انها تصب في مصلحة المنتدى ولم اجد موضوع للاقتراحات للتعديل في المنتدى...
بالنسبة لي اعرف البرنامج الخاص بالـ DLL والحمد لله أعرف أجيب أي كراك ولكني طرحت الفكرة والطلب لتعم الفائدة وكي يعلم من لا يعلم...
ولكني لست الآن على جهازي الخاص كي ارفق البرنامج.
تم تعديل هذه المشاركة بواسطة kingbode في 11 سبتمبر 2006 في 14:20
اقتباسالنقاط التي كتبتها كانت تعقيب بعد ردي وأعتقد انها تصب في مصلحة المنتدى ولم اجد موضوع للاقتراحات للتعديل في المنتدى...
نقطة مهمة :)
ساثبت موضوع للإقتراحات
السلام عليكم ،
اقتباسلا نعود، لاننا لا نحتاج للعودة حسب مجرى تنفيذ برنامجنا
تمام ،
قرأت هذه الايعازات ،، والان وضحت الصورة تمام بالنسبة لأستخدام هذه الايعازات ،
فعلا نحن لسنا بحاجة الى العودة ،
المشكلة ret هي التي لخبطتني :) لم اكن ادري ما هو عملها ،
لكن الان عرفت بعد ان قرأت قليلا عن ال stack
مشكور اخي الكريم على صبرك علي ;)
اقتباسولكي تنفذ دالتنا يكفي تغيير الأوامر الأولى بأمر قفز لدالتنا أي JMP بلغة التجميعو يمكننا أيضا أن نستعمل أمر إستدعاء Call
لكن في حالتنا نستخدم Retرجوع و لنقل لسبب ما لا يهما الأن...
اخي
اذا كان السبب علمي فأرجو ان تذكره لكي نستفاد ،
***
اخي محمد ،،
ماهي مساوئ هذه الطريقة ؟؟
طبعا انا الان اقرء في الطرق الاخرى ،
واتمنى ان ارى تفاعل معي في النقاش الذي سأطرحه لكي تعم الفائدة ..
جزاك الله كل خير
تحياتي لك ..
اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ
هذا الموضوع مغلق.