能力值:
( LV12,RANK:210 )
51 楼
Map Fastfat.SYS:
Image region 1f880:2180 does not fit in mapping
*** WARNING: Unable to verify timestamp for Listprocess.sys
Probably caused by : Listprocess.sys ( Listprocess!KernelKillThreadRoutine+39 )
能力值:
( LV12,RANK:210 )
52 楼
STACK_COMMAND: kb
FOLLOWUP_IP:
Listprocess!KernelKillThreadRoutine+39 [d:\sysdog\listprocess\listprocess.c @ 902]
f77f96d9 ?? ???
FAULTING_SOURCE_CODE:
898: {
899: *ThreadFlags=(*ThreadFlags) | PS_CROSS_THREAD_FLAGS_SYSTEM; //DT???a?¦Ì¨ª3¨¨¡§?T
900: PsTerminateSystemThread(STATUS_SUCCESS); //?¨¢¨º???3¨¬
901: }
> 902: }
903:
904: ULONG GetKtosKerlAddress()
905: {
906: NTSTATUS status;
907: PVOID buffer; SYMBOL_STACK_INDEX: 6
SYMBOL_NAME: Listprocess!KernelKillThreadRoutine+39
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: Listprocess
IMAGE_NAME: Listprocess.sys
BUCKET_ID: WRONG_SYMBOLS
Followup: MachineOwner
---------
能力值:
( LV12,RANK:210 )
53 楼
显示 } 一行错误
能力值:
( LV12,RANK:210 )
54 楼
这次函数地址没错 不知道什么原因呢?
能力值:
( LV12,RANK:210 )
55 楼
杀冰刃就蓝屏呢
能力值:
( LV12,RANK:420 )
56 楼
没DUMP光贴那点东西不行
能力值:
( LV12,RANK:210 )
57 楼
上传DUMP
能力值:
( LV12,RANK:210 )
58 楼
虚拟机测试杀冰刃蓝屏
本机杀任何进程都蓝屏
能力值:
( LV12,RANK:420 )
59 楼
APC重入导致堆栈溢出了。
这些东西不是想当然的乱调用就可以的
能力值:
( LV12,RANK:210 )
60 楼
APC重入是什么意思呢?不是往线程插入一个特殊内核模式APC例程 线程就执行APC例程 调用PsTerminateSystemThread结束自己
能力值:
( LV12,RANK:1010 )
61 楼
呵呵,重入问题,我原来弄APC时没遇到过~~~~
MJ的回答很细致,值得大家学习~
能力值:
( LV12,RANK:210 )
62 楼
怎样修改才不会导致APC重入呢
能力值:
( LV12,RANK:210 )
63 楼
大家都要向MJ学习啊
能力值:
( LV12,RANK:1010 )
64 楼
这个帖子 应该标记为"关注" ,供后来者参考学习~
能力值:
( LV12,RANK:300 )
65 楼
看到第二页我就猜是楼主内核文件找错了(不是ntoskrnl.exe而是ntkrnlpa.exe)翻到第三页果然如此
能力值:
( LV12,RANK:300 )
66 楼
从堆栈上看是:
Listprocess!KernelKillThreadRoutine ->PsTerminateSystemThread->PspTerminateThreadByPointer->PspExitThread->hal!HalRequestSoftwareInterrupt->hal!HalpApcInterrupt->KiDeliverApc->Listprocess!KernelKillThreadRoutine ->........
KiDeliverApc中循环处理所有Kernel Mode APCs,这其中导致重入:
804fdf35 64a124010000 mov eax,dword ptr fs:[00000124h]
804fdf3b 8bf0 mov esi,eax ; ptr _KTHREAD
804fdf65 8d5e34 lea ebx,[esi+34h] ; ptr _KTHREAD.ApcState.ApcListHead[0].Flink
804fdf68 e9e1000000 jmp nt!KiDeliverApc+0x142 (804fe04e)
804fe04e 391b cmp dword ptr [ebx],ebx ; Flink=自身?
804fe050 0f8517ffffff jne nt!KiDeliverApc+0x61 (804fdf6d)
804fdf6d 8b03 mov eax,dword ptr [ebx] ; Flink
804fdf6f 8d78f4 lea edi,[eax-0Ch] ; ptr _KAPC
804fdf72 8b4f14 mov ecx,dword ptr [edi+14h] ; _KAPC.KernelRoutine(==Listprocess!KernelKillThreadRoutine)
804fdf75 894dec mov dword ptr [ebp-14h],ecx
804fdf78 8b4f1c mov ecx,dword ptr [edi+1Ch] ; _KAPC.NormalRoutine
804fdf7b 85c9 test ecx,ecx
804fdf7d 894dfc mov dword ptr [ebp-4],ecx
804fdf80 8b5720 mov edx,dword ptr [edi+20h] ; _KAPC.NormalRoutine
804fdf83 8955f0 mov dword ptr [ebp-10h],edx
804fdf86 8b5724 mov edx,dword ptr [edi+24h] ; _KAPC.SystemArgument1
804fdf89 8955f4 mov dword ptr [ebp-0Ch],edx
804fdf8c 8b5728 mov edx,dword ptr [edi+28h] ; _KAPC.SystemArgument2
804fdf8f 8955f8 mov dword ptr [ebp-8],edx
......
804fdfab 8d45f8 lea eax,[ebp-8]
804fdfae 50 push eax
804fdfaf 8d45f4 lea eax,[ebp-0Ch]
804fdfb2 50 push eax
804fdfb3 8d45f0 lea eax,[ebp-10h]
804fdfb6 50 push eax
804fdfb7 8d45fc lea eax,[ebp-4]
804fdfba 50 push eax
804fdfbb 57 push edi
804fdfbc ff55ec call dword ptr [ebp-14h] ; call Listprocess!KernelKillThreadRoutine!!重入了。
能力值:
( LV12,RANK:210 )
67 楼
为什么会导致APC例程重入呢?
能力值:
( LV12,RANK:210 )
68 楼
KeInitializeApc(ExitApc,
ethread, //线程
OriginalApcEnvironment,
KernelKillThreadRoutine, //APC例程
NULL,
NULL,
KernelMode,
NULL);//为线程初始化APC
status=KeInsertQueueApc(ExitApc,NULL,NULL,0); //插入Apc到线程队列
能力值:
( LV12,RANK:300 )
69 楼
我也没明白,等待MJ解释
能力值:
( LV12,RANK:210 )
70 楼
等待MJ解释
能力值:
( LV3,RANK:20 )
71 楼
重入:在原函数Fun又递归调用原函数Fun
你的代码怎么会在KiDeliverApc又调用Listprocess!KernelKillThreadRoutine (可以看看漫谈里面的APC)
仔细看看代码,有些错误是很隐蔽的
跟着学习.
能力值:
( LV3,RANK:20 )
72 楼
看了一下漫谈,上面说NormalRoutine才指向请求者提供的函数
KernelRoutine在NormalRoutine为NULL的时候无条件调用.所以你的代码就重入了
NormalRoutine为非0时,先调用KernelRoutine,NormalRoutine作为参数传递下去
能力值:
( LV3,RANK:20 )
73 楼
毛很强大啊,找到工作之后第一时间就买本Windows情景分析.
能力值:
( LV12,RANK:210 )
74 楼
就是说这个初始化是错的
KeInitializeApc(ExitApc,
ethread, //线程
OriginalApcEnvironment,
KernelKillThreadRoutine, //APC例程
NULL,
NULL,
KernelMode,
NULL);//为线程初始化APC
能力值:
( LV12,RANK:210 )
75 楼
NormalRoutine为0,那么实际的模式变成了KernelMode。这是因为在这种情况下没有用户空间APC函数可以执行,唯一将得到执行的是KernelRoutine