能力值:
( LV4,RANK:50 )
|
-
-
2 楼
if (handle) obreferenceobjctbyhandle
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这种检查太粗糙了,对内核几乎没用,我觉得。我用BOSDHOOK工具测了一下还是会蓝屏。况且二楼没有用到最基本的SEH。
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
对handle句柄不需要进行probeforread校验
如果是内存的话:
_try
{
probeforread(address , len , ailg);
......access to address ....
}
_except(EXCEPTION_EXECUTE_HANDLER)
{
xxxxx
}
楼主自己问问题写的不清楚,还说别人粗糙?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
学习中......
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
不好意思,QIQI。
我还有一些疑惑,如果我要SSDT Hook一个函数。在Hook的函数中如果我要使用这个handle句柄,如果传入恶意的句柄(假如是一个无效的地址),那岂不是会。。。
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
handle只是一个句柄,并不是一个真实的内存地址,一般只用校验handle是否为空即可
一般需要校验的包括指针类参数的内存地址,以及结构体内的指针内存地址等等
另外需要预防zero length bypass probe, 未使用域的攻击等等
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
谢谢啊,那未使用的参数不需要做检查?
例如:源函数
NTSTATUS
ZwSetValueKey(IN HANDLE KeyHandle,
IN PUNICODE_STRING ValueName,
IN ULONG TitleIndex,
IN ULONG Type,
IN PVOID Data,
IN ULONG DataSize)
{
xxxxxx
}
Hook的函数
NTSTATUS
HookZwSetValueKey(IN HANDLE KeyHandle,
IN PUNICODE_STRING ValueName,
IN ULONG TitleIndex,
IN ULONG Type,
IN PVOID Data,
IN ULONG DataSize)
{
if(!KeyHandle) retuen STATUS_INVALID_PARAMETER;
如果我未使用ValueName,是否要对ValueName.buffer做地址的有效性检查?
未使用的意思是我只对KeyHandle判断,其他的变量未使用,直接返回。
return OldZwSetValueKey(KeyHandle,ValueName,TitleIndex,Type,Data,DataSize)
}
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
未使用的域也有可能导致崩溃,具体看你的HOOK函数实现
|
|
|