cdo

导航

在Windows 2003中HOOK ZwCreateProcessEx

创建时间: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: %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
    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

posted on 2005-06-19 10:47  Cdo  阅读(1650)  评论(0编辑  收藏  举报