[masm] 組合語言高手請進 |
尚未結案
|
vlad dracula
一般會員 發表:13 回覆:9 積分:4 註冊:2006-07-09 發送簡訊給我 |
.386
.model flat, stdcall option casemap :none ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Include 檔定義 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Equ 等值定義 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> sizes equ 80 ICO_MAIN equ 1000 DLG_MAIN equ 1000 IDC_TEXT equ 1001 WM_HOOK equ WM_USER 100h ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 資料段 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .data? titlename db 1024 dup (?) hInstance dd ? hWinMain dd ? hHook dd ? szAscii db 32 dup (?) ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 程式碼段 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .code ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 鉤子回呼函數 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> HookProc proc _dwCode,_wParam,_lParam local @szKeyState[256]:byte invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam pushad .if _dwCode == HC_ACTION mov ebx,_lParam assume ebx:ptr EVENTMSG .if [ebx].message == WM_KEYDOWN invoke GetKeyboardState,addr @szKeyState invoke GetKeyState,VK_SHIFT mov @szKeyState VK_SHIFT,al mov ecx,[ebx].paramH shr ecx,16 invoke ToAscii,[ebx].paramL,ecx,addr @szKeyState,addr szAscii,0 mov byte ptr szAscii [eax],0 .if szAscii == 0dh mov word ptr szAscii 1,0ah .endif invoke SendDlgItemMessage,hWinMain,IDC_TEXT,EM_REPLACESEL,0,addr szAscii .endif assume ebx:nothing .endif popad xor eax,eax ret HookProc endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam mov eax,wMsg ;******************************************************************** .if eax == WM_CLOSE invoke UnhookWindowsHookEx,hHook invoke EndDialog,hWnd,NULL ;******************************************************************** .elseif eax == WM_INITDIALOG push hWnd pop hWinMain invoke SetWindowsHookEx,WH_JOURNALRECORD,addr HookProc,hInstance,NULL .if eax mov hHook,eax .else invoke EndDialog,hWnd,NULL .endif ;******************************************************************** .else mov eax,FALSE ret .endif mov eax,TRUE ret _ProcDlgMain endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start: invoke GetModuleHandle,NULL mov hInstance,eax invoke DialogBoxParam,eax,DLG_MAIN,NULL,offset _ProcDlgMain,NULL invoke ExitProcess,NULL ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> end start 我這樣設定了一個日誌記錄鉤子 但接受到鍵盤訊後 不知道是那個程序發出的 請問如何得到發出訊息的程序標題? 完整的請見附件
附加檔案:rehook.rar
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
|
vlad dracula
一般會員 發表:13 回覆:9 積分:4 註冊:2006-07-09 發送簡訊給我 |
大大不行呀 我寫了個vc的 請大大幫幫忙 如何得到發出訊息的程序視窗標題
#define _WIN32_WINNT 0x0400 #define STRICT #define WIN32_LEAN_AND_MEAN #include #include #include DWORD g_main_tid = 0; HHOOK g_kb_hook = 0; BOOL CALLBACK con_handler (DWORD) { PostThreadMessage (g_main_tid, WM_QUIT, 0, 0); return TRUE; }; LRESULT CALLBACK kb_proc (int code, WPARAM w, LPARAM l) { PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)l; const char *info = NULL; if (w == WM_KEYDOWN) info = "key dn"; else if (w == WM_KEYUP) info = "key up"; else if (w == WM_SYSKEYDOWN) info = "sys key dn"; else if (w == WM_SYSKEYUP) info = "sys key up"; printf ("vkCode [%c], scanCode [x] \n", info, p->vkCode, p->scanCode); // always call next hook return CallNextHookEx (g_kb_hook, code, w, l); }; int main (void) { g_main_tid = GetCurrentThreadId (); SetConsoleCtrlHandler(&con_handler, TRUE); g_kb_hook = SetWindowsHookEx (WH_KEYBOARD_LL, &kb_proc,GetModuleHandle (NULL),0); if (g_kb_hook == NULL) { fprintf (stderr, "SetWindowsHookEx failed with error %d\n",::GetLastError()); return 0; }; // I"u^I"?N~??·E^C,±??e"?A"??I"e"O"^(a)?A`O^?O`o`?E'O`O^^(2)e'msdn MSG msg; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); }; UnhookWindowsHookEx (g_kb_hook); return 0; }; ===================引 用 文 章=================== 看了一下你的程式碼,應該是如你附加上的那一句 GetWindowText eax,addr S, 1024 改成 GetWindowText [ebx].hwnd,addr S, 1024 很久沒寫asm,但應該是這樣子! 參考看看~~ |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
原程式碼裡用的hook type是WH_JOURNALRECORD,而當其callback function的code是HC_ACTION時lParam 是指向一個EVENTMSG Structure,而這個結構體中才有posted window的handle欄位。 typedef struct { 有了這個HANDLE的資訊,才方便用GetWindowText找出來。
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
vlad dracula
一般會員 發表:13 回覆:9 積分:4 註冊:2006-07-09 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
關於我之前提的用EVENTMSG->hwnd得知是哪個window post的,經我自己測式發現,當WM_KEYDOWN時是無效的,但若是WM_LBUTTONDOWN時就有效。也不知是為何…可用下面的程式測看看。 #define _WIN32_WINNT 0x0400
DWORD g_main_tid = 0;
/* if (w == WM_KEYDOWN) if(code == HC_ACTION) char szTitle[256] = {0}; GetKeyboardState(szKeyState); } int main (void) // g_kb_hook = SetWindowsHookEx (WH_KEYBOARD_LL, &kb_proc,GetModuleHandle (NULL),0); while (GetMessage (&msg, NULL, 0, 0))
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
我最後用了你的hook type =WH_KEYBOARD_LL,加裝了GetForegroundWindow()來模擬你要的結果,但應該不完善。不過我也沒有其他的辦法了…
#define _WIN32_WINNT 0x0400 #include
LRESULT CALLBACK kb_proc (int code, WPARAM w, LPARAM l) PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)l; /************************************************************************/ char szTitle[256] = {0}; GetWindowText(GetForegroundWindow(),szTitle,255); /************************************************************************/ if (w == WM_KEYDOWN) // always call next hook int main (void) MSG msg;
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
vlad dracula
一般會員 發表:13 回覆:9 積分:4 註冊:2006-07-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |