首页
论坛
课程
招聘
[求助][求助]KeLowerIrql总是失败
2010-6-12 11:13 4253

[求助][求助]KeLowerIrql总是失败

2010-6-12 11:13
4253
RtlCopyMemory(OriginalHead2,(PVOID)0x8053e621,5);
*(ULONG *)(ReplaceHead2+1)=(ULONG)FakeKiFastCallEntry-(0x8053e621+5);
KIRQL Irql;
ULONG Cr0Value;
Irql=KeGetCurrentIrql();
if (Irql<=DISPATCH_LEVEL)
{

  _asm
  {
  push eax
  mov eax,cr0;
  mov Cr0Value,eax
  and eax,0fffeffffh
  mov cr0,eax
  pop eax
  }
    
  Irql=KeRaiseIrqlToDpcLevel();
  RtlCopyMemory((PVOID)0x8053e621,ReplaceHead2,5);
  KeLowerIrql(Irql);
  _asm
  {
    push eax
    mov eax,Cr0Value;
    mov cr0,eax;
    pop eax

  }    
}

上面代码中调用KeLowerIrql(Irql);这句失败,报错访问异常。
这段代码在Hook,另一个Ob函数时候并没有问题,但是不知道为什么patch 这个函数时候KeLowerIrql
总是失败。难道跟patch哪个函数还有影响?
求前辈指点下,在此先谢谢了!~~~~~~~

[注意] 欢迎加入看雪团队!base上海,招聘安全工程师、逆向工程师多个坑位等你投递!

收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 47
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
游猎夕阳 活跃值 1 2010-6-12 16:29
2
0
刚测试了下,发现应该是RtlCopyMemory((PVOID)0x8053e621,ReplaceHead2,5);
这句导致的,把这句改成写别的函数头就没问题。是硬编码的问题吗?
我硬编码了一下要patch的地方,这样做难道会导致什么问题?
雪    币: 47
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
游猎夕阳 活跃值 1 2010-6-12 17:05
3
0
额找到原因了,kelowerIrql从DpcLevel降低到passive,应该是触发了线程调度程序,而调度程序正好要调用kifastcallentry,而我的fakekifastcallentry里面出错了,所以挂了............
游客
登录 | 注册 方可回帖
返回