能力值:
( LV12,RANK:1010 )
2 楼
堆栈乱了吧 ....
能力值:
( LV2,RANK:10 )
3 楼
代码问题,跟用什么语言没关系
能力值:
( LV2,RANK:10 )
4 楼
我从来都是用c++,怎么没出过问题,我好幸运啊
能力值:
( LV2,RANK:10 )
5 楼
我的部分代码,也是出问题的代码。
_declspec(naked) NTSTATUS HookZwOpenProcess( OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId )
{
if((ClientId != NULL))
{
if((ULONG)ClientId->UniqueProcess==548) //阻止pid为548的进程被结束
{
DbgPrint( "PID 548 has been accessed,need forbidden");
ProcessHandle = 0; //返回无效句柄
__asm
{
mov eax,0C0000022h
ret 10h
}
// return STATUS_ACCESS_DENIED; //返回禁止访问
}
}
__asm
{
push ClientId
push ObjectAttributes
push DesiredAccess
push ProcessHandle
call RealZwOpenProcess
ret 10h
}
// return (NTSTATUS)(REALZWOPENPROCESS)RealZwOpenProcess( ProcessHandle, DesiredAccess, ObjectAttributes, ClientId );
}
VOID MyHook_thread(IN PVOID Context)
{
m_OFF();
__asm
{
push eax
push ecx
push edx
mov eax,dword ptr [ZwOpenProcess]
mov ecx,dword ptr [KeServiceDescriptorTable]
mov eax,[eax+1]
mov ecx,[ecx]
mov edx,[ecx+eax*4]
mov g_Oldhook,edx
mov dword ptr[ecx+eax*4],offset HookZwOpenProcess
pop eax
pop ecx
pop edx
}
m_ON();
}
//对不起,大家。。
能力值:
( LV12,RANK:1010 )
6 楼
_declspec(naked) 裸函数需要自己平衡堆栈, 你的代码里面怎么没有啊...
能力值:
( LV13,RANK:410 )
7 楼
__stdcall
能力值:
( LV2,RANK:10 )
8 楼
//我这个函数不是有吗?还有哪里要加啊。。不好意思,,错了。
_declspec(naked) NTSTATUS HookZwOpenProcess( OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId )
能力值:
( LV2,RANK:10 )
9 楼
这个。。刚刚试过也不行。。不好意思,各位,刚刚本人发错了。。
_declspec(naked) NTSTATUS HookZwOpenProcess( OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId )
{
__asm pushad;
if((ClientId != NULL))
{
if((ULONG)ClientId->UniqueProcess==548) //阻止pid为548的进程被结束
{
DbgPrint( "PID 548 has been accessed,need forbidden");
ProcessHandle = 0; //返回无效句柄
__asm{
popad
mov eax,0C0000022h
ret 10h
}
// return STATUS_ACCESS_DENIED; //返回禁止访问
}
}
__asm {
popad
push ClientId
push ObjectAttributes
push DesiredAccess
push ProcessHandle
call RealZwOpenProcess
ret 10h
} // return (NTSTATUS)(REALZWOPENPROCESS)RealZwOpenProcess( ProcessHandle, DesiredAccess, ObjectAttributes, ClientId );
}
//希望能再次指点。。
能力值:
( LV2,RANK:10 )
10 楼
Hook ZwOpenProcess,为什么要用_declspec(naked),不用这么麻烦吧
直接自己定义一个不行?
能力值:
( LV12,RANK:1010 )
11 楼
用IDA打开看. 你会发现编译器又帮你压了3个寄存器.
push edi
push ebx
push esi
所以返回的时候都要弹出来啊~~
总之,是堆栈问题. 弄到windbg里一调,就知道了~
能力值:
( LV2,RANK:10 )
12 楼
用C写驱动的飘过.........
用naked就直接全asm的再次飘过.........
能力值:
( LV2,RANK:10 )
13 楼
在这先谢谢了,小弟先去调调看。
能力值:
( LV2,RANK:10 )
14 楼
谢谢各位大侠,问题解决了。。