Посмотрите исходник. Немогу установить СБТ хук.

Тема в разделе "WASM.BEGINNERS", создана пользователем NumberOne, 5 авг 2007.

  1. NumberOne

    NumberOne New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2007
    Сообщения:
    1
    Здравствуйте! Помогите, пожалуйста, начинающему. Немогу разобраться с CBT хуком. В отладчике (OllyDbg) ошибка возникает (т.е. все начинает глючить) при установке хука (SetWindowsHookEx). Мне кажется, я напутал с HookProc или CallNextHook.

    DLL:
    Код (Text):
    1. .586
    2. .model flat, stdcall
    3.  
    4. DLL_PROCESS_DETACH equ 0
    5. DLL_PROCESS_ATTACH equ 1
    6. DLL_THREAD_ATTACH equ 2
    7. DLL_THREAD_DETACH equ 3
    8.  
    9. Public HookProc1,HHM
    10.  
    11. extern CallNextHookEx@16:near
    12. extern MessageBoxA@16:near
    13.  
    14. includelib c:\masm32\lib\user32.lib
    15. includelib c:\masm32\lib\kernel32.lib
    16.  
    17. .data
    18. hdl dd ?
    19. hh dd ?             ;handle of hook
    20. text1 db 'message',0
    21. text2 db 'message from HookProc',0
    22.  
    23. .code
    24. code:
    25.  
    26. mov eax,dword ptr [ebp+0ch]
    27. cmp eax,0
    28. jne d1
    29. jmp _EXIT
    30. d1:
    31. cmp eax,1
    32. jne _EXIT
    33. mov edx, dword ptr [ebp+08h]
    34. mov hdl,edx
    35. _EXIT:
    36. mov eax,1
    37. ret 12
    38.  
    39. HHM proc export
    40. push ebp
    41. mov ebp,esp
    42. mov eax,dword ptr [ebp+08h]
    43. mov hh,eax
    44. pop ebp
    45. ret 4
    46. HHM endp
    47.  
    48. HookProc1 proc export
    49. push ebp
    50. mov ebp,esp
    51. push dword ptr [ebp+010h]
    52. push dword ptr [ebp+0ch]
    53. push dword ptr [ebp+08h]
    54. push hh
    55. call CallNextHookEx@16
    56. push 0
    57. push offset text1
    58. push offset text2
    59. push 0
    60. call MessageBoxA@16
    61. _EX:
    62. pop ebp
    63. ret
    64. HookProc1 endp
    65.  
    66. end code
    -------------------------------------------------------------

    EXE:
    Код (Text):
    1. .586
    2. .model flat, stdcall
    3.  
    4. extern ExitProcess@4:near
    5. extern GetSystemTime@4:near
    6. extern MessageBoxA@16:near
    7. extern CreateFileA@28:near
    8. extern WriteFile@20:near
    9. extern CloseHandle@4:near
    10. extern LoadLibraryA@4:near
    11. extern GetProcAddress@8:near
    12. extern FreeLibrary@4:near
    13. extern GetMessageA@16:near
    14. extern TranslateMessage@4:near
    15. extern DispatchMessageA@4:near
    16. extern SetWindowsHookExA@16:near
    17. extern UnhookWindowsHookEx@4:near
    18.  
    19.  
    20. includelib c:\masm32\lib\user32.lib
    21. includelib c:\masm32\lib\kernel32.lib
    22.  
    23. msgstruct struc
    24. mshwnd dd ?
    25. msmesage dd ?
    26. mswparam dd ?
    27. mslparam dd ?
    28. mstime dd ?
    29. mspt dd ?
    30. msgstruct ends
    31.  
    32. .data
    33. msg  msgstruct <?>
    34. hlib dd ?           ;handle of dll
    35. hh dd ?             ;handle of hook
    36. libr db 'DllMainSorce.dll',0    ; name dll
    37. nameproc db '_HookProc1@0',0    ; name proc HookProc1
    38. addrproc dd ?       ; addres of proc HookProc1
    39. hhm db '_HHM@0',0       ; name proc HHM
    40. hhmaddr dd ?        ; addres of proc HHM
    41.  
    42. .data?
    43.  
    44. .code
    45. code:
    46. push offset libr
    47. call LoadLibraryA@4
    48. mov hlib,eax
    49.  
    50. push offset nameproc
    51. push hlib
    52. call GetProcAddress@8
    53. mov [addrproc],eax
    54.  
    55. push offset hhm
    56. push hlib
    57. call GetProcAddress@8
    58. mov [hhmaddr],eax
    59.  
    60. push 0
    61. push hlib
    62. push addrproc
    63. push 05h ;WH_CBT
    64. call SetWindowsHookExA@16
    65. mov hh,eax
    66. mov eax, hhmaddr
    67. push hh
    68. call eax ; save handle of hook in dll
    69.  
    70. MSG_LOOP:
    71. push 0
    72. push 0
    73. push 0
    74. push offset msg
    75. call GetMessageA@16
    76. cmp eax,0
    77. je END_MSG_LOOP
    78. push offset msg
    79. call TranslateMessage@4
    80. push offset msg
    81. call DispatchMessageA@4
    82. jmp MSG_LOOP
    83. END_MSG_LOOP:
    84.  
    85. push hh
    86. call UnhookWindowsHookEx@4
    87. push hlib
    88. call FreeLibrary@4
    89. push 0
    90. call ExitProcess@4
    91. end code
     
  2. Derebuser

    Derebuser New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2007
    Сообщения:
    11
    винды не знают, что такое @0, да и подчеркивание по-моему лишнее. Короче, с именами что-то не так
     
  3. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    NumberOne
    Для начала неплохо было бы написать нормальный код - которых хотя бы проверяет возвращаемые значения функций. По вопросу - Сама хук процедура принимает три параметра - стало быть и выталкивать из стека она должна три, а у Вас нуль.
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну не всегда) Но в данном случае при соглашении stdcall действительно должна

    ЗЫ.
    гениальная фраза)