能力值:
( LV2,RANK:10 )
|
-
-
2 楼
沙发占位,通俗易懂。3MB的工程?
|
能力值:
(RANK:10 )
|
-
-
3 楼
+1
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
写的不错!
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
写的通俗易懂,不错!
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
卸载不蓝屏就ok
|
能力值:
( LV5,RANK:60 )
|
-
-
7 楼
很不错。
不过我没有学过硬件,cr0的处理不懂。百度了下,上面写得
CR0的位16是写保护(Write Proctect)标志。当设置该标志时,处理器会禁止超级用户程序(例如特权级0的程序)向用户级只读页面执行写操作;当该位复位时则反之。该标志有利于UNIX类操作系统在创建进程时实现写时复制(Copy on Write)技术。
10000,是16位吧,感觉描述不一样啊。
|
能力值:
( LV12,RANK:400 )
|
-
-
8 楼
假设现在内核保护是开启的,那么其它位不管,只看标志位,则有
0000 0000 0000 0001 0000 0000 0000 0000
0 0 0 1 0 0 0 0
10000h取反后
1111 1111 1111 1110 1111 1111 1111 1111
与上面进行与运算,上面的1就变0了,其它位不变.
不知道 这样解释 可以不。
排版有点问题,编辑框 中和保存后有差异,将就着看吧。
|
能力值:
( LV12,RANK:400 )
|
-
-
9 楼
林版主的表情真是百看不厌,哈哈。
|
能力值:
( LV12,RANK:400 )
|
-
-
10 楼
蓝屏多了就不蓝屏了,不过当你想让它蓝屏的时候,它又蓝屏了,这样多好玩啊。
|
能力值:
( LV12,RANK:400 )
|
-
-
11 楼
呵呵,能懂就好。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
MARK ,还没学到这里.
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
NTSTATUS ssdt_hook()
{
O_NtOpenProcess=KeServiceDescriptorTable.ServiceTableBase[122];
PageProtectOff();
KeServiceDescriptorTable.ServiceTableBase[122]=(unsigned int)MyNtOpenProcess;
PageProtectOff();
return STATUS_SUCCESS;
}
比如我们要保护计算器这个进程不被OpenProcess打开
>>if(ProtectProcess(ClientId->UniqueProcess,"notepad.exe"))
0w0
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
还没学过呢。。。有个问题,你说的那个ssdt数组的首地址,怎么获取到啊
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
Thanks for sharing,Good!
NTSTATUS ssdt_hook()
{
O_NtOpenProcess=KeServiceDescriptorTable.ServiceTableBase[122];
PageProtectOff();
KeServiceDescriptorTable.ServiceTableBase[122]=(unsigned int)MyNtOpenProcess;
PageProtectOff();
return STATUS_SUCCESS;
}
下面一个PageProtectOff()函数 是PageProtectOn()吧
一个寄存器cr0,32位寄存器、
它的第17位(WP位)如果为1、表示开启页面保护 0则是去掉页面保护、
__asm //去掉页保护
{
Cli //表示将处理器标志寄存器的中断标志位清0,不允许中断
mov eax,cr0
and eax,not 10000h //and eax,0FFFEFFFFh
mov cr0,eax
}
__asm //恢复页保护
{
mov eax,cr0
or eax,10000h //or eax,not 0FFFEFFFFh
mov cr0,eax
sti
}
|
能力值:
( LV12,RANK:400 )
|
-
-
16 楼
[QUOTE=yangfff;1205376]NTSTATUS ssdt_hook()
{
O_NtOpenProcess=KeServiceDescriptorTable.ServiceTableBase[122];
PageProtectOff();
KeServiceDescriptorTable.ServiceTableBa...[/QUOTE]
哈哈。。笔误。。
|
能力值:
( LV12,RANK:400 )
|
-
-
17 楼
[QUOTE=happymhx;1205410]Thanks for sharing,Good!
NTSTATUS ssdt_hook()
{
O_NtOpenProcess=KeServiceDescriptorTable.ServiceTableBase[122];
PageProtectOff();
KeServiceDesc...[/QUOTE]
嗯,写得太匆忙了,笔误,马上纠正,呵呵。
|
能力值:
( LV12,RANK:400 )
|
-
-
18 楼
typedef struct ServiceDescriptorEntry {
unsigned int *ServiceTableBase;
unsigned int *ServiceCounterTableBase;
unsigned int NumberOfServices;
unsigned char *ParamTableBase;
} ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t;
用这个结构体导出KeServiceDescriptorTable这个结构,就可以通过KeServiceDescriptorTable->ServiceTableBase知道ssdt结构的首地址了。
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
牛鼻……膜拜mark!
|
能力值:
( LV5,RANK:60 )
|
-
-
20 楼
不太理解的是这个位的作用。百度上的意思的是这个位置1,r0能向r3的只读内存执行写操作。为什么能起到保护作用。
|
能力值:
( LV12,RANK:400 )
|
-
-
21 楼
修改CR0寄存器的WP位,使只读属性失效,去掉了只读属性,就可以改写数据了。
|
能力值:
( LV12,RANK:400 )
|
-
-
22 楼
四个太阳是怎样练成的。。
|
能力值:
( LV9,RANK:370 )
|
-
-
23 楼
当A给B讲抽象的概念的时候,B听的云里雾里,不知所云。
这不是B的错,是因为A的水平还没达到---可以把复杂抽象的东西用简单的事物比拟,换言之,A还没深刻理解。
显然,楼主已经对ssdt深刻理解了。赞一个。
|
能力值:
( LV6,RANK:80 )
|
-
-
24 楼
LZ讲的精彩。
|
能力值:
( LV3,RANK:20 )
|
-
-
25 楼
已标记,晚上开始学习,谢谢分享
|
|
|