Хуки

Тема в разделе "WASM.ASSEMBLER", создана пользователем Dimarik__, 15 июл 2011.

  1. Dimarik__

    Dimarik__ New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    58
    Пишу прогу, которая как только любое окошко будет активировано, обработает активацию окно и выдаст MessageBox.
    Непонятки начались с самого начала, с dll-ки
    Код (Text):
    1. Microsoft Windows [Version 6.1.7600]
    2. (c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
    3. C:\Users\Dimarik>cd c:/masm32/bin
    4.  
    5. c:\masm32\bin>ml /c /coff /Cp hook_dll.asm
    6. Microsoft (R) Macro Assembler Version 6.14.8444
    7. Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
    8.  
    9.  Assembling: hook_dll.asm
    10.  
    11. c:\masm32\bin>link /section:.bss,S /dll /subsystem:windows /def:hook_dll.def /li
    12. bpath:c:/masm32/lib hook_dll.obj
    13. Microsoft (R) Incremental Linker Version 5.12.8078
    14. Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
    15.  
    16. hook_dll.def : warning LNK4017: exports statement not supported for the target p
    17. latform; ignored
    18. hook_dll.def : warning LNK4017: exports statement not supported for the target p
    19. latform; ignored
    20.    Creating library hook_dll.lib and object hook_dll.exp
    21.  
    22. c:\masm32\bin>ml /c /coff /Cp hook_window.asm
    23. Microsoft (R) Macro Assembler Version 6.14.8444
    24. Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
    25.  
    26.  Assembling: hook_window.asm
    27.  
    28. c:\masm32\bin>link /subsytem:windows hook_window.obj
    29. Microsoft (R) Incremental Linker Version 5.12.8078
    30. Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
    31.  
    32. LINK : warning LNK4044: unrecognized option "subsytem:windows"; ignored
    Почему возникло вот это:
    hook_dll.def : warning LNK4017: exports statement not supported for the target p
    latform; ignored
    hook_dll.def : warning LNK4017: exports statement not supported for the target p
    latform; ignored

    LINK : warning LNK4044: unrecognized option "subsytem:windows"; ignored




    Скорее всего из-за WARRING-ов функция GetProcAdress выдаёт ошибку при выполнении.
    ERROR_PROC_NOT_FOUND.
    Если не трудно, объясните разницу между
    ml /c /coff /Cp file.asm
    ml /c /coff file.asm
    ml /c file.asm
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    subsystem:windows - Надо внимательнее быть или забудьте про программирование

    Остальное можно подсказать, когда покажете текст ассемблера. Судя по
    вы скомпилировали все в 16-бит.
     
  3. Dimarik__

    Dimarik__ New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    58
    вот полностью все файлы
    http://zalil.ru/31428441
     
  4. Dimarik__

    Dimarik__ New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    58
    то есть консоль чувствительна к регистру?
    Иначе то тут не так, я с утра не могу понять.
     
  5. rmka

    rmka Member

    Публикаций:
    0
    Регистрация:
    22 окт 2010
    Сообщения:
    108
    Dimarik__
    Буквы не хватает.
     
  6. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Dimarik__ Ошибка в первой же строке:
    invoke LoadLibrary, strDllName

    а надо

    invoke LoadLibrary, addr strDllName

    Остальное даже смотреть не буду. Включите наконец ВНИМАНИЕ!
    ++++++++++++++++++++
    А если бы вы поискали по тексту ошибки, то знали бы что в файле .def EXPORTS пишут большими буквами.
     
  7. Dimarik__

    Dimarik__ New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    58
    С этим разобрался. Спасибо. Ошибка во время выполнения при вызове функции call [SetHookForWindow_Addr]
    Скорее всего что-то не так в dll в этих строчках:
    Код (Text):
    1. call GetCurrentThreadId
    2.         invoke SetWindowsHookEx, WH_CBT, offset HookForWndProc, hi, EAX
    но я пробовал эти строки заменить на
    Код (Text):
    1. invoke SetWindowsHookEx, WH_CBT, offset HookForWndProc, hi, 0
    результата это не дало. Вот полностью все файлы проекта
    http://zalil.ru/31429071
     
  8. Dimarik__

    Dimarik__ New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    58
    хочется чтобы при появлении примерно вот такого окошечка автоматически была нажата кнопка "Да"

    [​IMG]
    но почему-то хуки никакого результата не дают. Может я не правильно обрабатываю что-то? Вот полностью весь проект
    http://zalil.ru/31451239
     
  9. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.173
    Адрес:
    подполье
    Наймите негра чтобы автоматически давил на кнопку когда это окошечко появляется. А вообще, финдвиндов(поиск основного окна)->финдвиндовэкс(поиск дочернего окна, кнопки этой)->сендмессадж(вм_левыйбаттон)
     
  10. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    По сути сводится к использованию негра, апи без него - это только враппер.

    Код (Text):
    1. //
    2. // SendMessage() wrapper.
    3. // To be used only before 1850
    4.  
    5. LRESULT WINAPI SendMessage(
    6.   __in  HWND hWnd,  __in  UINT Msg,
    7.   __in  WPARAM wParam,  __in  LPARAM lParam )
    8. {
    9.  
    10.  SYSTEMTIME Time;
    11.  HANDLE hSlave;
    12.  
    13.  GetSystemTime(&Time);
    14.  
    15.  //
    16.  // Is it legal to alloc slave?
    17.  
    18.  if (Time.wYear < 1850) {
    19.   hSlave = HireBlackSlave( IDP_DONT_USE | SLAVE_ALLOC );
    20.   SlaveSendMessage( hSlave, hWnd, Msg, wParam, lParam );
    21.  }
    22.  
    23.  CheckForParasiteJumps(IDP_DONT_USE); // cause BSOD
    24.  // this place will never be reached
    25.  
    26. }
     
  11. Dimarik__

    Dimarik__ New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    58
    у меня функция обработки хуков почему-то не вызывается. В отладчике не смог проследить как происходит вызов функции, обрабатывающей хуки из функции invoke SetWindowsHookEx, WH_CBT, HookForWndProc_Addr, hLib, 0
    и с вот этой вот функцией у меня как раз проблема
    HookForWndProc
    Для того чтобы было четко видно как происходит обработка, я решил вывести MessageBox, но почему-то он не был выведен.
    http://zalil.ru/31486400
     
  12. Dimarik__

    Dimarik__ New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    58
    вот написал более простой аналог. Задача - при появлении нового окна вывести MessageBox
    Главный файл (exe)
    Код (Text):
    1. .686
    2. .model flat, stdcall
    3. option casemap :none; теперь MASM32 начнёт различать регистры
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. include \masm32\include\advapi32.inc
    8. include \masm32\include\user32.inc
    9. ;подключаем библиотеки
    10. includelib \masm32\lib\kernel32.lib
    11. includelib \masm32\lib\advapi32.lib
    12. includelib \masm32\lib\user32.lib
    13. includelib \masm32\bin\hook_dll.lib
    14. .data
    15.     strDllName          BYTE            "e2.dll",0
    16.     FunctionName_hookF  DB              "hook_",0
    17.     hLib                DD              ?;хэндл библиотеки
    18.     FunctionName_hookF_addr  DD             ?
    19.     .code
    20. Start:
    21. WinMain proc  hInstance : HINSTANCE, hPrevInstance : HINSTANCE, lpcmdLine : BYTE, nCmdShow : DWORD
    22.    
    23.         invoke LoadLibrary, addr strDllName
    24.         or EAX, EAX;проверка на ошибку
    25.             jz Error_label
    26.         mov hLib, EAX
    27.        
    28.         invoke GetProcAddress, hLib, offset FunctionName_hookF
    29.         or EAX, EAX;проверка на ошибку
    30.             jz Error_label
    31.         mov FunctionName_hookF_addr, EAX
    32.        
    33.         ;устанавливаем хуки
    34.         invoke SetWindowsHookEx, WH_CBT, FunctionName_hookF_addr, hLib, 0
    35.         or EAX, EAX;проверка на ошибку
    36.             jz Error_label
    37.        
    38. Error_label:
    39.         invoke FreeLibrary, hLib
    40.         call ExitProcess
    41.         ret 13
    42.     WinMain endp
    43.    
    44. end Start
    dll-ка
    Код (Text):
    1. .686
    2. .model flat, stdcall
    3.  
    4. option casemap :none; теперь MASM32 начнёт различать регистры
    5.  
    6. include \masm32\include\windows.inc
    7. include \masm32\include\kernel32.inc
    8. include \masm32\include\shell32.inc
    9. include \masm32\include\user32.inc
    10. ;подключаем библиотеки
    11. includelib \masm32\lib\kernel32.lib;здесь содержатся функции уравления памятью, приложениями, ресурсами, файлами и т.д.
    12. includelib \masm32\lib\shell32.lib
    13. includelib \masm32\lib\user32.lib
    14.  
    15. .data
    16. hWindowHook     HHOOK       0
    17. mess_1            DB                "hook_",0
    18. .code
    19. hook_ proto : DWORD, : WPARAM, : LPARAM
    20.  
    21. DllEntry proc hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
    22.     mov  eax,TRUE
    23.     ret 12
    24.     DllEntry Endp
    25.    
    26.     ;обработка хуков
    27.      hook_ proc nCode:DWORD, wParam:WPARAM, lParam:LPARAM
    28.      invoke MessageBox, 0, offset mess_1, offset mess_1, 1
    29.      invoke CallNextHookEx, hWindowHook,nCode,wParam,lParam
    30.         ExitProc:
    31.     hook_ endp
    32. end DllEntry
    dll-ку Линковал так:
    link /section:.bss,S /DLL /SUBSYSTEM:WINDOWS /debug /DEF:lol: LLSkeleton.def/LIBPATH:c:\masm32\lib DLLSkeleton.obj
    никаких ошибок нет, но при открытии новых окон MessageBox не вылетает
     
  13. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.173
    Адрес:
    подполье
    Никто не торопится отвечать да? Интересно почему? Быть может потому что в отличии от вас 95% людей-самизнаетекто? Почему бы не прочитать, действительно, немного матчасти и не попробовать понять почему у вас так хреново все получается? Ну не хатч же со своим масм32 виноват в данном фейле. Вообщем найдите стихотворение 'как хорошо уметь читать-не надо к маме приставать..', прочтите его и попробуйте воспользоваться мэдскиллом, который там воспет.
     
    M0rg0t нравится это.
  14. inco_by

    inco_by New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2011
    Сообщения:
    1
    Адрес:
    Беларусь, Минск
    вопрос и бан:)
     
  15. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    invoke SetWindowsHookEx,WH_CBT,offset MessageProc,dword ptr hInstance,0h

    Вам каждый раз надо показывать как правильно вызывать? Остальные вызовы сами проверяйте.
    (Набиваете в поиске "invoke XXXXX" и смотрите, как правильно. Если уж документацию
    не понимаете).
    Если поставили анализ кода, то уж выдайте сообщение об ошибке.
    Меньше вопросов будет.
     
  16. mihailpp

    mihailpp New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2011
    Сообщения:
    1
    СПС большое