安全HOOK的小技巧
网上很多hook代码,尤其是Obxxxxxx系列函数,它们很邪恶,一旦hook得好,可如入无人之境,这点我深有体会啊,但是同时它们调用频繁,比如 ObReferenceObjectByxxxxxx,基本上windows的每一个操作,都会调用它。比如就简单的一个双击一下记事 本,ObReferenceObjectByxxxxxx已经被调用了,所以在进行hook的时候,如果功力不深,就容易造成BSOD。
一般如果是我在动这些蛋糕的时候,我都会注意如下几个方面:
1,一个强大的汇编引擎,一个强大的引擎必不可少
2,#pragma LOCKEDCODE
3,
CurrentIRQL = KeGetCurrentIrql(); if(CurrentIRQL>APC_LEVEL) { return Status; }
4,在你的Fake_XXXXX内部,如果是指针类的变量,用最好先if下吧
其中最主要的还是IRQL问题,如果在Fake_XXXXX内部没有判断,而又调用_strcmpi等之类函数来做符合条件的判断的话,BSOD是必然 的,这些函数是无法在>=DISPATCH_LEVEL的级别上运行。所以如果当前IRQL>=DISPATCH_LEVEL的话,乖乖返回 吧,我就吃过这样的亏,搞了几天,后经高人指点 ^.^
我记得mj说过的一句话:hook的最高境界是,即使自己失败,也不要让别人崩溃!膜拜下~
作者:asm
【你可能还喜欢这些文章:】











