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

S.l.e!ep.¢%

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

[轉] hook PsCreateSystemThread

Posted on 2009-09-17 21:59 S.l.e!ep.¢% 閱讀(791) 評論(0)  編輯 收藏 引用 所屬分類: Windows WDM

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;
}
很多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;
}
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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福利av久久av| 亚洲免费福利视频| 欧美一区二区三区另类| 欧美在线影院在线视频| 美日韩免费视频| 亚洲视频在线视频| 久久激情五月婷婷| 99国产精品| 亚洲国产天堂久久国产91| 欧美国产日韩精品| 久久国产精品电影| 亚洲欧美日韩中文在线制服| 亚洲第一中文字幕| 欧美在线亚洲综合一区| 一区二区三区视频在线观看 | 欧美一区国产在线| 日韩午夜在线电影| 国产香蕉97碰碰久久人人| 欧美日韩在线精品| 欧美a级在线| 欧美日本高清| 欧美视频一区二区三区四区| 牛人盗摄一区二区三区视频| 久久精品主播| 欧美精品午夜| 欧美体内she精视频| 国产精品乱看| 国产午夜精品视频免费不卡69堂| 噜噜爱69成人精品| 久久伊人免费视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美激情亚洲国产| 久久蜜桃资源一区二区老牛| 久久色在线观看| 免费看av成人| 午夜精品999| 亚洲午夜激情免费视频| 亚洲午夜国产一区99re久久| 亚洲一区二区在线播放| 久久久久久久国产| 亚洲私人影吧| 欧美二区乱c少妇| 国产毛片精品视频| 亚洲大胆av| 久久精品国产第一区二区三区| 久久人人97超碰人人澡爱香蕉| 中文在线不卡| 亚洲激情欧美激情| 欧美69视频| 午夜精品在线看| 久久久久九九九| 日韩一级片网址| 美女福利精品视频| 国产亚洲午夜| 欧美主播一区二区三区| 亚洲精品一区二区三区四区高清 | 西西人体一区二区| 欧美日韩蜜桃| 一区二区三区国产精华| 亚洲人成毛片在线播放| 欧美另类专区| 亚洲在线成人| 亚洲综合二区| 亚洲黄网站黄| 一卡二卡3卡四卡高清精品视频| 欧美成人黑人xx视频免费观看| 国产一区二区无遮挡| 久久亚洲欧洲| 欧美激情视频一区二区三区免费 | 国产真实久久| 亚洲精品欧美在线| 亚洲美女少妇无套啪啪呻吟| 欧美人与性动交cc0o| 亚洲欧美大片| 免费视频最近日韩| 午夜精品免费| 美女露胸一区二区三区| 亚洲一级在线| 欧美jizz19性欧美| 久久精品一区二区三区中文字幕| 巨乳诱惑日韩免费av| 激情亚洲网站| 亚洲精品色婷婷福利天堂| 这里是久久伊人| 最新亚洲一区| 亚洲国产精品一区二区第一页| 欧美日韩在线一二三| 亚洲国产91| 亚洲国产高清一区| 亚洲欧美综合国产精品一区| 一区二区电影免费在线观看| 久久精品首页| 久热这里只精品99re8久| 国产麻豆91精品| 欧美一区二区精品久久911| 亚洲综合成人婷婷小说| 午夜精品福利电影| 欧美一区二区在线免费播放| 亚洲欧美变态国产另类| 一本久久青青| 久久只有精品| 国产一区二区精品久久| 在线视频你懂得一区| 一区二区免费在线播放| 欧美日韩综合在线| 99精品99| 久久综合激情| 一区二区三区毛片| 国产精品久久久久天堂| 亚洲精品在线视频观看| 国自产拍偷拍福利精品免费一| 久久精品综合| 一本一道久久综合狠狠老精东影业 | 国产欧美日韩免费看aⅴ视频| 欧美国产日韩一区二区在线观看| 日韩视频第一页| 国产自产在线视频一区| 欧美高清在线一区| 欧美亚洲免费| 亚洲乱码国产乱码精品精| 久久福利电影| 精品999日本| 国产精品腿扒开做爽爽爽挤奶网站| 久久国产精品99国产精| 亚洲少妇在线| 欧美激情国产高清| 免费毛片一区二区三区久久久| 亚洲神马久久| 在线精品视频免费观看 | 午夜精品视频一区| 欧美在线观看日本一区| 久久久久久免费| 亚洲欧美一区在线| 日韩一级免费| 韩国一区电影| 欧美亚一区二区| 狼人天天伊人久久| 米奇777超碰欧美日韩亚洲| 亚洲黄色小视频| 亚洲国产综合91精品麻豆| 亚洲大片一区二区三区| 你懂的视频一区二区| 欧美国产精品一区| 亚洲毛片在线免费观看| 中文一区在线| 久久精品国产精品亚洲综合| 久久国产精品99国产精| 久久午夜av| 久久久精品免费视频| 美女视频黄a大片欧美| 六月婷婷一区| 国产精品入口尤物| 亚洲午夜91| 久久亚洲图片| 国产精品欧美一区二区三区奶水| 国产亚洲精品v| 激情综合色丁香一区二区| 一区二区电影免费观看| 美女日韩欧美| 在线观看中文字幕亚洲| 亚洲免费一在线| 亚洲一区二区三区精品动漫| 欧美日韩在线免费| 一区二区三区久久精品| 亚洲午夜视频| 红杏aⅴ成人免费视频| 麻豆精品视频在线观看| 免费观看成人鲁鲁鲁鲁鲁视频 | 99精品国产99久久久久久福利| 久久久91精品| 欧美成人激情在线| 亚洲欧美日韩在线不卡| 久久成人一区二区| 一级日韩一区在线观看| 亚洲综合色丁香婷婷六月图片| 国产一区二区三区在线观看网站| 麻豆国产精品777777在线| 欧美aa在线视频| 久久精品中文字幕一区| 欧美大片在线观看一区二区| 亚洲欧美日本精品| 欧美精品免费观看二区| 久久露脸国产精品| 国产区精品在线观看| 91久久精品国产91久久| 国产欧美日韩不卡免费| 99综合精品| 一区二区精品在线观看| 欧美成年人在线观看| 老妇喷水一区二区三区| 国产日韩精品一区二区三区| 99re8这里有精品热视频免费| 亚洲电影免费观看高清完整版在线观看| 日韩一级在线| 先锋亚洲精品| 一本大道久久a久久精二百| 亚洲激情在线观看视频免费| 久久精品国产精品亚洲| 久久视频免费观看| 国内精品久久久久伊人av|