Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2010, 12:26   #1
Levmetall
Новичок
Джуниор
 
Регистрация: 11.02.2010
Сообщений: 1
Печаль Клавиатурный хук. Гляньте код....

Я конечно понимаю, что эта тема в рунете обсасана, но извините меня за новый топик!!!!!
Хочу привести свой хук DLL и файл exe.
Моя дллка запускает хук, подскажите, как сделать так, что бы например ВИРТУАЛЬНЫЙ КОД сохранялся в регистре esi.
Т.е. нажал я любую кнопку, а в регистр esi идет ее код. Читал урок Iczelion'a. Но не догнал как провернуть данный код...
#################DLL!!!!!!!######## ##############

.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
hInstance DWORD 0
hHook DWORD ?
.code
DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
push hInst
pop hInstance
mov eax,TRUE
ret
DllEntry Endp

KeyProc proc nCode:DWORD, wParam:DWORD,lParam:DWORD
invoke CallNextHookEx, hHook, nCode,wParam,lParam
mov edx, lParam
mov esi, wParam
KeyProc endp

InstallHook proc
invoke SetWindowsHookEx, WH_KEYBOARD, Addr KeyProc, hInstance, NULL
mov hHook,eax
ret
InstallHook endp
End DllEntry

####################EXE############ #############

.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
NameDLL db "1.dll",0
hLib DWORD ?
NameF db "InstallHook",0
AddrTestFunction DWORD ?
.data?

.code
start:
invoke LoadLibrary, addr NameDLL
mov hLib,eax
invoke GetProcAddress, hLib, ADDR NameF
mov AddrTestFunction, eax
call [AddrTestFunction]
invoke FreeLibrary, ADDR hLib
invoke ExitProcess,0

end start


ЗЫ:
Надеюсь хоть кто-нибуль поможет..... Слышал, что КАК ТО можно юзать функцию GetMessage - не знаю как.....
Levmetall вне форума Ответить с цитированием
Старый 26.02.2010, 18:44   #2
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

Как то давно я писал на fasme хук для клавы, там в коде я отметил момент когда в eax оказывается символ, вроде в своё время всё работало, посмотри, может поможет.
Правда, тут хук на все сообщения, а из них уже отсеиваются WM_CHAR.

Код:
format PE GUI 4.0 DLL
entry DllEntryPoint

include 'win32a.inc'
include 'encoding\WIN1251.INC'

section '.data' data readable writeable

        SysHook    dd ?
        HInstance  dd ?
        Mode       db 0
        IsRun      db 0
        ;pointer    dd ?

section '.text' code readable executable

proc DllEntryPoint hinstDLL,fdwReason,lpvReserved

        mov     eax,[hinstDLL]
        mov     [HInstance],eax
        mov     byte[Mode],0
        mov     eax,TRUE
        ret
endp

proc SysMsgProc uses ebx esi edi,code1,wparam,lparam

        cmp     [code1],HC_ACTION
        jnz     .end
        mov     ebx,[lparam]
        cmp     dword[ebx+4],WM_CHAR
        jnz     .end
        mov     eax,[ebx+8]

        ;Символ в EAX
    .end:
        xor      eax,eax
        invoke   CallNextHookEx,[SysHook],[code1],[wparam],[lparam]
        ret
endp

proc RunStopHook bool

        cmp      [bool],0
        jz       .false
        invoke   SetWindowsHookEx,WH_GETMESSAGE,SysMsgProc,[HInstance],0
        test     eax,eax
        jnz      .noterr
        invoke   MessageBox,0,0,0,MB_OK
        xor      eax,eax
        jmp      .end
    .noterr:
        mov      [SysHook],eax
        jmp     .end
    .false:
        invoke  UnhookWindowsHookEx,[SysHook]
        xor     eax,eax
        mov     [SysHook],eax
    .end:
        ret
endp

section '.idata' import data readable writeable

  library kernel32,'KERNEL32.DLL',\
          user32,'USER32.DLL'

  include 'api\kernel32.inc'
  include 'api\user32.inc'

section '.edata' export data readable

  export 'hookst.DLL',\
         RunStopHook,'RunStopHook'

section '.reloc' fixups data discardable

Последний раз редактировалось Виталий Серов; 26.02.2010 в 18:50.
Виталий Серов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Клавиатурный тренажер TwEEkcs Общие вопросы Delphi 0 09.12.2009 15:39
гляньте задачку на подсчёт букв hen Помощь студентам 3 02.05.2009 14:27
Гляньте код пожалуйста... hen Помощь студентам 8 26.04.2009 16:12
Гляньте свежей головой ктонить! Плиз... Samopal Паскаль, Turbo Pascal, PascalABC.NET 2 21.04.2009 17:35