|
作者:Tesla.Angela
内核IAT HOOK的差别,跟RING3的IAT HOOK差别有点大。在教程的RING3 IAT HOOK代码里,我修改的是『导入表』。但是在内核IAT HOOK里,我修改的是『导入函数地址表』。虽然只差了两个字,但却是完全不同的东西。『导入表』有很复杂的结构,但『导入函数地址表』却只是一个有限长度的SIZE_T数组。也就是说,要实现HOOK的话,不需要计算偏移地址,直接找到记录原始地址的地方,然后直接填写代理函数的地址即可,类似于WIN32的SSDT HOOK。为什为我在RING0要修改『导入函数地址表』呢?因为这个导入表很有可能在驱动加载后就被抛弃了。但是『导入函数地址表』是一直存在的。至于IAT HOOK有什么用,我只能说用处不太大,只见过360在WIN7X64上HOOK WIN32K.SYS导入表的ntoskrnl!KeUserModeCallback实现主动防御。在WIN8X64以及之后的系统,PATCHGUARD保护了包括WIN32K.SYS在内的驱动,PATCH WIN32K.SYS也会导致蓝屏。所以360就没有在WIN8X64上这么做了。
|
|