首页
社区
课程
招聘
[已解决]怎么加载这驱动呢
发表于: 2009-1-21 14:23 5587

[已解决]怎么加载这驱动呢

2009-1-21 14:23
5587
laomms博客地址的例子 : http://blog.chinaunix.net/u1/35278/showart_352409.html

386
    .model flat, stdcall
    option casemap:none

include \masm32\include\w2k\ntstatus.inc
include \masm32\include\w2k\ntddk.inc
include \masm32\include\w2k\ntoskrnl.inc
include \masm32\include\w2k\w2kundoc.inc
includelib \masm32\lib\w2k\ntoskrnl.lib
include \masm32\Macros\Strings.mac
   
    .data
realaddr dd 0
CR0Reg dd 0
Messaga1 db "OpenProcess",0
Messaga2 db "Driver loaded", 0

    .code
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
local pDeviceObject:PVOID

    pushad
    invoke DbgPrint, addr Messaga2
      mov edi, KeServiceDescriptorTable
    mov edi, [edi]
    mov eax, [edi+(07ah*4)] ;edi+07ah*4 - NtOpenProcess
    mov realaddr, eax
   
    cli
    mov eax, CR0
    mov CR0Reg, eax
    and eax, -1
    mov cr0, eax
    mov [edi+(07ah*4)], dword ptr offset hookproc
    mov eax, CR0Reg
    mov CR0, eax
    sti
   
    mov eax, pDriverObject
    assume eax:PTR DRIVER_OBJECT
    mov [eax].DriverUnload, offset DriverUnload
    assume eax:nothing

    popad
    mov eax, STATUS_SUCCESS
    ret
DriverEntry endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::
DriverUnload proc pDriverObject:PDRIVER_OBJECT
    pushad
    mov edi, KeServiceDescriptorTable
    mov edi, [edi]

    cli
    mov eax, CR0
    mov CR0Reg, eax
    and eax, -1
    mov cr0, eax
   
    mov eax, dword ptr realaddr
    mov [edi+(07ah*4)], eax
   
    mov eax, CR0Reg
    mov CR0, eax
    sti
    popad
    ret
DriverUnload endp
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::
hookproc proc
    invoke DbgPrint, addr Messaga1
      jmp dword ptr realaddr
; ret
hookproc endp
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::
end DriverEntry

编译好的驱动见附件

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
加载驱动用InstDrv,KmdKit
2009-1-21 14:43
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
用了,驱动是加载了,但是没有效果,弹不出NAG来
2009-1-21 14:54
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
4
没有弹出
用debugview看
2009-1-21 15:31
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
什么信息也没

我再看看
2009-1-21 15:56
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NaX
6
and eax, -1 -->???看得到就强了
2009-1-21 17:08
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
laomms 那空间就那样写

请教楼上的怎么写呢

谢谢
2009-1-21 17:25
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
8
用汇编写驱动,看着累啊。
HOOK SSDT 。改了CR0,用dbgview看下成功与否。
这code看着累,还不如动态跟踪一下。就知道原因了。。。
2009-1-21 17:29
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢sudami 指导
2009-1-21 18:39
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
修改了这行 and eax,0fffeffffh // 根据楼上的楼上的提示,修改为这样,可以看到Messaga2,但是修改 不了SSDT,不知道何原因,等不到Messaga1 汗了
.386
    .model flat, stdcall
    option casemap:none

include C:\RadASM\masm32\include\w2k\ntstatus.inc
include C:\RadASM\masm32\include\w2k\ntddk.inc
include C:\RadASM\masm32\include\w2k\ntoskrnl.inc
include C:\RadASM\masm32\include\w2k\w2kundoc.inc
includelib C:\RadASM\masm32\lib\w2k\ntoskrnl.lib
include C:\RadASM\\masm32\Macros\Strings.mac
   
    .data
realaddr dd 0
CR0Reg dd 0
Messaga1 db "OpenProcess",0
Messaga2 db "Driver loaded", 0

    .code
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
local pDeviceObject:PVOID

    pushad
    invoke DbgPrint, addr Messaga2
      mov edi, KeServiceDescriptorTable
    mov edi, [edi]
    mov eax, [edi+(07ah*4)] ;edi+07ah*4 - NtOpenProcess
    mov realaddr, eax
   
    cli
    mov eax, CR0
    mov CR0Reg, eax
    and eax,0fffeffffh // 根据楼上的楼上的提示,修改为这样,可以看到Messaga2,但是修改 不了SSDT,不知道何原因,等不到Messaga1 汗了
    mov cr0, eax
    mov [edi+(07ah*4)], dword ptr offset hookproc
    mov eax, CR0Reg
    mov CR0, eax
    sti
   
    mov eax, pDriverObject
    assume eax:PTR DRIVER_OBJECT
    mov [eax].DriverUnload, offset DriverUnload
    assume eax:nothing

    popad
    mov eax, STATUS_SUCCESS
    ret
DriverEntry endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::
DriverUnload proc pDriverObject:PDRIVER_OBJECT
    pushad
    mov edi, KeServiceDescriptorTable
    mov edi, [edi]

    cli
    mov eax, CR0
    mov CR0Reg, eax
    and eax, -1  
    mov cr0, eax
   
    mov eax, dword ptr realaddr
    mov [edi+(07ah*4)], eax
   
    mov eax, CR0Reg
    mov CR0, eax
    sti
    popad
    ret
DriverUnload endp
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::
hookproc proc
    invoke DbgPrint, addr Messaga1
      jmp dword ptr realaddr
; ret
hookproc endp
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::
end DriverEntry
2009-1-21 18:43
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不知道哪错了,貌似都修改SSDT表不成功的
2009-1-21 19:47
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
经过不懈努力,终于可以了

感谢上面各位的帮助,特发出来,以便后来人参考下,虽然很简单啊

.386
.model flat, stdcall
option casemap:none

include C:\RadASM\masm32\include\w2k\ntstatus.inc
include C:\RadASM\masm32\include\w2k\ntddk.inc
include C:\RadASM\masm32\include\w2k\ntoskrnl.inc
include C:\RadASM\masm32\include\w2k\w2kundoc.inc
includelib C:\RadASM\masm32\lib\w2k\ntoskrnl.lib
include C:\RadASM\\masm32\Macros\Strings.mac
   
.data
P_addr   dd 0
realaddr dd 0
CR0Reg dd 0
Messaga1 db "OpenProcess",0
Messaga2 db "Driver loaded", 0

    .code
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
local pDeviceObject:PVOID

    pushad
    invoke DbgPrint, addr Messaga2

    mov edi, dword ptr KeServiceDescriptorTable
    mov edi, [edi]
    lea eax, [edi+(07ah*4)]  
    mov P_addr, eax ;保存地址指针
    push [edi+(07ah*4)]
    pop realaddr ;保存原来的地址
    cli
    mov eax, CR0
    mov CR0Reg, eax
    and eax,0fffeffffh
    mov cr0, eax
    mov eax,P_addr
    mov [eax], dword ptr offset hookproc
    mov eax, CR0Reg
    mov CR0, eax
    sti
   
    mov eax, pDriverObject
    assume eax:PTR DRIVER_OBJECT
    mov [eax].DriverUnload, offset DriverUnload
    assume eax:nothing

    popad
    mov eax, STATUS_SUCCESS
    ret
DriverEntry endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::
DriverUnload proc pDriverObject:PDRIVER_OBJECT
    pushad

    cli
    mov eax, CR0
    mov CR0Reg, eax
    and eax,0fffeffffh
    mov cr0, eax
   
    mov eax,P_addr
    mov edx,realaddr
    mov [eax], edx
   
    mov eax, CR0Reg
    mov CR0, eax
    sti
    popad
    ret
DriverUnload endp
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::
hookproc proc
    invoke DbgPrint, addr Messaga1
    jmp dword ptr realaddr
hookproc endp
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::
end DriverEntry
上传的附件:
2009-1-22 12:30
0
游客
登录 | 注册 方可回帖
返回
//