岁月联盟 - 技术社区 - BBS.SYUE.COM's Archiver

猪猪 发表于 2007-2-21 03:54

在Windows 2003中HOOK ZwCreateProcessEx

文章作者: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 = 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: %08X\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
  [url]http://www.nsfocus.net/index.php?act=magazine&do=view&mid=1900[/url]

2.hooking functions not exported by ntoskrnl
  [url]http://www.rootkit.com/newsread.php?newsid=151[/url]

3.Simple Hooking of Functions not Exported by Ntoskrnl.exe
  [url]http://www.rootkit.com/newsread.php?newsid=248[/url]

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.