果断被hook KiSwapContext打败了
if (*NtBuildNumber <= 2195)Status = PsLookupThreadByThreadId((PVOID)4, &(PETHREAD)Thread);
else
Status = PsLookupThreadByThreadId((PVOID)8, &(PETHREAD)Thread);
if (NT_SUCCESS(Status))
{
if (MmIsAddressValid(Thread))
{
res = (PCHAR)(Thread->Tcb.KernelStack);
}
if (MmIsAddressValid(res+8))
{
_asm
{
mov eax,res
add eax,8
mov eax,
mov res,eax
}
}
else
{
res = 0;
return NULL;
}
}
_asm
{
mov eax,res
sub eax,5
mov ChangAddr,eax
mov edx,
mov CallContextOffset,edx
add eax,edx
add eax,5
mov GoBackAddr,eax
mov res,eax
}
总之我不知道网上怎么能成功运行,反正我的电脑在红色那行,BSOD~KernelStack根本不可读~ 我记得论坛以前有人发过hook KiSwapContext的完整代码,我以前也有,前段时间下游戏时空间不够,一怒之下把收集的驱动代码都TMD删除了,估计hook KiSwapContext的完整代码也永远消失了。
另外我依稀记得,hook KiSwapContext对系统的依赖是很大的。 回复 Tesla.Angela 的帖子
1.完整代码我也有啊。我先是自己写,得不到正确地址。然后再用网上给的完整代码,还是不行~
2.对系统依赖性?根据网上的原理来说,得到KiSwapContext的地址是无关依赖性的,因为是从KernelStack中得到。
3.什么游戏啊???这么大? 找到原因了,PsLookupThreadByThreadId不能成功调用。
#include <ntddk.h>
NTSTATUS
DriverEntry( PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
);
NTSTATUS
PsLookupThreadByThreadId(
__in HANDLE ThreadId,
__deref_out PETHREAD *Thread
);
#pragma alloc_text(INIT, DriverEntry)
/*
kd> dt _ethread
nt!_ETHREAD
+0x000 Tcb : _KTHREAD
...
+0x220 ThreadsProcess : Ptr32 _EPROCESS
kd> dt _KTHREAD
nt!_KTHREAD
+0x000 Header : _DISPATCHER_HEADER
...
+0x020 Teb : Ptr32 Void
...
+0x028 KernelStack : Ptr32 Void
*/
ULONG GoBackAddr;
ULONG CallContextOffset;
ULONG ChangAddr;
PCHAR GetSwapAddr()
{
NTSTATUS Status;
PVOID Thread;
PCHAR res = 0;
Status = PsLookupThreadByThreadId((PVOID)8, &Thread);
KdBreakPoint();
if (NT_SUCCESS(Status))
{
if (MmIsAddressValid(Thread))
res = (PCHAR)(*(ULONG*)((ULONG)(Thread)+0x28));
if (MmIsAddressValid(res+8))
res = (PCHAR)*(ULONG*)(res+8);
else
res = 0;
}
return res;
}
VOID
DriverUnload()
{}
NTSTATUS
DriverEntry( PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
)
{
NTSTATUS ntStatus;
HANDLE hThread;
PCHAR ret;
DriverObject->DriverUnload = DriverUnload;
ret = GetSwapAddr();-------ret == 0x80541c02----指向下方红色那行代码------->
nt!KiSwapContext:
80541bd4 83ec10 sub esp,10h
80541bd7 895c240c mov dword ptr ,ebx
80541bdb 89742408 mov dword ptr ,esi
80541bdf 897c2404 mov dword ptr ,edi
80541be3 892c24 mov dword ptr ,ebp
80541be6 8b1d1cf0dfff mov ebx,dword ptr ds:
80541bec 8bf1 mov esi,ecx
80541bee 8bbb24010000 mov edi,dword ptr
80541bf4 89b324010000 mov dword ptr ,esi
80541bfa 8a4f58 mov cl,byte ptr
80541bfd e8ce000000 call nt!SwapContext (80541cd0)
80541c02 8b2c24 mov ebp,dword ptr
80541c05 8b7c2404 mov edi,dword ptr
80541c09 8b742408 mov esi,dword ptr
80541c0d 8b5c240c mov ebx,dword ptr
80541c11 83c410 add esp,10h
80541c14 c3 ret
/*以下省略*/
}
恭喜楼主自行解决问题。 回复 ywledoc 的帖子
他是说你能自行解决问题很强大。 回复 Tesla.Angela 的帖子
it's a question~~~ 回复 ywledoc 的帖子
神马question? ywledoc 发表于 2011-3-23 13:14 static/image/common/back.gif
#include
NTSTATUS
收藏
页:
[1]