在Windows 2003中HOOK ZwCreateProcessEx

    技术2022-05-11  45

    作者:suei8423 (suei8423_at_163.com) 出处:http://www.xfocus.net/articles/200503/783.html 日期:2005-04-04 创建时间:2005-03-09 文章属性:原创 文章提交:suei8423 (suei8423_at_163.com) 作者:ZwelL 工作需要,想控制进程的创建,于是HOOK了ZwCreateProcess,后来发现xp和2003中创建进程的都用NtCreateProcessEx(参见[1])。 但是ZwCreateProcessEx未被ntoskrnl.exe导出,用softice的ntcall命令也没有看到,网上也没有找到相关代码。没办法,跟踪ntoskrnl!ZwCreateProcess >u ntoskrnl!ZwCreateProcessEx _ZwCreateProcess 0008:804e7ae2    bb32000000    mov eax, 00000032 但是ZwCreateProcessEx有9个参数,最后一个未知,4字节,猜成HANDLE型。 原型如下: typedef NTSTATUS (*NTCREATEPROCESSEX)(     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 );   最终用硬编码HOOK 成功,代码如下: #include "ntddk.h" #include "stdarg.h" #include "stdio.h" #include "ntiologc.h" #define DWORD unsigned long #define WORD unsigned short #define BOOL unsigned long typedef struct ServiceDescriptorEntry {     unsigned int *ServiceTableBase;     unsigned int *ServiceCounterTableBase; //Used only in checked build     unsigned int NumberOfServices;     unsigned char *ParamTableBase; } ServiceDescriptorTableEntry, *PServiceDescriptorTableEntry; extern PServiceDescriptorTableEntry KeServiceDescriptorTable; typedef NTSTATUS (*NTCREATEPROCESSEX)( 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 ); NTCREATEPROCESSEX    OldNtCreateProcessEx; // Length of process name (rounded up to next DWORD) #define PROCNAMELEN     20 // Maximum length of NT process name #define NT_PROCNAMELEN  16 ULONG gProcessNameOffset; void GetProcessNameOffset() {          PEPROCESS curproc;     int i;     curproc = PsGetCurrentProcess();     for( i = 0; i < 3*PAGE_SIZE; i++ )     {         if( !strncmp( "System", (PCHAR) curproc + i, strlen("System") ))         {             gProcessNameOffset = i;         }     } } BOOL GetProcessName( PCHAR theName ) {     PEPROCESS       curproc;     char            *nameptr;     ULONG           i;     KIRQL           oldirql;     if( gProcessNameOffset )     {         curproc = PsGetCurrentProcess();         nameptr   = (PCHAR) curproc + gProcessNameOffset;         strncpy( theName, nameptr, NT_PROCNAMELEN );         theName[NT_PROCNAMELEN] = 0; /* NULL at end */         return TRUE;     }     return FALSE; } NTSTATUS NewNtCreateProcessEx( 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 OPTIONAL) {     CHAR aProcessName[PROCNAMELEN];              GetProcessName( aProcessName );     DbgPrint("rootkit: NewNtCreateProcessEx() from %s/n", aProcessName);     //DbgPrint("ok");     return OldNtCreateProcessEx(ProcessHandle,DesiredAccess,             ObjectAttributes,ParentProcess,InheritObjectTable,SectionHandle,DebugPort,ExceptionPort,Unknown); } NTSTATUS OnStubDispatch(     IN PDEVICE_OBJECT DeviceObject,     IN PIRP           Irp     ) {     Irp->IoStatus.Status      = STATUS_SUCCESS;     IoCompleteRequest (Irp,                        IO_NO_INCREMENT                        );     return Irp->IoStatus.Status; } VOID OnUnload( IN PDRIVER_OBJECT DriverObject ) {     DbgPrint("ROOTKIT: OnUnload called/n");     _asm     {         CLI                    //dissable interrupt         MOV    EAX, CR0        //move CR0 register into EAX         AND EAX, NOT 10000H //disable WP bit         MOV    CR0, EAX        //write register back     }     (NTCREATEPROCESSEX)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + 0x32))=OldNtCreateProcessEx;     _asm     {         MOV    EAX, CR0        //move CR0 register into EAX         OR    EAX, 10000H        //enable WP bit             MOV    CR0, EAX        //write register back                 STI                    //enable interrupt     } } NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath ) {     int i;     DbgPrint("My Driver Loaded!");     GetProcessNameOffset();     // Register a dispatch function     for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)     {             theDriverObject->MajorFunction[i] = OnStubDispatch;     }     theDriverObject->DriverUnload  = OnUnload;     // save old system call locations     //OldNtCreateProcessEx=(NTCREATEPROCESSEX)(SYSTEMSERVICE(0x32));     OldNtCreateProcessEx=(NTCREATEPROCESSEX)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + 0x32));     _asm     {         CLI                    //dissable interrupt         MOV    EAX, CR0        //move CR0 register into EAX         AND EAX, NOT 10000H //disable WP bit         MOV    CR0, EAX        //write register back     }     (NTCREATEPROCESSEX)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + 0x32))=  NewNtCreateProcessEx;     _asm     {         MOV    EAX, CR0        //move CR0 register into EAX         OR    EAX, 10000H        //enable WP bit             MOV    CR0, EAX        //write register back                 STI                    //enable interrupt     }                          return STATUS_SUCCESS; } 这样很不爽,每次都要这样看索引号,问了SOBEIT,可以通过从NTDLL中这样获取服务索引号: 来自rookkit: #include <windows.h> #include <stdio.h> BOOL GetId( char *FuncName, ULONG *FunctionID ) {     //get the function's address     PBYTE Function = (PBYTE)GetProcAddress( GetModuleHandle( "ntdll.dll" ), FuncName );     /*     do some sanity checks,     make sure this function     has a corresponding kernel     level function     */     *FunctionID = 0;     //func not found...     if ( Function == NULL )     {         return FALSE;     }     /*     77F5B438   B8 00000000    MOV EAX, _FUNCTION_ID_     77F5B43D   BA 0003FE7F    MOV EDX,7FFE0300     77F5B442   FFD2           CALL EDX     77F5B444   C2 1800        RETN XX      */     //mov eax     if ( *Function != 0xB8 )     {         return FALSE;     }     /*     since the address of     the function which     actually makes the call     (SYSCALL) may change, we just     check for mov edx     */     if ( *(Function + 5) != 0xBA )     {         return FALSE;     }     //call edx     /*if ( *(PWORD)(Function + 10) != 0xD2FF )     {         return FALSE;     }     //retn     if ( *(Function + 12) != 0xC2 )     {         return FALSE;     }*/     *FunctionID = *(PDWORD)(Function + 1);     return TRUE; } int main(int argc, char* argv[]) {     ULONG Id;          printf( "function name: NtCreateProcessEx/n" );     GetId( "NtCreateProcessEx", &Id );     printf( "function id: X/n", Id );     return 0; } /// 这样也不爽,要从用户态传到驱动层不方便,最后,用这个代码: #include "ntddk.h" #include "stdarg.h" #include "stdio.h" #include "ntiologc.h" #include "ntimage.h" #define DWORD unsigned long #define WORD unsigned short #define BOOL unsigned long #define BYTE unsigned char #define SEC_IMAGE    0x01000000 typedef struct _SECTION_IMAGE_INFORMATION { PVOID EntryPoint; ULONG StackZeroBits; ULONG StackReserved; ULONG StackCommit; ULONG ImageSubsystem; WORD SubsystemVersionLow; WORD SubsystemVersionHigh; ULONG Unknown1; ULONG ImageCharacteristics; ULONG ImageMachineType; ULONG Unknown2[3]; } SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION; DWORD GetDllFunctionAddress(char* lpFunctionName, PUNICODE_STRING pDllName) {     HANDLE hThread, hSection, hFile, hMod;     SECTION_IMAGE_INFORMATION sii;     IMAGE_DOS_HEADER* dosheader;     IMAGE_OPTIONAL_HEADER* opthdr;     IMAGE_EXPORT_DIRECTORY* pExportTable;     DWORD* arrayOfFunctionAddresses;     DWORD* arrayOfFunctionNames;     WORD* arrayOfFunctionOrdinals;     DWORD functionOrdinal;     DWORD Base, x, functionAddress;     char* functionName;     STRING ntFunctionName, ntFunctionNameSearch;     PVOID BaseAddress = NULL;     SIZE_T size=0;     OBJECT_ATTRIBUTES oa = {sizeof oa, 0, pDllName, OBJ_CASE_INSENSITIVE};     IO_STATUS_BLOCK iosb;     //_asm int 3;     ZwOpenFile(&hFile, FILE_EXECUTE | SYNCHRONIZE, &oa, &iosb, FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_NONALERT);     oa.ObjectName = 0;     ZwCreateSection(&hSection, SECTION_ALL_ACCESS, &oa, 0,PAGE_EXECUTE, SEC_IMAGE, hFile);          ZwMapViewOfSection(hSection, NtCurrentProcess(), &BaseAddress, 0, 1000, 0, &size, (SECTION_INHERIT)1, MEM_TOP_DOWN, PAGE_READWRITE);          ZwClose(hFile);          hMod = BaseAddress;          dosheader = (IMAGE_DOS_HEADER *)hMod;          opthdr =(IMAGE_OPTIONAL_HEADER *) ((BYTE*)hMod+dosheader->e_lfanew+24);     pExportTable =(IMAGE_EXPORT_DIRECTORY*)((BYTE*) hMod + opthdr->DataDirectory[ IMAGE_DIRECTORY_ENTRY_EXPORT]. VirtualAddress);     // now we can get the exported functions, but note we convert from RVA to address     arrayOfFunctionAddresses = (DWORD*)( (BYTE*)hMod + pExportTable->AddressOfFunctions);     arrayOfFunctionNames = (DWORD*)( (BYTE*)hMod + pExportTable->AddressOfNames);     arrayOfFunctionOrdinals = (WORD*)( (BYTE*)hMod + pExportTable->AddressOfNameOrdinals);     Base = pExportTable->Base;     RtlInitString(&ntFunctionNameSearch, lpFunctionName);     for(x = 0; x < pExportTable->NumberOfFunctions; x++)     {         functionName = (char*)( (BYTE*)hMod + arrayOfFunctionNames[x]);         RtlInitString(&ntFunctionName, functionName);         functionOrdinal = arrayOfFunctionOrdinals[x] + Base - 1; // always need to add base, -1 as array counts from 0         // this is the funny bit.  you would expect the function pointer to simply be arrayOfFunctionAddresses[x]...         // oh no... thats too simple.  it is actually arrayOfFunctionAddresses[functionOrdinal]!!         functionAddress = (DWORD)( (BYTE*)hMod + arrayOfFunctionAddresses[functionOrdinal]);         if (RtlCompareString(&ntFunctionName, &ntFunctionNameSearch, TRUE) == 0)         {             ZwClose(hSection);             return functionAddress;         }     }     ZwClose(hSection);     return 0; } NTSTATUS OnStubDispatch(     IN PDEVICE_OBJECT DeviceObject,     IN PIRP           Irp     ) {     Irp->IoStatus.Status      = STATUS_SUCCESS;     IoCompleteRequest (Irp,                        IO_NO_INCREMENT                        );     return Irp->IoStatus.Status; } VOID OnUnload( IN PDRIVER_OBJECT DriverObject ) {     DbgPrint("ROOTKIT: OnUnload called/n"); } NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath ) {     int i;     UNICODE_STRING dllName;     DWORD functionAddress;     int    position;     DbgPrint("My Driver Loaded!");     theDriverObject->DriverUnload  = OnUnload;     RtlInitUnicodeString(&dllName, L"//Device//HarddiskVolume1//Windows//System32//ntdll.dll");     functionAddress = GetDllFunctionAddress("ZwCreateProcessEx", &dllName);     position = *((WORD*)(functionAddress+1));     DbgPrint("Id:%d/n", position);                          return STATUS_SUCCESS; } 上面的代码从驱动层加载NTDLL,再从输出表中找出函数地址,mov eax,[ID]对应的b8后面的字就是索引号,其实跟前一个代码作用是相似的, 只是驱动层没有LoadLibrary,只能这样解决了。将上面的代码整合起来就比较完善了,大家看着改吧。这里顺便把2003中的服务描述表发出来,希望对大家有帮助: Service table address:0x80567980  Number of services:280=0x127 Index       Address     Parameters  Name                                                         ------------------------------------------------------------------------------------------------- 0x0         0x8058ddce  6           NtAcceptConnectPort                                 0x1         0x80596b7e  8           NtAccessCheck                                       0x2         0x805976ce  b           NtAccessCheckAndAuditAlarm                           0x3         0x805a8bb7  b           NtAccessCheckByType                                 0x4         0x8059968a  10          NtAccessCheckByTypeAndAuditAlarm                     0x5         0x80658705  b           NtAccessCheckByTypeResultList                       0x6         0x8065a9b2  10          NtAccessCheckByTypeResultListAndAuditAlarm           0x7         0x8065a9f5  11          NtAccessCheckByTypeResultListAndAuditAlarmByHandle   0x8         0x8059dc4f  3           NtAddAtom                                           0xb         0x806581e2  6           NtAdjustGroupsToken                                 0xc         0x80597836  6           NtAdjustPrivilegesToken                             0xd         0x8065104b  2           NtAlertResumeThread                                 0xe         0x805971ea  1           NtAlertThread                                       0xf         0x805996cc  1           NtAllocateLocallyUniqueId                           0x10        0x80647eb9  3           NtAllocateUserPhysicalPages                         0x11        0x805a70dc  4           NtAllocateUuids                                     0x12        0x80583188  6           NtAllocateVirtualMemory                             0x13        0x8058faff  2           NtApphelpCacheControl                               0x14        0x805e92fb  2           NtAreMappedFilesTheSame                             0x15        0x805aae6f  2           NtAssignProcessToJobObject                           0x16        0x804ebbcc  3           NtCallbackReturn                                     0x18        0x805eb49d  2           NtCancelIoFile                                       0x19        0x804f7445  2           NtCancelTimer                                       0x1a        0x8058c43a  1           NtClearEvent                                         0x1b        0x805768ac  1           NtClose                                             0x1c        0x80596eea  3           NtCloseObjectAuditAlarm                             0x1d        0x80626f6f  2           NtCompactKeys                                       0x1e        0x8065b8ff  3           NtCompareTokens                                     0x1f        0x8058dc82  1           NtCompleteConnectPort                               0x20        0x806271d6  1           NtCompressKey                                       0x21        0x8058c55a  8           NtConnectPort                                       0x22        0x804eb14b  2           NtContinue                                           0x23        0x805b0b1e  4           NtCreateDebugObject                                 0x24        0x805aabaf  3           NtCreateDirectoryObject                             0x25        0x80578522  5           NtCreateEvent                                       0x26        0x80668009  3           NtCreateEventPair                                   0x27        0x805790cb  b           NtCreateFile                                         0x28        0x8059f5ab  4           NtCreateIoCompletion                                 0x29        0x805e09eb  3           NtCreateJobObject                                   0x2a        0x80651805  3           NtCreateJobSet                                       0x2b        0x80592a39  7           NtCreateKey                                         0x2c        0x805f225d  8           NtCreateMailslotFile                                 0x2d        0x805863a1  4           NtCreateMutant                                       0x2e        0x8058f416  e           NtCreateNamedPipeFile                               0x2f        0x805c8e1e  4           NtCreatePagingFile                                   0x30        0x805a32a4  5           NtCreatePort                                         0x31        0x805bd684  8           NtCreateProcess                                     0x32        0x8058efe3  9           NtCreateProcessEx                                   0x33        0x806685b7  9           NtCreateProfile                                     0x34        0x80573eca  7           NtCreateSection                                     0x35        0x8059afa9  5           NtCreateSemaphore                                   0x36        0x805ab548  4           NtCreateSymbolicLinkObject                           0x37        0x80588254  8           NtCreateThread                                       0x38        0x805a2688  4           NtCreateTimer                                       0x39        0x805a62a4  d           NtCreateToken                                       0x3a        0x805bc212  5           NtCreateWaitablePort                                 0x3b        0x805b12c1  2           NtDebugActiveProcess                                 0x3c        0x805b17dc  3           NtDebugContinue                                     0x3d        0x80574c08  2           NtDelayExecution                                     0x3e        0x8059ab90  1           NtDeleteAtom                                         0x41        0x805b7979  1           NtDeleteFile                                         0x42        0x805eca87  1           NtDeleteKey                                         0x43        0x8065aa3a  3           NtDeleteObjectAuditAlarm                             0x44        0x805a20d4  2           NtDeleteValueKey                                     0x45        0x80586f5e  a           NtDeviceIoControlFile                               0x46        0x805c9f0b  1           NtDisplayString                                     0x47        0x8058051e  7           NtDuplicateObject                                   0x48        0x8059cc7c  6           NtDuplicateToken                                     0x4b        0x8059a085  6           NtEnumerateKey                                       0x4c        0x80667a42  3           NtEnumerateSystemEnvironmentValuesEx                 0x4d        0x8059d849  6           NtEnumerateValueKey                                 0x4e        0x805ac037  2           NtExtendSection                                     0x4f        0x805e41d5  6           NtFilterToken                                       0x50        0x8059e01a  3           NtFindAtom                                           0x51        0x805920a7  2           NtFlushBuffersFile                                   0x52        0x8058a8b5  3           NtFlushInstructionCache                             0x53        0x805e715b  1           NtFlushKey                                           0x54        0x805a130d  4           NtFlushVirtualMemory                                 0x55        0x80648b20  0           NtFlushWriteBuffer                                   0x56        0x8064852a  3           NtFreeUserPhysicalPages                             0x57        0x8057b2bf  4           NtFreeVirtualMemory                                 0x58        0x8057f504  a           NtFsControlFile                                     0x59        0x805e8674  2           NtGetContextThread                                   0x5a        0x8064de05  2           NtGetDevicePowerState                               0x5b        0x805e8ccb  4           NtGetPlugPlayEvent                                   0x5c        0x80544ec4  7           NtGetWriteWatch                                     0x5d        0x805f12e2  1           NtImpersonateAnonymousToken                         0x5e        0x80597fdf  2           NtImpersonateClientOfPort                           0x5f        0x8059b9c8  3           NtImpersonateThread                                 0x60        0x805b77c8  1           NtInitializeRegistry                                 0x61        0x8064dc59  4           NtInitiatePowerAction                               0x62        0x8058ec31  2           NtIsProcessInJob                                     0x63        0x8064ddf2  0           NtIsSystemResumeAutomatic                           0x64        0x805bc19c  2           NtListenPort                                         0x65        0x805b9dfe  1           NtLoadDriver                                         0x66        0x805b2d8f  2           NtLoadKey                                           0x67        0x8062758c  3           NtLoadKey2                                           0x68        0x805b4a6c  4           NtLoadKeyEx                                         0x69        0x805a2342  a           NtLockFile                                           0x6a        0x805e4eaa  2           NtLockProductActivationKeys                         0x6b        0x805de064  1           NtLockRegistryKey                                   0x6c        0x805e4a65  4           NtLockVirtualMemory                                 0x6d        0x805ab8ba  1           NtMakePermanentObject                               0x6e        0x805abb05  1           NtMakeTemporaryObject                               0x6f        0x80647392  3           NtMapUserPhysicalPages                               0x70        0x80647859  3           NtMapUserPhysicalPagesScatter                       0x71        0x80589905  a           NtMapViewOfSection                                   0x74        0x805ef59d  9           NtNotifyChangeDirectoryFile                         0x75        0x80599f1c  a           NtNotifyChangeKey                                   0x76        0x80599d2d  c           NtNotifyChangeMultipleKeys                           0x77        0x8058ef66  3           NtOpenDirectoryObject                               0x78        0x80599615  3           NtOpenEvent                                         0x79        0x806680f4  3           NtOpenEventPair                                     0x7a        0x8057909d  6           NtOpenFile                                           0x7b        0x80634e03  3           NtOpenIoCompletion                                   0x7c        0x805af8b0  3           NtOpenJobObject                                     0x7d        0x80578d88  3           NtOpenKey                                           0x7e        0x80586508  3           NtOpenMutant                                         0x7f        0x805ed885  c           NtOpenObjectAuditAlarm                               0x80        0x80593613  4           NtOpenProcess                                       0x81        0x8057e110  3           NtOpenProcessToken                                   0x82        0x8057e816  4           NtOpenProcessTokenEx                                 0x83        0x8058a94b  3           NtOpenSection                                       0x84        0x805b3152  3           NtOpenSemaphore                                     0x85        0x8058ea10  3           NtOpenSymbolicLinkObject                             0x86        0x805a2a8c  4           NtOpenThread                                         0x87        0x8057f976  4           NtOpenThreadToken                                   0x88        0x8057f8e5  5           NtOpenThreadTokenEx                                 0x89        0x805eb40f  3           NtOpenTimer                                         0x8a        0x805a24a2  3           NtPlugPlayControl                                   0x8b        0x805ae364  5           NtPowerInformation                                   0x8c        0x805a2c28  3           NtPrivilegeCheck                                     0x8d        0x805e48ce  6           NtPrivilegeObjectAuditAlarm                         0x8e        0x805a7bf0  5           NtPrivilegedServiceAuditAlarm                       0x8f        0x80584a67  5           NtProtectVirtualMemory                               0x90        0x8059f752  2           NtPulseEvent                                         0x91        0x80585755  2           NtQueryAttributesFile                               0x94        0x80508c75  2           NtQueryDebugFilterState                             0x95        0x8057ffd5  2           NtQueryDefaultLocale                                 0x96        0x80587c53  1           NtQueryDefaultUILanguage                             0x97        0x8058731c  b           NtQueryDirectoryFile                                 0x98        0x80595d65  7           NtQueryDirectoryObject                               0x9a        0x80635410  9           NtQueryEaFile                                       0x9b        0x805a2d89  5           NtQueryEvent                                         0x9c        0x8059b735  2           NtQueryFullAttributesFile                           0x9d        0x805edffe  5           NtQueryInformationAtom                               0x9e        0x805852cf  5           NtQueryInformationFile                               0x9f        0x805af5ab  5           NtQueryInformationJobObject                         0xa0        0x80644a66  5           NtQueryInformationPort                               0xa1        0x8057fdea  5           NtQueryInformationProcess                           0xa2        0x80576dc6  5           NtQueryInformationThread                             0xa3        0x8057e718  5           NtQueryInformationToken                             0xa4        0x8059d58c  1           NtQueryInstallUILanguage                             0xa5        0x80668a4e  2           NtQueryIntervalProfile                               0xa6        0x80634ebc  5           NtQueryIoCompletion                                 0xa7        0x80580c31  5           NtQueryKey                                           0xa8        0x80626765  6           NtQueryMultipleValueKey                             0xa9        0x80668412  5           NtQueryMutant                                       0xaa        0x805f1cad  5           NtQueryObject                                       0xab        0x80626953  2           NtQueryOpenSubKeys                                   0xac        0x80626b89  4           NtQueryOpenSubKeysEx                                 0xad        0x8057f59e  2           NtQueryPerformanceCounter                           0xae        0x80635c9d  9           NtQueryQuotaInformationFile                         0xaf        0x8058679a  5           NtQuerySection                                       0xb0        0x805997e7  5           NtQuerySecurityObject                               0xb1        0x80667325  5           NtQuerySemaphore                                     0xb2        0x8058e816  3           NtQuerySymbolicLinkObject                           0xb3        0x80667a76  4           NtQuerySystemEnvironmentValue                       0xb5        0x8057cbe2  4           NtQuerySystemInformation                             0xb6        0x80597e57  1           NtQuerySystemTime                                   0xb7        0x8058c677  5           NtQueryTimer                                         0xb8        0x8059e436  3           NtQueryTimerResolution                               0xb9        0x80577d61  6           NtQueryValueKey                                     0xba        0x80582264  6           NtQueryVirtualMemory                                 0xbb        0x8057960d  5           NtQueryVolumeInformationFile                         0xbc        0x8058c78e  5           NtQueueApcThread                                     0xbd        0x804eb198  3           NtRaiseException                                     0xbe        0x80667075  6           NtRaiseHardError                                     0xbf        0x8057d886  9           NtReadFile                                           0xc0        0x805aeb82  9           NtReadFileScatter                                   0xc1        0x8059859d  6           NtReadRequestData                                   0xc2        0x805861e0  5           NtReadVirtualMemory                                 0xc3        0x80588402  1           NtRegisterThreadTerminatePort                       0xc4        0x80574b77  2           NtReleaseMutant                                     0xc5        0x80598eb5  3           NtReleaseSemaphore                                   0xc6        0x80577945  5           NtRemoveIoCompletion                                 0xc7        0x8066e462  2           NtRemoveProcessDebug                                 0xc8        0x80626dec  2           NtRenameKey                                         0xc9        0x8062748f  3           NtReplaceKey                                         0xca        0x80580e50  2           NtReplyPort                                         0xcb        0x8057b2a0  4           NtReplyWaitReceivePort                               0xcc        0x8057adb0  5           NtReplyWaitReceivePortEx                             0xcd        0x80644b39  2           NtReplyWaitReplyPort                                 0xce        0x80667a4f  1           NtModifyDriverEntry                                 0xcf        0x805985f2  2           NtRequestPort                                       0xd0        0x8058cbc3  3           NtRequestWaitReplyPort                               0xd1        0x8064dc04  1           NtRequestWakeupLatency                               0xd2        0x805a4751  2           NtResetEvent                                         0xd3        0x8054543e  3           NtResetWriteWatch                                   0xd4        0x80627286  3           NtRestoreKey                                         0xd5        0x80650ff5  1           NtResumeProcess                                     0xd6        0x805806fa  2           NtResumeThread                                       0xd7        0x80627325  2           NtSaveKey                                           0xd8        0x806273b2  3           NtSaveKeyEx                                         0xd9        0x80625f0d  3           NtSaveMergedKeys                                     0xda        0x8058d4b2  9           NtSecureConnectPort                                 0xdd        0x805b16f1  2           NtSetContextThread                                   0xde        0x8066e4f1  3           NtSetDebugFilterState                               0xdf        0x805ca1ac  1           NtSetDefaultHardErrorPort                           0xe0        0x805b748b  2           NtSetDefaultLocale                                   0xe1        0x805b7433  1           NtSetDefaultUILanguage                               0xe2        0x80667a5c  2           NtSetBootEntryOrder                                 0xe3        0x8063594e  4           NtSetEaFile                                         0xe4        0x8057abd7  2           NtSetEvent                                           0xe5        0x80575690  1           NtSetEventBoostPriority                             0xe6        0x806683b0  1           NtSetHighEventPair                                   0xe7        0x806682e6  1           NtSetHighWaitLowEventPair                           0xe8        0x8066e255  5           NtSetInformationDebugObject                         0xe9        0x80578747  5           NtSetInformationFile                                 0xea        0x805e0b5f  4           NtSetInformationJobObject                           0xeb        0x80626400  4           NtSetInformationKey                                 0xec        0x8059223e  4           NtSetInformationObject                               0xed        0x80580221  4           NtSetInformationProcess                             0xee        0x80577629  4           NtSetInformationThread                               0xef        0x805a6844  4           NtSetInformationToken                               0xf0        0x806685a0  2           NtSetIntervalProfile                                 0xf1        0x8057c39a  5           NtSetIoCompletion                                   0xf2        0x806508db  6           NtSetLdtEntries                                     0xf3        0x8066834f  1           NtSetLowEventPair                                   0xf4        0x8066827d  1           NtSetLowWaitHighEventPair                           0xf5        0x80635c7e  4           NtSetQuotaInformationFile                           0xf6        0x805a5626  3           NtSetSecurityObject                                 0xf7        0x80667d39  2           NtSetSystemEnvironmentValue                         0xf8        0x80667a35  5           NtSetSystemEnvironmentValueEx                       0xf9        0x80597238  3           NtSetSystemInformation                               0xfa        0x8067b325  3           NtSetSystemPowerState                               0xfb        0x8066697b  2           NtSetSystemTime                                     0xfc        0x805abc19  2           NtSetThreadExecutionState                           0xfd        0x804ee9bf  7           NtSetTimer                                           0xfe        0x805acb3b  3           NtSetTimerResolution                                 0xff        0x805bc73c  1           NtSetUuidSeed                                       0x100       0x80592859  6           NtSetValueKey                                       0x101       0x806361ed  5           NtSetVolumeInformationFile                           0x102       0x8066614b  1           NtShutdownSystem                                     0x103       0x80546d9e  4           NtSignalAndWaitForSingleObject                       0x104       0x806687ec  1           NtStartProfile                                       0x105       0x80668999  1           NtStopProfile                                       0x106       0x80650fa0  1           NtSuspendProcess                                     0x107       0x805b0163  2           NtSuspendThread                                     0x108       0x80668af2  6           NtSystemDebugControl                                 0x109       0x80651a9b  2           NtTerminateJobObject                                 0x10a       0x80590cba  2           NtTerminateProcess                                   0x10b       0x80576714  2           NtTerminateThread                                   0x10c       0x8057e4f8  0           NtTestAlert                                         0x10d       0x8051ed5e  4           NtTraceEvent                                         0x10e       0x80667a69  4           NtTranslateFilePath                                 0x10f       0x806383c5  1           NtUnloadDriver                                       0x110       0x8062747c  1           NtUnloadKey                                         0x111       0x80625fc6  2           NtUnloadKey2                                         0x112       0x806261cb  2           NtUnloadKeyEx                                       0x113       0x805a220b  5           NtUnlockFile                                         0x114       0x805ae977  4           NtUnlockVirtualMemory                               0x115       0x80589e79  2           NtUnmapViewOfSection                                 0x116       0x805c5aa2  2           NtVdmControl                                         0x117       0x805b07c8  4           NtWaitForDebugEvent                                 0x118       0x80574d38  5           NtWaitForMultipleObjects                             0x119       0x8057428d  3           NtWaitForSingleObject                               0x11a       0x8066821c  1           NtWaitHighEventPair                                 0x11b       0x806681bb  1           NtWaitLowEventPair                                   0x11c       0x80578248  9           NtWriteFile                                         0x11d       0x805aefe1  9           NtWriteFileGather                                   0x11e       0x805990a6  6           NtWriteRequestData                                   0x11f       0x805862d7  5           NtWriteVirtualMemory                                 0x120       0x805091c1  0           NtYieldExecution                                     0x121       0x805d7d7f  4           NtCreateKeyedEvent                                   0x122       0x8058f5cf  3           NtOpenKeyedEvent                                     0x123       0x8066922f  4           NtReleaseKeyedEvent                                 0x124       0x806694aa  4           NtWaitForKeyedEvent                                 0x125       0x8064f170  0           NtQueryPortInformationProcess                       0x126       0x8064f1a4  0           NtGetCurrentProcessorNumber     参考资料: 1.MSDN系列(3)--Administrator用户直接获取SYSTEM权限  scz     http://www.nsfocus.net/index.php?act=magazine&do=view&mid=1900 2.hooking functions not exported by ntoskrnl     http://www.rootkit.com/newsread.php?newsid=151 3.Simple Hooking of Functions not Exported by Ntoskrnl.exe     http://www.rootkit.com/newsread.php?newsid=248

    最新回复(0)