首页
社区
课程
招聘
[求助]通过INLINEHOOK恢复IDT表导致蓝屏(现在能写了不过本世纪最奇怪的就是这个代码了)
发表于: 2009-8-28 22:00 19533

[求助]通过INLINEHOOK恢复IDT表导致蓝屏(现在能写了不过本世纪最奇怪的就是这个代码了)

2009-8-28 22:00
19533
收藏
免费 0
支持
分享
最新回复 (37)
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SIP
26
我HOOK  KeInitializeDpc遇到问题了,先放下来了。

你提到的hook keDelayXXX和KeWaitForxxx这两个函数,怎么判断呢?
KeDelayExecutionThread ( IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Interval )

作用就是延时;网上找的。如果说HOOK它那么我怎么判断是否是XXX驱动调用他呢?
或者你的想法是在调用KeDelayXXXX的时候把时间改长点,
有或者是在调用KeDelayXXX的时候把恢复被HOOK的地址,KeDelayXXX完成后把原来的HOOK写回去,让他检测不出来?我的理解是KeDelayXXX后,驱动保护才检测的(但是同样还是不能判断是不是我要HOOK的驱动呀!)

KeWaitForxxx:
这个有点复杂了,
KeWaitForSingleObject ( IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL )

第一个参数是对象,从这个对象又怎么判断呢,怎么HOOK呢?
直接设置信号?

因为驱动是SMC多层加密的,本人不会脱所以只能当黑盒分析,大家提到的意见我都会一个一个得实验,哈哈!
2009-9-17 16:46
0
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SIP
27
还是说下我HOOK KeInitializeDpc遇到的问题吧,这个问题应该是个编程为问题,如果大家遇到过可能就可以给我答案了。
处理函数是这样的
VOID __stdcall MyKeInitializeDpc ( PRKDPC Dpc,
                                                                        PKDEFERRED_ROUTINE DeferredRoutine,
                                                                        PVOID DeferredContext )
{
如果注释掉下面IF语句那么,驱动可以安全运行,
如果使用这两个判断语句一运行驱动就直接蓝了;
GetModuleBase函数应该没有问题,因为我在HOOK PsCreateSystemThread的时候也用这个函数
没有任何问题。
所以我也不知道哪里出错了!
                if(STATUS_SUCCESS == GetModuleBase("XXXX.sys"))
                {

                if(g_ModuleBase.Base<(ULONG)DeferredRoutine && (ULONG)DeferredRoutine<g_ModuleBase.End)
                        DbgPrint("定时函数地址:%08x\n",DeferredRoutine);
                }
                (unsigned long)Dpc->Lock &= 0;
                Dpc->DeferredRoutine= DeferredRoutine;
                Dpc->DeferredContext = DeferredContext;
                Dpc->Type = 0x13;
                Dpc->Number = 0x0;
                Dpc->Importance = 0x1;
}
2009-9-17 16:53
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
28
1.看返回地址啊~
2.DbgPrint是个不和谐的函数~
2009-9-17 20:18
0
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SIP
29
今天逆了下IoInitializeTimer  ,IoStartTimer,IoStopTimer发现他们和驱动设备有关,然后读取驱动设备的Timer,发现没有I0定时器。
不知道检测IO定时器这样做行了没?

接下来到DPC定时器了,最后才到KEWAITXXX,KEDELAYXXXX
我想可能就如cvcvxk说的那样是用KEWAITXXX,或者KEDELAYXXXX来等待了。

自动关机的周期是2分钟左右不知道最有可能是是哪个方法。

CVCVXK你上面获得的是I0定时器的LIST_ENTRY吗?

你看看,这里我想直接读取应该是可以的

nt!IoInitializeTimer+0x40:
805bd9de 8b450c           mov     eax,[ebp+0xc]
805bd9e1 89420c           mov     [edx+0xc],eax
805bd9e4 8b4510           mov     eax,[ebp+0x10]
805bd9e7 894210           mov     [edx+0x10],eax
805bd9ea 68a42e5580       push    0x80552ea4
805bd9ef 83c204           add     edx,0x4
805bd9f2 b9e0995580       mov     ecx,0x805599e0 //这里就是链表的头
805bd9f7 e83864f2ff       call    nt!ExfInterlockedInsertTailList (804e3e34)
只要读取了链表头然后遍历就好了。
不知道我说得对不对
2009-9-18 21:53
0
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SIP
30
做人要厚道,我已经 知道了他重启的原因,特来告诉CVCVXK,
顺便膜拜下CVCVXK大牛!
感谢CVCVXK大牛长时间的指导!

重启的原因是R3中的程序调用自己的中断,检测,如果被XXX了就重启了。
特想要CVCVXK大牛说的Ring3的Timer,俄鬼子的我不会看!
2009-9-20 16:04
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
31
定时器 IopTimerQueueHead。。。发现YAS KIT已经好久没更新了。。
2009-9-20 16:19
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
32
未导出物品,唉,不爽~
2009-9-20 17:01
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
33
晕,你可以用Google翻译,把俄文变英文~
2009-9-20 17:02
0
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SIP
34
VXK老大你给我的获取时钟的代码,很蓝!
2009-9-24 20:35
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
35
看来驱动保护越来越牛了
2009-9-26 15:17
0
雪    币: 135
活跃值: (76)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
V大很热心,楼主很努力.
向两位大牛学习
2009-9-27 10:44
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
37
~~吼吼~ 这个真乐呀
2009-12-7 16:57
0
雪    币: 89
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
这个帖子在两位牛之间来回传递  火了!
2010-1-13 18:09
0
游客
登录 | 注册 方可回帖
返回
//