找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 12040|回复: 9

果断被hook KiSwapContext打败了

 火.. [复制链接]

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-3-21 21:25:46 | 显示全部楼层 |阅读模式
   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,[eax]
           mov res,eax
       }
     }
     else
     {
       res = 0;
       return NULL;
     }
   }
   _asm
   {
     mov eax,res
       sub eax,5
       mov ChangAddr,eax
       mov edx,[eax+1]
       mov CallContextOffset,edx
       add eax,edx
       add eax,5
       mov GoBackAddr,eax
       mov res,eax
   }
总之我不知道网上怎么能成功运行,反正我的电脑在红色那行,BSOD~KernelStack根本不可读~

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-3-21 21:43:06 | 显示全部楼层
我记得论坛以前有人发过hook KiSwapContext的完整代码,我以前也有,前段时间下游戏时空间不够,一怒之下把收集的驱动代码都TMD删除了,估计hook KiSwapContext的完整代码也永远消失了。
另外我依稀记得,hook KiSwapContext对系统的依赖是很大的。

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-3-21 22:29:37 | 显示全部楼层
回复 Tesla.Angela 的帖子

1.完整代码我也有啊。我先是自己写,得不到正确地址。然后再用网上给的完整代码,还是不行~
2.对系统依赖性?根据网上的原理来说,得到KiSwapContext的地址是无关依赖性的,因为是从KernelStack中得到。
3.什么游戏啊???这么大?

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-3-22 18:58:26 | 显示全部楼层
找到原因了,PsLookupThreadByThreadId不能成功调用。

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-3-23 13:14:14 | 显示全部楼层

#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 [esp+0Ch],ebx
80541bdb 89742408        mov     dword ptr [esp+8],esi
80541bdf 897c2404        mov     dword ptr [esp+4],edi
80541be3 892c24          mov     dword ptr [esp],ebp
80541be6 8b1d1cf0dfff    mov     ebx,dword ptr ds:[0FFDFF01Ch]
80541bec 8bf1            mov     esi,ecx
80541bee 8bbb24010000    mov     edi,dword ptr [ebx+124h]
80541bf4 89b324010000    mov     dword ptr [ebx+124h],esi
80541bfa 8a4f58          mov     cl,byte ptr [edi+58h]
80541bfd e8ce000000      call    nt!SwapContext (80541cd0)
80541c02 8b2c24          mov     ebp,dword ptr [esp]
80541c05 8b7c2404        mov     edi,dword ptr [esp+4]
80541c09 8b742408        mov     esi,dword ptr [esp+8]
80541c0d 8b5c240c        mov     ebx,dword ptr [esp+0Ch]
80541c11 83c410          add     esp,10h
80541c14 c3              ret
/*以下省略*/
}

评分

参与人数 1水晶币 +100 收起 理由
Tesla.Angela + 100

查看全部评分

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-3-23 18:18:44 | 显示全部楼层
恭喜楼主自行解决问题。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-4-2 23:09:27 | 显示全部楼层
回复 ywledoc 的帖子

他是说你能自行解决问题很强大。

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-4-2 23:16:22 | 显示全部楼层
回复 Tesla.Angela 的帖子

it's a question~~~

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-4-3 10:23:47 | 显示全部楼层
回复 ywledoc 的帖子

神马question?

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-4-10 21:22:51 | 显示全部楼层
ywledoc 发表于 2011-3-23 13:14
#include

NTSTATUS

收藏
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表