FSD's Inline Hook & EAT modify check Completed

来源:互联网 发布:现在在淘宝开店晚吗 编辑:程序博客网 时间:2024/05/22 12:54

 

 瞎折腾个半天,太菜, 之前也没怎么搞过检测程序,于是匆匆逆了下几个无壳的ARK,结合R3和R0,加上自己的一些总结,胡弄了个DEMO. 目前仅仅是遍历检测ntoskrnl.exe' EAT(没加SSDT), 对于fastfat.sys/ntfs.sys/disk.sys等模块还没有检测,不过弄起来也很快, 支持对未导出函数 、Push+ret 等的HOOK检测,不过很脆弱,后期继续加强检测算法,eg:非分页内存,多级跳,XX...

 

<1.> 文件系统有几个模块:ntfs.sys/fastfat.sysatapi.sysdisk.sys(无分发例程) ...

检测思路如下:
驱动加载(还原一些HOOK),将系统的部分重要模块(eg.ntoskrnl/disk.sys/...)拷贝到TMP目录中
分析PE文件,重定位后获得各个模块的Origal dispath address,保存至全局变量中.R3在scan时发
IOCTL(随机)得到这些原始地址,和当前的内存地址对比分析,结合一些引擎和算法,得到inline hook
的情况.

效果如图:

ps: 调试中发现:
1. 有些时候发IOCTL,自定义函数不会执行,因为此时不是系统进程.即使attach到Winlogon.exe等
系统进程,再调用某些函数,依然不行.具体原因俺也不是很清楚,于是乎只好在DriverEntry处调用
某些自定义函数...

2. 遇到错误,要学会快速的锁定出错位置,逐渐缩小搜索范围...总之,调试过程中也能提高积累不少
经验(不过VS 2005中 偶基本只会F5->F9/F10 =.-|)

----------------------------------------------------------------------------------------------------------

<2.> 玩了几天游戏,又写了点儿代码,增加了对ntoskrnl' EAT Modify的检测,思路很简单,遍历内存中该模块的EAT,和PE重定位后的进行比较. 地址不相同,即使EAT HOOK,显示出来即可:

<3.> 接着就是遍历每个进程的IAT,对其中一些重要的DLL进行检测,是否存在IAT HOOK,思路同上,只是效率问题,还有就是要确保所有的隐藏DLL得揪出来;遍历其他模块[eg.sys]的IAT...

<4.> INT系列、ObJect hook、attached Device等等

 

 

 

有些时候发IOCTL,自定义函数不会执行,因为此时不是系统进程.即使attach到Winlogon.exe等
系统进程,再调用某些函数,依然不行.具体原因俺也不是很清楚,

attach到winlogon和不attach有什么区别?

倒是开个SystemThread(PsCreateSystemThread)在SystemThread里面执行会有区别

 

tem 进程貌似是不能 attach 的. 会产生 INVALID_PROCESS_ATTACH_ATTEMPT 的 bugcheck

另外, original dispatch routine 是从 DriverEntry 中获得的吗?

 

从PE文件搜索即可,然后重定位.

对于IAT,扫描起来就简单了

 

原创粉丝点击