首页
社区
课程
招聘
[转帖]在WIN10 19041下继续欢快的infinityhook
2020-5-26 17:46 12996

[转帖]在WIN10 19041下继续欢快的infinityhook

2020-5-26 17:46
12996
收藏
点赞2
打赏
分享
最新回复 (36)
雪    币: 711
活跃值: (243)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mydvdf 2020-6-19 10:20
26
0
我就来吃个瓜
雪    币: 0
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
omen 2020-8-7 15:38
27
0
win7 x64,在内核一调用NtTraceControl就蓝屏 楼主是咋解决的,求教。
雪    币: 12837
活跃值: (8998)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
hzqst 3 2020-8-7 18:03
28
0
omen win7 x64,在内核一调用NtTraceControl就蓝屏 楼主是咋解决的,求教。
ZwTraceControl
雪    币: 0
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
omen 2020-8-7 22:49
29
0
hzqst ZwTraceControl
win7 内核层没有 ZwTraceControl  只有 ntdll 有,切换到用户层调用?
雪    币: 12837
活跃值: (8998)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
hzqst 3 2020-8-7 23:47
30
0
omen win7 内核层没有 ZwTraceControl 只有 ntdll 有,切换到用户层调用?
没导出,自己想办法定位
雪    币: 1330
活跃值: (3667)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
黑手鱼 3 2020-8-20 17:08
31
0
hzqst ZwTraceControl
奈斯大表哥,刚好遇到这个问题没解决
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_暮光之眼 2022-1-16 15:20
32
0
flarejune 当时发现KeAttachProcess不给使用的时候,马上就测试了KeStackAttachProcess,一样不可以了的. 我知道是微软禁止使用了,但是楼主说测试正常使用,我就懵逼了,我严重怀疑他 ...

为什么不能用,系统自己就使用这些api,360核晶初始化的时候也attach到csrss里找shadowssdt的空间

最后于 2022-1-16 16:39 被wx_暮光之眼编辑 ,原因:
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_暮光之眼 2022-1-16 18:22
33
0

null

最后于 2022-1-16 21:24 被wx_暮光之眼编辑 ,原因:
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_暮光之眼 2022-1-16 18:27
34
0
tmflxw 大表哥已经说的很清楚了,微软都不让用KeAttachProcess了,KeStackAttachProcess试
怎么可能不让用了,不要人云亦云
雪    币: 411
活跃值: (1170)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
foxkinglxq 2023-12-2 16:35
35
0
flarejune 现在要获取SSDSHADOW,可以使用倒推的方式计算出来,在infinityhook里面判断CallNumber,发现大于0x1000的,就是UserCall,根据CallNumber和当前的Func ...

倒查   倒底是从哪个函数那里hook   的  看了一天的代码没有搞明白

// 我们的替换函数,针对的是从Win7到Win10 1909的系统
	unsigned long long self_get_cpu_clock()
	{
		// 放过内核模式的调用
		if (ExGetPreviousMode() == KernelMode) return __rdtsc();

		// 拿到当前线程
		PKTHREAD current_thread = (PKTHREAD)__readgsqword(0x188);

		// 不同版本不同偏移
		unsigned int call_index = 0;
		if (g_build_number <= 7601) call_index = *(unsigned int*)((unsigned long long)current_thread + 0x1f8);
		else call_index = *(unsigned int*)((unsigned long long)current_thread + 0x80);

		// 拿到当前栈底和栈顶
		void** stack_max = (void**)__readgsqword(0x1a8);//底(大地址)
		void** stack_frame = (void**)_AddressOfReturnAddress();  

		// 开始查找当前栈中的ssdt调用
		for (void** stack_current = stack_max; stack_current > stack_frame; --stack_current)
		{
			/* 栈中ssdt调用特征,分别是
			*   mov [rsp+48h+var_20], 501802h
			*   mov r9d, 0F33h
			*/
#define INFINITYHOOK_MAGIC_1 ((unsigned long)0x501802)
#define INFINITYHOOK_MAGIC_2 ((unsigned short)0xF33)

			// 第一个特征值检查
			unsigned long* l_value = (unsigned long*)stack_current;
			if (*l_value != INFINITYHOOK_MAGIC_1) continue;

			// 这里为什么减?配合寻找第二个特征值啊
			--stack_current;

			// 第二个特征值检查
			unsigned short* s_value = (unsigned short*)stack_current;
			if (*s_value != INFINITYHOOK_MAGIC_2) continue;

			// 特征值匹配成功,再倒过来查找
			for (; stack_current < stack_max; ++stack_current)
			{
				// 检查是否在ssdt表内
				unsigned long long* ull_value = (unsigned long long*)stack_current;
				if (!(PAGE_ALIGN(*ull_value) >= g_syscall_table && PAGE_ALIGN(*ull_value) < (void*)((unsigned long long)g_syscall_table + (PAGE_SIZE * 2)))) continue;

				// 现在已经确定是ssdt函数调用了
				// 这里是找到KiSystemServiceExit
				void** system_call_function = &stack_current[9];

				// 调用回调函数
				if (g_fptr) g_fptr(call_index, system_call_function);   //【这里调用回调】

				// 跳出循环
				break;
			}

			// 跳出循环
			break;
		}

		// 调用原函数
		return __rdtsc();
	}


雪    币: 22
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
龙乎 2023-12-2 18:00
36
0
foxkinglxq 倒查 &nbsp; 倒底是从哪个函数那里hook &nbsp; 的 &nbsp;看了一天的代码没有搞明白//&nbsp;我们的替换函数,针对的是从Win7到Win10& ...
你自己都不去内核调试看堆栈内容怎么可能单凭别人的描述就能看懂,有趣
雪    币: 411
活跃值: (1170)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
foxkinglxq 2023-12-5 16:16
37
0
龙乎 你自己都不去内核调试看堆栈内容怎么可能单凭别人的描述就能看懂,有趣
要知道在哪个地方看才行  怎么会没有看呢?    
游客
登录 | 注册 方可回帖
返回