能力值:
( LV2,RANK:10 )
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多层加密的,本人不会脱所以只能当黑盒分析,大家提到的意见我都会一个一个得实验,哈哈!
能力值:
( LV2,RANK:10 )
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;
}
能力值:
( LV12,RANK:760 )
28 楼
1.看返回地址啊~
2.DbgPrint是个不和谐的函数~
能力值:
( LV2,RANK:10 )
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)
只要读取了链表头然后遍历就好了。
不知道我说得对不对
能力值:
( LV2,RANK:10 )
30 楼
做人要厚道,我已经 知道了他重启的原因,特来告诉CVCVXK,
顺便膜拜下CVCVXK大牛!
感谢CVCVXK大牛长时间的指导!
重启的原因是R3中的程序调用自己的中断,检测,如果被XXX了就重启了。
特想要CVCVXK大牛说的Ring3的Timer,俄鬼子的我不会看!
能力值:
( LV12,RANK:600 )
31 楼
定时器 IopTimerQueueHead。。。发现YAS KIT已经好久没更新了。。
能力值:
( LV12,RANK:760 )
32 楼
未导出物品,唉,不爽~
能力值:
( LV12,RANK:760 )
33 楼
晕,你可以用Google翻译,把俄文变英文~
能力值:
( LV2,RANK:10 )
34 楼
VXK老大你给我的获取时钟的代码,很蓝!
能力值:
( LV9,RANK:200 )
35 楼
看来驱动保护越来越牛了
能力值:
( LV2,RANK:10 )
36 楼
V大很热心,楼主很努力.
向两位大牛学习
能力值:
( LV9,RANK:200 )
37 楼
~~吼吼~ 这个真乐呀
能力值:
( LV2,RANK:10 )
38 楼
这个帖子在两位牛之间来回传递 火了!