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

前世今非

前世五百次的回眸,換來今世的一次擦肩而過。

hook PsCreateSystemThread

很多RootKit在ring0下利用PsCreateSystemThread來創建系統線程做某些WS的事情,我們平時不利用ARK工具的話,是很難發現這些線程,在某些情況下,需要anti一些特定的rootkit,這里給出一個簡單的示例:

.h:
#pragma once

#include 
<ntddk.h> 

typedef 
long LONG;
typedef unsigned 
char  BOOL, *PBOOL;
typedef unsigned 
char  BYTE, *PBYTE;
typedef unsigned 
long  DWORD, *PDWORD;
typedef unsigned 
short WORD, *PWORD;

typedef 
void  *HMODULE;
typedef 
long NTSTATUS, *PNTSTATUS;
typedef unsigned 
long DWORD;
typedef DWORD 
* PDWORD;
typedef unsigned 
long ULONG;
typedef unsigned 
long ULONG_PTR;
typedef ULONG 
*PULONG;
typedef unsigned 
short WORD;
typedef unsigned 
char BYTE; 
typedef unsigned 
char UCHAR;
typedef unsigned 
short USHORT;
typedef 
void *PVOID;
typedef BYTE BOOLEAN;
#define SEC_IMAGE    0x01000000

NTSTATUS
  PsLookupProcessByProcessId(
    IN HANDLE ProcessId,
    OUT PEPROCESS 
*Process
    );

.c:
#include "HookPsThread.h"
/******************************************************************************

    Hook PsCreateSystemThread
    out adress

*****************************************************************************
*/


//=============================================================================
//        Version Define
//=============================================================================
#define EPROCESS_SIZE            1
#define PEB_OFFSET                2   
#define FILE_NAME_OFFSET        3   
#define PROCESS_LINK_OFFSET     4   
#define PROCESS_ID_OFFSET       5 
#define EXIT_TIME_OFFSET        6 
//=============================================================================
//        Logic Define
//=============================================================================
ULONG PsCreateSystemThreadAddr = 0;
char PsCreateSystemThreadData[5= {0};

DWORD  ProcessNameOffset;

//-----------------------------------------------------------------------------
//        GetPlantformDependentInfo
//-----------------------------------------------------------------------------
DWORD GetPlantformDependentInfo( DWORD dwFlag )    
{     
    DWORD current_build;     
    DWORD ans 
= 0;     
   
    PsGetVersion(NULL, NULL, 
&current_build, NULL);     
   
    
switch ( dwFlag )    
    
{     
    
case EPROCESS_SIZE:     
        
if (current_build == 2195) ans = 0 ;        // 2000,當前不支持2000,下同    
        if (current_build == 2600) ans = 0x25C;     // xp    
        if (current_build == 3790) ans = 0x270;     // 2003    
        break;     
    
case PEB_OFFSET:     
        
if (current_build == 2195)  ans = 0;     
        
if (current_build == 2600)  ans = 0x1b0;     
        
if (current_build == 3790)  ans = 0x1a0;    
        
break;     
    
case FILE_NAME_OFFSET:     
        
if (current_build == 2195)  ans = 0;     
        
if (current_build == 2600)  ans = 0x174;     
        
if (current_build == 3790)  ans = 0x164;    
        
break;     
    
case PROCESS_LINK_OFFSET:     
        
if (current_build == 2195)  ans = 0;     
        
if (current_build == 2600)  ans = 0x088;     
        
if (current_build == 3790)  ans = 0x098;    
        
break;     
    
case PROCESS_ID_OFFSET:     
        
if (current_build == 2195)  ans = 0;     
        
if (current_build == 2600)  ans = 0x084;     
        
if (current_build == 3790)  ans = 0x094;    
        
break;     
    
case EXIT_TIME_OFFSET:     
        
if (current_build == 2195)  ans = 0;     
        
if (current_build == 2600)  ans = 0x078;     
        
if (current_build == 3790)  ans = 0x088;    
        
break;     
    }
     
    
return ans;     
}



//-----------------------------------------------------------------------------
//        GetFunctionAddr
//-----------------------------------------------------------------------------
ULONG GetFunctionAddr( IN PCWSTR FunctionName)
{
    UNICODE_STRING UniCodeFunctionName;
    RtlInitUnicodeString( 
&UniCodeFunctionName, FunctionName );
    
return (ULONG)MmGetSystemRoutineAddress( &UniCodeFunctionName );   
}


//-----------------------------------------------------------------------------
//        _PsCreateSystemThread
//-----------------------------------------------------------------------------
NTSTATUS _PsCreateSystemThread(IN PKSTART_ROUTINE  StartRoutine)
{
    ULONG RAddr 
= (ULONG)StartRoutine;  //Routine Address
    
//Get Process Info
    LPTSTR   CurProc;
    PEPROCESS EProcess;
    PsLookupProcessByProcessId(PsGetCurrentProcessId(), 
&EProcess);
    CurProc 
=(LPTSTR)EProcess;
    CurProc 
=CurProc+ProcessNameOffset;

    
if (strncmp((char*)CurProc,"System",6!= 0)
    
{
        DbgPrint(
"Current Process : %s, StartRoutine : %X\n", (char *)CurProc, StartRoutine);
    }

    
return 0;
}


//-----------------------------------------------------------------------------
//        MyPsCreateSystemThread
//-----------------------------------------------------------------------------
__declspec (naked)void MyPsCreateSystemThread()
{
    _asm
    
{
        pushad
        push [esp
+20h+18h]
        call _PsCreateSystemThread
        popad
        
        mov edi,edi
        push ebp
        mov ebp,esp
        jmp PsCreateSystemThreadAddr
    }

}


//-----------------------------------------------------------------------------
//        Install Hook
//-----------------------------------------------------------------------------
VOID InHook()
{
    PsCreateSystemThreadAddr 
= GetFunctionAddr(L"PsCreateSystemThread");

    __asm
    
{
        push    eax
        mov        eax, CR0
        and        eax, 0FFFEFFFFh
        mov        CR0, eax
        pop        eax
    }


    
//Save asmCode
    memcpy(PsCreateSystemThreadData, (PVOID)PsCreateSystemThreadAddr, 5);
    (ULONG)PsCreateSystemThreadAddr 
+= 5;

    
//Inline PsCreateSystemThread
    __asm
    
{
        mov esi, PsCreateSystemThreadAddr
        sub esi, 
5
        mov 
byte ptr[esi], 0xE9
        lea eax, [MyPsCreateSystemThread]
        sub eax, esi
        sub eax, 
5
        mov dword ptr [esi
+1],eax
    }


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


    DbgPrint(
"Hooked OK.\n");
    
return;
}


//-----------------------------------------------------------------------------
//        Uninstall Hook
//-----------------------------------------------------------------------------
VOID UnHook()
{
    __asm
    
{
        push    eax
        mov        eax, CR0
        and        eax, 0FFFEFFFFh
        mov        CR0, eax
        pop        eax
    }

    (ULONG)PsCreateSystemThreadAddr 
-= 5;
    memcpy((PVOID)PsCreateSystemThreadAddr, PsCreateSystemThreadData, 
5);
    __asm
    
{
        push    eax
        mov        eax, CR0
        or        eax, NOT 0FFFEFFFFh
        mov        CR0, eax
        pop        eax
    }

    DbgPrint(
"UnHook OK.\n");
    
return;
}


//-----------------------------------------------------------------------------
//        Driver UnLoad
//-----------------------------------------------------------------------------
void OnUnload(PDRIVER_OBJECT pDriverObj)
{
    UnHook();
    DbgPrint(
"UnLoading Driver");
}


//-----------------------------------------------------------------------------
//        Driver LoadEntry
//-----------------------------------------------------------------------------
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString)
{
    pDriverObj
->DriverUnload = OnUnload;

    DbgPrint(
"Loading Driver");
    ProcessNameOffset 
= GetPlantformDependentInfo(FILE_NAME_OFFSET);
    InHook();
    
return STATUS_SUCCESS;
}

posted on 2009-09-17 20:14 梵天 閱讀(2328) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

導航

<2009年9月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

統計

常用鏈接

留言簿

隨筆分類

隨筆檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜精品久久久久久久久久久| 亚洲欧美激情在线视频| 欧美国产在线电影| 久久亚洲春色中文字幕久久久| 久久久久久久国产| 欧美韩日高清| 加勒比av一区二区| 久久久久www| 欧美刺激性大交免费视频| 欧美电影免费观看网站| 欧美日韩免费观看一区| 国产精品午夜春色av| 精品96久久久久久中文字幕无| 亚洲成在人线av| 亚洲午夜精品久久| 久久青草欧美一区二区三区| 亚洲风情在线资源站| 亚洲作爱视频| 久久精品水蜜桃av综合天堂| 欧美激情视频在线播放| 国产一级揄自揄精品视频| 亚洲人线精品午夜| 久久精品30| 日韩视频欧美视频| 开心色5月久久精品| 国产精品欧美日韩一区二区| 亚洲黄色一区| 久久久久久久久久久久久久一区| 亚洲人成人77777线观看| 欧美在线视频一区二区| 国产精品白丝av嫩草影院| 亚洲日本aⅴ片在线观看香蕉| 性欧美精品高清| 亚洲精品小视频| 久久免费精品视频| 国产性做久久久久久| 亚洲视频视频在线| 亚洲电影中文字幕| 久久色在线观看| 国产视频一区在线观看一区免费| 在线一区二区三区四区| 欧美激情亚洲综合一区| 久久精品视频va| 国内精品国产成人| 久久精品国产久精国产一老狼 | 美女任你摸久久| 国产亚洲综合性久久久影院| 亚洲专区免费| 在线视频亚洲欧美| 欧美日韩视频专区在线播放| 亚洲国产专区校园欧美| 免费永久网站黄欧美| 久久精品国产一区二区电影| 国产日韩欧美不卡在线| 欧美有码在线观看视频| 亚洲欧美久久久| 国产日韩高清一区二区三区在线| 亚洲一区二区免费在线| 99精品视频免费| 欧美午夜剧场| 小黄鸭精品aⅴ导航网站入口| 亚洲欧洲在线免费| 国产精品99久久99久久久二8 | 性做久久久久久久久| 在线视频欧美一区| 国产精品视频yy9299一区| 亚洲欧美日韩另类精品一区二区三区 | 亚洲成人影音| 亚洲电影免费观看高清完整版| 久久久免费观看视频| 黄色亚洲在线| 亚洲成人资源| 欧美日韩国产a| 亚洲影院免费观看| 欧美在线日韩在线| 亚洲国产三级网| 99视频超级精品| 国产精品欧美在线| 免费成人性网站| 欧美日韩国产精品一区| 亚洲欧美日韩另类| 久久全国免费视频| 亚洲视频你懂的| 久久精品国产视频| 一本色道久久88精品综合| 亚洲午夜一区二区| 原创国产精品91| 日韩视频一区二区三区在线播放| 国产精品日日做人人爱| 久久手机免费观看| 欧美日韩国产精品一卡| 久久久久国内| 欧美日韩在线综合| 免费成人黄色| 国产精品无码专区在线观看| 欧美不卡视频| 国产乱子伦一区二区三区国色天香| 女人色偷偷aa久久天堂| 国产精品久久| 亚洲欧洲久久| 亚洲第一天堂av| 亚洲欧美色婷婷| 亚洲婷婷免费| 欧美xx69| 欧美成人亚洲成人| 国产日韩欧美一区二区| 99re6这里只有精品| 亚洲第一天堂无码专区| 亚洲社区在线观看| 亚洲美女区一区| 久久综合国产精品| 欧美怡红院视频| 国产精品国产精品| 99re在线精品| 日韩视频在线观看一区二区| 久久久久久欧美| 久久精品国产精品| 国产伦精品一区二区三区在线观看| 亚洲国产精品999| 亚洲成人中文| 久久亚洲国产精品一区二区| 久久久蜜桃精品 | 在线日韩中文字幕| 欧美一区精品| 欧美在线观看www| 性做久久久久久久免费看| 欧美精品午夜| 亚洲国产一区在线| 亚洲区一区二区三区| 免播放器亚洲| 亚洲国产岛国毛片在线| 亚洲品质自拍| 欧美激情视频免费观看| 最新日韩在线| 亚洲乱码日产精品bd| 欧美精品一区二区蜜臀亚洲| 亚洲国产激情| 亚洲精品视频在线看| 欧美激情视频在线免费观看 欧美视频免费一| 久热精品视频在线观看一区| 国产在线播精品第三| 久久久久久亚洲综合影院红桃| 久久亚洲影音av资源网| 在线免费观看日本一区| 麻豆精品在线视频| 亚洲国产成人午夜在线一区| aⅴ色国产欧美| 国产精品视频精品| 久久精精品视频| 欧美激情第一页xxx| 夜夜狂射影院欧美极品| 国产精品高潮呻吟久久av无限| 亚洲性夜色噜噜噜7777| 欧美亚洲免费在线| 黄色工厂这里只有精品| 欧美激情aaaa| 亚洲一区二区三区高清| 久久夜色精品亚洲噜噜国产mv | 欧美在线不卡视频| 麻豆精品视频在线观看| 亚洲区在线播放| 国产精品久久国产三级国电话系列| 亚洲视频免费在线| 久久综合999| 一区二区精品在线观看| 国产欧美一区二区三区久久| 老色鬼久久亚洲一区二区| 日韩手机在线导航| 久久亚洲综合色一区二区三区| 亚洲美女啪啪| 国产亚洲一本大道中文在线| 欧美国产日本高清在线| 午夜精品久久久久久久久| 亚洲国产高清aⅴ视频| 欧美一区午夜精品| 亚洲免费高清| 亚洲激情网站免费观看| 亚洲一区影音先锋| 在线欧美日韩国产| 国产精品国产三级国产a| 老司机久久99久久精品播放免费 | 亚洲大片免费看| 性欧美长视频| 一区二区三区免费网站| 影院欧美亚洲| 国产欧美一区二区三区久久人妖 | 夜夜嗨av色一区二区不卡| 影音先锋中文字幕一区二区| 欧美日韩一区综合| 鲁大师成人一区二区三区| 一本久道久久久| 国语精品中文字幕| 国产精品久久久久久超碰| 欧美精品久久久久久久免费观看 | 欧美日韩综合不卡| 麻豆精品精华液| 久久精品伊人| 午夜激情综合网| 一区二区不卡在线视频 午夜欧美不卡'| 免费日韩成人|