久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

《Undocumented Windows 2000 Secrets》翻譯 --- 3

瀏覽:118日期:2023-08-27 13:21:01

第一章 Windows 2000對調試技術的支持

翻譯:Kendiv

更新:Monday, January 17, 2005

枚舉系統模塊和驅動(Drivers)

psapi.dll可以返回當前內存中的內核模塊。這本是非常簡單的工作。psapi.dll的EnumDeviceDrivers()函數接受一個PVOID類型的數組,它將用當前活動的內核驅動模塊(active kernel-mode driver)的映像基址(image base address)來填充這個數組,這包括基本的內核模塊ntdll.dll、ntoskrnl.exe、Win32K.sys、hal.dll和bootvid.dll。返回值是這些可執行文件映射到的虛擬內存地址(譯注,也稱作線性地址)。如果你使用內核調試器或其他調試工具檢查這些地址的最初幾個字節,你將清楚地認出那個有名的Dos stub程序,它以著名的Mark Zbikowski的首字母大寫“MZ”開始,內含一個文本消息--“This program cannot be run in DOS mode”或類似的東西。列表1-3展示了一個使用EnumDeviceDrivers()的簡單函數,以及EnumDeviceDrivers函數的原型。

BOOL WINAPI EnumDeviceDrivers ( PVOID* lpImageBase,

DWord; cb,

PDWORD lpcbNeeded);

PPVOID WINAPI dbgDriverAddresses( PDWORD pdCount )

{

DWORD dSize;

DWORD dCount = 0;

PPVOID ppList = NULL;

dSize = SIZE_MINIMUM * sizeof( PVOID );

while ( (ppList = dbgMemoryCreate(dSize)) != NULL )

{

if ( EnumDeviceDrivers( ppList, dSize, &dCount) && (dCount < dSize) )

{

dCount /= sizeof( PVOID );

break;

}

dCount = 0;

ppList = dbgMemoryDestroy( ppList );

if ( (dSize <<= 1) > (SIZE_MAXIMUM * sizeof( PVOID )))

{

break;

}

}

if ( pdCount != NULL )

{

*pdCount = dCount;

}

return ppList;

}

列表1-3枚舉系統模塊地址

EnumDeviceDrivers()期望三個參數:一個數組指針,一個表示輸入大小的值以及一個用于輸出的類型為DWORD的變量。第二個參數指定了傳入的數組的字節數,第三個參數表示復制到該數組中的字節數。因此,你必須將返回值除以sizeof(PVOID)來確定有多少個地址數據復制到了數組中。不幸的是,該函數不能幫助你確定該提供多大的數組,盡管它實際上知道有多少個Driver在運行。但它僅僅告訴你返回了多少字節,而且,如果數組太小,它會隱藏多出的字節。因此,你必須使用無聊的trial-and-error循環來確定適當的數組大小,就如同列表1-3所示的那樣,只要返回值與數組大小相同就假定還有數據未復制到數組中。在剛開始時,代碼中使用了一個合理的最小值--256(由SIZE_MINIMUM表示),這通常都足夠大了,但是如果不夠的話,在開始新的循環時,數組大小會增加為原來的2倍,直到獲取了所有的指針或者數組大小超過了65,536。數組使用的內存緩沖區由兩個幫助函數dbgMemoryCreate()和dbgMemoryDestroy()提供,這兩個函數只是Win32函數LocalAlloc和LocalFree的外包而已,這兒就不列出了。

BOOL WINAPI EnumDeviceDrivers( PVOID* lpImageBase,

DWORD; cb,

DWORD* lpcbNeeded)

{

SYSTEM_MODULE_INFORMATION; smi;

PSYSTEM_MODULE_INFORMATION psmi;

DWORD;;;dSize, i;

NTSTATUSns;

BOOL;;;;fOk = FALSE;

ns = NtQuerySystemInformation( SystemModuleInformation,

&smi, sizeof(smi),NULL);

if ( (STATUS_SUCCESS == ns) | (STATUS_INFO_LENGTH_MISMATCH == ns) )

{

dSize = sizeof(SYSTEM_MODULE_INFORMATION)

+ ;(smi.dCount*sizeof(SYSTEM_MODULE));

if ( (psmi = LocalAlloc(LEME_FIXED,dSize)) != NULL )

{

ns = NtQuerySystemInformation( SystemModuleInformation,psmi,dSize,NULL );

if ( ns == STATUS_SUCCESS )

{

for( i = 0; (i < psmi->dCount) && (i < cb/sizeof(DWORD))i++)

lpImageBase[i] = psmi->aModules[i].pImageBase;

*lpcbNeeded = i*sizeof(DWORD);

fOk = TRUE;

}

LocalFree(psmi);

if ( !fOk ); SetLastError( RtlNtStatusToDosError(ns) );

}

}

else

SetLastError( RtlNtStatusToDosError(ns) );

return fOk;

}

列表1-4; EnumDeviceDrivers函數的示列

列表1-4列出了EnumDeviceDrivers()一種可能的實現方式。注意這并不是來自psapi.dll的原始代碼。但通過C編譯器它可以變成等效的二進制代碼。為了保持簡單干凈,我省略了源代碼中易分散注意力的細節,比如結構化異常等。在列表1-4的中間,你會看到NtQuerySystemInformation()函數作了很多工作。這是我非常喜歡的Windows 2000函數之一,因為該函數可以訪問多種重要的數據結構,如驅動、進程、線程、句柄(handle)和LPC端口列表等等。我的文章“Inside Windows NT Sytem Data”(出版于1999年11月的Dr.Dobb’s Journal)在第一時間提供了有關該函數的內部信息及其搭檔函數NtSetSystemInformation()的文檔化資料。另外的全面講述這兩個函數的文檔可以在Gary Nebbett的《Indispendsable Windows NT/2000 Native API Reference》中找到。

不要過于擔心列表1-4列出的EnumDeviceDrivers()函數的實現細節。我增加這些代碼片斷只是為了例舉該函數有趣的一面,這像一根紅線貫穿于psapi.dll。在使用SystemModuleInformation標志第二次調用NtQuerySystemInformation()獲取了完整的驅動列表后,代碼遍歷驅動模塊數組并將其pImageBase成員復制到調用者提供的指針數組(名為lpImageBase[])中。這似乎很正確,但除非你不知道NtQuerySystemInformation提供的模塊數組所包含的其他信息。這些數據結構都是沒有文檔化的,但是我現在可以告訴你,這些信息同樣是有關模塊在內存中的大小、它們的路徑和名稱、引用計數(load counts)和其他一些標志信息的。甚至文件名在路徑中的偏移量也是很容易就能得到的!,EnumDeviceDrivers()殘忍的丟掉了所有這些有用的信息,僅僅保留了映像基址(Image Base address)。

所以如果你試圖通過返回的指針來獲取有關模塊的更多信息,則肯定會失敗。當你調用GetDeviceDriverFileName()來獲取指定映像基址對應的文件路徑時,猜猜psapi.dll會怎樣做?它會運行與列表1-4類似的代碼來獲取完整的驅動列表,并遍歷該列表來尋找指定的映像基址。如果它找到一個匹配項,就將其路徑復制到調用者的緩沖區中。這難道很高效嗎?為什么EnumDeviceDrivers不在它首次遍歷驅動列表時就復制路徑呢?按這樣的方式實現此函數并沒有多么困難。除去性能問題,這種設計還有另一個潛在的問題:如果在GetDeviceDriverFileName()執行之前指定的模塊就已經被卸載了會怎么樣呢?該模塊的地址將不會出現在第二次獲取的驅動列表中,GetDeviceDriverFileName()將會失敗。我真不明白微軟為什么會發布這樣的DLL。

枚舉活動進程

psapi.dll的另一個典型工作就是枚舉當前系統中運行的進程。為此目的,該DLL提供了EnumProcesses()函數。該函數的工作與EnumDeviceDrivers()十分類似,不過返回的是進程ID而不是虛擬地址了。再次提示,該函數并不會提示緩沖區大小不足,因此我們還需再次使用trial-and-error循環,如列表1-5所示,這些代碼和列表1-3很相似,除了有些不同的符號和類型名稱。

一個進程ID是一個全局數字標簽可在整個系統中唯一標識一個進程。進程和線程ID都取自同一個數字池(pool of numbers),從以0開始的Idle進程,在同一時間,所有運行的進程和線程都不會有相同的ID。但是,當一個進程結束后,另一個進程可能會再次使用該結束進程或線程的ID。因此,在X時間獲取的一個進程ID在Y時間可能會代表另一個完全不同的進程。也有可能在其使用的那一刻還沒有定義或者指定給了某個線程。所以,EnumProcesses()返回一個簡單的進程ID列表并不能可靠的代表當前系統活動進程的快照。如果考慮該函數的實現方式,這個設計缺陷真是無法原諒。列表1-6是psapi.dll另一個函數的克隆,大致勾勒出了EnumProcessees()的基本動作。和EnumDeviceDrivers()類似,它也依賴NtQuerySystemInformation()函數,不過在調用時,用SystemProcessInformation代替了SystemModuleInformation。注意列表1-6中間的循環,在哪兒lpidProcess[]數組被來自SYSTEM_PROCESS_INFORMATION結構中的數據填充。沒什么好驚奇的,該結構也沒有文檔化。

BOOL WINAPI EnumProcesses( DWORD* lpidProcess,

DWORD; cb,

DWORD* lpcbNeeded);

PDWORD WINAPI dbgProcessIds( PDWORD pdCount )

{

DWORD dSize;

DWORD dCount = 0;

PDWORD pdList = NULL;

dSize = SIZE_MINIMUM * sizeof( DWORD );

while ( (pdList = dbgMemoryCreate(dSize)) != NULL )

{

if ( EnumProcesses( pdList, dSize, &dCount) && (dCount < dSize) )

{

dCount /= sizeof( DWORD );

break;

}

dCount = 0;

pdList = dbgMemoryDestroy(pdList);

if ( (dSize <<= 1) > (SIZE_MXAIMUM*sizeof(DWORD)) ); break;

}

if ( pdCount != NULL ) *pdCount = dCount;

return pdList;

}

列表1-5; 枚舉進程ID

在看過EnumDeviceDrivers()是如何浪費從NtQuerySystemInformation()返回的數據后,不幸的是,EnumProcesses也是和其類似的函數,但,事實上,這個函數更糟糕!因為可用的進程信息要遠多于驅動模塊的信息,因為進程數據之后還包含很多有關系統中每個線程的詳細信息。在我寫下這段文字時,我的系統正運行著37個進程,調用NtQuerySystemInformation()產了一個24,488字節的數據塊!而當EnumProcesses()處理完這些數據后,僅剩下了148字節,這些剛好夠存放37個進程ID。

盡管EnumDeviceDirvers()讓我有些難過,但EnumProcesses()卻真正傷害了我的心。如果你需要使用未文檔化API函數的理由,那這兩個函數就是最好的證據。如果實際的工作只需一步既可完成,那為什么還要使用如此低效的函數呢?為什么不自己調用NtQuerySystemInformation()函數自由的獲取感興趣的系統信息?微軟提供的許多系統管理工具都依賴于NtQuerySystemInformation()而不是psapi.dll,so why settle for less?

BOOL WINAPI EnumProcesses( PDWORD lpidProcess,

DWORD; cb,

;PDWORD lpcbNeeded)

{

PSYSTEM_PROCESS_INFORMATION pspi, pSpiNext;

DWORD;;;;dSize, i;

NTSTATUS;ns;

BOOL;;;;;fOk = FALSE;

// 0x8000 = 32KB

for (dSize=0x8000; ((pspi = LocalAlloc(LMEM_FIXED,dSize)) != NULL);

;;dSize += 0x8000)

{

ns = NtQuerySystemInformation( SystemProcessInformation,pspi,

dSize, NULL);

if ( STATUS_SUCCESS == ns )

{

pSpiNext = pspi;

for ( i=0; i < cb/sizeof(DWORD); i++ )

{

lpidProcess[i] = pspiNext->dUniqueProcessId;

pSpiNext = (PSYSTEM_PROCESS_INFORMATION)

;;;;((BYTE)pSpiNext+pSpiNext->dNext);

}

*lpcbNeeded = i * sizeof(DWORD);

fOk = TRUE;

}

LocalFree(pspi);

if ( fOk || (ns != STATUS_INFO_LENGTH_MISMATCH) )

{

if ( !fOk) SetLastError(RtlNtStatusToDosError(ns));

break;

}

return fOk;

}

列表1-6; EnumProcesses()函數的示例實現

枚舉進程模塊

一但你從EnumProcess()返回的進程列表中發現了你感興趣的進程ID,你可能會想知道在此進程的虛擬地址空間中加載了哪些模塊。psapi.dll提供了另一個API函數來完成此功能,叫做EnumProcessModules()。與EnumDeviceDrivers()和EnumProcesses()不同,這個函數需要四個參數(參見列表1-7)。不同于前兩個返回系統全局列表的函數,EnumProcessModules()只取回指定進程的列表,因此,增加的那個參數唯一表示一個進程。然而,該函數需要一個進程句柄(HANDLE)來代替進程ID。為了通過進程ID獲取其句柄(HANDLE),必須調用OpenProcess()函數。

BOOL WINAPI EnumProcessModule( HNADLEhProcess,

HMODULE* lphModule,

DWORD;cb,

DWORD*lpcbNeeded);

PHMODULE WINAPI dbgProcessModules( HANDLE hProcess, PDWORD pdCount)

{

DWORD;dSize;

DWORD;dCount = 0;

PHMODULE phList = NULL;

if ( hProcess != NULL )

{

dSize = SIZE_MINIMUM * sizeof( HMODULE );

while ( (phList = dbgMemoryCreate(dSize)) != NULL )

{

if ( EnumProcessModules(hProcess,phList,dSize,&dCount))

{

if (dCount <= dSize)

{

dCount /= sizeof( HMODULE );

break;

}

}

else

{

dCount = 0;

}

phList = dbgMemoryDestroy(phList);

if ( !(dSize = dCount) ) break;

}

}

if ( pdCount != NULL) *pdCount = dCount;

return phList;

}

列表1-7; 枚舉進程模塊

EnumProcessModules()返回指定進程所有模塊的句柄的引用。在Windows 2000中,一個HMODULE只是簡單的模塊映像基址。在SDK頭文件windef.h中,HMODULE被定義為HINSTANCE的別名,二者都是HANDLE類型。嚴格的來講HMODULE并不是一個句柄。通常,句柄是系統管理的一個表的索引,可通過此表來查找對象屬性。系統返回的所有句柄都有一個與特定對象相關的計數器,在一個對象的所有句柄沒有返回系統時,該對象不能從內存中被移除。Win32 API提供了CloseHandle()函數用于關閉句柄。該函數與Native API NtClose()等價。有關HMODULEs最重要的事情是,這些“handles”不需要關閉。

另一件讓人困惑的事是,事實上,模塊句柄通常并不被保證是一直有效的。SDK的GetModuleHandle()函數文檔提示到,在多線程程序中必須更加注意模塊句柄,因為一個線程可以通過卸載HMODULE引用的模塊而讓另一個線程擁有的HMODULE無效。在多任務環境下,一個程序(如調試器)使用另一程序的模塊句柄時也許注意這一點。這似乎使HMODULEs沒有多大用處了,但是,在下面兩種情況中,HMODULE的有效性會保持足夠長的時間:

1.由LoadLibrary()或LoadLibraryEx()返回的HMODULE在進程調用FreeLibrary()之前都會一直有效,由于這些函數包含了模塊引用計數,所以即使在多線程程序中,這也會阻止模塊被意外卸載。

2.如果HMODULE指向的模塊會永久的存在,那么它也會一直有效。例如,所有Windows 2000內核組件(不包括內核模式的驅動程序)總是被映射到每個進程的相同固定地址上,并且在進程生命期里一直在那里。

不幸地是,這些情況并不適用于EnumProcessModules()函數返回的模塊句柄,至少通常不行。復制到調用者提供的緩沖區中的HMODULE,在獲取進程快照那一刻其所表示映像基址是有效的。稍后,進程可能調用FreeLibrary()來釋放一個或多個模塊,并將其從內存中移除,此時它們的句柄將無效,隨后進程很有可能立即調用LoadLibrary()加載了另一個DLL,而此新模塊恰好映射到了前面釋放的地址上。這看上去是不是很熟悉?是的,同樣的問題也存在于EnumDeviceDrivers()的指針數組和EnumProcesses()函數的ID數組。不過,這些問題是可以避免的。psapid.dll通過調用未文檔化的API函數來完成數據收集工作后,考慮這些數據的完整性,可返回一個完整的請求對象的快照,其中應包括所有感興趣的屬性信息。這樣就沒有必要在稍后調用另一個函數來獲取附加的信息了。我的觀點是,psapi.dll的設計過于簡單,因為它忽略了數據的完整性,這也是我不會將此DLL作為一個專業調試工具的基礎的原因。

與EnumDeviceDrivers()和EnunProcesses()函數相比EnumProcessModules()函數算是個好公民了,因為如果調用者提供的緩沖區不能放下全部的輸出數據,它會準確地提示有多少字節沒有復制。注意列表1-7沒有包括一個循環,在那里緩沖區會不斷增大直到足夠的大。然而,仍然需要trial-and-error循環,因為在下一次調用時,EnumProcessModules報告的所需大小可能已經無效了(如果指定進程在兩次調用之間又加載了新的模塊)。因此,列表1-7中的代碼將不斷枚舉模塊直到EnumProcessModules()報告需要的緩沖區等于或小于實際可用大小,或者出現了錯誤。

我不想描述EnumProcessModules()的等價函數,因為該函數要比EnumDeviceDrivers和EnumProcesses稍微復雜些,它涉及幾個未文檔化的數據結構。基本上,它還是通過調用NtQuerySystemInformation()函數(當然,該函數也沒有文檔化)來獲取目標進程環境塊(PEB)的地址,通過該地址可獲取一個模塊信息鏈表。因為不管是PEB還是這個鏈表在調用進程的地址空間都是無法直接使用的,EnumProcessModules調用Win32 API ReadProcessMemory()(該函數有文檔記載)來遍歷目標進程的地址空間。順便說一下,PEB結構的布局將在第7章討論,在附錄C中,可以找到該結構的定義。

調整進程特權

回憶一下稍早討論過的有關EnumProcessModules所需的進程句柄。通常,你首先得到的是進程ID---可能是EnumProcesses返回的進程ID集中的一個。Win32 API OpenProcess()可通過進程ID來獲取其句柄。這個函數期望一個訪問標志符作為其第一個參數。假定進程ID存放在一個DWORD類型的變量dId中,你以最大訪問權限來調用OpenProcess,如下:

OpenProcess(PROCESS_ALL_ACCESS,FALSE,dId)

以獲取該進程的句柄,此時你會收到一個針對幾個低ID進程的錯誤代碼。這并不是bug---這是安全特性!這些進程都是保持系統活動的系統服務。一個普通用戶進程不允許執行針對系統服務的所有操作。例如,允許所有進程都可以殺死系統中其余進程并不是個好主意。如果一個程序意外終止了一個系統服務,那么整個系統都將崩潰。因此,一個進程只有擁有確切的訪問權限才會有適當的特權。

由于多種原因,調試器必須擁有大量的權限來完成他的工作。改變進程的特權可通過以下三個簡單的基本步驟:

1.首先,必須打開進程的訪問令牌(access token),使用advapi32.dll中的函數OpenProcessToken()。

2.如果上一步正確完成,接下來就是準備TOKEN_PRIVILEGES結構,該結構包含有關要請求的特權的信息。這個工作需要advapi32.dll中的另一個函數LookupPrivilegeValue()的幫助。特權通過名稱來指定。SDK文檔winnt.h定義了27中特權名稱和其對應的符號名稱。例如,調試權限的符號名稱為:SE_DEBUG_NAME,該名稱和字符串“SeDebugPrivilege”等效。

3.如果上一步正確完成,就可以使用進程的令牌句柄(Token Handle)來調用AdjustTokenPrivileges()函數以初始化TOKEN_PRIVILEGES結構。該函數也是advapi32.dll導出的。

如果OpenProcessToken()調用成功,要記得關閉其返回的令牌句柄(Token Handle)。w2k_dbg.dll包含一個dbgPrivilegeSet()函數,該函數合并了這幾個步驟,下面的列表1-8列出了該函數和w2k_dbg.dll中的另一個函數:dbgPrivilegeDebug()。此函數是dbgPrivilegeSet()的一個外包函數,為了便于設定調試特權。順便說一下,Windows NT Server資源工具集中的kill.exe也使用了同樣的技巧。Kill.exe需要調試特權來剔除內存中餓死的服務(starved services)。這是NT Server管理員不可缺少的一個工具,這對于重起一個掛掉的系統服務十分有用,而且可以避免不必要的系統重啟。對于使用IIS(Internet Information Server)的人,在他們的緊急工具箱中可能都有這個工具,以便重起偶爾掛掉的inerinfo.exe。

BOOL WINAPI dbgPrivilegeSet(PWORD pwName)

{

HANDLEhToken;

TOKEN_PRIVILEGES tp;

BOOL;;fOk = FALSE;

if ( (pwName != NULL) &&

OpenProcessToken(GetCurrentProcess(),

TOKEN_ADJUST_PRIVILEGES,

&hToken) )

{

if ( LookupPrivilegeValue(NULL,pwName,&tp,Privileges->Luid) )

{

;;;;tp.Privileges->Attributes = SE_PRIVILEGE_ENABLED;

tp.PrivilegeCount = 1;

fOk = AdjustTokenPrivileges(hToken,FALSE,&tp,0,NULL,NULL)

; && (GetLastError() == ERROR_SUCCESS);

}

CloseHandle(hToken);

}

return fOk;

}

//------------------------------------------------------------------------------------

BOOL WINAPI dbgPrivilegeDebug(void)

{

return dbgPrivilegeSet(SE_DEBGU_NAME);

}

列表1-8; Requesting a Privilege for a Process

標簽: Windows系統
主站蜘蛛池模板: 美女逼网站 | 九九re| 欧美精品自拍 | 一区二区三区在线免费播放 | 精品免费国产视频 | 日韩在线中文字幕 | 中文字幕一区二区三区乱码图片 | 在线色网站 | 欧美国产一区二区 | 成人在线网| 久久精品免费电影 | 国产精品美女久久久久久久网站 | 欧洲视频一区二区三区 | 嫩草网址 | 99精品欧美一区二区三区 | 91免费看片神器 | 在线日韩视频 | 免费v片| 欧美狠狠操 | 欧美视频在线免费 | 国产精品网站在线观看 | 成人精品鲁一区一区二区 | 视频一区二区三区在线播放 | 日韩素人一区二区三区 | 精品国产乱码久久久久久闺蜜 | 美女一级毛片 | 久久久激情视频 | 九九综合九九 | 99这里只有精品视频 | 国产成人久久精品一区二区三区 | 一区二区三区视频 | 国产精品25p | 日韩三区在线 | 天天看夜夜| 国产美女在线观看 | 青草青草久热精品视频在线观看 | 国产精品二区三区 | 国产欧美日韩中文字幕 | 国产美女在线观看 | 激情五月婷婷综合 | 欧美日本免费一区二区三区 | 亚洲精品免费在线观看 | 999在线观看精品免费不卡网站 | www.国产高清 | 欧美日本韩国一区二区 | 久久男人天堂 | 国产精品一二 | 成人免费毛片嘿嘿连载视频 | 91精品在线观看入口 | 久久国内 | 精品国产一区二区三区av片 | 免费观看一区二区三区毛片 | 欧美一区二区三区免费 | 国产成人高清精品免费5388 | 欧美一级爆毛片 | 91一区二区在线 | 人人av在线 | av免费观看网站 | 伊人网视频在线观看 | 国产最好的av国产大片 | 岛国免费 | 国产一区二区三区网站 | 日韩视频在线视频 | 国产精品精品久久久 | 色综合久 | 亚洲精品国产剧情久久9191 | 日韩第1页| 日操干| 中文字幕在线播放第一页 | 国产精品亚洲成在人线 | 蜜桃视频网站在线观看 | 日韩在线免费观看网站 | 国产精品99久久久久久www | 免费激情小视频 | 国产日韩视频在线播放 | 久久亚洲精品国产一区 | 亚洲一本 | 亚洲视频一 | a级毛片基地 | 日日射天天干 | 欧美八区 | 天天操天天干天天干 | 亚洲精品在线免费看 | 在线视频 亚洲 | 久久99国产精品久久99大师 | 日韩成人一区 | 一级欧美 | 在线看一区| 久久青青视频 | 日本高清中文字幕 | 午夜精品久久久久久久久久久久久 | 国产精品久久久久久久久久免费 | 人人人人人你人人人人人 | 国产成人在线网站 | 中文字幕天堂在线 | 欧美亚洲高清 | 国精产品一区一区三区免费完 | 99re热精品视频 | 成人在线观看免费 | 欧美一级片免费观看 | 国产1页| 国产免费高清 | 亚洲精品视频在线 | 国产日韩精品一区二区 | 日韩在线看片 | 黄色片在线免费观看 | 天天干狠狠操 | 黄色片网站在线免费观看 | 亚洲国产视频网站 | 国产欧美日本 | 色网在线看 | 国产精品一区二区不卡 | 亚洲 欧美 日韩在线 | 国产精品三级久久久久久电影 | 国产精品久久久久久久竹霞 | 九色 在线 | 国产精品久久久久aaaa九色 | 国产伦精品一区二区 | 欧美日韩在线综合 | 国产成人精品免费 | 久久9精品 | 国产视频精品视频 | 剑来在线观看 | 久久精品亚洲 | 中文字幕久久精品 | 国产一区二区久久 | 在线播放高清视频www | 黄色一级片免费 | av大片 | 综合久久99 | 日韩精品在线免费观看 | 成人国产电影 | 在线观看欧美一区二区三区 | 久久99国产精品 | 午夜影院在线观看免费 | 综合 欧美 亚洲日本 | 日本免费电影一区 | 理论片91| 精品亚洲视频在线 | 国产99久久精品 | 99亚洲视频| 国产精品视频一区二区三区, | 日韩成人在线一区 | 久久久久国产成人精品亚洲午夜 | 中文一区二区 | 成人性视频免费网站 | 国产精品婷婷午夜在线观看 | 中文字幕一区二区在线观看 | 91精品久久久久久久久久 | 亚洲精品系列 | 狠狠躁夜夜躁人人爽天天天天97 | 免费高清av | 二区中文字幕 | 国产不卡在线 | 国产精品久久久久久久久久久免费看 | 久久久国产一区二区三区 | 日韩欧美国产一区二区三区 | 2022中文字幕 | 国产性一级片 | 午夜精品久久久久久久久 | 成人av福利 | 欧美美女黄色网 | 亚洲香蕉在线观看 | 永久免费在线 | www国产亚洲精品久久网站 | av男人的天堂在线 | 亚洲久久 | 国产精品视频一区二区三区不卡 | 精品欧美一区二区精品久久久 | 一级毛片免费播放 | 日韩一区欧美 | 在线免费成人 | 亚洲精品一区二区网址 | 最新中文字幕在线 | 亚洲一区二区三区久久 | 日韩h视频 | 国产www在线| 国产91在线观看 | 国产精品久久久久毛片软件 | 91操操| 男人天堂网址 | 精品九九九 | 国产成人精品一区二区三区网站观看 | 高清一区二区 | 国内精品一区二区三区视频 | 成人免费视频网 | www.日韩系列 | 久久亚洲美女 | 欧美久久影视 | 精品国产乱码久久久久久久 | 欧日韩免费视频 | 久久午夜综合久久 | 国产精品日本欧美一区二区三区 | 亚洲国产精品一区二区久久,亚洲午夜 | 欧美一级视频在线观看 | 午夜精品导航 | 亚洲a在线观看 | 黑人av | 国产精品久久久久毛片软件 | 欧美视频精品在线观看 | 国产性色 | 欧美性猛交一区二区三区精品 | 欧美一级黄色网 | 国产一区二区免费 | 国产成人精品免高潮在线观看 | 色综合免费 | 免费亚洲一区二区 | 国产精品一区在线观看 | 日韩免费一区 | www.日本三级 | 国产成人综合视频 | 免费在线黄色电影 | 日韩精品1区2区 | 一区二区免费 | 久久噜噜噜精品国产亚洲综合 | 人人艹人人 | 亚洲精品国产二区 | 国产一区二区在线播放 | 欧美一区二区三区国产精品 | 最新免费av网站 | 综合伊人| 99精品久久久 | 国产精品视频一区二区免费不卡 | 国产精品视频一区二区三区四蜜臂 | 岛国伊人 | 欧美大成色www永久网站婷 | 日韩欧美在线一区 | 精品久久久久久久久久久 | 久久精品国产亚卅av嘿嘿 | 91欧美激情一区二区三区成人 | www色婷婷| 99r精品在线| 91在线精品秘密一区二区 | 银杏成人影院在线观看 | 日韩精品视频在线观看一区二区 | 日韩在线视频一区 | 亚洲第一视频网站 | 欧美在线a| 久久99精品国产99久久6男男 | 国产在线一区二区三区 | 久久精品视频免费看 | 亚洲成av人片一区二区梦乃 | 欧美一级欧美三级在线观看 | 国产激情网址 | 青青草免费在线视频 | 亚州成人| 怡红院免费在线视频 | 欧美黄色网 | 另类色| 久久久国产日韩 | 在线播放亚洲 | 女同videos另类| 国产免费自拍 | 欧美日韩一区精品 | 久久久久久国产免费 | 久久成人一区 | 久久久久亚洲精品 | 国产日韩精品视频 | 九九热最新视频 | 高清免费av | 亚洲自啪 | 欧美bbbxxx| 色接久久| 色吊丝2288sds中文字幕 | 国产黄色在线观看 | 午夜影院在线观看免费 | 99re热精品视频国产免费 | 久久久一区二区 | 韩日精品在线观看 | 玖玖玖视频 | 亚洲欧美日韩在线 | 成人av网站在线观看 | 国产在线国产 | 五月天婷婷在线视频 | 亚洲免费观看视频 | 欧美日韩中文 | 久久中文字幕一区二区三区 | 免费黄色看片 | 亚洲视频一区在线 | 久久精品免费电影 | www.日韩大片 | 午夜视频免费 | 热久久久 | 日本不卡一区 | 亚洲精品视频免费观看 | 国产精品一区二区三区在线播放 | 国产日产欧美a级毛片 | 超碰国产一区 | youjizz国产 | 国产视频久久久 | 国产午夜精品一区二区 | concern超碰在线 | 九九色影院 | 欧洲精品 | 毛片免费观看视频 | 国产精品免费视频观看 | 亚洲精品日韩激情在线电影 | 一级a毛片 | 色精品视频 | 色婷婷综合在线 | 日韩视频一区二区三区 | 国产精品美女久久久久久久久久久 | 欧洲精品视频在线观看 | 午夜午夜精品一区二区三区文 | 亚洲成人久久久久 | 国产精品久久久久久久久久久免费看 | 久久机热 | 欧美日韩第一页 | 久久久久久久一区二区 | 99免费视频| 欧美日韩在线播放 | 欧美精品在线观看 | 久久99精品久久久久久按摩秒播 | 天天综合天天色 | 中文字幕 视频一区 | 精品99视频 | 国产精品美女久久久久aⅴ国产馆 | 少妇性l交大片免费一 | 视频在线一区 | 久久精品免费 | 午夜成人免费视频 | 国产欧美日韩在线观看 | 精品无人乱码一区二区三区 | 日韩一区中文 | 一色桃子av一区二区免费 | 操人网站 | 理论片免费在线观看 | 久久91精品国产91久久跳 | 中国免费看的片 | av色伊人久久综合一区二区 | 国产精品久久久久无码av | 欧美成人一区二区三区片免费 | 国产精品久久久久久亚洲影视 | 亚洲欧美综合乱码精品成人网 | 成人欧美一区二区三区在线播放 | 国产一级网站 | 亚洲一区二区免费看 | 狠狠干狠狠操 | 日韩一区二区三区av | 久久精品99| 日操 | 一级毛片免费观看 | 日韩欧美一级片 | 一级毛片视屏 | 国产网站在线播放 | 中文字幕一区二区三区精彩视频 | 久久狠狠 | 91精品国产欧美一区二区成人 | 日韩在线一区二区三区 | 在线视频不卡一区 | 国产精品一二 | 99国产精品99久久久久久 | 欧美成人精品一区二区三区 | 狠狠躁夜夜躁人人爽天天高潮 | 在线小视频| 国产精品久久久久久久久 | 国产乱码精品一区二区三区忘忧草 | 97国产免费| 日韩视频网站在线观看 | av一区二区在线观看 | 亚洲欧美综合一区 | 久草免费在线视频 | 在线二区 | 欧美一级网站 | 免费在线成人av | 91原创视频在线观看 | 人人射人人| 中文字幕一区二区三区乱码图片 | 国产精品久久久久一区二区三区 | 日本免费视频在线观看 | 亚洲成年人网站在线观看 | 精品无码久久久久久国产 | 国产人妖视频 | 欧美精产国品一二三区 | 91视频.www| 欧美色成人 | 欧美日韩一区二区三区 | 97高清国语自产拍 | 亚洲 中文 欧美 日韩 在线观看 | 国产精品久久久久久久一区探花 | 日韩久久网 | 国产精品三级久久久久久电影 | 亚洲免费网站在线观看 | 99re6热只有精品免费观看 | 亚洲精品aaa | 不卡一区二区三区四区 | 毛片网在线观看 | 国产一区二区三区在线 | 国产精品久久久久久久久免费桃花 | 男女网站在线观看 | 亚洲精品国精品久久99热 | 成年免费a级毛片 | 日本黄色大片免费看 | 欧美日韩国产综合视频 | 一区二区视频 | 午夜私人影院 | a网站在线观看 | 欧美日韩亚洲视频 | 黄色影视网址 | 国产精品久久久久久久 | 午夜不卡福利视频 | 天天拍天天操 | 国内成人精品2018免费看 | 欧美亚洲综合久久 | 精品久久久久久亚洲精品 | 日韩精品视频久久 | 免费在线成人 | 黄色网址av | 久热热| 91亚洲狠狠婷婷综合久久久 | 免费日本视频 | 视频一区二区三区在线播放 | 亚洲一区二区三区高清 | www.黄色片视频 | 精品无码久久久久久国产 | 九色av | 国产视频久久久 | 日韩电影免费在线观看中文字幕 | avmans最新导航地址 | 欧美日韩在线视频免费 | 中文字幕在线日韩 | 青娱乐国产视频 | 国产在线观看av | av网站在线免费看 | 国产亚洲欧美一区 | 久久青| 精品在线一区二区 | 美女久久久 | 国产精品123 | 国产91视频在线观看 | 视频成人免费 | 黄色av网站免费 | 久久精品二 | 久久久中文字幕 | 精品国产髙清在线看国产毛片 | 精品久久久久一区二区国产 | 欧美极品一区 | 国产成人久久精品77777 | 97碰碰碰免费公开在线视频 | julia中文字幕久久一区二区 | 久久97视频| 羞羞视频在线网站观看 | 久久久久久九九 | 久久精品一区二区三区中文字幕 | 免费成人高清 | 久久综合久久综合久久 | 成人免费在线视频观看 | 91久久久久久久久久久久久久久久 | 精品久久久久久久人人人人传媒 | 欧美久久久久 | 91免费在线看 | 国产高清精品一区二区三区 | 日韩一区二区三区在线观看 | 欧美久久久久久 | 国产精品成人观看视频国产奇米 | 国产美女久久久 | 国产精品高潮呻吟 | 日韩电影在线一区 | 成年人在线观看 | 91精品国产综合久久久久久丝袜 | 亚洲国产高清高潮精品美女 | 波多野结衣一二三四区 | 精品国产一区二区三区高潮视 | 日韩国产 | 91视频综合| 欧美大片免费高清观看 | 美女在线一区 | 国产黄色av| 欧美一区二区三区在线 | 一区二区三区免费看 | 一本一道久久a久久精品综合 | 国产在线小视频 | 欧美日韩国产精品 | 日韩欧美视频一区二区三区 | 偷拍自拍网站 | 国产农村妇女精品久久 | 欧美成人影院在线 | 亚洲精品一二三四五区 | 色接久久| 精品日韩一区二区三区 | 日韩精品在线免费观看 | 亚洲欧美一区二区三区在线 | 久久亚洲精品国产一区 | 成人一区二区三区久久精品嫩草 | 日本三级在线网站 | 在线中文字幕av | 欧美视频免费 | 久久2| 亚洲视频在线视频 | 国产97久久 | 99免费视频 | av黄色在线 | 97久久久 | 91高清在线 | 日本高清中文字幕 | 国产激情视频 | 日韩一区免费观看 | 国产永久免费 | 亚洲第1页| 亚洲人在线观看视频 | 一区二区三区小视频 | 国产成人午夜视频 | 一级女性全黄久久生活片免费 | 久久女同互慰一区二区三区 | 国产一区二区视频在线 | 亚洲精品日本 | 国产三级在线观看 | av在线视| 人人种亚洲 | 国产精品久久婷婷六月丁香 | 欧美精品成人一区二区三区四区 | 欧美日本韩国一区二区 | av一区二区三区在线观看 | 黑色丝袜脚足j国产在线看68 | 国产成人久久精品一区二区三区 | 久久国产成人 | 国产香蕉视频在线播放 | 国产96精品久久久 | 激情毛片 | a级片在线观看 | 国产精品视频一区二区三区四 | 一区二区三区视频在线 | 亚洲国产高清高潮精品美女 | 久久狠狠 | 久久久久一区二区三区 | 9999国产精品 | 欧美日韩在线播放 | 国产成人精品久久二区二区 | 国产一级做a爰片在线看免费 | 欧美性猛交一区二区三区精品 | 欧美伦理电影一区二区 | 亚洲精品1区2区 | 中文字幕第二页 | 欧美精品第十页 | 成人精品视频在线观看 | 亚洲毛片在线观看 | 精品成人在线视频 | 亚洲视频一区在线 | 成人午夜免费视频 | av网站观看 | 一区二区三区在线播放 | 91精品国产乱码久久久久久 | 欧美黄色片 | 免费看性生交大片 | av在线天堂 | 欧美九九九 | 成人精品视频在线观看 | 色综合网站| 欧美一区二区三区 | 可以在线观看的av网站 | 一级视频在线观看 | 国产精品欧美一区二区三区不卡 | 欧美一卡二卡在线观看 | 一区二区三区精品视频 | 91一区二区三区久久国产乱 | 免费黄色网止 | 日韩精品一区二区三区免费观看视频 | 亚洲国产一区二区三区在线观看 | 国产九九精品视频 | 韩国电影久久影院 | h在线观看| 日韩精品一区二区三区在线 | 亚洲免费在线观看 | 91亚洲狠狠婷婷综合久久久 | av一区在线观看 | 久久精品小视频 | 成人在线黄色 | 亚洲成人久久久 | 成人久久精品 | 国产精品成人国产乱一区 | 欧美午夜视频 | 性色av一区二区三区免费看开蚌 | 精品一区二区三区久久久 | 亚洲高清在线观看 | 久久国产精品久久精品 | 欧美video| 国产精品久久久久久久久久久久冷 | 国产免费天天看高清影视在线 | 色偷偷噜噜噜亚洲男人 | 日韩在线免费 | 亚洲一区中文字幕在线观看 | 在线观看欧美成人 | 在线看成人片 | 女人久久久久 | 欧美日韩成人在线 | 国产视频欧美 | 日韩久久成人 | 精品国产一区二区在线 | 国产成人精品久久二区二区 | 精久久久| 在线区 | 国产欧美久久一区二区三区 | 国产精品美女久久久久aⅴ国产馆 | 欧美日韩在线不卡 | 日韩一区二区在线观看 | 亚洲视频一区在线 | 免费国产网站 | 国产一区二区三区久久久久久久久 | 国产精品久久久久久久久免费高清 | 国产美女久久 | 国产综合欧美 | 色婷婷综合久久久中文字幕 | 免费黄色电影在线观看 | 亚洲精品在线视频 | 午夜久久乐 | 来个毛片 | 日韩精品成人 | 欧美成人福利 | 在线播放黄色片网站 | 黄色a视频| 天堂一区二区三区 | 国产91福利视频 | 中文字幕免费中文 | 亚洲毛片网站 | 亚洲无吗电影 |