PDA

View Full Version : مشکل با تابع hook در ویندوز



r00tkit
پنج شنبه 04 آذر 1389, 00:09 صبح
سلام

کد زیر رو رو به Dll تبدیل کردم

#include<Windows.h>

#pragma data_seg(".myseg")
HHOOK hook=NULL;
#pragma data_seg()
#pragma comment(linker,"/section:.myseg,rws")

HINSTANCE dllins;

BOOL WINAPI DllMain(HINSTANCE hInstance,DWORD Reason,LPVOID Reserved)
{



MessageBox(NULL,L"INSTA",L"INSTA",NULL);
return true;


}

extern "C"
{
__declspec(dllexport) LRESULT CALLBACK myproc(int ncode,WPARAM wparam,LPARAM lparam)
{


MessageBox(NULL,L"1982",L"GEEK",NULL);
CallNextHookEx(hook,ncode,wparam,lparam);

return 0;

}

__declspec(dllexport) void sethook()
{

MessageBox(NULL,L"HOOK",L"HOOKED",NULL);
hook=SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)myp roc,dllins,0);
}


__declspec(dllexport) void delhook()
{
UnhookWindowsHookEx(hook);
}
}


بعد تابع sethook رو با کد زیر اجرا کردم


typedef void (*MYPROC)();

VOID main(VOID)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;


hinstLib = LoadLibrary(TEXT("fd.dll"));

if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, "sethook");

if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
(ProcAdd) ();
printf("hooke");
}

}

}


dll لود می شه و تابع sethook هم اجرا می شه ولی myproc نه اجرا می شه ونه این Dll در process ها دیگه inject می شه

امدم کد رو به این شکل تغییر دادم (یعنی تابع myproc رو از همینجا نصب کردمش)


VOID main(VOID)
{
HINSTANCE hinstLib;
HOOKPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;


hinstLib = LoadLibrary(TEXT("fd.dll"));

if (hinstLib != NULL)
{
ProcAdd = (HOOKPROC) GetProcAddress(hinstLib, "myproc");

if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
//(ProcAdd) ();
printf("hooke");
SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)ProcAdd, hinstLib,0);
}

}

}


بازم dll اینجگت نشد؟

ویرایش: دومی حل شد مشکل از linkageبود ولی اولی نه

ویرایش مشکل اولی هم حل شد باید در dllmain هندل خود dll رو به متغیر dllins میدادم

نتیجهی اخلاقی : 1-شاید کد های بالا به درد کسی بخوره 2- همیشه کد نوشته شده خودتون رو یه بار دیگه بررسی کنید بعضی مواقع فکر می کنید چیزی رو نوشتید ولی ننوشتید 3- خدا پدرGetLastError رو بیامورزه الهی امین
-------
کد اصلا" بهینه نیست