Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 8 của 8
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    thêm cái inject nhưng Vẫn chưa được


    Mã nguồn PHP:
    // dllmain.cpp : Defines the entry point for the DLL application. #include "stdafx.h" HANDLE g_hThreadHook = NULL; HHOOK g_hKeyboardDLL = NULL; HINSTANCE hInstallProc; LRESULT _stdcall CALLBACK keyboardHookProc_DLL(int nCode, WPARAM wParam, LPARAM lParam) { PKBDLLHOOKSTRUCT pKey = (PKBDLLHOOKSTRUCT) (lParam); if (wParam == WM_KEYDOWN) { MessageBoxA(0,"sdkj","sd",0); } return CallNextHookEx(NULL, nCode, wParam, lParam); } unsigned __stdcall ThreadInstallHook_WhileTrue( void* pArguments) { g_hKeyboardDLL = SetWindowsHookEx( WH_KEYBOARD_LL, keyboardHookProc_DLL, hInstallProc, 0); return 0; } void UnstallHook(__in HHOOK &hKeyboardDLL,__in HANDLE &hThreadHook) { UnhookWindowsHookEx(hKeyboardDLL); CloseHandle(hThreadHook); } void InstallHooK() { if (g_hThreadHook == NULL) { unsigned threadID; g_hThreadHook = (HANDLE)_beginthreadex(NULL, 0, &ThreadInstallHook_WhileTrue, 0, 0, &threadID); } } BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: hInstallProc = (HINSTANCE)hModule; InstallHooK(); case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: UnstallHook(g_hKeyboardDLL,g_hThreadHook); break; } return TRUE; }  
    http://social.msdn.microsoft.com/for...6-9d559fbca793

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    xin hỏi là có cách nào Gọi SetWIndowHookEX trong DLL không vậy ?

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi C&C++
    xin hỏi là có cách nào Gọi SetWIndowHookEX trong DLL không vậy ?
    Đặt nó vào đó rồi thì cũng phải lôi nói ra bằng địa chỉ của nó thôi chứ còn có cách nào nữa????

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi peterdrew
    Đặt nó vào đó rồi thì cũng phải lôi nói ra bằng địa chỉ của nó thôi chứ còn có cách nào nữa????
    Bạn nhầm rồi,trong DLL không phải cái gì cũng call được đâu, Mình tìm hiểu được nguyên nhân rồi:


    You should never perform the following tasks from within DllMain:
    • Call functions in User32.dll or Gdi32.dll. Some functions load another DLL, which may not be initialized.
    mà hàm SetWindowHookEx nằm trong User32.dll nên Không thể gọi trong DLLMain được
    đọc tại đây: http://forums.congdongcviet.com/show...165#post158165

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi C&C++
    Bạn nhầm rồi,trong DLL không phải cái gì cũng call được đâu, Mình tìm hiểu được nguyên nhân rồi:



    đọc tại đây: http://forums.congdongcviet.com/show...165#post158165
    Vậy cậu gọi kiểu gì nào???? Hay là thôi??

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Không thể không dùng SetWIndowHookEx được,nếu thôi được thì mình đã làm cách khác rồi ( đầy cách chạy tốt ),nhưng tính logic của chương trình bắt phải như vậy

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    SetWindowHookEx Và hàm Lọc Cùng trong DLL

    hi Các bạn,thông thường để Hook Keyboard người ta đặt Hàm lọc nằm trong DLL,còn Hàm Call SetWindowHookEx nằm ở file Exe,bây giờ mình muốn Đặt hàm lọc và hàm SetwindowHookEx cùng nằm trong DLL,sau đó sẽ có 1 Exe inject DLL đó vào 1 process khác,nhiệm vụ là trong DLL main sẽ call SetwindowHookEx,nhưng code của mình chạy ko hook được( nó không vào hàm lọc ) tại sao vậy nhỉ ?

    Mã:
    LRESULT _stdcall CALLBACK keyboardHookProc_DLL(int nCode, WPARAM wParam, LPARAM lParam) 
    {
    	PKBDLLHOOKSTRUCT pKey = (PKBDLLHOOKSTRUCT) (lParam);
    	if (wParam == WM_KEYDOWN) 
    	{
    		MessageBoxA(0,"sdkj","sd",0);
    	}
    	return CallNextHookEx(NULL, nCode, wParam, lParam);
    }
    
    unsigned __stdcall ThreadChangeLink( void* pArguments)
    {
    		g_hKeyboardDLL = SetWindowsHookEx( WH_KEYBOARD_LL, 
    			keyboardHookProc_DLL,
    			HINSTANCE(GetModuleHandle(NULL)), 
    			0);
    		break;
                    return 0;
    }
    
    BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved	 )
    {
    	switch (ul_reason_for_call)
    	{
    	case DLL_PROCESS_ATTACH:
                            unsigned threadID;
    			g_hThreadHook = (HANDLE)_beginthreadex(NULL,
    				0,
    				&ThreadChangeLink, 
    				0, 
    				0, 
    				&threadID); 
             }
    }

  8. #8
    VD đây là code của mình:



    Mã nguồn PHP:
    // dllmain.cpp : Defines the entry point for the DLL application. #include "stdafx.h" HANDLE g_hThreadHook; HHOOK g_hKeyboardDLL; LRESULT _stdcall CALLBACK keyboardHookProc_DLL(int nCode, WPARAM wParam, LPARAM lParam) { PKBDLLHOOKSTRUCT pKey = (PKBDLLHOOKSTRUCT) (lParam); if (wParam == WM_KEYDOWN) { MessageBoxA(0,"sdkj","sd",0); } return CallNextHookEx(NULL, nCode, wParam, lParam); } unsigned __stdcall ThreadChangeLink( void* pArguments) { g_hKeyboardDLL = SetWindowsHookEx( WH_KEYBOARD_LL, keyboardHookProc_DLL, HINSTANCE(GetModuleHandle(NULL)), 0); return 0; } BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: unsigned threadID; g_hThreadHook = (HANDLE)_beginthreadex(NULL, 0, &ThreadChangeLink, 0, 0, &threadID); case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }  

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •