RootKit hook之[二] SSDT hook.docx
文本预览下载声明
标题:?【原创】RootKit hook之[二] SSDT hook作者:?combojiang时间:?2008-01-12,23:00:47链接:?/showthread.php?t=58199哈,好大一场雪啊,2008年的第一场雪,比以往来得早些。外面的雪在下,透过书房的窗,欣赏着外面的雪和过往的车辆,欣赏之余,便有了想写点东西的冲动。于是便有了本篇。谈到ssdt?hook,先前有堕落天才的一篇文章《/showthread.php?p=285856#poststop]SSDT?Hook的妙用-对抗ring0?inline?hook》大家如果对基本概念不了解的话,可以看看这篇文章。另外,有一篇博客上也绘声绘色的描述了它。简单说说SSDT。今天我们透过一个实例看看它的应用,这个实例来源于sudami前面发出的一篇文章一VBS病毒过IS和微点了,无语...,夜深人静,我便把里面的Swk0217.sys逆向来看,写得很不错。该病毒是vbs调用驱动完成的。swk0217d的主要功能是:1。获取ssdt函数个数2。获取ssdt函数表中的所有函数3。hook?ZwQuerySystemInformation4。unhook?ZwQuerySystemInformation5。根据用户给定的函数地址和ssdt表中的索引,修改ssdt表。注:1)其中在hook?ZwQuerySystemInformation执行时,首先通过ZwQuerySystemInformation找出ntosknrl.exe?模块的内存加载位置,然后通过ntosknrl.exe的导出表找出函数NtQuerySystemInformation的地址。然后hook?ZwQuerySystemInformation。各位看官,作者的主要目的是防止SSDT中该函数被挂钩,因此作者在这里做了恢复.病毒作者要使用这个函数,但是害怕这个函数已经被别人做了手脚。2)unhook?ZwQuerySystemInformation时,作者使用完该函数后又恢复了ssdt原有的状态。.386.model?flat,stdcalloption?casemap:noneinclude?w2k\ntstatus.incinclude?w2k\ntddk.incinclude?w2k\ntoskrnl.incincludelib?C:\RadASM\masm32\lib\w2k\ntoskrnl.libinclude?Swk0207.inc.dataunk_10B80?db??4Eh?;?N??????????db??0E6h??;????????????db??40h??;?@??????????db??0BBh??;??OldSSDTValueOfZwQuerySystemInformation?dd?0.code;??????????????6E?74?6F?73?6B?72?6E?6C?2E?65?78?65?00?CC?6A?24?=?ntoskrnl.exe,0???int3??push?24hFunctionArray?dd?736F746Eh,?6C6E726Bh,?6578652Eh,246ACC00h;***********************************************************************************************;?ZwQuerySystemInformation获取ntoskrnl.exe的内存加载地址;***********************************************************************************************;typedef?struct?_SYSTEM_MODULE_INFORMATION??//?Information?Class?11;{;????ULONG??Reserved[2];??+0;????PVOID??Base;?????????+08h;????ULONG??Size;?????????+0ch;????ULONG??Flags;????????+10h;????USHORT?Index;????????+14h;????USHORT?Unknown;??????+16h;????USHORT?LoadCount;????+18h;????USHORT?ModuleNameOffset;?+1Ah;????CHAR???ImageName[256];???+1Ch;}?SYSTEM_MODULE_INFORMATION,?*PSYSTEM_MODULE_INFORMATION;;typedef?
显示全部