首页
社区
课程
招聘
8
[原创]SSDT HOOK bypass 某游戏 and Themida ThreadHideFromDebugger
发表于: 2008-12-12 15:25 19361

[原创]SSDT HOOK bypass 某游戏 and Themida ThreadHideFromDebugger

2008-12-12 15:25
19361
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
///////////////////////////////////////////////////////////////////////////////
///
/// Copyright (c) 2008 - <dts>
///
/// Original filename: ZwHook.c
/// Project          : ZwHook
/// Date of creation : 2008-11-19
/// Author(s)        : 梧桐
///
/// Purpose          : <description>
///
/// Revisions:
///  0000 [2008-11-19] Initial revision.
///
///////////////////////////////////////////////////////////////////////////////
 
#include "ntddk.h"
 
#pragma pack(1)
typedef struct ServiceDescriptorEntry
{
        unsigned int *ServiceTableBase;
        unsigned int *ServiceCounterTableBase; //Used only in checked build
        unsigned int NumberOfServices;
        unsigned char *ParamTableBase;
} ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t;
 
#pragma pack()
 
__declspec(dllimport)  ServiceDescriptorTableEntry_t KeServiceDescriptorTable;
 
#define SYSTEMSERVICE(_function)  KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_function+1)]
 
PMDL  g_pmdlSystemCall;
PVOID *MappedSystemCallTable;
 
#define SYSCALL_INDEX(_Function) *(PULONG)((PUCHAR)_Function+1)
 
#define HOOK_SYSCALL(_Function, _Hook)  \
       (PVOID) InterlockedExchange( (PLONG) &MappedSystemCallTable[SYSCALL_INDEX(_Function)], (LONG) _Hook)
 
#define UNHOOK_SYSCALL(_Function, _Hook)  \
       InterlockedExchange( (PLONG) &MappedSystemCallTable[SYSCALL_INDEX(_Function)], (LONG) _Hook)
 
NTSYSAPI
NTSTATUS
NTAPI  ZwSetInformationThread(
                              IN HANDLE  ThreadHandle,
                              IN THREADINFOCLASS  ThreadInformationClass,
                              IN PVOID  ThreadInformation,
                              IN ULONG  ThreadInformationLength
                              );
 
typedef NTSTATUS (*ZWSETINFORMATIONTHREAD)(
    IN HANDLE  ThreadHandle,
    IN THREADINFOCLASS  ThreadInformationClass,
    IN PVOID  ThreadInformation,
    IN ULONG  ThreadInformationLength
    );
 
ZWSETINFORMATIONTHREAD        OldZwSetInformationThread;
 
NTSTATUS NewZwSetInformationThread(
                                   IN HANDLE  ThreadHandle,
                                   IN THREADINFOCLASS  ThreadInformationClass,
                                   IN PVOID  ThreadInformation,
                                   IN ULONG  ThreadInformationLength)
{
    NTSTATUS ntStatus;
 
    if(ThreadInformationClass == 17) //ANTI-DEBUG
        ntStatus =  STATUS_SUCCESS;
    else
        ntStatus = ((ZWSETINFORMATIONTHREAD)(OldZwSetInformationThread))(
        ThreadHandle,
        ThreadInformationClass,
        ThreadInformation,
        ThreadInformationLength);
    return ntStatus;
}
 
VOID OnUnload(IN PDRIVER_OBJECT DriverObject)
{
   DbgPrint("ROOTKIT: OnUnload called\n");
 
   // unhook system calls
   UNHOOK_SYSCALL( ZwSetInformationThread, OldZwSetInformationThread);
 
   // Unlock and Free MDL
   if(g_pmdlSystemCall)
   {
      MmUnmapLockedPages(MappedSystemCallTable, g_pmdlSystemCall);
      IoFreeMdl(g_pmdlSystemCall);
   }
}
 
 
NTSTATUS DriverEntry(IN PDRIVER_OBJECT theDriverObject,
                     IN PUNICODE_STRING theRegistryPath)
{
   // Register a dispatch function for Unload
   theDriverObject->DriverUnload  = OnUnload;
 
   // save old system call locations
   OldZwSetInformationThread =(ZWSETINFORMATIONTHREAD)(SYSTEMSERVICE(ZwSetInformationThread));
 
   // Map the memory into our domain so we can change the permissions on the MDL
   g_pmdlSystemCall = MmCreateMdl(NULL, KeServiceDescriptorTable.ServiceTableBase, KeServiceDescriptorTable.NumberOfServices*4);
   if(!g_pmdlSystemCall)
      return STATUS_UNSUCCESSFUL;
 
   MmBuildMdlForNonPagedPool(g_pmdlSystemCall);
 
   // Change the flags of the MDL
   g_pmdlSystemCall->MdlFlags = g_pmdlSystemCall->MdlFlags | MDL_MAPPED_TO_SYSTEM_VA;
 
   MappedSystemCallTable = MmMapLockedPages(g_pmdlSystemCall, KernelMode);
 
   // hook system calls
   HOOK_SYSCALL( ZwSetInformationThread, NewZwSetInformationThread);
                               
   return STATUS_SUCCESS;
}

[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

收藏
免费 8
支持
分享
赞赏记录
参与人
雪币
留言
时间
東陽不列山
为你点赞!
2024-12-14 01:48
Youlor
为你点赞~
2024-1-6 01:26
伟叔叔
为你点赞~
2023-12-6 05:18
QinBeast
为你点赞~
2023-9-15 00:32
PLEBFE
为你点赞~
2023-8-27 01:28
shinratensei
为你点赞~
2023-8-18 02:46
心游尘世外
为你点赞~
2023-8-9 00:04
飘零丶
为你点赞~
2023-7-27 00:33
最新回复 (17)
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
2
请问线程被偷啥意思?
2008-12-12 15:45
0
雪    币: 236
活跃值: (13)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
抱歉,是我写错了。

大牛没绕过?
2008-12-12 15:57
0
雪    币: 728
活跃值: (1359)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
CQWZ好像就是这个吧 hideOD 1.82里面有了这功能 感谢楼主代码
2008-12-12 16:10
0
雪    币: 200
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看到hook就进来~~~

谢谢lz
2008-12-12 17:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这个sys如何调用可以hook掉系统的ZwSetInformationThread 函数调用?
2008-12-13 19:43
0
雪    币: 193
活跃值: (26)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
7
就怕ring3层 人家饶过ZwSetInformationThread函数头 或者 其他手段
所以还是驱动拦的稳当一些
2008-12-14 06:36
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主能不能偷偷告诉我。。。某游戏 是啥游戏。。
2008-12-14 07:27
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢源代码。。。
2008-12-18 23:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我还以为是分析呢 那你直接发个代码就得了 不用写得这么炫
2009-4-23 09:11
0
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
看到这贴,我也学习了~~感谢楼主...
2009-4-23 13:15
0
雪    币: 246
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
XX = NP &&HS;
2009-4-23 21:14
0
雪    币: 163
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
一句话概括就是:通过MDL hook SSDT
2009-4-24 00:17
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
17 是什么意思?拜托告诉一下
2009-4-24 10:55
0
雪    币: 153
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
ThreadHideFromDebugger = 17
2009-4-24 11:15
0
雪    币: 253
活跃值: (625)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
这个是需要sys编译的吗?有没有R3层直接劫持的方法
2019-2-9 09:35
0
雪    币: 83
活跃值: (1092)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
17
感谢分享
2019-2-11 08:06
0
雪    币: 35
活跃值: (111)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
PEBOSS 楼主能不能偷偷告诉我。。。某游戏 是啥游戏。。
现在很多游戏用这个反调试
2023-1-11 19:20
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册