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

عمل Hook للنوافذ

مغلق
بدأه MSVS في 8 نوفمبر 2005 · 38 رد · 12,959 مشاهدة · في المواضيع و الدروس القيّمة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

هذا برنامج لمراقبة (بعض) رسائل النظام المرسلة لنوافذ البرامج .، طبعاً بواسطة دوال API

الدوال الرئيسية في هذا البرنامج :

Private Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" _
                         (ByVal lpString As String) As Long

هذه الدالة لتحويل قيمة نصية لرسالة من نوع Long ليتعامل معها النظام .

Private Declare Function RegisterShellHook Lib "Shell32" Alias "#181" _
                         (ByVal hWnd As Long, _
                          ByVal nAction As Long) As Long

هذه الدالة لإنشاء Hook على النافذة

الوسيط الأول مقبض النافذة التي ستستقبل الرسائل

الوسيط الثاني نوع الـ Hook :

RSH_REGISTER = 1

RSH_REGISTER_PROGMAN = 2

RSH_REGISTER_TASKMAN = 3

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
                         (ByVal hWnd As Long, _
                          ByVal nIndex As Long, _
                          ByVal dwNewLong As Long) As Long

هذه الدالة لتثبيت الخطاف (Hook) على النافذة

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
                         (ByVal hWnd As Long, _
                          ByVal nIndex As Long) As Long

هذه الدالة نستخدمها لمعرفة عنوان الإجراء الحالي للنافذة ، سنستخدمه عند إعادة الرسائل إلى النافذة الأصلية .

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
                         (ByVal hWnd As Long, _
                          ByVal lpString As String, _
                          ByVal cch As Long) As Long

هذه الدالة تعطينا عنوان النافذة

Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" _
                         (ByVal hWnd As Long) As Long

هذه الدالة تعطينا طول عنوان النافذة (القيمة العائدة من هذه النافذة تستخدم كوسيط ثالث مع الدالة GetWindowText )

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
                         (ByVal lpPrevWndFunc As Long, _
                          ByVal hWnd As Long, _
                          ByVal Msg As Long, _
                          ByVal wParam As Long, _
                          ByVal lParam As Long) As Long

هذه الدالة الأم التي ستستقبل جميع الرسائل من النظام .

إذا كانت قيمة الوسيط الثاني ( Msg ) = قيمة الرسالة العائدة من الدالة RegisterWindowMessage فإن هذه الرسالة تخص الـ HOOK

اترككم مع المرفق :)

نسيت هذا الخطاف لا يراقب غير 8 رسائل ، ستعرفها عند الاطلاع على المرفق

Hook ALL Windows.rar

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#2

قاعد تلعب بapi :) ,,,

ماشاء الله ... عندك معلومات دسمة ... عيني عليك باردة:) ,,

Private Declare Function RegisterShellHook Lib "Shell32" Alias "#181" _
                        (ByVal hWnd As Long, _
                         ByVal nAction As Long) As Long

من اين تأتي بالاعلان ؟؟ msdn مافيها شيء .. هل اوامر shell لها حالة خاصة ...

تم تعديل هذه المشاركة بواسطة الشمري في 9 نوفمبر 2005 في 01:43

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

السلام عليكم

أترك عنك التواضع :) منكم نستفيد

أما الدالة RegisterShellHook فالـ Google ما قصر

خذ هذا رابط بالسي : http://www.xoblite.net/source/Blackbox.cpp.html

تصدق :) بحثت مرة ثانية بالإنترنت و وجدت هذه الدالة RegisterShellHookWindow في MSDN

http://msdn.microsoft.com/library/default....lhookwindow.asp

و إن كان عندك معلومات عن الـHOOK على جميع النوافذ أفدنا به .

جربت قبل هذه الدالة أن أعمل SetWindowLong لتثبت الخطاف ومررت لها مقبض سطح المكتب لكنها لم تفلح .

وبعد البحث بالنت وجدت الدالة المذكورة في المثال .

لا تتركنا من إرشاداتك :)

وعقبال إفتتاح قسم خاص بالـ API يلم شعثنا نحن المهتمين بالـ API

بالمناسبة يوجد دوال قوية ولا تذكر في الـ MSDN

هذه الدالة AllocateAndGetTcpExTableFromStack تعرض المنافذ المفتوحة ورقم العملية التي فتحت كل منفذ ، لن تجدها في MSDN

أراك على خير :)

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

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#4

جميل جميل , الله ينور عليك يا MSVS , على رأي الشمري بتلعب بالـ API :lol:

عمل hook على الرسائل تعتبر سهله , كان طرح الأخ chik مثال في قسم الأسمبلي جميل , يقوم بعمل hook على رسالة WM_RBUTTONUP كمثال , ومنها كان بياخذ معلومات النافذه المرسله اليها الرساله ويستطيع التحكم بها

استخدمت نفس الطريقه في عمل hook للرساله WM_KEYDOWN ومنها عملت keylogger

لكن اللي معقدني في عيشتي الى الآن كيفية عمل hook على داله api بدل الرسائل , اهي دي لو عرفتها يبقى انهارده عيد العمال :D

لو في معلومات عنها تبقى عملت معروف فيا , وعقبال ما يبقى في قسم للـ API

#5

لعمل Hook يفضل استخدام التابع SetWindowsHookEx

http://msdn.microsoft.com/library/default....ndowshookex.asp

راجع قسم hook في MSDN

اقتباس
هذه الدالة AllocateAndGetTcpExTableFromStack تعرض المنافذ المفتوحة ورقم العملية التي فتحت كل منفذ ، لن تجدها في MSDN

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

اقتباس
لكن اللي معقدني في عيشتي الى الآن كيفية عمل hook على داله api بدل الرسائل , اهي دي لو عرفتها يبقى انهارده عيد العمال

لو في معلومات عنها تبقى عملت معروف فيا , وعقبال ما يبقى في قسم للـ API

إن كنت تريدها بالفيجوال بيسك فلن تستطيع ذلك الا باستخدام dll معمول بلغة قادره على انتاجه مثل فيجوال سي او دلفي اوBCB او lcc-win32 أو مترجمات اخرى للغة سي ...

اعطيني اسم تابع API وسأحاول اعطيك مثال عليه ان شاء الله ( اللغة دلفي) , ليس لدي فيجوال سي لاعمل مثال بها

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#6

اضافة :

ستلاحظ انه في تعريف التابع RegisterShellHookWindow هذه الجملة

اقتباس
Many of the messages are the same as those that can be received after calling the SetWindowsHookEx function and specifying WH_SHELL for the hook type. The difference with RegisterShellHookWindow is that the messages are received through the specified window's WindowProc and not through a call back procedure.

باستخدام التابع SetWindowsHookEx و تحديد WH_SHELL يمكنك عمل RegisterShellHookWindow خاصة بك :)

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#7

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

أولاً : إلا تلاحظون أننا مختلفون في لغاتنا البرمجية

الشمري = سي

Asm4all= اسيمبلي

cipher = دلفي

أخوكم = فيجول بيسك

و أجتمعنا في قسم الفيجول بيسك :)

أتمنى أن نجتمع في قسم الـ API بعد ما يرى النور :)

والأهم أن نجتمع في الجنة .

ثانياً يا أخ / cipher

الدالة SetWindowsHookEx لا تعمل مراقبة لكل النوافذة إنما تراقب فقط رسائل نافذة برنامجك (حسب حد تجربتي الشخصية)

أما في مثالنا السابق فالمراقبة لكل النوافذ في النظام .

أخي / Asm4all

أتمنى إني أجاوبك ، لكن من صعب سؤالك ما فهمته :s

و ما دام الأخ / cipher فاهم الموضوع فبإذن الله راح يرد علينا جميعاً .

السلام عليكم أجمعين ,

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#8
اقتباس
لكن اللي معقدني في عيشتي الى الآن كيفية عمل hook على داله api بدل الرسائل , اهي دي لو عرفتها يبقى انهارده عيد العمال

لو في معلومات عنها تبقى عملت معروف فيا , وعقبال ما يبقى في قسم للـ API

لكن اغلب الدوال هي تغليف للرسائل ,, صح او لا .. يعني الرسائل تكفي في كثير من الامور ..

مثلا

UpdateWindow تقوم بارسال عدة رسائل ...لتقوم بالتحديث ..

MoveWindow ترسل رسائل ..

SetWindowText

ايضا ترسل WM_SETTEXT ...

يعني الرسائل اعم من الدوال .. >>>استنتاج : (

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#9
اقتباس
الدالة SetWindowsHookEx لا تعمل مراقبة لكل النوافذة إنما تراقب فقط رسائل نافذة برنامجك (حسب حد تجربتي الشخصية)

أما في مثالنا السابق فالمراقبة لكل النوافذ في النظام .

مممممم . لم تكن مصيباً هذه المره :)

انت استخدمت التابع السابق في الفيجوال بيسك والتي تمكنك من عمل local hook (على البرنامج بتاعك يعني) . لكن لو استعملتها في مكتبة DLL والتي كما قلت ان فيجوال بيسك لا تستطيع انتاجها سيكون بامكان عمل global hook .

كما نقول دائما لمعلومات عن win32 API مصرح بها نرجع الى MSDN وعلينا تحري الدقة في قراءة كل حرف هناك لان MS رغم اختصارها للشرح الا انه مركز بشكل جيد جداً

لنلقي نظره اخرى على

http://msdn.microsoft.com/library/default....ndowshookex.asp

اقتباس
dwThreadId

[in] Specifies the identifier of the thread with which the hook procedure is to be associated. If this parameter is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread.

لندقق أيضا في Remarks هناك ...

اقتباس
The global hooks are a shared resource, and installing one affects all applications in the same desktop as the calling thread. All global hook functions must be in libraries. Global hooks should be restricted to special-purpose applications or to use as a development aid during application debugging. Libraries that no longer need a hook should remove its hook procedure.

Enjoy it

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#10
اقتباس
لكن لو استعملتها في مكتبة DLL والتي كما قلت ان فيجوال بيسك لا تستطيع انتاجها سيكون بامكان عمل global hook .
vb تستطيع انتاج dll !!

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#11
اقتباس
يعني الرسائل اعم من الدوال .. >>>استنتاج : (

:D

هذا القول يوحي ان كل WIN32 API تستدعي الرسائل

اقتباس
vb تستطيع انتاج dll !!

ما تقصده Activex Dll ؟ أليس كذلك؟

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#12

أخي / cipher

كلام جميل ، ممكن تزودنا بمثال بالسي لعمل Global Hook

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#13
اقتباس
لكن اغلب الدوال هي تغليف للرسائل ,, صح او لا .. يعني الرسائل تكفي في كثير من الامور ..
ما تستعجلش يا شمري , موضوع الرسايل ده أمره سهل , المشكله في دوال خبط لزق و وانت بتعمل برنامج اكيد بتكتب دوال تانيه غير SendMessage , بتستخدمها ليه ؟؟

مثلا CreateFile , و أخواتها للتعامل مع الملف كقرائه وكتابه ونقل مؤشر

وغيرها كتيييييييييير يعني لو باكتبلك حاكتب MSDN تاني :D

cipher كتب:
إن كنت تريدها بالفيجوال بيسك فلن تستطيع ذلك الا باستخدام dll معمول بلغة قادره على انتاجه مثل فيجوال سي او دلفي اوBCB او lcc-win32  أو مترجمات اخرى للغة سي  ...

اعطيني اسم تابع API وسأحاول اعطيك مثال عليه ان شاء الله ( اللغة دلفي) , ليس لدي فيجوال سي لاعمل مثال بها

استخدم اللغه اللي تريحك حتى لو حتكتبه بالصيني :D حاترجمه

خذ مثال الداله MessageBox

اظن ان الـ hook حيقدر يجيبلي الباراميتارات بتاعتها

int MessageBox(

    HWND  hWnd,	// handle of owner window
    LPCTSTR  lpText,	// address of text in message box
    LPCTSTR  lpCaption,	// address of title of message box  
    UINT  uType  // style of message box
   );

انا عارف انها لازم تكون في dll و ده من نص كلام ميكروسوفت في MSDN

Installing and Releasing Hook Procedures
You can install a hook procedure by calling the SetWindowsHookEx function and specifying the type of hook calling the procedure, whether the procedure should be associated with all threads in the same desktop as the calling thread or with a particular thread, and a pointer to the procedure entry point. 

You must place a global hook procedure in a dynamic-link library (DLL) separate from the application installing the hook procedure. The installing application must have the handle to the DLL module before it can install the hook procedure. To retrieve a handle to the DLL module, call the LoadLibrary function with the name of the DLL. After you have obtained the handle, you can call the GetProcAddress function to retrieve a pointer to the hook procedure. Finally, use SetWindowsHookEx to install the hook procedure address in the appropriate hook chain. SetWindowsHookEx passes the module handle, a pointer to the hook-procedure entry point, and 0 for the thread identifier, indicating that the hook procedure should be associated with all threads in the same desktop as the calling thread.

بل واكثر من هذا اعرف أن الحيله لعمل hook على أي Function تستدعي استبدالها بداله خاصه بك

ولكن لا اعرف كيف !!!!!

فيا ريت تساعدني في الحكايه دي

اقتباس
أخي / Asm4all

أتمنى إني أجاوبك ، لكن من صعب سؤالك ما فهمته

آسف لو السؤال مش واضح , اوضحلك لأنه مهم حبتين

طبعا انت عملت hook على رسائل النظام , بحيث تصطاد رساله معينه عند ارسالها من مكان الى أخر ويقوم البرنامج عندك بجمع المعلومات عنها وبعدها تعمل ما يحلو لك

لاحظ انك كنت تراقب الرسائل يعني شيء مثل WM_COMMAND مثلا

لكن لنفترض أنك تريد مراقبة داله بعينها لا ترسل رسائل يمكن مراقبتها , فكيف السبيل لهذا ؟؟؟

الطريقه الوحيده هي عمل hook على هذه الداله

ان شاء الله الأخ cipher يفيدنا في هذا الموضوع

#14

أخي / Asm4all

شكراً الفكرة اتضحت عندي ، لكن يدو أن الشغلة صعبة (حبتين)

وعلى كذا نرجو من الأخ / cipher أن يزودنا بمثالين :

1- خطاف عام لرسائل النظام .

2- خطاف على دالة معينة .

وله جزيل الشكر :)

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#15

اثناء بحثي في CodeProject عن شيء بعيد عن الموضوع قابلني هذا الرابط ...

Hooking the native API and controlling process creation on a system-wide basis

طيب اقول ايه :unsure: !!! الموضوع طلع كبييير , أسيبكم وياه

#16
اقتباس
طيب اقول ايه  !!! الموضوع طلع كبييير , أسيبكم وياه

ما انت غلطان , شطحت مرة واحدة الى Native API Hooking !

هههههه

أولا ابدأ مع انواع الـ hooks الأخرى وبعدين تعمق الى API Hook وهناك اكثر من طريقة احداها تتطلب معرفة بـ PE FILE FORMAT , وبعد ذلك اقرأ عن Native API لتعلم ما هي وبعدين فكر في قراءة الموضوع السابق ...يعني لا تصعد السلم متخطياً بعض درجاته ..

المشكلة أني ما قادر احط شئ في الموضوع لانشغالي في حل مشكله أخذت كل وقتي تقريباً وليس لدي مزاج لكتابة أي شئ قبل حلها وقد وضعت سؤال لم يجب عليه أحد ...

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#17

نرجو ارفاق امثله لكي تتضح الفكرة

#18

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

موضوع ال Hook من اكثر المواضيع اللي معقداني في عيشتي

النهارده جايبلكم برنامج بالسي مع السورس وظيفته اظهار كلمات المرور المخفية خلف النجوم بالاعتماد على ال Hook بس في البرنامج ده افكارجديدة و اهم فكرة هي عدم اعتماد البرنامج على DLL !!

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

مش ضروري تحويل البرنامج كله بجميع الوظائف

يعني كفاية مثلا تضع مربع نص ادخل فيه ال Hwnd الخاصة بمربع كلمة السر و ووضع ليبل يقوم بعرض الباسورد و له جزيل الشكر

مرفق ايضا شرح طريقة عمل البرنامج كما ورد بالموقع الاجنبي

pwdspy_src.zip

pwdspy_demo.zip

PasswordSpy___Retrieving_lost_passwords_using_Windows_hooks___The_Code_Project___DLLs.zip

#19
اقتباس
و اهم فكرة هي عدم اعتماد البرنامج على DLL !!

:o

كمبرمج عليك أن تقرأ الكود جيداً قبل أن تضع أي معلومة لست متأكداً منها

ملف الـ DLL مضاف كـ resource ويتم إستخراجه عند تشغيل البرنامج

اقتباس
ExtractResource(AfxGetInstanceHandle(), HOOKDLL_ID, g_szPwdSpyHkDll);

حيث g_szPwdSpyHkDll

اقتباس
const static LPCTSTR g_szPwdSpyHkDll = _T("PwdSpyHk.dll");

كمستخدم عليك ملاحظة ماذا يحدث بعد تشغيل البرنامج حيث ستجد ملف جديد في نفس المجلد بإسم PwdSpyHk.dll

هذا الموضوع تم نقاشه كثيراً في هذا الموقع وفي غيره من مواقع البرمجة....

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#20

يمكن التعديل بحيث لا يتم استخراج DLL على القرص بل استغلاله مباشرة من هناك :D

من يريد ان يعرف كيف يسال العم google :lol:

d4baa0.gif
#21

شكرا اعزائي على الرد

انا لم اكن اعلم ان الـ DLL يتم استخراجه من Resources حيث انني لم اقرأ البرنامج او بمعنى اصح لا اعلم من لغة السي سوى اسمها

لذلك ارجو التكرم من احد الاعضاء بتحويله لفيجوال بيسيك و لكم جزيل الشكر و اذا كان هناك طريقة لتشغيل ال DLL من الؤيسورس مباشرة نرجو إيضاحها

#22

الhook الخاص بالرسائل وفهمناه ولكن المشكلة في الرسائل نفسها كيف اعرف الرسالة الخاصة بالحدث الفلاني

مثلا يعني لي يومين اريد ان اعرف كيف احدد اني اشير بالفارة الى الساعة في اقصى اليمين على شريط المهام (كي التقط الكلمات من المتصفح او التاريخ او الوقت) اكيد ستقول لي الاحداثيات طيب ماانا يمكن انا ارفع وانزل الشريط وبالتالي لن يعمل موضوع الاحداثيات !!

طيب مالعمل اذا كنت امر بالفارة فوق القائمة الرئيسية كيف استطيع التقاط النص ؟

او مثلا اريد التقاط اسم الملف من داخل المستعرض هل اراقب الرسائل الخاصة بالlistview على اعتبار ان المتصفح يستخدمه ؟ يبدو ان الامر يتعلق بالاحداثيات ....

هذه المرة

طيب هناك عناصر لا تحتوي على هاندل مثلا الTLabel كيف ساستطيع التقاط الكلمة منه ؟

ارجو من معهم الخبرة الرد

ارجو ممن معه خبرة او برنامج يضعه لنا وله جزيل الشكر

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#23
اقتباس
اكيد ستقول لي الاحداثيات طيب ماانا يمكن انا ارفع وانزل الشريط وبالتالي لن يعمل موضوع الاحداثيات !!

هناك احدثيات لل control ضمن الاب و احداثيات للاب ضمن سطح المكتب

اقتباس
طيب مالعمل اذا كنت امر بالفارة فوق القائمة الرئيسية كيف استطيع التقاط النص ؟

ايه داه عايز تعمل برنامج ايه؟؟!! انتظر cipher يا عم و نصيحة اذا ما عندك وقت كبير, لا تضيع وقتك لأنو القصة بدها قراءة و فهم + صبر لفهم طلاسم :D

بشكل سريع, يمكن استخدام التابع GetMenu لمعرفة ال Handle لل menu المحتوة ضمن نافذة ما, طبعا لازم نكون عارفين موقع الماوس بالنسبة للشاشة بشكل عام

وبعدها حنخش item, item من ال Menu و نعرف الموقع لل item الذي تقف عليه الماوس...

يمكن الاستفادة من التابع GetMenuItemCount للحصول على عدد ال Items و ذلك لعمل حلقة عليهم..

و ايضا نقوم بتعريف متحول من النمط TMenuItemInfo وذلك لتخزين البيانات الراجعة من التابع GetMenuItemInfo و بعدها نستخدم التابع GetMenuItemRect للحصول على rect خاص بال Item و من ثم نقارن مع مكان الشاشة :D, فاذا كانت نقطة الماوس تقع ضمن الاحداثيات لل Item فهذا يعني انه نريد النص الذي بداخل ال Item و بالتالي نأخذ dwTypeData من المتحول الذي عرفناه على انه TMenuItemInfo

اقرأ في ال MSDN كل شيئ عن MENUITEMINFO Structure

اقتباس
طيب هناك عناصر لا تحتوي على هاندل مثلا الTLabel كيف ساستطيع التقاط الكلمة منه ؟

هنا لسنا بحاجة الى الهندل تبع ال Label لأنه سوف نعمل Hook للدوال التي تخرج النص مثل textout, drowtext...و حتشوف زيهم كتير :D . وذلك بعد استدعاء التابع InvalidateRect لاعادة رسم المنطقة التي يتواجد بها النص و بالتالي استدعاء لتوابع الرسم و بعدها نكون حصلنا على النص.

هل رأيت هذه المشاركة؟

كيفية قراءة كلمة من adobe Reader عند وضع المؤشر عليها, هذه الفكرة لاستخدامها في مشروع الناطق الصوتي العرب

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#24
اقتباس
هناك احدثيات لل control ضمن الاب و احداثيات للاب ضمن سطح المكتب

شكرا وائل هذه الفكرة موجودة في راسي ولكن انا ابحث عن شي اقصر !! يعني اريد ان اعرف ما هو الماسج الذي يرسل الى الitem الذي تحت الفارة لكي يصبح ازرق اللون ام ان هذا غير ممكن ! على اي حال ساواصل البحث

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

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#25

romanof:

ما الذي تريد عمله بالضبط؟

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

اقتباس
يعني اريد ان اعرف ما هو الماسج الذي يرسل الى الitem الذي تحت الفارة لكي يصبح ازرق اللون ام ان هذا غير ممكن !

عن أي control تتحدث؟ ما الفكرة التي تريد عملها ...

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

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

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