青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

汗~~~瑞星的主動防御

Posted on 2009-10-26 19:13 S.l.e!ep.¢% 閱讀(1465) 評論(0)  編輯 收藏 引用 所屬分類: RootKit
驅動程序開發(fā)網技術社區(qū) -> 反流氓、反木馬和rootkit -> 汗~~~瑞星的主動防御。[打印本頁] 登錄 -> 注冊 -> 回復主題 -> 發(fā)表主題

zjjmj2002 2007-12-09 18:20

別看SSDT上一大堆HOOK

結果連遠程線程都沒防住??? [attachment=18987]

WQXNETQIQI 2007-12-09 19:45
就是這么酷,你去看看金山密保,也沒攔遠線程,哈哈

sudami 2007-12-10 13:02
加個攔截就完事了嘛。 [s:366]

zjjmj2002 2007-12-10 16:02
No,其實并不好防,俺正是因為難以區(qū)分正常的CreateThread和惡意遠程線程才去看殺軟是怎么做的,結果發(fā)現這個Bug的。

wangjianfeng 2007-12-10 16:31
zjjmj2002,你的程序能在vista上順利跑不?

zjjmj2002 2007-12-10 16:46
不知道,俺沒有Vista。

WQXNETQIQI 2007-12-10 17:02
區(qū)分的方法,判斷CurrentProcess & ProcessHandle參數,非常easy~ [s:311]? [s:319]

galihoo 2007-12-10 17:29
兄弟,試試注入svchost、explorer呢

WQXNETQIQI 2007-12-10 17:35
原來樓上是瑞星的,暴露了吧 哈哈哈 [s:310]

zjg1979 2007-12-11 10:55
呵呵,注入CCenter會報警的.

MuseHero 2007-12-11 11:58
引用
引用第8樓WQXNETQIQI于2007-12-10 17:35發(fā)表的? :
原來樓上是瑞星的,暴露了吧 哈哈哈



好厲害的MJ~~ ORZ

ljh1021 2007-12-11 12:36
引用
引用第10樓MuseHero于2007-12-11 11:58發(fā)表的? :



好厲害的MJ~~ ORZ

killvxk 2007-12-11 13:23
[s:314]
ZT一下傳說瑞星主動的一段代碼(不包含處理部分)

#include <ntddk.h>
#include <ntimage.h>
#pragma pack(1)
typedef struct ServiceDescriptorEntry {
? ? unsigned int *ServiceTableBase;
? ? unsigned int *ServiceCounterTableBase; //Used only in checked build
? ? unsigned int NumberOfServices;
? ? unsigned char *ParamTableBase;
} ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t;
#pragma pack()

__declspec(dllimport) ServiceDescriptorTableEntry_t KeServiceDescriptorTable;
#define SYSTEMSERVICE(_function) KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_function+1)]
#define SDT? ? SYSTEMSERVICE
#define KSDT KeServiceDescriptorTable
#define FILE_DEVICE_UNKNOWN? ? ? ? ? ? 0x00000022
#define IOCTL_UNKNOWN_BASE? ? ? ? ? ? ? FILE_DEVICE_UNKNOWN
#define IOCTL_INIT? ? ? ? ? ? ? ? ? ? ? CTL_CODE(IOCTL_UNKNOWN_BASE, 0x0800, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
//補充定義數據及結構
typedef struct _INITIAL_TEB {
PVOID? ? ? ? ? ? ? ? StackBase;
PVOID? ? ? ? ? ? ? ? StackLimit;
PVOID? ? ? ? ? ? ? ? StackCommit;
PVOID? ? ? ? ? ? ? ? StackCommitMax;
PVOID? ? ? ? ? ? ? ? StackReserved;
} INITIAL_TEB, *PINITIAL_TEB;
typedef enum _SYSTEM_INFORMATION_CLASS
{
? ? SystemBasicInformation,
? ? SystemProcessorInformation,
? ? SystemPerformanceInformation,
? ? SystemTimeOfDayInformation,
? ? SystemNotImplemented1,
? ? SystemProcessesAndThreadsInformation,
? ? SystemCallCounts,
? ? SystemConfigurationInformation,
? ? SystemProcessorTimes,
? ? SystemGlobalFlag,
? ? SystemNotImplemented2,
? ? SystemModuleInformation,
? ? SystemLockInformation,
? ? SystemNotImplemented3,
? ? SystemNotImplemented4,
? ? SystemNotImplemented5,
? ? SystemHandleInformation,
? ? SystemObjectInformation,
? ? SystemPagefileInformation,
? ? SystemInstructionEmulationCounts,
? ? SystemInvalidInfoClass1,
? ? SystemCacheInformation,
? ? SystemPoolTagInformation,
? ? SystemProcessorStatistics,
? ? SystemDpcInformation,
? ? SystemNotImplemented6,
? ? SystemLoadImage,
? ? SystemUnloadImage,
? ? SystemTimeAdjustment,
? ? SystemNotImplemented7,
? ? SystemNotImplemented8,
? ? SystemNotImplemented9,
? ? SystemCrashDumpInformation,
? ? SystemExceptionInformation,
? ? SystemCrashDumpStateInformation,
? ? SystemKernelDebuggerInformation,
? ? SystemContextSwitchInformation,
? ? SystemRegistryQuotaInformation,
? ? SystemLoadAndCallImage,
? ? SystemPrioritySeparation,
? ? SystemNotImplemented10,
? ? SystemNotImplemented11,
? ? SystemInvalidInfoClass2,
? ? SystemInvalidInfoClass3,
? ? SystemTimeZoneInformation,
? ? SystemLookasideInformation,
? ? SystemSetTimeSlipEvent,
? ? SystemCreateSession,
? ? SystemDeleteSession,
? ? SystemInvalidInfoClass4,
? ? SystemRangeStartInformation,
? ? SystemVerifierInformation,
? ? SystemAddVerifier,
? ? SystemSessionProcessesInformation
} SYSTEM_INFORMATION_CLASS;
typedef struct _SYSTEM_HANDLE_INFORMATION
{
? ? ULONG? ? ? ? ? ? ProcessId;
? ? UCHAR? ? ? ? ? ? ObjectTypeNumber;
? ? UCHAR? ? ? ? ? ? Flags;
? ? USHORT? ? ? ? ? Handle;
? ? PVOID? ? ? ? ? ? Object;
? ? ACCESS_MASK? ? ? GrantedAccess;
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;

//私有變量
typedef struct _DEVICE_EXTENSION
{
? ? PDEVICE_OBJECT DeviceObject;
? ? PKEVENT Event;

? ? BOOLEAN bPCreate;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;


//? ? 全局設備對象
PDEVICE_OBJECT g_pDeviceObject;

UNICODE_STRING g_RegPath;

//補充定義函數
NTKERNELAPI NTSTATUS ObQueryNameString (
? ? IN PVOID? ? ? ? ? ? ? ? ? ? ? ? Object,
? ? IN OUT PUNICODE_STRING? ? ? ? ? ? Name,
? ? IN ULONG? ? ? ? ? ? ? ? ? ? ? ? MaximumLength,
? ? OUT PULONG? ? ? ? ? ? ? ? ? ? ? ActualLength
);
NTKERNELAPI NTSTATUS ZwSetSecurityObject(
? ? IN HANDLE Handle,
? ? IN SECURITY_INFORMATION SecurityInformation,
? ? IN PSECURITY_DESCRIPTOR SecurityDescriptor
? ? );
NTKERNELAPI NTSTATUS ZwTerminateProcess(
IN HANDLE? ? ? ? ? ? ? ProcessHandle OPTIONAL,
IN NTSTATUS? ? ? ? ? ? ExitStatus );
NTKERNELAPI NTSTATUS ZwOpenProcess(
OUT PHANDLE? ? ? ? ? ? ProcessHandle,
IN ACCESS_MASK? ? ? ? ? AccessMask,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID? ? ? ? ? ClientId );
NTKERNELAPI NTSTATUS ZwOpenThread(
OUT PHANDLE? ? ? ? ? ? ThreadHandle,
IN ACCESS_MASK? ? ? ? ? AccessMask,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID? ? ? ? ? ClientId );
NTKERNELAPI NTSTATUS ZwLoadDriver(
IN PUNICODE_STRING DriverServiceName );
NTKERNELAPI NTSTATUS ZwSetSystemInformation(
IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
IN PVOID? ? ? ? ? ? ? ? SystemInformation,
IN ULONG? ? ? ? ? ? ? ? SystemInformationLength );
NTKERNELAPI NTSTATUS ZwQuerySystemInformation(
IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
OUT PVOID? ? ? ? ? ? ? SystemInformation,
IN ULONG? ? ? ? ? ? ? ? SystemInformationLength,
OUT PULONG? ? ? ? ? ? ? ReturnLength OPTIONAL );


//函數聲明
NTSTATUS DriverEntry(
IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath);
void UnloadDriver(PDRIVER_OBJECT DriverObject);
NTSTATUS DispatchCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS DispatchClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS DispatchIoCtrl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
void StartHook(void);
void RemoveHook(void);
NTSTATUS Hook_ZwWriteFile(
IN HANDLE? ? ? ? ? ? ? FileHandle,
IN HANDLE? ? ? ? ? ? ? Event OPTIONAL,
IN PIO_APC_ROUTINE? ? ? ApcRoutine OPTIONAL,
IN PVOID? ? ? ? ? ? ? ? ApcContext OPTIONAL,
OUT PIO_STATUS_BLOCK? ? IoStatusBlock,
IN PVOID? ? ? ? ? ? ? ? Buffer,
IN ULONG? ? ? ? ? ? ? ? Length,
IN PLARGE_INTEGER? ? ? ByteOffset OPTIONAL,
IN PULONG? ? ? ? ? ? ? Key OPTIONAL );
NTSTATUS Hook_ZwReadFile(
IN HANDLE? ? ? ? ? ? ? FileHandle,
IN HANDLE? ? ? ? ? ? ? Event OPTIONAL,
IN PIO_APC_ROUTINE? ? ? ApcRoutine OPTIONAL,
IN PVOID? ? ? ? ? ? ? ? ApcContext OPTIONAL,
OUT PIO_STATUS_BLOCK? ? IoStatusBlock,
OUT PVOID? ? ? ? ? ? ? Buffer,
IN ULONG? ? ? ? ? ? ? ? Length,
IN PLARGE_INTEGER? ? ? ByteOffset OPTIONAL,
IN PULONG? ? ? ? ? ? ? Key OPTIONAL );
NTSTATUS Hook_ZwSetSystemInformation(
IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
IN PVOID? ? ? ? ? ? ? ? SystemInformation,
IN ULONG? ? ? ? ? ? ? ? SystemInformationLength );
NTSTATUS Hook_ZwQuerySystemInformation(
IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
OUT PVOID? ? ? ? ? ? ? SystemInformation,
IN ULONG? ? ? ? ? ? ? ? SystemInformationLength,
OUT PULONG? ? ? ? ? ? ? ReturnLength OPTIONAL );
NTSTATUS Hook_ZwLoadDriver(
IN PUNICODE_STRING DriverServiceName );
NTSTATUS Hook_ZwSetSecurityObject(
IN HANDLE? ? ? ? ? ? ? ObjectHandle,
IN SECURITY_INFORMATION SecurityInformationClass,
IN PSECURITY_DESCRIPTOR DescriptorBuffer);
NTSTATUS Hook_ZwOpenKey(
? ? OUT PHANDLE KeyHandle,
? ? IN ACCESS_MASK DesiredAccess,
? ? IN POBJECT_ATTRIBUTES ObjectAttributes);
NTSTATUS Hook_ZwCreateKey (
? ? OUT PHANDLE KeyHandle,
? ? IN ACCESS_MASK DesiredAccess,
? ? IN POBJECT_ATTRIBUTES ObjectAttributes,
? ? IN ULONG TitleIndex,
? ? IN PUNICODE_STRING Class OPTIONAL,
? ? IN ULONG CreateOptions,
? ? OUT PULONG Disposition OPTIONAL);
NTSTATUS Hook_ZwSetValueKey(
? ? IN HANDLE KeyHandle,
? ? IN PUNICODE_STRING ValueName,
? ? IN ULONG TitleIndex OPTIONAL,
? ? IN ULONG Type,
? ? IN PVOID Data,
? ? IN ULONG DataSize);
NTSTATUS Hook_ZwDeleteKey(
IN HANDLE KeyHandle);
NTSTATUS Hook_ZwDeleteValueKey(
IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName);
NTSTATUS Hook_ZwOpenSection(
OUT PHANDLE? ? ? ? ? ? SectionHandle,
IN ACCESS_MASK? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes );
NTSTATUS Hook_ZwCreateSection(
OUT PHANDLE? ? ? ? ? ? SectionHandle,
IN ULONG? ? ? ? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN PLARGE_INTEGER? ? ? MaximumSize OPTIONAL,
IN ULONG? ? ? ? ? ? ? ? PageAttributess,
IN ULONG? ? ? ? ? ? ? ? SectionAttributes,
IN HANDLE? ? ? ? ? ? ? FileHandle OPTIONAL );
NTSTATUS Hook_ZwCreateProcess(
OUT PHANDLE? ? ? ? ? ProcessHandle,
IN ACCESS_MASK? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE? ? ? ? ? ? ParentProcess,
IN BOOLEAN? ? ? ? ? ? InheritObjectTable,
IN HANDLE? ? ? ? ? ? SectionHandle OPTIONAL,
IN HANDLE? ? ? ? ? ? DebugPort OPTIONAL,
IN HANDLE? ? ? ? ? ? ExceptionPort OPTIONAL );
NTSTATUS Hook_ZwCreateProcessEx(
? ? OUT PHANDLE ProcessHandle,
? ? IN ACCESS_MASK DesiredAccess,
? ? IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
? ? IN HANDLE ParentProcess,
? ? IN BOOLEAN InheritObjectTable,
? ? IN HANDLE SectionHandle OPTIONAL,
? ? IN HANDLE DebugPort OPTIONAL,
? ? IN HANDLE ExceptionPort OPTIONAL,
? ? IN HANDLE UnknownHandle );
NTSTATUS Hook_ZwTerminateProcess(
IN HANDLE? ? ? ? ? ? ? ProcessHandle OPTIONAL,
IN NTSTATUS? ? ? ? ? ? ExitStatus );
NTSTATUS Hook_ZwOpenProcess(
OUT PHANDLE? ? ? ? ? ? ProcessHandle,
IN ACCESS_MASK? ? ? ? ? AccessMask,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID? ? ? ? ? ClientId );
NTSTATUS Hook_ZwCreateThread(
OUT PHANDLE? ? ? ? ? ? ThreadHandle,
IN ACCESS_MASK? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE? ? ? ? ? ? ? ProcessHandle,
OUT PCLIENT_ID? ? ? ? ? ClientId,
IN PCONTEXT? ? ? ? ? ? ThreadContext,
IN PINITIAL_TEB? ? ? ? InitialTeb,
IN BOOLEAN? ? ? ? ? ? ? CreateSuspended );
NTSTATUS Hook_ZwTerminateThread(
IN HANDLE? ? ? ? ? ? ? ThreadHandle,
IN NTSTATUS? ? ? ? ? ? ExitStatus );
NTSTATUS Hook_ZwOpenThread(
OUT PHANDLE? ? ? ? ? ? ThreadHandle,
IN ACCESS_MASK? ? ? ? ? AccessMask,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID? ? ? ? ? ClientId );
NTSTATUS Hook_ZwCreateFile(
OUT PHANDLE? ? ? ? ? ? FileHandle,
IN ACCESS_MASK? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
OUT PIO_STATUS_BLOCK? ? IoStatusBlock,
IN PLARGE_INTEGER? ? ? AllocationSize OPTIONAL,
IN ULONG? ? ? ? ? ? ? ? FileAttributes,
IN ULONG? ? ? ? ? ? ? ? ShareAccess,
IN ULONG? ? ? ? ? ? ? ? CreateDisposition,
IN ULONG? ? ? ? ? ? ? ? CreateOptions,
IN PVOID? ? ? ? ? ? ? ? EaBuffer OPTIONAL,
IN ULONG? ? ? ? ? ? ? ? EaLength );
NTSTATUS Hook_ZwOpenFile(
OUT PHANDLE? ? ? ? ? ? FileHandle,
IN ACCESS_MASK? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
OUT PIO_STATUS_BLOCK? ? IoStatusBlock,
IN ULONG? ? ? ? ? ? ? ? ShareAccess,
IN ULONG? ? ? ? ? ? ? ? OpenOptions );


NTSTATUS Hook_ZwClose(
IN HANDLE ObjectHandle );
#ifdef ALLOC_PRAGMA
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(INIT, StartHook)
#pragma alloc_text(PAGE, DispatchCreate)
#pragma alloc_text(PAGE, DispatchClose)
#pragma alloc_text(PAGE, DispatchIoCtrl)
#pragma alloc_text(PAGE, RemoveHook)
#pragma alloc_text(PAGE, UnloadDriver)
#pragma alloc_text(PAGE, Hook_ZwOpenKey)
#pragma alloc_text(PAGE, Hook_ZwSetSecurityObject)
#pragma alloc_text(PAGE, Hook_ZwCreateKey)
#pragma alloc_text(PAGE, Hook_ZwSetValueKey)
#pragma alloc_text(PAGE, Hook_ZwDeleteKey)
#pragma alloc_text(PAGE, Hook_ZwDeleteValueKey)
#pragma alloc_text(PAGE, Hook_ZwOpenSection)
#pragma alloc_text(PAGE, Hook_ZwCreateSection)
#pragma alloc_text(PAGE, Hook_ZwOpenProcess)
#pragma alloc_text(PAGE, Hook_ZwTerminateProcess)
#pragma alloc_text(PAGE, Hook_ZwOpenThread)
#pragma alloc_text(PAGE, Hook_ZwCreateFile)
#pragma alloc_text(PAGE, Hook_ZwOpenFile)
#pragma alloc_text(PAGE, Hook_ZwClose)
#pragma alloc_text(PAGE, Hook_ZwLoadDriver)
#pragma alloc_text(PAGE, Hook_ZwSetSystemInformation)
#pragma alloc_text(PAGE, Hook_ZwQuerySystemInformation)
#pragma alloc_text(PAGE, Hook_ZwReadFile)
#pragma alloc_text(PAGE, Hook_ZwWriteFile)
#endif

//函數原型定義
typedef NTSTATUS (*ZWLOADDRIVER)(
IN PUNICODE_STRING DriverServiceName );

typedef NTSTATUS (*ZWCREATEFILE)(
OUT PHANDLE? ? ? ? ? ? FileHandle,
IN ACCESS_MASK? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
OUT PIO_STATUS_BLOCK? ? IoStatusBlock,
IN PLARGE_INTEGER? ? ? AllocationSize OPTIONAL,
IN ULONG? ? ? ? ? ? ? ? FileAttributes,
IN ULONG? ? ? ? ? ? ? ? ShareAccess,
IN ULONG? ? ? ? ? ? ? ? CreateDisposition,
IN ULONG? ? ? ? ? ? ? ? CreateOptions,
IN PVOID? ? ? ? ? ? ? ? EaBuffer OPTIONAL,
IN ULONG? ? ? ? ? ? ? ? EaLength );

typedef NTSTATUS (*ZWOPENFILE)(
OUT PHANDLE? ? ? ? ? ? FileHandle,
IN ACCESS_MASK? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
OUT PIO_STATUS_BLOCK? ? IoStatusBlock,
IN ULONG? ? ? ? ? ? ? ? ShareAccess,
IN ULONG? ? ? ? ? ? ? ? OpenOptions );

typedef NTSTATUS (*ZWCLOSE)(
IN HANDLE? ? ? ? ? ? ? ObjectHandle );

typedef NTSTATUS (*ZWWRITEFILE)(
IN HANDLE? ? ? ? ? ? ? FileHandle,
IN HANDLE? ? ? ? ? ? ? Event OPTIONAL,
IN PIO_APC_ROUTINE? ? ? ApcRoutine OPTIONAL,
IN PVOID? ? ? ? ? ? ? ? ApcContext OPTIONAL,
OUT PIO_STATUS_BLOCK? ? IoStatusBlock,
IN PVOID? ? ? ? ? ? ? ? Buffer,
IN ULONG? ? ? ? ? ? ? ? Length,
IN PLARGE_INTEGER? ? ? ByteOffset OPTIONAL,
IN PULONG? ? ? ? ? ? ? Key OPTIONAL );

typedef NTSTATUS (*ZWREADFILE)(
IN HANDLE? ? ? ? ? ? ? FileHandle,
IN HANDLE? ? ? ? ? ? ? Event OPTIONAL,
IN PIO_APC_ROUTINE? ? ? ApcRoutine OPTIONAL,
IN PVOID? ? ? ? ? ? ? ? ApcContext OPTIONAL,
OUT PIO_STATUS_BLOCK? ? IoStatusBlock,
OUT PVOID? ? ? ? ? ? ? Buffer,
IN ULONG? ? ? ? ? ? ? ? Length,
IN PLARGE_INTEGER? ? ? ByteOffset OPTIONAL,
IN PULONG? ? ? ? ? ? ? Key OPTIONAL );

typedef NTSTATUS (*ZWCREATEPROCESS)(
OUT PHANDLE? ? ? ? ? ProcessHandle,
IN ACCESS_MASK? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE? ? ? ? ? ? ParentProcess,
IN BOOLEAN? ? ? ? ? ? InheritObjectTable,
IN HANDLE? ? ? ? ? ? SectionHandle OPTIONAL,
IN HANDLE? ? ? ? ? ? DebugPort OPTIONAL,
IN HANDLE? ? ? ? ? ? ExceptionPort OPTIONAL);

typedef NTSTATUS (*ZWCREATEPROCESSEX)(
? ? OUT PHANDLE ProcessHandle,
? ? IN ACCESS_MASK DesiredAccess,
? ? IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
? ? IN HANDLE ParentProcess,
? ? IN BOOLEAN InheritObjectTable,
? ? IN HANDLE SectionHandle OPTIONAL,
? ? IN HANDLE DebugPort OPTIONAL,
? ? IN HANDLE ExceptionPort OPTIONAL,
? ? IN HANDLE Unknown );

typedef NTSTATUS (*ZWOPENPROCESS)(
OUT PHANDLE? ? ? ? ? ? ProcessHandle,
IN ACCESS_MASK? ? ? ? ? AccessMask,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID? ? ? ? ? ClientId );

typedef NTSTATUS (*ZWTERMINATEPROCESS)(
IN HANDLE? ? ? ? ? ? ? ProcessHandle OPTIONAL,
IN NTSTATUS? ? ? ? ? ? ExitStatus );

typedef NTSTATUS (*ZWCREATETHREAD)(
OUT PHANDLE? ? ? ? ? ? ThreadHandle,
IN ACCESS_MASK? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE? ? ? ? ? ? ? ProcessHandle,
OUT PCLIENT_ID? ? ? ? ? ClientId,
IN PCONTEXT? ? ? ? ? ? ThreadContext,
IN PINITIAL_TEB? ? ? ? InitialTeb,
IN BOOLEAN? ? ? ? ? ? ? CreateSuspended );

typedef NTSTATUS (*ZWTERMINATETHREAD)(
IN HANDLE? ? ? ? ? ? ? ThreadHandle,
IN NTSTATUS? ? ? ? ? ? ExitStatus );

typedef NTSTATUS (*ZWOPENTHREAD)(
OUT PHANDLE? ? ? ? ? ? ThreadHandle,
IN ACCESS_MASK? ? ? ? ? AccessMask,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID? ? ? ? ? ClientId );

typedef NTSTATUS (*ZWCREATESECTION)(
OUT PHANDLE? ? ? ? ? ? SectionHandle,
IN ULONG? ? ? ? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN PLARGE_INTEGER? ? ? MaximumSize OPTIONAL,
IN ULONG? ? ? ? ? ? ? ? PageAttributess,
IN ULONG? ? ? ? ? ? ? ? SectionAttributes,
IN HANDLE? ? ? ? ? ? ? FileHandle OPTIONAL );

typedef NTSTATUS (*ZWOPENSECTION)(
OUT PHANDLE? ? ? ? ? ? SectionHandle,
IN ACCESS_MASK? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes );

//注冊表

typedef NTSTATUS (*ZWCREATEKEY) (
? ? OUT PHANDLE KeyHandle,
? ? IN ACCESS_MASK DesiredAccess,
? ? IN POBJECT_ATTRIBUTES ObjectAttributes,
? ? IN ULONG TitleIndex,
? ? IN PUNICODE_STRING Class OPTIONAL,
? ? IN ULONG CreateOptions,
? ? OUT PULONG Disposition OPTIONAL
);

typedef NTSTATUS (*ZWOPENKEY) (
? ? OUT PHANDLE KeyHandle,
? ? IN ACCESS_MASK DesiredAccess,
? ? IN POBJECT_ATTRIBUTES ObjectAttributes
);

typedef NTSTATUS (*ZWSETVALUEKEY)(
? ? IN HANDLE KeyHandle,
? ? IN PUNICODE_STRING ValueName,
? ? IN ULONG TitleIndex OPTIONAL,
? ? IN ULONG Type,
? ? IN PVOID Data,
? ? IN ULONG DataSize
);

typedef NTSTATUS (*ZWSETSECURITYOBJECT)(
IN HANDLE? ? ? ? ? ? ? ObjectHandle,
IN SECURITY_INFORMATION SecurityInformationClass,
IN PSECURITY_DESCRIPTOR DescriptorBuffer);


typedef NTSTATUS (*ZWDELETEKEY)(
? ? IN HANDLE KeyHandle);
typedef NTSTATUS (*ZWDELETEVALUEKEY)(
? ? IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName);


typedef NTSTATUS (*ZWSETSYSTEMINFORMATION)(
IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
IN PVOID? ? ? ? ? ? ? ? SystemInformation,
IN ULONG? ? ? ? ? ? ? ? SystemInformationLength );

typedef NTSTATUS (*ZWQUERYSYSTEMINFORMATION)(
IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
OUT PVOID? ? ? ? ? ? ? SystemInformation,
IN ULONG? ? ? ? ? ? ? ? SystemInformationLength,
OUT PULONG? ? ? ? ? ? ? ReturnLength OPTIONAL );
? ?
//? ? ? SDT 原函數地址
static ZWCREATEFILE? ? ? ? ? ? ? ? OldZwCreateFile;
static ZWOPENFILE? ? ? ? ? ? ? ? OldZwOpenFile;
static ZWCLOSE? ? ? ? ? ? ? ? ? ? OldZwClose;
static ZWWRITEFILE? ? ? ? ? ? ? ? OldZwWriteFile;
static ZWREADFILE? ? ? ? ? ? ? ? OldZwReadFile;
static ZWTERMINATEPROCESS? ? ? ? OldZwTerminateProcess;
static ZWOPENPROCESS? ? ? ? ? ? OldZwOpenProcess;
static ZWOPENTHREAD? ? ? ? ? ? ? ? OldZwOpenThread;
static ZWCREATESECTION? ? ? ? ? ? OldZwCreateSection;
static ZWOPENSECTION? ? ? ? ? ? OldZwOpenSection;
static ZWCREATEKEY? ? ? ? ? ? ? ? OldZwCreateKey;
static ZWSETVALUEKEY? ? ? ? ? ? OldZwSetValueKey;
static ZWDELETEKEY? ? ? ? ? ? ? ? OldZwDeleteKey;
static ZWDELETEVALUEKEY? ? ? ? ? ? OldZwDeleteValueKey;
static ZWSETSECURITYOBJECT? ? ? ? OldZwSetSecurityObject;
static ZWOPENKEY? ? ? ? ? ? ? ? OldZwOpenKey;

static ZWLOADDRIVER? ? ? ? ? ? ? ? OldZwLoadDriver;

static ZWSETSYSTEMINFORMATION? ? OldZwSetSystemInformation;
static ZWQUERYSYSTEMINFORMATION? ? OldZwQuerySystemInformation;
//掛接函數執(zhí)行體
NTSTATUS Hook_ZwWriteFile(
IN HANDLE? ? ? ? ? ? ? FileHandle,
IN HANDLE? ? ? ? ? ? ? Event OPTIONAL,
IN PIO_APC_ROUTINE? ? ? ApcRoutine OPTIONAL,
IN PVOID? ? ? ? ? ? ? ? ApcContext OPTIONAL,
OUT PIO_STATUS_BLOCK? ? IoStatusBlock,
IN PVOID? ? ? ? ? ? ? ? Buffer,
IN ULONG? ? ? ? ? ? ? ? Length,
IN PLARGE_INTEGER? ? ? ByteOffset OPTIONAL,
IN PULONG? ? ? ? ? ? ? Key OPTIONAL )
{
? ? NTSTATUS rc;
? ? rc = OldZwWriteFile(FileHandle,Event,ApcRoutine,ApcContext,IoStatusBlock,Buffer,Length,ByteOffset,Key);
? ? return rc;
}
NTSTATUS Hook_ZwReadFile(
IN HANDLE? ? ? ? ? ? ? FileHandle,
IN HANDLE? ? ? ? ? ? ? Event OPTIONAL,
IN PIO_APC_ROUTINE? ? ? ApcRoutine OPTIONAL,
IN PVOID? ? ? ? ? ? ? ? ApcContext OPTIONAL,
OUT PIO_STATUS_BLOCK? ? IoStatusBlock,
OUT PVOID? ? ? ? ? ? ? Buffer,
IN ULONG? ? ? ? ? ? ? ? Length,
IN PLARGE_INTEGER? ? ? ByteOffset OPTIONAL,
IN PULONG? ? ? ? ? ? ? Key OPTIONAL )
{
? ? NTSTATUS rc;
? ? rc = OldZwReadFile(FileHandle,Event,ApcRoutine,ApcContext,IoStatusBlock,Buffer,Length,ByteOffset,Key);
? ? return rc;
}

NTSTATUS Hook_ZwSetSystemInformation(
IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
IN PVOID? ? ? ? ? ? ? ? SystemInformation,
IN ULONG? ? ? ? ? ? ? ? SystemInformationLength )
{
? ? NTSTATUS rc;
? ? rc = OldZwSetSystemInformation(SystemInformationClass,SystemInformation,SystemInformationLength);
? ? return rc;
}

NTSTATUS Hook_ZwQuerySystemInformation(
IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
OUT PVOID? ? ? ? ? ? ? SystemInformation,
IN ULONG? ? ? ? ? ? ? ? SystemInformationLength,
OUT PULONG? ? ? ? ? ? ? ReturnLength OPTIONAL )
{
? ? NTSTATUS rc;
? ? rc = OldZwQuerySystemInformation(SystemInformationClass,SystemInformation,SystemInformationLength,ReturnLength);
? ? return rc;
}

NTSTATUS Hook_ZwLoadDriver(
IN PUNICODE_STRING DriverServiceName )
{
? ? NTSTATUS rc;

? ? rc = OldZwLoadDriver(DriverServiceName);
? ? return rc;
}

NTSTATUS Hook_ZwSetSecurityObject(
IN HANDLE? ? ? ? ? ? ? ObjectHandle,
IN SECURITY_INFORMATION SecurityInformationClass,
IN PSECURITY_DESCRIPTOR DescriptorBuffer)
{

? ? NTSTATUS rc;

? ? rc = OldZwSetSecurityObject(ObjectHandle,SecurityInformationClass,DescriptorBuffer);
? ?
? ? return rc;
}


NTSTATUS Hook_ZwOpenKey(
? ? OUT PHANDLE KeyHandle,
? ? IN ACCESS_MASK DesiredAccess,
? ? IN POBJECT_ATTRIBUTES ObjectAttributes)
{
? ? NTSTATUS rc;

? ? rc = OldZwOpenKey(KeyHandle,DesiredAccess,ObjectAttributes);

? ? return rc;
}

NTSTATUS Hook_ZwCreateKey (
? ? OUT PHANDLE KeyHandle,
? ? IN ACCESS_MASK DesiredAccess,
? ? IN POBJECT_ATTRIBUTES ObjectAttributes,
? ? IN ULONG TitleIndex,
? ? IN PUNICODE_STRING Class OPTIONAL,
? ? IN ULONG CreateOptions,
? ? OUT PULONG Disposition OPTIONAL
)
{
? ? NTSTATUS rc;

? ? rc = OldZwCreateKey(KeyHandle, DesiredAccess, ObjectAttributes,
? ? ? ? TitleIndex, Class, CreateOptions, Disposition);

? ? return rc;
}

NTSTATUS Hook_ZwSetValueKey(
? ? IN HANDLE KeyHandle,
? ? IN PUNICODE_STRING ValueName,
? ? IN ULONG TitleIndex OPTIONAL,
? ? IN ULONG Type,
? ? IN PVOID Data,
? ? IN ULONG DataSize
? ? )
{
? ? NTSTATUS rc;


? ? rc = OldZwSetValueKey(KeyHandle,ValueName,TitleIndex,Type,Data,DataSize);
? ?
? ? return rc;
}


NTSTATUS Hook_ZwDeleteKey(IN HANDLE KeyHandle)
{
? ? NTSTATUS rc;

? ? rc = OldZwDeleteKey(KeyHandle);

? ? return rc;
}


NTSTATUS Hook_ZwDeleteValueKey( IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName)
{
? ? NTSTATUS rc;

? ? rc = OldZwDeleteValueKey(KeyHandle,ValueName);

? ? return rc;
}

NTSTATUS Hook_ZwOpenSection(
OUT PHANDLE? ? ? ? ? ? SectionHandle,
IN ACCESS_MASK? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes )
{
? ? NTSTATUS rc;
//? ? DbgPrint("Hook_ZwOpenSection\n");
? ? rc = OldZwOpenSection(SectionHandle,DesiredAccess,ObjectAttributes);
? ? return rc;
}

NTSTATUS Hook_ZwCreateSection(
OUT PHANDLE? ? ? ? ? ? SectionHandle,
IN ULONG? ? ? ? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN PLARGE_INTEGER? ? ? MaximumSize OPTIONAL,
IN ULONG? ? ? ? ? ? ? ? PageAttributess,
IN ULONG? ? ? ? ? ? ? ? SectionAttributes,
IN HANDLE? ? ? ? ? ? ? FileHandle OPTIONAL )
{
? ? NTSTATUS rc;
//? ? DbgPrint("Hook_ZwCreateSection");
? ? return OldZwCreateSection(SectionHandle,DesiredAccess,ObjectAttributes,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MaximumSize,PageAttributess,SectionAttributes,FileHandle);? ?
? ? return rc;
}


NTSTATUS Hook_ZwTerminateProcess(
IN HANDLE? ? ? ? ? ? ? ProcessHandle OPTIONAL,
IN NTSTATUS? ? ? ? ? ? ExitStatus )
{
? ? NTSTATUS rc;

? ? rc = OldZwTerminateProcess(ProcessHandle,ExitStatus);
? ? return rc;
}

NTSTATUS Hook_ZwOpenProcess(
OUT PHANDLE? ? ? ? ? ? ProcessHandle,
IN ACCESS_MASK? ? ? ? ? AccessMask,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID? ? ? ? ? ClientId )

{
? ? NTSTATUS rc;

? ? rc = OldZwOpenProcess(ProcessHandle,AccessMask,ObjectAttributes,ClientId);
? ? return rc;
}


NTSTATUS Hook_ZwOpenThread(
OUT PHANDLE? ? ? ? ? ? ThreadHandle,
IN ACCESS_MASK? ? ? ? ? AccessMask,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID? ? ? ? ? ClientId )
{
? ? NTSTATUS rc;

? ? rc = OldZwOpenThread(ThreadHandle,AccessMask,ObjectAttributes,ClientId);

? ? return rc;
}

NTSTATUS Hook_ZwCreateFile(
OUT PHANDLE? ? ? ? ? ? FileHandle,
IN ACCESS_MASK? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
OUT PIO_STATUS_BLOCK? ? IoStatusBlock,
IN PLARGE_INTEGER? ? ? AllocationSize OPTIONAL,
IN ULONG? ? ? ? ? ? ? ? FileAttributes,
IN ULONG? ? ? ? ? ? ? ? ShareAccess,
IN ULONG? ? ? ? ? ? ? ? CreateDisposition,
IN ULONG? ? ? ? ? ? ? ? CreateOptions,
IN PVOID? ? ? ? ? ? ? ? EaBuffer OPTIONAL,
IN ULONG? ? ? ? ? ? ? ? EaLength )
{
? ? NTSTATUS rc;

? ? rc = OldZwCreateFile(FileHandle,DesiredAccess,ObjectAttributes,IoStatusBlock,
? ? ? ? ? ? ? ? ? ? ? ? ? ? AllocationSize,FileAttributes,ShareAccess,CreateDisposition,
? ? ? ? ? ? ? ? ? ? ? ? ? ? CreateOptions,EaBuffer,EaLength);

? ? return rc;
}

NTSTATUS Hook_ZwOpenFile(
OUT PHANDLE? ? ? ? ? ? FileHandle,
IN ACCESS_MASK? ? ? ? ? DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
OUT PIO_STATUS_BLOCK? ? IoStatusBlock,
IN ULONG? ? ? ? ? ? ? ? ShareAccess,
IN ULONG? ? ? ? ? ? ? ? OpenOptions )
{
? ? NTSTATUS rc;

? ? rc = OldZwOpenFile(FileHandle,DesiredAccess,ObjectAttributes,IoStatusBlock,ShareAccess,
? ? ? ? ? ? ? ? ? ? ? ? ? ? OpenOptions);

? ? return rc;
}


NTSTATUS Hook_ZwClose(
IN HANDLE? ? ? ? ? ? ? ObjectHandle )
{
? ? NTSTATUS rc;

? ? //在這里執(zhí)行掃描必須十分注意,否則容易藍屏

? ? rc = OldZwClose(ObjectHandle);
? ? return rc;
}
NTSTATUS DriverEntry(
? ? IN PDRIVER_OBJECT DriverObject,
? ? IN PUNICODE_STRING RegistryPath
? ? )
{
? ? NTSTATUS? ? ? ? ntStatus;
? ? UNICODE_STRING uszDriverString;
? ? UNICODE_STRING uszDeviceString;
? ? UNICODE_STRING uszEventString;
? ? PDEVICE_OBJECT? ? pDeviceObject;
? ? PDEVICE_EXTENSION extension;
? ? // 初始化設備對象名
? ? RtlInitUnicodeString(&uszDriverString, L"\\Device\\ITSys");
? ? // 創(chuàng)建并初始化對象
? ? ntStatus = IoCreateDevice(
? ? ? ? DriverObject,
? ? ? ? sizeof(DEVICE_EXTENSION),
? ? ? ? &uszDriverString,
? ? ? ? FILE_DEVICE_UNKNOWN,
? ? ? ? 0,
? ? ? ? FALSE,
? ? ? ? &pDeviceObject
? ? ? ? );
? ? if(ntStatus != STATUS_SUCCESS)
? ? ? ? return ntStatus;
? ? extension = pDeviceObject->DeviceExtension;
? ? RtlInitUnicodeString(&uszDeviceString, L"\\DosDevices\\ITSys");
? ? // 創(chuàng)建用戶可見連接名稱
? ? ntStatus = IoCreateSymbolicLink(&uszDeviceString, &uszDriverString);
? ? if(ntStatus != STATUS_SUCCESS)
? ? {
? ? ? ? // 創(chuàng)建失敗,刪除對象并返回錯誤值
? ? ? ? IoDeleteDevice(pDeviceObject);
? ? ? ? return ntStatus;
? ? }
? ? // 賦值全局設備對象指針

? ? // Assign global pointer to the device object for use by the callback functions
? ? g_pDeviceObject = pDeviceObject;
? ? // 設置所有可用的DeviceIoControl的處理IRP的函數

? ? DriverObject->DriverUnload? ? ? ? ? ? ? ? ? ? ? ? ? ? = UnloadDriver;
? ? DriverObject->MajorFunction[IRP_MJ_CREATE]? ? ? ? ? ? = DispatchCreate;
? ? DriverObject->MajorFunction[IRP_MJ_CLOSE]? ? ? ? ? ? = DispatchClose;
? ? DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]? ? = DispatchIoCtrl;

#if DBG
? ? KdPrint(("RegistryPath : %ws\n",RegistryPath->Buffer));
#endif

? ? //SDT掛接
? ? StartHook();

? ? return ntStatus;
}

void StartHook (void)
{
? ? //獲取未導出的服務函數索引號
? ? HANDLE? ? hFile;
? ? PCHAR? ? pDllFile;
? ? ULONG ulSize;
? ? ULONG ulByteReaded;

? ? __asm
? ? {
? ? ? ? push? ? eax
? ? ? ? mov? ? ? ? eax, CR0
? ? ? ? and? ? ? ? eax, 0FFFEFFFFh
? ? ? ? mov? ? ? ? CR0, eax
? ? ? ? pop? ? ? ? eax
? ? }
? ? //掛接SDT函數
? ? OldZwCreateFile? ? ? ? ? ? ? ? ? ? = (ZWCREATEFILE)? ? InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwCreateFile),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwCreateFile);
? ? OldZwOpenFile? ? ? ? ? ? ? ? ? ? = (ZWOPENFILE)? ? ? ? InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwOpenFile),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwOpenFile);
? ? OldZwClose? ? ? ? ? ? ? ? ? ? ? ? = (ZWCLOSE)? ? ? ? ? ? InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwClose),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwClose);
? ? OldZwReadFile? ? ? ? ? ? ? ? ? ? = (ZWREADFILE)? ? ? ? InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwReadFile),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwReadFile);
? ? OldZwWriteFile? ? ? ? ? ? ? ? ? ? = (ZWWRITEFILE)? ? ? ? InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwWriteFile),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwWriteFile);

? ? OldZwTerminateProcess? ? ? ? ? ? = (ZWTERMINATEPROCESS)InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwTerminateProcess),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwTerminateProcess);

? ? OldZwOpenProcess? ? ? ? ? ? ? ? = (ZWOPENPROCESS)InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwOpenProcess),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwOpenProcess);

? ? OldZwOpenThread? ? ? ? ? ? ? ? ? ? = (ZWOPENTHREAD)InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwOpenThread),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwOpenThread);
? ? OldZwCreateSection? ? ? ? ? ? ? ? = (ZWCREATESECTION)InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwCreateSection),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwCreateSection);
? ? OldZwOpenSection? ? ? ? ? ? ? ? = (ZWOPENSECTION)InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwOpenSection),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwOpenSection);

? ? OldZwOpenKey? ? ? ? ? ? ? ? ? ? = (ZWOPENKEY) InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwOpenKey),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwOpenKey);
? ? OldZwCreateKey? ? ? ? ? ? ? ? ? ? = (ZWCREATEKEY) InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwCreateKey),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwCreateKey);
? ? OldZwSetValueKey? ? ? ? ? ? ? ? = (ZWSETVALUEKEY) InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwSetValueKey),? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwSetValueKey);
? ? OldZwDeleteKey? ? ? ? ? ? ? ? ? ? = (ZWDELETEKEY) InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwDeleteKey),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwDeleteKey);
? ? OldZwDeleteValueKey? ? ? ? ? ? ? ? = (ZWDELETEVALUEKEY) InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwDeleteValueKey),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwDeleteValueKey);
? ? OldZwSetSecurityObject? ? ? ? ? ? = (ZWSETSECURITYOBJECT)InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwSetSecurityObject),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwSetSecurityObject);

? ? OldZwLoadDriver? ? ? ? ? ? ? ? ? ? = (ZWLOADDRIVER)InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwLoadDriver),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwLoadDriver);

? ? OldZwSetSystemInformation? ? ? ? = (ZWSETSYSTEMINFORMATION)InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwSetSystemInformation),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwSetSystemInformation);

? ? OldZwQuerySystemInformation? ? ? ? = (ZWQUERYSYSTEMINFORMATION)InterlockedExchange((PLONG)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &SDT(ZwQuerySystemInformation),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (LONG)Hook_ZwQuerySystemInformation);

? ? //關閉
? ? __asm
? ? {
? ? ? ? push? ? eax
? ? ? ? mov? ? ? ? eax, CR0
? ? ? ? or? ? ? ? eax, NOT 0FFFEFFFFh
? ? ? ? mov? ? ? ? CR0, eax
? ? ? ? pop? ? ? ? eax
? ? }
? ? return ;
}

void RemoveHook (void)
{
? ? __asm
? ? {
? ? ? ? push? ? eax
? ? ? ? mov? ? ? ? eax, CR0
? ? ? ? and? ? ? ? eax, 0FFFEFFFFh
? ? ? ? mov? ? ? ? CR0, eax
? ? ? ? pop? ? ? ? eax
? ? }

? ? InterlockedExchange( (PLONG) &SDT(ZwCreateFile)? ? ? ? ? ? ? ? , (LONG) OldZwCreateFile? ? ? ? ? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwOpenFile)? ? ? ? ? ? ? ? , (LONG) OldZwOpenFile? ? ? ? ? ? ? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwClose)? ? ? ? ? ? ? ? ? ? , (LONG) OldZwClose? ? ? ? ? ? ? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwReadFile)? ? ? ? ? ? ? ? , (LONG) OldZwReadFile? ? ? ? ? ? ? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwWriteFile)? ? ? ? ? ? ? ? , (LONG) OldZwWriteFile? ? ? ? ? ? ? ? );

? ? InterlockedExchange( (PLONG) &SDT(ZwTerminateProcess)? ? ? ? , (LONG) OldZwTerminateProcess? ? ? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwOpenProcess)? ? ? ? ? ? , (LONG) OldZwOpenProcess? ? ? ? ? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwOpenThread)? ? ? ? ? ? ? ? , (LONG) OldZwOpenThread? ? ? ? ? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwCreateSection)? ? ? ? ? ? , (LONG) OldZwCreateSection? ? ? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwOpenSection)? ? ? ? ? ? , (LONG) OldZwOpenSection? ? ? ? ? ? ? ? );

? ? InterlockedExchange( (PLONG) &SDT(ZwOpenKey)? ? ? ? ? ? ? ? , (LONG) OldZwOpenKey? ? ? ? ? ? ? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwCreateKey)? ? ? ? ? ? ? ? , (LONG) OldZwCreateKey? ? ? ? ? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwSetValueKey)? ? ? ? ? ? , (LONG) OldZwSetValueKey? ? ? ? ? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwDeleteKey)? ? ? ? ? ? ? ? , (LONG) OldZwDeleteKey? ? ? ? ? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwDeleteValueKey)? ? ? ? ? ? , (LONG) OldZwDeleteValueKey? ? ? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwSetSecurityObject)? ? ? ? , (LONG) OldZwSetSecurityObject? ? ? ? );

? ? InterlockedExchange( (PLONG) &SDT(ZwLoadDriver)? ? ? ? ? ? ? ? , (LONG) OldZwLoadDriver? ? ? ? ? ? ? ? );

? ? InterlockedExchange( (PLONG) &SDT(ZwSetSystemInformation)? ? , (LONG) OldZwSetSystemInformation? ? ? ? );
? ? InterlockedExchange( (PLONG) &SDT(ZwQuerySystemInformation)? ? , (LONG) OldZwQuerySystemInformation? ? );

? ? __asm
? ? {
? ? ? ? push? ? eax
? ? ? ? mov? ? ? ? eax, CR0
? ? ? ? or? ? ? ? eax, NOT 0FFFEFFFFh
? ? ? ? mov? ? ? ? CR0, eax
? ? ? ? pop? ? ? ? eax
? ? }
}

void UnloadDriver(IN PDRIVER_OBJECT DriverObject)
{
? ? UNICODE_STRING uszDeviceString;
? ? NTSTATUS? ? ? ? ntStatus;


? ? //移除掛接
? ? RemoveHook();

? ? IoDeleteDevice(DriverObject->DeviceObject);

? ? RtlInitUnicodeString(&uszDeviceString, L"\\DosDevices\\ITSys");
? ? IoDeleteSymbolicLink(&uszDeviceString);

}

WQXNETQIQI 2007-12-11 14:17
F5的? [s:319]

galihoo 2007-12-11 21:02
引用
引用第8樓WQXNETQIQI于2007-12-10 17:35發(fā)表的? :
原來樓上是瑞星的,暴露了吧 哈哈哈

暈,我可不是瑞星的
最近研究了一下瑞星
可以說瑞星在應用層的防護確實作的比較好
而且他nn的把Kiservicetable表也修改了
搞的我用kiservicetable恢復ssdt表失敗
郁悶慘了
看來還是從應用層傳進去再恢復了

zjjmj2002 2007-12-11 21:02
今天看了一下卡巴防遠程線程的辦法,決定采用之,同時也知道如何過卡巴了,一舉兩得呀。

galihoo 2007-12-11 21:11
卡巴的防遠線程的方法感覺應該是最合理的了,他讓遠線程的誤報率降的很低
不過確實有繞過的地方
看來真的是魚與熊掌不能兼得啊
一直用卡巴,支持卡巴,開創(chuàng)了主動防御的新時代

WQXNETQIQI 2007-12-11 21:40
找漏洞的法子還是 太不通用,還是hotpatch好使

wdnfa 2007-12-12 18:48
卡巴應該就是采用的SSDT HOOK的技術,用GMER一還原,創(chuàng)建遠線程沒反應

wdnfa 2007-12-12 19:00
MJ,F5是什么意思。。。。哪個麻煩告訴我下

wangjianfeng 2007-12-12 19:15
F5 逐指令運行,中斷 [s:321]

WQXNETQIQI 2007-12-12 19:19
[s:311] F5是PseudoCode....

poize 2007-12-18 00:30
hex-ray貌似也不太好用

icetowater 2007-12-20 23:10
暈倒,瑞星的source也能搞到...樓上的你們都是什么人哦??? [s:311]
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            性欧美大战久久久久久久久| 欧美精品久久久久久久久老牛影院| 亚洲一区二区三区高清| 91久久国产综合久久| 亚洲国产日韩在线一区模特| 亚洲第一偷拍| 亚洲伦伦在线| 亚洲欧美在线另类| 久久嫩草精品久久久精品一| 久久综合九色99| 亚洲电影中文字幕| 亚洲三级性片| 亚洲欧美日韩成人| 久久精品国产免费| 欧美日韩国产一区精品一区| 国产精品免费一区二区三区在线观看 | 狂野欧美激情性xxxx| 蜜臀91精品一区二区三区| 欧美激情国产精品| 国产欧美日韩三区| 国产欧美日韩不卡| 欧美一区二区私人影院日本 | 欧美一级网站| 欧美粗暴jizz性欧美20| 99天天综合性| 久久精品在这里| 欧美三区免费完整视频在线观看| 国产精品日韩久久久| 伊人精品久久久久7777| 亚洲图片自拍偷拍| 免费视频久久| 欧美一区二区三区在线视频| 欧美区日韩区| 亚洲国产小视频在线观看| 亚洲欧美成人精品| 91久久精品国产91性色| 久久国产综合精品| 欧美日一区二区在线观看 | 亚洲影视在线| 欧美欧美午夜aⅴ在线观看| 国内一区二区三区在线视频| 亚洲网在线观看| 亚洲激情网站| 久久米奇亚洲| 国产视频久久久久久久| 亚洲视频一起| 亚洲黄色在线看| 免费视频最近日韩| 黄色av成人| 欧美有码在线观看视频| 99在线视频精品| 欧美日韩的一区二区| 亚洲国产99| 欧美大胆成人| 久久国产一区二区| 国产午夜精品视频免费不卡69堂| 亚洲综合精品自拍| av不卡免费看| 国产精品久久久久久久久久ktv | 午夜精品久久久久久久白皮肤| 欧美精品一区二区三区蜜臀| 亚洲日韩欧美视频| 亚洲国产欧美日韩另类综合| 欧美mv日韩mv国产网站app| 曰韩精品一区二区| 欧美国产日韩a欧美在线观看| 久久久久高清| 亚洲精品日日夜夜| 亚洲高清网站| 欧美日韩一区三区四区| 亚洲午夜精品福利| 亚洲欧美乱综合| 国语自产精品视频在线看抢先版结局| 性久久久久久久久| 久久久久久亚洲精品中文字幕 | 女仆av观看一区| 亚洲国产国产亚洲一二三| 鲁大师成人一区二区三区| 久久久久久久久蜜桃| 亚洲高清在线精品| 欧美大片网址| 欧美日韩视频在线第一区| 亚洲一区二区在线观看视频| 亚洲视频导航| 在线成人黄色| 夜夜嗨av色一区二区不卡| 国产精品三级视频| 麻豆精品传媒视频| 欧美日韩精品在线观看| 校园激情久久| 久久亚洲私人国产精品va| 亚洲人成精品久久久久| 一区二区三区黄色| 国产一区二区中文| 欧美激情视频给我| 欧美天天影院| 麻豆乱码国产一区二区三区| 欧美激情亚洲另类| 欧美自拍丝袜亚洲| 欧美www在线| 欧美一区二区视频在线观看2020| 久久久美女艺术照精彩视频福利播放| 亚洲乱码国产乱码精品精天堂| 亚洲一区二区精品在线观看| 亚洲区在线播放| 久久不射2019中文字幕| 日韩视频一区| 久久国产精品一区二区三区| 在线亚洲观看| 免费日韩成人| 久久久噜噜噜久噜久久 | 久久狠狠久久综合桃花| 夜夜嗨av色一区二区不卡| 欧美中文在线观看| 亚洲一区二区高清视频| 免费久久99精品国产自| 久久精品视频播放| 国产精品大全| 日韩视频―中文字幕| 亚洲国产精品成人一区二区| 一区二区三区四区五区精品| 亚洲福利在线观看| 欧美一区午夜精品| 香蕉久久夜色精品国产使用方法| 欧美精品七区| 欧美黄色小视频| 韩国一区电影| 欧美亚洲三区| 久久精品99国产精品酒店日本| 欧美日韩国产首页| 亚洲国产精品www| 黄网站色欧美视频| 中国女人久久久| 亚洲大胆人体视频| 亚洲欧美视频在线观看| 国产精品99久久久久久久女警 | 日韩亚洲在线| 欧美大片在线看| 亚洲福利视频一区二区| 在线日韩一区二区| 久久亚洲私人国产精品va| 嫩草成人www欧美| 狠狠入ady亚洲精品| 亚洲欧美日韩精品综合在线观看 | 在线中文字幕不卡| 欧美全黄视频| 一区二区电影免费在线观看| 亚洲影视综合| 国产精品www色诱视频| 一区二区三区偷拍| 香蕉成人伊视频在线观看| 国产精品男gay被猛男狂揉视频| 亚洲午夜视频在线观看| 香蕉成人久久| 亚洲第一在线综合在线| 欧美成人自拍视频| 亚洲九九精品| 欧美亚洲一区二区三区| 国产日韩欧美在线一区| 久久精品30| 亚洲电影在线观看| 9l视频自拍蝌蚪9l视频成人| 欧美日韩亚洲一区三区| 亚洲一区在线直播| 久久一区二区三区四区五区| 激情自拍一区| 欧美日本中文字幕| 午夜精品一区二区三区在线视 | 亚洲欧洲日产国码二区| 午夜亚洲一区| 91久久久久久| 国产精品日韩欧美大师| 久久香蕉精品| 99视频国产精品免费观看| 久久精品国产69国产精品亚洲 | 亚洲人体影院| 国产精品美女久久久久av超清| 久久久999国产| 在线视频日韩| 亚洲电影免费观看高清完整版| 亚洲尤物视频在线| 亚洲高清自拍| 国产乱码精品1区2区3区| 蜜月aⅴ免费一区二区三区| 亚洲在线免费观看| 亚洲第一中文字幕| 久久久久国产精品人| 宅男66日本亚洲欧美视频| 国产亚洲午夜| 国产精品成人一区二区三区夜夜夜 | 欧美性猛交xxxx乱大交蜜桃 | 久久九九久久九九| 亚洲国产精品久久91精品| 国产精品久久综合| 免费成人av在线看| 欧美一级欧美一级在线播放| 一区二区精品在线| 亚洲激情午夜| 狂野欧美激情性xxxx| 欧美一区亚洲一区|