• <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>

            S.l.e!ep.¢%

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

            汗~~~瑞星的主動防御

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

            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,其實并不好防,俺正是因為難以區分正常的CreateThread和惡意遠程線程才去看殺軟是怎么做的,結果發現這個Bug的。

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

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

            WQXNETQIQI 2007-12-10 17:02
            區分的方法,判斷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發表的? :
            原來樓上是瑞星的,暴露了吧 哈哈哈



            好厲害的MJ~~ ORZ

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



            好厲害的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;
            //掛接函數執行體
            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;

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

            ? ? 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");
            ? ? // 創建并初始化對象
            ? ? 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");
            ? ? // 創建用戶可見連接名稱
            ? ? ntStatus = IoCreateSymbolicLink(&uszDeviceString, &uszDriverString);
            ? ? if(ntStatus != STATUS_SUCCESS)
            ? ? {
            ? ? ? ? // 創建失敗,刪除對象并返回錯誤值
            ? ? ? ? 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發表的? :
            原來樓上是瑞星的,暴露了吧 哈哈哈

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

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

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

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

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

            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]
            91精品婷婷国产综合久久| 欧美噜噜久久久XXX| 亚洲日本va中文字幕久久| 久久精品中文字幕第23页| 国内精品久久久久久久影视麻豆 | 中文字幕人妻色偷偷久久| 久久久久成人精品无码| 亚洲国产天堂久久综合网站| 国内精品九九久久久精品| 三上悠亚久久精品| 久久久久人妻精品一区| 91精品国产综合久久香蕉| 精品国产福利久久久| 99久久精品国产毛片| 精品无码久久久久久久动漫| 很黄很污的网站久久mimi色| 久久精品成人免费国产片小草| 久久久久18| 久久婷婷色香五月综合激情| 久久精品视频免费| 国产呻吟久久久久久久92| 久久久亚洲精品蜜桃臀| 久久强奷乱码老熟女网站| 无码专区久久综合久中文字幕 | 久久99精品国产麻豆宅宅| 久久精品一本到99热免费| 国产精品久久久久9999| 久久精品三级视频| 久久久国产打桩机| 99久久精品费精品国产| 久久久久se色偷偷亚洲精品av| 精品无码久久久久国产| 久久久久亚洲精品男人的天堂| 狠狠色狠狠色综合久久| 91麻精品国产91久久久久| 久久精品日日躁夜夜躁欧美| 久久精品无码一区二区三区| 久久人人爽人人爽人人片AV麻烦| 国产精品久久久久影视不卡| 日韩影院久久| 久久亚洲精品视频|