能力值:
( LV2,RANK:10 )
|
-
-
26 楼
我就来吃个瓜
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
win7 x64,在内核一调用NtTraceControl就蓝屏 楼主是咋解决的,求教。
|
能力值:
( LV9,RANK:280 )
|
-
-
28 楼
omen
win7 x64,在内核一调用NtTraceControl就蓝屏 楼主是咋解决的,求教。
ZwTraceControl
|
能力值:
( LV2,RANK:10 )
|
-
-
29 楼
hzqst
ZwTraceControl
win7 内核层没有 ZwTraceControl 只有 ntdll 有,切换到用户层调用?
|
能力值:
( LV9,RANK:280 )
|
-
-
30 楼
omen
win7 内核层没有 ZwTraceControl 只有 ntdll 有,切换到用户层调用?
没导出,自己想办法定位
|
能力值:
( LV9,RANK:220 )
|
-
-
31 楼
hzqst
ZwTraceControl
奈斯大表哥,刚好遇到这个问题没解决
|
能力值:
( LV1,RANK:0 )
|
-
-
32 楼
flarejune
当时发现KeAttachProcess不给使用的时候,马上就测试了KeStackAttachProcess,一样不可以了的.
我知道是微软禁止使用了,但是楼主说测试正常使用,我就懵逼了,我严重怀疑他 ... 为什么不能用,系统自己就使用这些api,360核晶初始化的时候也attach到csrss里找shadowssdt的空间
最后于 2022-1-16 16:39
被wx_暮光之眼编辑
,原因:
|
能力值:
( LV1,RANK:0 )
|
-
-
33 楼
null
最后于 2022-1-16 21:24
被wx_暮光之眼编辑
,原因:
|
能力值:
( LV1,RANK:0 )
|
-
-
34 楼
tmflxw
大表哥已经说的很清楚了,微软都不让用KeAttachProcess了,KeStackAttachProcess试
怎么可能不让用了,不要人云亦云
|
能力值:
( LV2,RANK:10 )
|
-
-
35 楼
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();
}
|
能力值:
( LV1,RANK:0 )
|
-
-
36 楼
foxkinglxq
倒查 倒底是从哪个函数那里hook 的 看了一天的代码没有搞明白// 我们的替换函数,针对的是从Win7到Win10& ...
你自己都不去内核调试看堆栈内容怎么可能单凭别人的描述就能看懂,有趣
|
能力值:
( LV2,RANK:10 )
|
-
-
37 楼
龙乎
你自己都不去内核调试看堆栈内容怎么可能单凭别人的描述就能看懂,有趣
要知道在哪个地方看才行 怎么会没有看呢?
|
|
|