不敢说原创 消化了某位牛人的代码 写的lib库
主要代码如下

代码:
_injection:              ;注入部分的代码
        call @F
        szwindowtext     db 'SAS window',0
        @@:
        call @F
        szclass            db 'SAS Window class',0
        @@:
        db 0B8h
        _FindWindow     dd 0
        call eax                 ;查找窗口
        call Local1
        Local1:
        add dword ptr[esp],offset LocalX-offset Local1   ;NewSASProc
        push GWL_WNDPROC
        push eax
        db 0B8h
        _SetWindowLong  dd 0     ;修改窗口处理地址,让我们的代码接管
        call eax
        push eax
        call @F
        OldSASPro    dd 0
        @@:
        pop eax
        pop [eax]
        push 0
        db 0b8h
        _ExitThread     dd 0
        call eax
        LocalX:    
;-------------------------
;新的窗口处理函数
;-------------------------    
NewSASProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
     mov eax,uMsg
     .if  eax==WM_HOTKEY
          .if lParam==02E0003h     
               mov eax,0        ;屏蔽
          .endif
          comment  ~
          ;下面代码与上面代码等价
          mov eax,lParam
         push edx
         mov edx,VK_DELETE
         shl edx,10h
         mov dx,VK_CONTROL
         xor  dx,VK_ALT ;VK_ALT==12h
         cmp eax,edx
         jnz @F 
         mov eax,0
         @@:
         pop edx   ~
     .else
         push lParam
         push wParam
         push uMsg
         push hWin
         call  @F
         @@:
         pop eax
         sub eax,03Eh       ;OldSASPro
         push [eax]
         db        0B8h                     
         _CallWindowProc    dd      0  
         call        EAX
     .endif
     ret
NewSASProc endp
injection_size    equ        $-_injection    ;定义注入代码的长度
_KillHotKey    proc
     invoke LoadLibrary,addr szkernel32
     invoke GetProcAddress,eax,addr szExitThread
     mov _ExitThread,eax
     invoke LoadLibrary,addr szuser32
     mov szUserBase,eax
     invoke GetProcAddress,eax,addr szSetWindowLong    
     mov _SetWindowLong,eax
     invoke GetProcAddress,szUserBase,addr szFindWindow
     mov _FindWindow,eax
     invoke GetProcAddress,szUserBase,addr szCallWindowProc
     mov _CallWindowProc,eax
     call _EnableDebugPrivilege            ;为我们的进程提升权限准备注入
     invoke    CreateToolhelp32Snapshot, 2, 0    ;为所有进程建立一个快照
     mov    hSnapshot, eax
     mov    uProcess.dwSize, sizeof uProcess
     invoke    Process32First, hSnapshot, ADDR uProcess    
     mov    hProcess, eax
     .while hProcess!=0               ;循环获取进程句柄
        lea eax,uProcess.szExeFile
        invoke lstrcmp,addr szWinlogon,eax            ;查找文件名为winlogon.exe的程序
        jnz @F
        invoke  OpenProcess, PROCESS_ALL_ACCESS, NULL,uProcess.th32ProcessID ;返回winlogon.exe进程句柄
        mov        ph, eax
        jmp skip
        @@:
        invoke    Process32Next, hSnapshot, ADDR uProcess     ;进行迭代查找winlogon.exe
        mov    hProcess, eax
     .endw
     skip:
     invoke    CloseHandle, hSnapshot
     invoke       VirtualAllocEx,ph,NULL,injection_size,\  
             MEM_COMMIT,PAGE_EXECUTE_READWRITE         ;在winlogon.exe开辟一段内存空

间
     mov          injection_base, EAX
     invoke       WriteProcessMemory,ph,EAX,addr _injection,injection_size,NULL   ;_injection写入开辟的空间
     invoke       CreateRemoteThread,ph,NULL, 0,injection_base,NULL, 0, 0      ;新空间创建线程调用  
     invoke     CloseHandle,ph
     ret
 _KillHotKey    endp

_EnableDebugPrivilege  proc        ;提升权限的方法
    local  @hToken
    local  @tp:TOKEN_PRIVILEGES    ;结构数据组的每个项指明了权限的类型和要进行的操作
    szText SE_DEBUG_NAME_Y,"SeDebugPrivilege"
    invoke  GetCurrentProcess
    lea  ecx,@hToken
    invoke  OpenProcessToken,eax,TOKEN_ALL_ACCESS,ecx  ;进行指定了写相关的访问权的OpenProcess操作
    mov  @tp.PrivilegeCount,1
    invoke  LookupPrivilegeValue,NULL,addr SE_DEBUG_NAME_Y,addr @tp.Privileges[0].Luid;得到一个权限对应的LUID值
    mov  @tp.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED
    invoke  AdjustTokenPrivileges,@hToken,FALSE,addr @tp,sizeof @tp,NULL,NULL  ;开始提升权限
    push  eax
    invoke  CloseHandle,@hToken
    pop  eax
    ret
_EnableDebugPrivilege  endp 
上面注释写的很清晰啦


这段代码重写了修改4个API的调用地址
SetWindowLongA
FindWindowA
CallWindowProcA
ExitThread
都是非常常见的函数
在里面插入NewSASProc 函数
实现屏蔽热键


由于本人基础不够扎实,所以注入部分只能依葫芦画瓢 
这段代码只是实现屏蔽热键的功能,还有很多方法打开任务管理器
比如 任务栏右键
还有注入还没有办法实现解除。。。。。只能重启
等消化了注入部分的代码 争取写个
调用的话导入 LIB 和INC
导出函数是 _KillHotKey没有参数(貌似废话)
希望有路过的高手讲解一下注入部分

特别是
     .if  eax==WM_HOTKEY
          .if lParam==02E0003h 
lParam怎么得到


反汇编的话也太BT了
有没有其他方法

菜鸟起飞  希望大家给点鼓励
上传的附件 KillHotKey.rar