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

خطأ في Unload DLL

مغلق
بدأه Yousof في 27 نوفمبر 2006 · 9 رد · 825 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

قد طرحت الموضوع سابقا و لكن لسوء الحظ: حذف ..

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

notepad has encountered a problem and needs to close we are sorry for inconvience!

الملف الأصلي مع ال DLL في المرفق

الرجاء المساعده .. :(

Desktop.rar

#2

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

انا ايضا كنت قد كتبت ردا لا ادري هل قرأته ام لا ؟

لم اطلع على الكود ،،، ولم ارى كيف قمت بعملية النزع

ولكن لي ملاحظة صغيرة ،

انت عندما تحمل ال dll تقزم بالبحث داخل ال IT للبروسيس عن الدالة المراد عمل هوك لها

وعندما تجدها تغير عنوانها الى عنوان الدالة البديلة الموجودة داخل ال dll

وعليه عندما تقوم بعملية النزع يجب ان تعيد ال IT الى ما كان عليه قبل تحميل ال dll

يعني ببساطة يجب ان تعيد عنوان الدالة الاصلية ..

--

لا ادري هل قمت بهذا ام لا ؟

لولا انشغالي لأطلعت على الكود ..

--

انا حصلت معي نفس المشكلة ولكني كنت استخدم طريقة التغير في العناوين عند بداية الدالة مع الحقن ب sys. 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/

 

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

#3

أخيرا انحلت المشكله ..

كما قلت أخي الأخير زمانه .. المشكله كانت في عدم اعادة عنوان الداله الأصليه :)

بارك الله بك ..

هذا ما أضفته فقط:

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

	// pfnOrig is the address of the function in the module that you want to search for and replace it by your function
		PROC pfnOrig = GetProcAddress(GetModuleHandle(dllname),"MessageBoxW");

		HMODULE hmodCaller = GetModuleHandle(NULL);

	switch(ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		ReplaceIATEntryInAllMods(dllname, pfnOrig,(PROC)HookMessageBox);

		//ReplaceIATEntryInOneMod("user32.dll", pfnOrig,(PROC)HookMessageBox, hmodCaller);

	break;
	case DLL_PROCESS_DETACH:
		ReplaceIATEntryInAllMods(dllname, (PROC)HookMessageBox, pfnOrig);
		break;
	}

	return TRUE;
}
#4

اهلا اخي ..

الحمد لله ..

--

و الان ماذا ستفعل ؟

انا دخلت ب kernel 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/

 

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

#5

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

جفري قد استخدم في كتابه SetWindowsHookEx و عمل هووك للبرامج الشغاله و التي ستشتغل لاحقا بعمل هووك على هذه الدوال: LoadLibraryA , LoadLibraryW, LoadLibraryExA, LoadLibraryExW و أيضا GetProcAddress

و لكني لم أفهم ما فائدة الدوال هذه و لماذا نستخدمها .. هل تعرف؟ أرجو التوضيح

void CAPIHook::FixupNewlyLoadedModule(HMODULE hmod, DWORD dwFlags) {

   // If a new module is loaded, hook the hooked functions
   if ((hmod != NULL) && ((dwFlags & LOAD_LIBRARY_AS_DATAFILE) == 0)) {

	  for (CAPIHook* p = sm_pHead; p != NULL; p = p->m_pNext) {
		 ReplaceIATEntryInOneMod(p->m_pszCalleeModName, 
			p->m_pfnOrig, p->m_pfnHook, hmod);
	  }
   }
}

FARPROC WINAPI CAPIHook::GetProcAddress(HMODULE hmod, PCSTR pszProcName) {

   // Get the true address of the function
   FARPROC pfn = GetProcAddressRaw(hmod, pszProcName);

   // Is it one of the functions that we want hooked?
   CAPIHook* p = sm_pHead;
   for (; (pfn != NULL) && (p != NULL); p = p->m_pNext) {

	  if (pfn == p->m_pfnOrig) {

		 // The address to return matches an address we want to hook
		 // Return the hook function address instead
		 pfn = p->m_pfnHook;
		 break;
	  }
   }

   return(pfn);
}

أما أنا فاستخدمت CreateRemoteThread و لكن لا أعرف كيف يمكنني أن أعمل هووك للدوال التي نشأت في البرامج الجديده بعد عملية الهووك الأولى!

#6

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

لا ادري هل السؤال موجه الى اخونا عبد الله ام انه حصل خطأ مطبعي :P

انا لم اتعمق بهذا الطريقة ،

لكن بنسبة لسؤالك ،

كما اجابني cipher مسبقا .. انت يمكن ان تعطي timer معين لحساب البروسيس الشغالة وعمل الحقن عليها ، وهكذا كل بروسيس ستشتغل سيتم عمل هوك عليها ..

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

اقتباس
جفري قد استخدم في كتابه SetWindowsHookEx و عمل هووك للبرامج الشغاله و التي ستشتغل لاحقا بعمل هووك على هذه الدوال: LoadLibraryA , LoadLibraryW, LoadLibraryExA, LoadLibraryExW و أيضا GetProcAddress

الفائدة من عمل هوك على هذه الدوال ،

ان طريقة ال IAT تعمل هوك على عناوين الدوال الموجودة داخل ال IT ، وبالتالي اذا قام برنامج معين بأستدعاء الدالة مباشرة من ال dll بأستخدام دالة ال GetProcAddress فلن ينجح الهوك على هذه الدالة (جربها بنفسك .. اعمل برنامج واستدعي من داخلة دالة ال MessageBox مثلا عن طريق دالة ال GetProcAddress ثم بعد ذلك شغل برنامج هوك وسترى انه لا يؤثر عليها )

ولهذا عند استخدام طريقة ال IAT يجب عمل هوك على هذه الدوال ..

ممكن ان تعتبر هذه من مساوء هذه الطريقة

/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
الاخير زمانه كتب:
لا ادري هل السؤال موجه الى اخونا عبد الله ام انه حصل خطأ مطبعي :P

أخي الكريم الأخير زمانه "زيد" .. آسف قد حصل خطأ مطبعي -_-

المهم .. سأجرب طريقة ال Timer لأرى كيف ستعمل ..

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

النوع الثاني من ال keylogger هو استخدامه للهذه الدوال GetAsyncKeyState و GetKeyState و حاولت أن أعمل هووك لها و لكن لا أدري لماذا لا يعمل هووك لهذه الدوال مع اني استخدمت نفس الطريقه

هل جربت أن تعمل هووك لهذه الدوال!

شكرا :D

#8

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

هل من الممكن أن ترسل لي الكود الذي استخدمت فيه CreateRemoteThread ضروري ..

بانتظارك .. شكرا و جزاك الله خير ..

#9

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

اهلا اخي يوسف

هل تريد البرنامج كامل ؟

انا الان في النت واظن ان النسخة التي احملها معي (على الفلاش) ليست النسخة النهائية ..

عموما سأبعثها لك ..

عليك وضع ال dll في بارتشن d ثم تنفذ البرنامج ..

الدالة هي messagebox

هذه صورة البرنامج ..

post-47438-1166078974_thumb.jpg

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

 

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

#10

سأجربها النسخه هذه أولا .. و ان لم تنفع ربما أطلب النسخه النهائيه ;) .. المهم أنها تستخدم CreateRemoteThread

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

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

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