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

كيفية استخدام CreateRemoteThread

مغلق
بدأه الاخير زمانه في 28 سبتمبر 2006 · 25 رد · 2,847 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

رغم اني لست متفائلا كثيرا من اني سأجد من يجيبني ،، لكن لابأس من المحاولة :rolleyes:

بخصوص الدالة CreateRemoteThread

كيف احصل على ال PID للبروسيس المراد حقن الثريد داخلها ،

يعني هذا الاستدعاء ،

هل هو صحيح

	InjectLib(8096,"D:\\API\\RemoteLib\\ApiHook_dll.dll");

الرقم 8096 ،

لدي برنامج (اذا لم اكن مخطأ وضع رابطه الاخ محمد عبد العزيز) يقوم بعرض معلومات عن البروسيس ومن ضمنها ال ID فوجدت هذا الرقم بالنسبة لبرنامج ال notepad

،

للعلم ..

عندما انفذ step by step ،

دالة ال openprocess تعود ب null ،

/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/

 

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

#2
اقتباس
رغم اني لست متفائلا كثيرا من اني سأجد من يجيبني ،، لكن لابأس من المحاولة

ذلك بسبب أنك لا تبحث كثيراً حين تواجهك أي مشكلة ..

كما أن السؤال غير واضح

اقتباس
كيف احصل على ال PID للبروسيس المراد حقن الثريد داخلها ،

ما هي الـ Process التي تريد حقنها؟ لم تعطينا أي معلومات عنها

لمعرفة جميع الـ Process الشغالة حالياً هناك اكثر من طريقة منها :

-إستخدام TOOLHELP API

http://www.codeproject.com/threads/enumprocnt5.asp

- إستخدام PSAPI

-إستخدام WMI

-إستخدام Native API ...

وغيرها ستجد شرح لبعضها في الفريق العربي و شرحها جميعاً في النت لكن هل بحثت ؟...

اقتباس
دالة ال openprocess تعود ب null ،

أكرر حين تواجهك مشكلة حاول تبحث عن سببها

تحليل المشكلة :

-المشكلة عند إستدعاء الدالة OpenProcess , حيث الناتج قيمة NULL ...

- نقوم بالرجوع الى MSDN ونقرأ كل كلمة بجدية -قلتها أكثر من مرة

ستجد

اقتباس
If the function fails, the return value is NULL. To get extended error information, call GetLastError.

حاول تحصل على الـ Error لتعرف سبب المشكلة ..

-على الأغلب المشكلة بسبب أنك تحتاج لـ privilege حين التعامل مع بعض الـ Processes ...

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

===

اقتباس

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

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

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

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

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

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

===

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

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

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

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

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

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

#3

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

مشكور اخي cipher على المرور ..

اقتباس
ذلك بسبب أنك لا تبحث كثيراً حين تواجهك أي مشكلة ..

كما أن السؤال غير واضح

يا اخي واالله اني ابحث بس عندما ايأس اضع السؤال ..

لقد تغيرت نوعا ما ;) بعد توجيهاتك انت والاخ احمد غريب و Asm4all

بعد قراءتي في موضوع ال api hook

حولت مثال الاخ محمد عبد العزيز الى طريقة ال IAT

والحمد لله مشي ، ثم عملت مثال صغير يعمل هوك على دالة ال messageBox يأخذ المعلومات منها ثم يستدعي الدالة الاصلية،،

هذه الامثلة تعمل على البروسيس الحالية،

انا الان اريد ان اجعل هذه البرامج تعمل على ال systemكله

كتبت dll تقوم بالتغير في ال IAT وجربتها من البروسيس الاصلية وتنفذ البرنامج

اريد الان اناحمل هذه ال dll الى بروسيس اخرى

جربت مع دالة CreateRemoteThread

حاولت حقن ال dll لتعمل مع برنامج ال NotePad.exe

لا اعرف كيف احصل على ال ID برمجيا ؟؟

لدي برنامج يظهر ال ID وظهر ال ID لبرنامج المفكرة هو 8096

لذا استخدمته ،

وعندما يظهر Null مع دالة ال openprocess

انا توقعت ان ال ID للبروسيس خاطأ ..

،،

سأحاول مجددا ،،

بس اهم شي اخي .. خليك معي ..

--

تحياتي

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 28 سبتمبر 2006 في 12:52

/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/

 

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

#4
اقتباس
لا اعرف كيف احصل على ال ID برمجيا ؟؟

هل تريد العمل على Process معينة ؟ أم تريد العمل على كل الـ process بشكل عام ؟

إن كان خيارك هو التطبيق على Process معينة فبالإمكان الحصول على الـ ID عن طريق معرفة الـ Window Handle للبرنامج ...

المقصود أن عليك معرفة معلومات عن الـ Process التي تريد معرفة ID لها ... مثلاً معرفة module name , window handle ...

إن كنت تريد العمل على كل الـ processes فبإمكانك استعمال SetWindowsHookEx حيث سيتم حقن الـ DLL اتوماتيكياً ولن تحتاج لـ CreateRemoteThread .

بالنسبة للخطأ عند إستخدام OpenProcess فعليك بـ "call GetLastError" ومنها تحصل على رقم الخطأ الذي يمكن عن طريقة الحصول على نص رسالة الخطأ ..

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

===

اقتباس

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

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

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

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

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

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

===

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

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

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

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

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

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

#5

السلام عليكم

اقتباس
هل تريد العمل على Process معينة ؟ أم تريد العمل على كل الـ process بشكل عام ؟

اريد عمل الاثنين معا ;) .. لكي اتعلم

..

بعد يومين من القراءة !!

الحمد لله تنفذت ال CreateRemoteThread

كانت هناك اشكاليات صغيرة والحمد لله انحلت ..

طبعا المثال الذي عملته بسيط يقوم بحقن dll في بروسيس واحدة انا احدد ال ID لها اثناء كتابة البرنامج ،، البرنامج يعمل هوك على دالة ال TerminateProcess

لكن بقي اشكال صغير ،،

ان الحقن لا ينجح دائما ،،

يعني مثلا حاولت حقن ال dll في برنامج الاخ محمد عبد العزيز الموجود هنا

لكن لم ينجح ،،

اريد ان اسأل .. هل اللغة المكتوب بها البرنامج تؤثر ؟؟ (ولو هي كلها دوال API :lol: )

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

اقتباس
إن كنت تريد العمل على كل الـ processes فبإمكانك استعمال SetWindowsHookEx حيث سيتم حقن الـ DLL اتوماتيكياً

جميل جدا انك ذكرت هذا الشيء .. فهذا ما اريد ان اسألك عنه !!

Cipher

اسمح لي ان اطمع قليلا ،

وارجو ان تعطيني من وقتك القليل ،، لأن صارلي كم يوم دايخ في نقطة ولا استطيع فهمها

بس اعطيني فرصة لأوضح لك اين وصلت ،

كما ذكرت سلفا قمت بعمل برنامج لعمل هوك على ال messagebox ضمن البروسيس التي تقوم بتنفيذ البرنامج ،

استخدمت هذه الدالة

void ReplaceIATEntryInOneMod(PCSTR pszCalleeModName, 
   PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller) {

   ULONG ulSize;
   PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)
	  ImageDirectoryEntryToData(hmodCaller, TRUE, 
	  IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize);

   if (pImportDesc == NULL)
	  return;   

   for (; pImportDesc->Name; pImportDesc++) {
	  PSTR pszModName = (PSTR) 
		 ((PBYTE) hmodCaller + pImportDesc->Name);
	  if (lstrcmpiA(pszModName, pszCalleeModName) == 0) 
		 break;
   }

   if (pImportDesc->Name == 0)
	  return; 


   PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA) 
	  ((PBYTE) hmodCaller + pImportDesc->FirstThunk);

	for (; pThunk->u1.Function; pThunk++) {

		 PROC* ppfn = (PROC*) &pThunk->u1.Function;

			BOOL fFound = (*ppfn == pfnCurrent);


	  if (fFound) {
		   WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, 
			sizeof(pfnNew), NULL);
		 return;  // We did it; get out.
	  }
   }

}

ثم بعد ذلك اردت ان اعمم هذا البرنامج ففكرت بوضع الدالة التي في الاعلى داخل dll ثم عمل Load لهذه ال dll الى بروسيس اخرى ، طبعا اما بأستخدام CreateRemoteThread او بعمل sys. Hook

المهم ،

كونت ال dll كالأتي

ApiHook_dll.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include<windows.h>
#include"injectdll.h"
#include <tchar.h>
#include <ImageHlp.h>
#include"apihook_dll.h"


#pragma comment (lib,"ImageHlp")



BOOL APIENTRY DllMain( HANDLE hModule, 
					   DWORD  ul_reason_for_call, 
					   LPVOID lpReserved
					 )
{


	if(ul_reason_for_call==DLL_PROCESS_ATTACH)
	{

	MessageBox(0,"dll loaded","done",0);



		 PROC pfnOrig = GetProcAddress(GetModuleHandle("User32"),"MessageBoxA");
		HMODULE hmodCaller =GetModuleHandle(NULL);
	ReplaceIATEntryInOneMod("user32.dll", pfnOrig,( PROC)Hook_MessageBox,hmodCaller);  


				}

	return TRUE;
}



void ReplaceIATEntryInOneMod(PCSTR pszCalleeModName,PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller) {


   ULONG ulSize;
   PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)
	  ImageDirectoryEntryToData(hmodCaller, TRUE, 
	  IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize);


 if (pImportDesc == NULL)
	  return;  

   for (; pImportDesc->Name; pImportDesc++) {
	  PSTR pszModName = (PSTR) 
		 ((PBYTE) hmodCaller + pImportDesc->Name);
	  if (lstrcmpiA(pszModName, pszCalleeModName) == 0) 
		 break;
   }

   if (pImportDesc->Name == 0)
		  return; 

	PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA) 
	  ((PBYTE) hmodCaller + pImportDesc->FirstThunk);

	 for (; pThunk->u1.Function; pThunk++) {
	  PROC* ppfn = (PROC*) &pThunk->u1.Function;
	  BOOL fFound = (*ppfn == pfnCurrent);


	  if (fFound) {

		 WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, 
			sizeof(pfnNew), NULL);
		 return;  
	  }
   }




}



int WINAPI Hook_MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType)

{
	typedef int (WINAPI *MY_MESSAGE)(HWND , PCSTR ,PCSTR ,UINT );
		HMODULE hmod=LoadLibrary("user32.dll");
		MY_MESSAGE Orig_MessageBox = (MY_MESSAGE) GetProcAddress(hmod,"MessageBoxA"); 

 int	nResult=Orig_MessageBox(hWnd,lpText,lpCaption,uType);

	 PCSTR pszResult = "(Unknown)";

   switch (nResult) {

	  case IDCANCEL:   pszResult = "Cancel";	break;
	  case IDABORT:	pszResult = "Abort";	 break;
	  case IDRETRY:	pszResult = "Retry";	 break;
	  case IDIGNORE:   pszResult = "Ignore";	break;
	  case IDYES:	  pszResult = "Yes";	   break;
	  case IDNO:	   pszResult = "No";		break;

   }

   SendInfo(hWnd,lpText,lpCaption,pszResult);


return nResult;

}

لقد قمت بأستدعاء هذه ال dll و عملت تمام !!

انا لم اقم بتصدير أي دالة من داخل هذه ال dll فقط عندما تحمل ال dll سيتم استدعاء ReplaceIATEntryInOneMod

والتي ستقوم بتغير العنوان ،

انا ببساطة فكرت انه اذا حملت هذه ال dll الى . Address Space لأي بروسيس و ستعمل كما هو مطلوب ،

لذا قلت وببساطة سأستخدم ال sys. Hook وسأضيف الى ال dll الخاصة ب ال sys. Hook والتي تقوم بتصدير دالتي SetHook ، و UnHook سأضيف دالة ال ReplaceIATEntryInOneMod

وسيتم الموضوع ،،

يعني ستكون ال dll بهذه الصورة

#define DLL_MODULE
#include "MouseHook.h"

/// Zaid
#include <tchar.h>
#include <ImageHlp.h>

#pragma comment (lib,"ImageHlp")

/// End Zaid

#pragma data_seg(".share")
static HWND  hMyWnd = NULL;

static HINSTANCE hDllInst = NULL;
static HHOOK	 hHook	= NULL;
#pragma data_seg()
#pragma comment(linker, "/section:.share,rws")
const UINT UWM_MOUSEHOOK = RegisterWindowMessageA(UWM_MOUSEHOOK_MSG);

BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved) {
  if(dwReason == DLL_PROCESS_ATTACH)
  { 
	  hDllInst = hInst;


  /// Zaid

 // MessageBox(0,"dll loaded","done",0);
PROC pfnOrig = GetProcAddress(GetModuleHandle("Kernel32"),"TerminateProcess");
HMODULE hmodCaller =GetModuleHandle(NULL);
ReplaceIATEntryInOneMod("Kernel32.dll", pfnOrig,( PROC)Hook_TerminateProcess,hmodCaller);  

  /// End Zaid

  }

  return TRUE;

}

static LRESULT CALLBACK MouseProc(int Code, WPARAM wParam, LPARAM lParam) {
  if(Code >= 0) {

	if ( wParam == WM_RBUTTONUP ||

		 wParam == WM_MOUSEMOVE ||

		 wParam == WM_LBUTTONUP)
	  PostMessageA(hMyWnd, UWM_MOUSEHOOK, wParam, NULL);
  }
  return CallNextHookEx(NULL, Code, wParam, lParam);
}

void WINAPI MouseHook(HWND hWin) {
  hMyWnd = hWin;
  if(hHook) MouseUnHook();
  hHook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseProc, hDllInst, NULL);
}

void WINAPI MouseUnHook() {
  if(hHook) {
	if(UnhookWindowsHookEx(hHook))
	  hHook = 0;
  }
}



/// Zaid

void ReplaceIATEntryInOneMod(PCSTR pszCalleeModName,PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller) {

…
… 

}



BOOL  CALLBACK Hook_TerminateProcess(HANDLE  hProcess,UINT  uExitCode )

{

MessageBox(0,"No Way to Terminate this Prog.","Hook .. done",0);



return TRUE;

}

(هذا بالنسبة لدالة Terminate)

لكن يبدو ان الامر ليس بهذه السهولة لأن البرنامج لم يتنفذ ..!! (بأستخدام طريقة ال sys. hook)

الظاهر انا فاهم غلط !!

اتذكر اخي المقالة والبرنامج التي طلبت منك توضيح عنها والتي ظننتها بالغة الصينية واخبرتني انها باليابانية ؟؟

المثال هناك ،،

يعمل نفس الشيء لكنه لعمل البرنامج ك Global يستخدم دالة اخرى ..

انظر اخي الى هذا الاسطر

If you want to trap all calls to MessageBox from all modules, you must call ReplaceIATEntryInOneMod once for each module loaded in the process's address space. To this end, I've written another function called ReplaceIATEntryInAllMods. This function simply uses the toolhelp functions to enumerate all the modules loaded in the process's address space and then calls ReplaceIATEntryInOneMod for each module, passing it the appropriate module handle for the last parameter.

هذه الدالة ReplaceIATEntryInAllMods هي كالأتي

void CAPIHook::ReplaceIATEntryInAllMods( PCSTR pszModuleName PROC pfnCurrent, PROC pfnNew)
{
	MEMORY_BASIC_INFORMATION mbi;
	if(VirtualQuery(ReplaceIATEntryInAllMods, &mbi, sizeof(mbi)) == 0)
		return;
	HMODULE hModThisMod = (HMODULE) mbi.AllocationBase;

	HANDLE hModuleSnap = CreateToolhelp32Snapshot(
	TH32CS_SNAPMODULE, GetCurrentProcessId());
	if(hModuleSnap == INVALID_HANDLE_VALUE)
		return;

	MODULEENTRY32 me;
	me.dwSize = sizeof(me);
	BOOL bModuleResult = Module32First(hModuleSnap, &me);
	while(bModuleResult) {
	if(me.hModule != hModThisMod)
	ReplaceIATEntryInOneMod(pszModuleName, pfnCurrent, pfnNew, me.hModule);
	bModuleResult = Module32Next(hModuleSnap, &me);
	}
	CloseHandle(hModuleSnap);
}

انا هنا لدي الاشكال الاكبر ؟؟

ما فائدة هذه الدالة ،

يعني حسب ما قرأت في ال msdn عن Snapshots of the System ودالة CreateToolhelp32Snapshot انه يمكن معرفة عدد البروسيس الموجودة وغيرها من المعلومات ،

الدالة التي في الاعلى ، تستدعي دالة ReplaceIATEntryInOneMod لكل module موجودة ،

طيب ما هي فائدة ال dll ؟؟

اذا انا عرفت عدد البروسيس مع المعلومات عنها ولكل واحدة استدعي دالة ReplaceIATEntryInOneMod ، اذا خلص الموضوع .. و ما وظيفة وما فائدة ال dll ؟؟

هذا الي مدوخني !!!

--

ادري بأن مشاركتي اصبحت طويلة بس حبيت اوضح الصورة ،،

لكي تعلم يا أخي بأني والله اقرء وابحث ،، لكن سبحان الله يمكن مرات اغفل عن بعض الامور ..

،،

سؤالي تحديدا ,,

انا لدي الان dll (ذكرت الكود في الاعلى )

هل يكفي فقط ان احملها الى. Address Space لجميع البروسيس لكي تعمل ؟؟

وما فائدة دالة ReplaceIATEntryInAllMods ؟؟

واساسا ..

هل ال dll تبعي صحيحة مئة بالمئة ؟؟

---

انا راح اقرء الموضوع من البداية وخاصة ما يتعلق ب dll وعلاقتها مع address space ..

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 30 سبتمبر 2006 في 08:39

/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/

 

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

#6

السلام عليكم ..

cipher باركلي :D

الحمد لله انحلت بعض المشاكل ..

لكن بقي الكثير ..

الحمد لله ..

تنفذ برنامج الهوك .. ونجح الحقن وبالطريقتين !!

1- عن طريق دالة CreateRemoteThread بحساب عدد البروسيس بأستخدام دالة CreateToolhelp32Snapshot والحصول على ال ID لكل بروسيس ..

المشكلة الحالية ،، انه اذا تنفذت بروسيس بعد تنفيذ برنامجي (اي بعد عملية الحقن) لا يتنفذ الهوك في تلك البروسيس .. يجب عمل عملية تحديث لقائمة البروسيس .. لكن كيف ؟؟

2- عن طريق Sys. Hook

و الحمد لله تمام ..

لكن .. ( المشاكل )

انا عملت هوك مثلا على دالتي TerminateProcess و ExitProcess

هل يوجد دوال غيرها لأنهاء هذه البرامج (اكيد في )

البرامج التي تأثرت هي فقط البرامج التي كتبتها والتي متأكد من انها تستخدم هذه الدوال اضافة الى برنامج ال TaskManager

لماذا بقية البرامج لم تتأثر ؟؟

ما هي اكثر الدوال المستخدمة للخروج في البرامج ؟؟

وايضا عملة هوك على دالة ال MessageBox

ايضا البرامج التي تأثرت اضافة الى برامجي هي برنامج ال TaskManager اضافة الى ال NotePad

وبقية البرامج لم تتأثر !!

وش السبب .. رغم اني عملت هوك على MessageBoxA/W

هل يوجد غيرهما ؟؟

--

أظن ان هناك بعض الاستثناءات والمعالجات الخاصة التي يجب ان أخذها بنظر الاعتبار ..

--

المشكلة المهمة اني لم انجح في عمل هوك على دالة GetProcAddress ،

طبعا سأحاول معها مرة اخرى ..

--

و شي ثاني مالو علاقة بالهوك ،،

كيف احصل على ال HWND لنافذتي ،

في برنامج عمل هوك على دالة MessageBox ، تقوم دالة الهوك بخزن المعلومات من دالة MessageBox ثم تستدعي الدالة الاصلية ،

المعلومات يجب ان تمرر الى برنامجي لكي اقوم بأظهارها ،،

قرأت في ال MSDN عن COPYDATASTRUCT

ودالة FindWindow

التي تجلب ال hwnd والتي تحتاج الى اسم الكلاس والنافذة ،

المشكلة انا برنامجي ليس به تكوين نافذة ، فقط عبارة عن Dialog ؟؟

-------

cipher

هل انت هنا ؟؟

----------

يالا انا ماشي :lol:

/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/

 

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

#7

ألف مبروك

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

اقتباس
المشكلة الحالية ،، انه اذا تنفذت بروسيس بعد تنفيذ برنامجي (اي بعد عملية الحقن) لا يتنفذ الهوك في تلك البروسيس .. يجب عمل عملية تحديث لقائمة البروسيس .. لكن كيف ؟؟

كيف تتوقع أن يتم تحديث القائمة؟

إحدى الطرق هي إضافة Timer ...

اقتباس
هل يوجد دوال غيرها لأنهاء هذه البرامج (اكيد في )

Native API ..

اقتباس
لماذا بقية البرامج لم تتأثر ؟؟

لا أعلم ما هي الطريقة التي إستخدمتها لعمل الـ HOOK .. هل جربت أمثلة أخرى وكانت ناجحة في عمل الـ HOOK على جميع الـ Processes ..

اقتباس
كيف احصل على ال HWND لنافذتي ،

الـ Dialog ايضا له Handle

ضع اجزاء من الكود حتى يستطيع من له خبرة في الموضوع مساعدتك ...

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

===

اقتباس

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

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

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

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

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

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

===

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

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

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

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

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

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

#8

السلام عليكم ..

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

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

من يجيبني سواك :D

مواضيع الهوك مقتصرة على ..

1- tmaaa

2- Asm4all

3- محمد عبد العزيز

اخونا احمد مشغول بكليته ..

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

استخدمت طريقة ال sys. hook في الحقن ..

مع طريقة ال IAT

انا لم استخدم دالة ال VirtualAlloc عند التغير في ال IAT

قبل عمل write

اظن ان هذا السبب فبعض البرامج تكون محمية ..

حاليا جدا مستعجل ..

سأحاول وسأعود مجددا

تحياتي لك

/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/

 

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

#9
اقتباس
لم اضع كود لأني اخشى ان تكون مشغول ليس لديك وقت كافي لتتبع الكود لذا اكتفيت بأسئلة قصيرة ..

لو ما في مانع أرسل الكود إلى idisregistered@yahoo.com.cn ..

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

===

اقتباس

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

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

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

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

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

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

===

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

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

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

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

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

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

#10

السلام عليكم

ها قد عدت ..

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

اخي cipher

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

لذا سأرد من البداية ،،

Cipher اريد ان اخبرك اني عندما اضع سؤال في هذا الموضوع لا اتوقع الاجابة من غيرك (بعد غياب الغالي Asm4all) وفعلا هذا شيء مؤسف ان القليل لديه معلومات بهكذا مواضيع (طبعا بعد تغيب الكثير من الاساتذة امثال chik وقلة تواجد اخرين مثل اخونا هيثم )

--

لدي سؤال بالنسبة لدالة ال GetProcAddress لماذا لا ينجح الهوك معها ؟؟

الا يتم عمل هوك لها بصورة اعتيادية بالتغير في ال IT

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

انا عالجتها كأي دالة لكنها لم تتنفذ ..

انظر اخي

PROC Orig_GetProcAddress=ProcAddress(hmod,"GetProcAddress");


ReplaceIATEntryInOneMod("Kernel32.dll",(PROC)Orig_GetProcAddress,(PROC)Hook_GetProcAddress,hmodCaller);

لا اعرف اين الخطأ ؟؟

طبعا دالة ReplaceIATEntryInOneMod هي التي تقوم بالبحث داخل ال IAT ثم تقوم بالتعديل .

،،

سؤال ثاني ..

هل التعديل في ال IAT يحتاج الى ان تكوين لنا صلاحية لفعل ذلك ..

اليك اخي ما قرأت لكني لم افهم بصراحة

Replacing the pointer inside the IAT is that .idata section doesn't necessarily have to be a writable section. This requires that we must ensure that .idata section can be modified. This task can be accomplished by using VirtualProtect() API.

يعني وبصراحة لم اعرف كيف استخدم واستفيد من هذه الدالة VirtualProtect !!

،

،

لماذا لا يتنفذ الهوك على بقية البروسيس ؟؟ ..

لماذا هوك على دالة MessageBox لم ينجح فقط الا على برنامجي NotePad و TaskManagre ،

أضافة الى ..

لدي ال source لبرامج كتاب Programming Window الذي يشرح دوال ال API

نفذت اليوم بعض برامجه على عجالة ووجدتها تتأثر بالهوك على messagebox

اضافة الى برنامج الفيجوال سي نفسه تأثر باهوك

وايضا ال msdn تأثر (عندما ابحث على كلمة غير موجودة تظهر message ، هذه ال message تغيرت الى my message)

ايضا الكتب الالكترونية التي تكون على شكل ملف help ، تأثرت

لكن

لدي برامج بسيطة كنت كاتبها بالأسمبلي لم تتأثر بالهوك ،، اضافة الى برنامج دلفي

يعني – والله اعلم-

اظن ان اللغة هي السبب ،

الهوك ينجح فقط على برامج لغة سي

يا فرحة ما دامت :wacko:

--

لحظة اكتشفت شي ، أظنه مهم

كتبت برنامج بأستخدام MFC

وكما تعلم اخي cipher في ال mfc ممكن استدعاء دالة ال MessageBox هكذا

MessageBox(“text”,”caption”);

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

لكن عندما استبدلتها ب

::MessageBox(0,“text”,”caption”,0);

نجح الهوك ..

هل المشكلة هنا ؟؟

يعني في الحالة الاولى

MessageBox(“text”,”caption”);

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

لكن اليست هذه الدالة في ال MFC هي تغليف لدالة ال MessageBox الاصلية في ال API

ما الحل ؟؟

انا فكرت ان اعمل هوك ايضا على هذه الدالة بعد ان وجدت تصريحها في ال msdn

CWnd::MessageBox
int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );

لكني فتحت ال user32.dll فلم اجده يصدر هكذا دالة ،

(لكني وجدت دوال اخرى مثل MessageBoxEx اظنني بحاجة الى ان اقرء المزيد )

،

بدأت اتيقن ان الخطأ يكمن في عملية تكوين وتصدير ال dll ،

سأقرء هذا الموضوع من جديد وكيفية بناء dll تكون Portable او compatible (شيء من هذا القبيل ..)

********

لو تكلمنا قليلا عن ال Native API

يعني لعمل هوك كامل لوظيفة معينة يجب اضافة دوال ال Native

يعني مثلا ،،

لو اريد السيطرة على انهاء جميع البرامج ،

علي ان اعمل هوك لدالتي ال TerminateProcess و ExitProcess اضافة الى دوال ال Native التي تقوم بنفس الوظيفة ..

طيب ممكن عمل فقط على دوال ال Native لأن دوال ال kernel.dll تستدعي دوال ال Native ؟

تمام والا انا غلطان ؟

ما ان انتهي من هذا الاشكال حتى ادخل في هذا الموضوع ..

بس سؤال بدائي ،،

هل من الممكن استدعاء دوال Native من برنامجي مباشرة والتعامل معها (بعد لم اقرء عن هذا الموضوع )

،،

Cipher

لا تحرمنا من ملاحظاتك

،

اقتباس
لو ما في مانع أرسل الكود

شكرا جزيلا لك ..

سأرسله ان شاء الله

--

تحياتي لك

هذا الملف التنفيذي للبرنامج ،

/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/

 

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

#12
اقتباس
اظن ان اللغة هي السبب
i don't think so

but:

اقتباس
لحظة اكتشفت شي ، أظنه مهم
this is important, you forgot about other procedures used to do the same function like 'MessageDialog'

and there is custom made messages like 'ShowMessage' in Delphi which do not call MessageBox

تم تعديل هذه المشاركة بواسطة fh_feras في 12 أكتوبر 2006 في 14:09

#13

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

you forgot about other procedures used to do the same function

لكن قبل هذا ،

الهوك على دالة ال messagebox نفسها لم ينجح في جميع الاحوال ،

يعني هناك برامج فتحتها ببرنامج ال olly و وجدتها تستخدم دالة ال messagebox

لكن لم ينجح الهوك عليها ..

لازلت متوقف عند هذه النقطة ،،

المشكلة ان الدوام بدأ ،، ولهذا قلت نوعا ما قرائتي لهذا الموضوع ،،

cipher اين انت ؟؟

هل وصلك الكود ..

بعثته لك من يوم الاربعاء على ما اظن ..

هل اطلعت عليه ؟؟

في انتظارك اخي ..

/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/

 

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

#14

وصلني ..

لماذا تستخدم WH_MOUSE hook؟

لدي مشكلة في الجهاز كلما استخدمت VC++ تظهر الـ Blue screen ..

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

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

===

اقتباس

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

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

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

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

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

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

===

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

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

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

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

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

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

#15
اقتباس
وصلني ..

الحمد لله

اقتباس
لماذا تستخدم WH_MOUSE hook؟

وهل يفرق هذا في شيء؟؟

المهم انه من انواع ال sys. hook

يستخدم للحقن ..

حسب فهمي !!!!

هل هناك مشكل اخي في هذا النوع ؟؟

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 14 أكتوبر 2006 في 11:14

/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/

 

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

#16

cipher

اين انت ؟؟

هل اطلعت على الكود ؟؟

بخصوص الاسئلة المطروحة في مشاركاتي السابقة ،

لا تملك جواب لحداها ؟؟

انا هاي يومين مشغول بالكلية وما قدرت اقرء ،

الحين توقف الدوام بسبب قرب العيد

وسأتفرغ للقراءة ..

/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/

 

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

#17

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

وين هل غيبة اخي cipher

عساك بخير ؟

الحمد لله انحلت بعض المشاكل وكما ذكرت سابقا الكود كان ينقصه دالة VirtualProtect

،

الان احاول اعادة صياغة وترتيب الكود من جديد لأصنع منه برنامج صغير متكامل ..

،

بعدها سأحاول الدخول ب Native

بس لسه بدري شوي ;)

/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/

 

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

#18

السلام عليكم ..

بعد قراءتي لكتاب جفري و معرفتي بأمور كثيره كانت غائبه ..

تواجهني نفس المشاكل التي واجهت الأخير زمانه و هو أن هوك المسج لا يحدث الا مع notepad

في الحقيقه لم أجرب الهوك على ال Taskmanager

لكني جربتها على ال mspaint و لم يحدث شيء ؟؟؟

على فكره، حين جربت هوك ال MessageBoxA في ال notepad لم يحدث شيء و حين غيرتها الى MessageBoxW عمل هوك للداله

أليس من المفروض حين يقوم اللودر بتحميل دوال ال DLL التي يحتاجها البرنامج يقوم أيضا بتحميل جميع الدوال الموجوده في ال DLL

مثلا لو افترضنا أن البرنامج بحاجة الى الداله user32.dll في المساحة المخصصة لها أليس من المفروض أنه يقوم بتحميل جميع الدوال التي بداخل user32.dll

أم أنه يقوم بتحميلها وقت الحاجه ؟؟

#19

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

اهلا اخي يوسف ..

بالنسبة لبرنامج ال mspaint تأثر لدي ب ال hook وايضا برنامج ال WordPad

لكن هناك بعض البرامج لم تتأثر مثل برنامج الوورد لأني اظنها بالأساس لا تستخدم دالة ال MessageBox

فتحت مكتبة user32.dll وجدتها ايضا تحتوي على دالة MessageBoxEx والتي بها باراميتر خامس يحدد اللغة ،

بالنسبة لدوال A/W

يجب ان تعمل نسختين من دالة الهوك (مع اي دالة تحوي على string كمتغير )

هل استخدمت طريقة ال IAT ؟؟

انت تكتب دالتك في عنوان MessageBoxA مثلا ، ولهذا حين برنامج معين يستدعي دالة MessageBoxW فأن هذه الدالة لم يعمل لها هوك ولهذا تستدعى بصورة طبيعية .

قرأت رسالتك ، حاليا لا احمل الكود معي ،،

في المرة القادمة ان شاء الله ,,

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 11 نوفمبر 2006 في 10:43

/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/

 

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

#20

السلام عليك أخي الأخير زمانه

بحثت عن وجود الداله MessageBox في ال WordPad باستخدام ال Olly و لكن لم أجد لها أثر

ثانيا بالنسبه لل mspaint وجدت دالة ال MessageBoxW و لكن لا أعرف لماذا لا يعمل لها هووك ... ! بالرغم من أن ال injection حدث في البرنامج

أيضا: عند عمل injection بالنسبه ل notepad و mspaint كل مره يعطيني نفس العنوان للداله MessageBoxW سواءا في ال Notepad أو ال mspaint

ألا يتغير عنوان الداله بتغير البرنامج أم أن العنوانين ثابته ..

أنا استخدمت ال IAT للحصول على ال module و من ثم البحث عن ال Function المراد عمل هووك لها و استبدال عنوانها بعنوان دالتي ..

#21

اليوم جربت الهوك على دالة ال GetLocalTime() في ال notepad و الحمد لله تمت عملية الهوك بنجاح .. لكن لازلت لا أعرف لماذا لم تتم عملية الهوك مع ال mspaint!

هل لدى أحدكم اجابة على استفساراتي ..

#22

السلام عليكم ..

عندي سؤال و أتمنى أن أجد الاجابه الشافيه ..

لو افترضنا أنه عندنا برنامج example.dll و example.exe و عندنا داله MessageBox موجوده في example.dll (ملاحظه: لا توجد دوال MessageBox في example.exe) و نريد عمل Hook للداله MessageBox هل نستطيع ذلك! أنا جربت برنامجي لعمل هووك لداله معينه موجوده في example.dll و لكن لم يعمل لها هووك! لا أدري ما السبب! و هل يشترط أن تكون الداله المراد عمل هووك لها موجوده في ملف exe فقط و ان وجدت في ملف ال dll لا نستطيع عمل هووك لها!

أين أنت يا cipher!

#23

الحمد لله اكتشفت أين تكمن المشكله .. المكشله تكمن في أني كنت كنت أعلم هووك لل exe فقط .. أما الآن و باستخدام الداله ReplaceIATEntryInAllMods هذه الداله تقوم بعمل هووك للداله المراد عمل هووك لها في جميع ال Modules (.dll) باستخدام ReplaceIATEntryInOneMod هذه كانت المشكله ..

#24

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

يبدو اني اتيت متأخر !!

المهم ان المشكلة انحلت ...

هل تأثرت بقية البرامج ؟

تحياتي

/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/

 

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

#25

السلام عليك أخي الأخير زمانه .. الظاهر أنا و أنت فقط مهتمين بهذا الموضوع .. -_-

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

notepad.exe

wordpad.exe

mspaint.exe

و بعض البرامج التي عملتها .. أيضا عملت هووك لبعض الدوال الأخرى غير MessageBox و أيضا تمت العمليه بنجاح ..

الآن أنا بصدد عمل هووك لكل running processes في الجهاز ليس باستخدام ال SetWindowsHookEx و لكن باستخدام CreateRemoteThread

كيف أحصل على ال process id لكل البروسيس؟ عن طريق الداله CreateToolhelpSnapshot صحيح :D .. و لكن هنا تكمن المشكله .. في السابق كنت أحدد البرنامج المراد عمل هوووك له و من ثم الحصول على ال process id له باستخدام CreateToolhelpSnapshot ... لكن الآن أريد أن أعمل هووك لكل البرامج الشغاله على السيستم .. لكن كيف؟ احدى الطرق التي فكرت بها هي عمل array لل process ids و من ثم استخدامها في عمل الهووك بمعني

h = openprocess( ...,processid;

و أيضا بالنسبه لل virtualprotect و writeprocessmemor و createremoteprocess

هل هذا الحل صحيح؟

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…