不敢说原创 消化了某位牛人的代码 写的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了

有没有其他方法
菜鸟起飞 希望大家给点鼓励
