天天看點

[原創]一個簡單的windows HOOK - 隐藏程序管理器中特定的程序

一個簡單的windows hook - 隐藏程序管理器中特定的程序 

(适用平台:windows 2000 sp4,windows xp sp2)

        屏蔽任務管理器中的程序名稱有很多種方法,可以在ring0級做文章:

修改核心程序連結清單,攔截核心api等。我這裡隻給出win32下的實作,原

理是最普通的 windows 鈎子機制。實作語言 win32 彙編 (masm32):

0 在dllentry中處理資源取得和産生"工作"線程:

mov eax,_hinstance

 mov hinstance,eax

 .if _dwreason == dll_process_attach

  .if cutme == 0

   mov cutme,1

  .else

   invoke createthread,null,0,addr ctprocex,0,0,/

    addr tid

  .endif

 .elseif _dwreason == dll_process_detach

  .if oldlvproc == 0

   jmp quit

  invoke setwindowlong,hlv,gwl_wndproc,/

   oldlvproc

 .endif

1 鈎住wh_callwndproc後,改變list控件預設消息處理過

程,進而監視任何list插入消息:

;*********************************************************************

newlvproc proc uses esi edi ebx hwnd,umsg,wparam,lparam

 local retbyte:dword

 mov eax,umsg

 .if eax == lvm_insertitemw

  assume esi:ptr lv_item

  mov esi,lparam

  mov ebx,[esi].psztext

  invoke widechartomultibyte,cp_acp,0,/

   ebx,-1,addr buf,/

   sizeof buf,null,null

  assume esi:nothing

  invoke lstrcmp,addr buf,addr stxt

  .if eax == 0

   invoke callwindowproc,oldlvproc,/

    hwnd,umsg,wparam,lparam

   ret

 .elseif eax == lvm_setitemw

 .else

  invoke callwindowproc,oldlvproc,hwnd,umsg,/

   wparam,lparam

  ret

 xor eax,eax

 ret

newlvproc endp

ctprocex proc uses esi edi ebx _pm

 local ii:dword

 local lvfi:lv_findinfo

 mov lvfi.flags,lvfi_string

 lea eax,stxt

 mov lvfi.psz,eax

 invoke sendmessage,hlv,lvm_finditem,-1,addr lvfi

 .if eax != 0ffffffffh

  mov ii,eax

  invoke sendmessage,hlv,lvm_deleteitem,ii,0

 lea eax,stxt2

 invoke setwindowlong,hlv,gwl_wndproc,addr newlvproc

 mov oldlvproc,eax

quit:

ctprocex endp

(注意:在windows xp sp2 可執行檔案保護打開時,退出時可能會有異常)

繼續閱讀