首页
社区
课程
招聘
[求助]dump文件显示很诡异 MJ解释下为何重入APC
发表于: 2009-7-20 14:45 34413

[求助]dump文件显示很诡异 MJ解释下为何重入APC

2009-7-20 14:45
34413
收藏
免费 7
支持
分享
最新回复 (117)
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
26
哦  那我这边一样呢 而且我线程地址跟Xuetr有一个不一样
2009-7-20 17:08
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
27
我是GetprocAddress定位的
2009-7-20 17:09
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
28
错误的函数地址就是你的RING3程序的问题了,你也可以将RING3的程序和获取代码贴上来看看
2009-7-20 17:09
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
29
handle=LoadLibrary("ntoskrnl.exe");   //得到加载模块基址
address=(ULONG)GetProcAddress(handle,"KeInsertQueueApc")-(ULONG)handle; //得到偏移地址
FreeLibrary(handle);
2009-7-20 17:10
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
30
address+NtoskerlBase 不就是函数地址了 这样避开了inline
2009-7-20 17:11
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
31
我写了一段代码来验证你的这个问题,同样使用LoadLibraryEx+GetProcAddress 获得地址,用的EXE是你那台崩溃的机器同样版本的,得到的结果是正确的:

        HMODULE hlib = LoadLibraryEx("C:\\mysyms\\ntkrnlpa.exe\\42250A1D1f6100\\ntkrnlpa.exe" , 0, DONT_RESOLVE_DLL_REFERENCES);
        PVOID pAddr = GetProcAddress(hlib , "KeInsertQueueApc");
        ULONG Offset = (ULONG)pAddr - (ULONG)hlib ;
        printf("%08x\n" , Offset);

结果0x23704

+ntoskrnl base (804d8000 ) = 804fb704

kd> u 804FB704
nt!KeInsertQueueApc:
804fb704 8bff            mov     edi,edi
804fb706 55              push    ebp
804fb707 8bec            mov     ebp,esp
804fb709 83ec0c          sub     esp,0Ch
804fb70c 53              push    ebx
804fb70d 56              push    esi
804fb70e 57              push    edi
804fb70f 8b7d08          mov     edi,dword ptr [ebp+8]

但是从DUMP上看,你的RING3程序传入的偏移却是0xE411
要不是你获取错了地址,就是传送给RING3时传错了
2009-7-20 17:15
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
32
另外你这样并不能避开对KeInsetQueueApc的inline hook
2009-7-20 17:16
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
33
邪门了 函数地址没错啊
2009-7-20 17:19
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
34
在那台崩溃机器上是错的
2009-7-20 17:19
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
35
MJ太敬业,越来越照顾小菜了~
2009-7-20 17:20
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
36
e411是我R3获取的啊
2009-7-20 17:23
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
37
观察出错的线程,可知你这个KILL PROCESS BY APC的DEVICE IO CONTROL正在执行

kd> !thread
GetPointerFromAddress: unable to read from 80558bb4
THREAD 8155d020  Cid 05b8.0240  Teb: 7ffdf000 Win32Thread: e1079330 RUNNING on processor 0
IRP List:
    8159d388: (0006,0094) Flags: 00000030  Mdl: 00000000
Not impersonating
GetUlongFromAddress: unable to read from 80558bc4
Owning Process            0       Image:         <Unknown>
Attached Process          8157d688       Image:         Project1.exe
ffdf0000: Unable to get shared data
Wait Start TickCount      48082        
Context Switch Count      708                 LargeStack
ReadMemory error: Cannot get nt!KeMaximumIncrement value.
UserTime                  00:00:00.000
KernelTime                00:00:00.000
Win32 Start Address 0x004013f0
Start Address 0x7c810665
Stack Init f796e000 Current f796d724 Base f796e000 Limit f7968000 Call 0
Priority 10 BasePriority 8 PriorityDecrement 0 DecrementCount 16
ChildEBP RetAddr  Args to Child              
f796dbbc f9ca01e4 815ecda0 0000e411 8155d230 nt!CcSetFileSizes+0x16b (FPO: [2,8,4])
WARNING: Stack unwind information not available. Following frames may be wrong.
f796dc34 804eedf9 8165f778 8159d388 806d12d0 Listprocess+0x31e4
f796dc44 80574b3a 8159d3f8 8153af90 8159d388 nt!IopfCallDriver+0x31 (FPO: [0,0,0])
f796dc58 805759c9 8165f778 8159d388 8153af90 nt!IopSynchronousServiceTail+0x60 (FPO: [7,0,4])
f796dd00 8056e326 000000b8 00000000 00000000 nt!IopXxxControlFile+0x5e7 (FPO: [Non-Fpo])
f796dd34 8053d808 000000b8 00000000 00000000 nt!NtDeviceIoControlFile+0x2a (FPO: [10,0,0])
f796dd34 7c92eb94 000000b8 00000000 00000000 nt!KiFastCallEntry+0xf8 (FPO: [0,0] TrapFrame @ f796dd64)
0012fca4 00000000 00000000 00000000 00000000 0x7c92eb94

当前IRP为8159d388
kd> !irp 8159d388
Irp is active with 1 stacks 1 is current (= 0x8159d3f8)
No Mdl: System buffer=81744bf8: Thread 8155d020:  Irp stack trace.  
     cmd  *** cl Device   File     Completion-Context
>[  e, 0]   5  0 8165f778 8153af90 00000000-00000000   
              8165f778: Could not read device object or _DEVICE_OBJECT not found

                        Args: 00000000 00000008 00222020 00000000

System buffer=81744bf8

这个被传入你的KillProcessByApc函数,是函数的第二个参数,看异常时第二个参数即ebp+c
kd> dd ebp+c
f796dbc8  0000e411 8155d230 815e6da0 00000000
f796dbd8  000000d8 f796dbec 00000000 f796dc44
f796dbe8  8055b6c0 80545461 0000000c 00000000
f796dbf8  8153af90 00000000 8163f1e0 0000001c
f796dc08  0000e411 815ecda0 f796dc34 80604229
f796dc18  00222020 00000008 c0000010 81744bf8
f796dc28  8159d3f8 81744bf8 00000000 f796dc58
f796dc38  804eedf9 8165f778 8159d388 806d12d0

可知你传入了错误的offset 0xe411
2009-7-20 17:24
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
38
非常感谢  热泪盈眶
2009-7-20 17:24
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
39
0xe411就是错误的
2009-7-20 17:24
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
40
handle=LoadLibrary("ntoskrnl.exe");   //得到加载模块基址
address=(ULONG)GetProcAddress(handle,"KeInsertQueueApc")-(ULONG)handle; //得到偏移地址
FreeLibrary(handle);
这样写对吧 他咋就获取的就是e411
2009-7-20 17:26
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
41
你的这个机器开启了PAE(物理地址扩展),因此其内核文件并不是ntoskrnl.exe,而是ntkrnlpa.exe

看来这应该就是你这个错误的根源了
2009-7-20 17:27
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
42
e411的确是错误的  
("ntoskrnl.exe");   是不是这里不能这么写
2009-7-20 17:27
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
43
恩 应该是这里
2009-7-20 17:27
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
44
是这个问题  感谢MJ  还得继续学习啊
2009-7-20 17:31
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
发现竹君


MJ的功力 深不可测
2009-7-20 17:50
0
雪    币: 615
活跃值: (1227)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
46
......................................
2009-7-20 17:51
0
雪    币: 1040
活跃值: (1293)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
一个小小的100K DUMP就能看出这么多……我等只能膜拜MJ……
2009-7-20 17:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
赞 MJ 的技术和精神
2009-7-20 18:01
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
49
来膜拜一下偶像
2009-7-20 18:02
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
50
这贴得膜拜下MJ
2009-7-20 18:04
0
游客
登录 | 注册 方可回帖
返回
//