a毛片毛费观看-a毛片在线-a毛片在线观看-a毛片在线免费观看-国产成人综合洲欧美在线-国产成人综合高清在线观看

始創于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業
  • 60秒人工響應
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
您的位置: 網站首頁 > 幫助中心>文章內容

VC++消息鉤子編程

發布時間:  2012/9/11 16:55:31
一、消息鉤子的概念1、基本概念Windows應用程序是基于消息驅動的,任何線程只要注冊窗口類都會有一個消息隊列用于接收用戶輸入的消息和系統消息。為了攔截消息,Windows提出了鉤子的概念。鉤子(Hook)是Windows消息處理機制中的一個監視點,鉤子提供一個回調函數。當在某個程序中安裝鉤子后,它將監視該程序的消息,在指定消息還沒到達窗口之前鉤子程序先捕獲這個消息。這樣就有機會對此消息進行過濾,或者對Windows消息實現監控。

  2、分類消息鉤子分為局部鉤子和全局鉤子。局部鉤子是指僅攔截指定一個進程的指定消息,全局鉤子將攔截系統中所有進程的指定消息。

  3、實現步驟使用鉤子技術攔截消息通常分為如下幾個步驟:設置鉤子回調函數;(攔截到消息后所調用的函數)

  安裝鉤子;(使用SetWindowsHookEx函數)

  卸載鉤子。(使用UnhookWindowsHookEx函數)

  4、功能利用消息鉤子可以實現特效界面、同步消息、監控消息、自啟動等功效。

  二、病毒對消息鉤子技術的利用計算機病毒經常利用消息鉤子實現兩種功能:1、監控用戶按鍵,盜取用戶信息。

  這樣的病毒會啟動一個常駐內存的EXE病毒進程,然后安裝一個全局鍵盤消息鉤子,鉤子回調函數位于病毒進程中,這樣系統中任何有按鍵操作的進程,其按鍵詳細信息都會被病毒進程攔截記錄。

  2、自啟動這樣的病毒會將鉤子回調函數放在一個DLL文件中,然后安裝一個全局消息(容易觸發的消息,如WH_CBT、WH_GETMESSAGE等)鉤子,這樣凡響應該消息的進程都會自動加載病毒的DLL,病毒也就跟著自動運行了。

  三、消息鉤子病毒的對抗技術(重點)

  1、對抗技術原理對付消息鉤子病毒方法很簡單,只要將病毒安裝的鉤子卸載掉即可。(注意:對于系統中許多進程已經因為全局鉤子而加載了病毒DLL的情況,并不需要去卸載這些DLL,只要安裝的消息鉤子被卸載那么對應的DLL也都會被在這些進程中自動卸載。)卸載鉤子有兩種方法:(1)、結束掉安裝鉤子的進程將設置鉤子的進程結束,進程在退出之前會自行卸載掉該進程安裝的所有消息鉤子。這種方法很適合對付監控用戶按鍵的病毒。

  (2)、獲得消息鉤子句柄,然后調用UnhookWindowsHookEx函數即可將消息鉤子卸載。

  如果病毒單獨啟動了一個病毒進程安裝了一個全局消息鉤子,然后就常駐內存。這時我們將這個病毒進程結束掉即可。但是如果病毒在系統進程中注入代碼而安裝的鉤子,這樣鉤子句柄就位于系統進程中,我們不可以結束系統進程,這時就只能獲取這個消息鉤子句柄,然后調用函數卸載。

  2、對抗技術實現細節對于結束掉安裝鉤子進程從而卸載病毒消息鉤子的方法很容易實現,只要找到病毒進程結束即可。而對于獲取病毒消息鉤子句柄,然后調用函數卸載鉤子的方法比較復雜,也是本文重點討論的內容,將在下一個標題中詳細介紹。

  四、查找病毒消息鉤子句柄然后卸載的方法實現(重點、難點)

  1、實現原理分析系統會將所有安裝的鉤子句柄保存在內核中,要查找病毒安裝的消息鉤子句柄,我們要枚舉所有的消息鉤子句柄。如何枚舉稍后講解,還要解決一個問題,就是在枚舉過程中,我們怎么知道哪個句柄是病毒安裝的呢?

  通過分析病毒樣本我們通常可以得到病毒安裝鉤子就是為了令其他合法進程加載病毒DLL,所以它會將鉤子回調函數寫在該DLL中。在枚舉消息鉤子句柄時,同時也可以得到該句柄所對應的回調函數所屬的DLL模塊,根據這個DLL模塊是不是病毒的DLL模塊即可找到病毒的消息鉤子句柄,最后將其卸載即可。

  關于如何枚舉系統消息鉤子句柄,對于不同的操作系統方法大不相同,這里介紹一種用戶層讀內存的方法,此方法僅在2000/XP系統下可用。

  在2000/XP系統下有一個Windows用戶界面相關的應用程序接口User32.dll.它用于包括Windows窗口處理,基本用戶界面等特性,如創建窗口和發送消息。當它被加載到內存后,它保存了所有Windows窗口、消息相關的句柄,其中就包括消息鉤子句柄。這些句柄被保存在一塊共享內存段中,通常稱為R3層的GUI TABLE.所以只要我們找到GUI TABLE,然后在其中的句柄中篩選出消息鉤子句柄。GUI TABLE這塊內存段可以被所有進程空間訪問。GUI TABLE被定義成如下結構:typedef struct tagSHAREDINFO { struct tagSERVERINFO *pServerInfo;  //指向tagSERVERINFO結構的指針struct _HANDLEENTRY *pHandleEntry;  // 指向句柄表struct tagDISPLAYINFO *pDispInfo;  //指向tagDISPLAYINFO結構的指針ULONG ulSharedDelta;LPWSTR pszDllList;} SHAREDINFO, *PSHAREDINFO;tagSHAREDINFO結構體的第一個成員pServerInfo所指向的tagSERVERINFO結構體定義如下。

  typedef struct tagSERVERINFO { short wRIPFlags ;short wSRVIFlags ;short wRIPPID ;short wRIPError ;ULONG cHandleEntries;          //句柄表中句柄的個數}SERVERINFO,*PSERVERINFO;可以看出通過tagSERVERINFO結構的cHandleEntries成員即可得到tagSHAREDINFO結構的pHandleEntry成員所指向的句柄表中的句柄數。

  tagSHAREDINFO結構體的第二個成員pHandleEntry是指向_HANDLEENTRY結構體數組起始地址的指針,該數組的一個成員對應一個句柄。句柄結構體_HANDLEENTRY定義如下。

  typedef struct _HANDLEENTRY{ PVOID  pObject;            //指向句柄所對應的內核對象ULONG  pOwner;BYTE  bType;               //句柄的類型BYTE  bFlags;short  wUniq;}HANDLEENTRY,*PHANDLEENTRY;_HANDLEENTRY結構體成員bType是句柄的類型,通過該變量的判斷可以篩選消息鉤子句柄。User32中保存的句柄類型通常有如下種類。

  typedef enum  _HANDLE_TYPE { TYPE_FREE = 0,TYPE_WINDOW = 1 ,TYPE_MENU = 2,                     //菜單句柄TYPE_CURSOR = 3,                   //光標句柄TYPE_SETWINDOWPOS = 4,TYPE_HOOK = 5,                     //消息鉤子句柄TYPE_CLIPDATA = 6  ,TYPE_CALLPROC = 7,TYPE_ACCELTABLE = 8,TYPE_DDEACCESS = 9,TYPE_DDECONV = 10,TYPE_DDEXACT = 11,TYPE_MONITOR = 12,TYPE_KBDLAYOUT = 13   ,TYPE_KBDFILE = 14    ,TYPE_WINEVENTHOOK = 15  ,TYPE_TIMER = 16,TYPE_INPUTCONTEXT = 17  ,TYPE_CTYPES = 18         ,TYPE_GENERIC = 255 }HANDLE_TYPE;_HANDLEENTRY結構體的成員pObject是指向句柄對應的內核對象的指針。

  這樣只要通過pObject就可以得到句柄的詳細信息(其中包括創建進程,線程、回調函數等信息),通過bType就可以的值句柄的類型。

  _HANDLEENTRY結構體的其他成員可以忽略不看。

  (知識要點補充:如何在用戶層程序中讀取內核內存)

  需要注意的是,pObject指針指向的是內核內存,不可以在用戶層直接訪問內核內存。后面還有些地方也同樣是內核內存,需要加以注意。應該把內核內存的數據讀取到用戶層內存才可以訪問。且不可以直接訪問,畢竟不是在驅動中。

  在用戶層讀取內核內存使用ZwSystemDebugControl函數,它是一個Native API.其原型如下。

  NTSYSAPI NTSTATUS NTAPI ZwSystemDebugControl(IN DEBUG_CONTROL_CODE ControlCode,//控制代碼IN PVOID InputBuffer OPTIONAL,    //輸入內存IN ULONG InputBufferLength,    //輸入內存長度OUT PVOID OutputBuffer OPTIONAL,  //輸出內存IN ULONG OutputBufferLength,    //輸出內存長度OUT PULONG ReturnLength OPTIONAL  //實際輸出的長度);ZwSystemDebugControl函數可以用于讀/寫內核空間、讀/寫MSR、讀/寫物理內存、讀/寫IO端口、讀/寫總線數據、KdVersionBlock等。由第一個參數ControlCode控制其功能,可以取如下枚舉值。

  typedef enum _SYSDBG_COMMAND { //以下5個在Windows NT各個版本上都有SysDbgGetTraceInformation = 1,SysDbgSetInternalBreakpoint = 2,SysDbgSetSpecialCall = 3,SysDbgClearSpecialCalls = 4,SysDbgQuerySpecialCalls = 5,// 以下是NT 5.1 新增的SysDbgDbgBreakPointWithStatus = 6,//獲取KdVersionBlock SysDbgSysGetVersion = 7,//從內核空間復制到用戶空間,或者從用戶空間復制到用戶空間//但是不能從用戶空間復制到內核空間SysDbgCopyMemoryChunks_0 = 8,//SysDbgReadVirtualMemory = 8,//從用戶空間復制到內核空間,或者從用戶空間復制到用戶空間//但是不能從內核空間復制到用戶空間SysDbgCopyMemoryChunks_1 = 9,//SysDbgWriteVirtualMemory = 9,//從物理地址復制到用戶空間,不能寫到內核空間SysDbgCopyMemoryChunks_2 = 10,//SysDbgReadVirtualMemory = 10,//從用戶空間復制到物理地址,不能讀取內核空間SysDbgCopyMemoryChunks_3 = 11,//SysDbgWriteVirtualMemory = 11,//讀/寫處理器相關控制塊SysDbgSysReadControlSpace = 12,SysDbgSysWriteControlSpace = 13,//讀/寫端口SysDbgSysReadIoSpace = 14,SysDbgSysWriteIoSpace = 15,//分別調用RDMSR@4_WRMSR@12 SysDbgSysReadMsr = 16,SysDbgSysWriteMsr = 17,//讀/寫總線數據SysDbgSysReadBusData = 18,SysDbgSysWriteBusData = 19,SysDbgSysCheckLowMemory = 20,// 以下是NT 5.2 新增的//分別調用_KdEnableDebugger@0_KdDisableDebugger@0 SysDbgEnableDebugger = 21,SysDbgDisableDebugger = 22,//獲取和設置一些調試相關的變量SysDbgGetAutoEnableOnEvent = 23,SysDbgSetAutoEnableOnEvent = 24,SysDbgGetPitchDebugger = 25,SysDbgSetDbgPrintBufferSize = 26,SysDbgGetIgnoreUmExceptions = 27,SysDbgSetIgnoreUmExceptions = 28 } SYSDBG_COMMAND, *PSYSDBG_COMMAND;我們這里要讀取內核內存,所以參數ControlCode應取值為SysDbgReadVirtualMemory.當ControlCode取值為SysDbgReadVirtualMemory時,ZwSystemDebugControl函數的第4個參數和第5個參數被忽略,使用時傳入0即可。第二個參數InputBuffer是一個指向結構體_MEMORY_CHUNKS的指針,該結構體定義如下。

  typedef struct _MEMORY_CHUNKS { ULONG Address;      //內核內存地址指針(要讀的數據)

  PVOID Data;         //用戶層內存地址指針(存放讀出的數據)

  ULONG Length;      //讀取的長度}MEMORY_CHUNKS, *PMEMORY_CHUNKS;第三個參數InputBufferLength是_MEMORY_CHUNKS結構體的大小。使用sizeof運算符得到即可。

  SysDbgReadVirtualMemory函數執行成功將返回0.否則返回錯誤代碼。

  為了方便使用,我們可以封裝一個讀取內核內存的函數GetKernelMemory,實現如下:#define SysDbgReadVirtualMemory 8 //定義ZwSystemDebugControl函數指針類型typedef DWORD (WINAPI *ZWSYSTEMDEBUGCONTROL)(DWORD,PVOID,DWORD,PVOID,DWORD,PVOID);BOOL GetKernelMemory(PVOID pKernelAddr, PBYTE pBuffer, ULONG uLength)

  { MEMORY_CHUNKS mc ;ULONG uReaded = 0;mc.Address=(ULONG)pKernelAddr;  //內核內存地址mc.pData = pBuffer;//用戶層內存地址mc.Length = uLength;       //讀取內存的長度ULONG st  = -1 ;//獲得ZwSystemDebugControl函數地址ZWSYSTEMDEBUGCONTROL ZwSystemDebugControl = (ZWSYSTEMDEBUGCONTROL) GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwSystemDebugControl");//讀取內核內存數據到用戶層st = ZwSystemDebugControl(SysDbgReadVirtualMemory, &mc, sizeof(mc), 0, 0, &uReaded);return st == 0;}

  對于不同類型的句柄,其內核對象所屬內存對應的結構體不同,對于消息鉤子句柄,它的內核對象所屬內存對應的結構體實際上是_HOOK_INFO類型,其定義如下。

  typedef struct _HOOK_INFO { HANDLE hHandle; //鉤子的句柄DWORD Unknown1;PVOID Win32Thread; //一個指向 win32k!_W32THREAD 結構體的指針PVOID Unknown2;PVOID SelfHook; //指向結構體的首地址PVOID NextHook; //指向下一個鉤子結構體int iHookType; //鉤子的類型。

  DWORD OffPfn; //鉤子函數的地址偏移,相對于所在模塊的偏移int iHookFlags; //鉤子標志int iMod; //鉤子函數做在模塊的索引號碼,利用它可以得到模塊基址PVOID Win32ThreadHooked; //被鉤的線程結構指針} HOOK_INFO,*PHOOK_INFO;由上可以看出,得到鉤子內核對象數據后,該數據對應HOOK_INFO結構體信息。其中:hHandle是鉤子句柄,使用它就可以卸載鉤子。

  iHookType是鉤子的類型,消息鉤子類型定義如下。

  typedef enum  _HOOK_TYPE{ MY_WH_MSGFILTER = -1,MY_WH_JOURNALRECORD = 0,MY_WH_JOURNALPLAYBACK = 1,MY_WH_KEYBOARD = 2,MY_WH_GETMESSAGE = 3,MY_WH_CALLWNDPROC = 4,MY_WH_CBT = 5,MY_WH_SYSMSGFILTER = 6,MY_WH_MOUSE = 7,MY_WH_HARDWARE = 8,MY_WH_DEBUG = 9,MY_WH_SHELL = 10,MY_WH_FOREGROUNDIDLE = 11,MY_WH_CALLWNDPROCRET = 12,MY_WH_KEYBOARD_LL = 13,MY_WH_MOUSE_LL = 14 }HOOK_TYPE;OffPfn是鉤子回調函數的偏移地址,該偏移地址是相對于鉤子函數所在模塊基址的偏移。

  Win32Thread是指向_W32THREAD結構體的指針,通過這個結構體可以獲得鉤子所在進程ID和線程ID.該結構體定義如下。

  typedef struct _W32THREAD { PVOID    pEThread ;    //該指針用以獲得進程ID和線程ID ULONG   RefCount ;ULONG  ptlW32 ;ULONG  pgdiDcattr ;ULONG   pgdiBrushAttr ;ULONG   pUMPDObjs ;ULONG    pUMPDHeap ;ULONG    dwEngAcquireCount ;ULONG    pSemTable ;ULONG    pUMPDObj ;PVOID ptl;PVOID ppi;            //該指針用以獲得模塊基址}W32THREAD, *PW32THREAD;_W32THREAD結構體第一個參數pEThread指向的內存偏移0x01EC處分別保存著進程ID和線程ID.注意pEThread指針指向的內存是內核內存。

  _W32THREAD結構體最后一個參數ppi指向的內存偏移0xA8處是所有模塊基址的地址表,   _HOOK_INFO結構體的iMod成員就標識了本鉤子所屬模塊基址在此地址表中的位置。(每個地址占4個字節)所以通常使用ppi+0xa8+iMod*4定位模塊基址的地址。注意ppi指向的內存是內核內存。

  2、實現細節首先編寫程序枚舉消息鉤子句柄,需要得到GUI TABLE,它的地址實際上存儲于User32.dll的一個全局變量中,該模塊導出的函數UserRegisterWowHandlers將返回該全局變量的值。所以我們只要調用這個函數就能夠得到GUI TABLE.然而UserRegisterWowHandlers是一個未公開的函數,不確定它的函數原型,需要反匯編猜出它的原型。筆者反匯編后得到的原型如下。

  typedef PSHAREDINFO (__stdcall *USERREGISTERWOWHANDLERS) (PBYTE ,PBYTE );僅知道它兩個參數是兩個指針,但是不知道它的兩個參數的含義,所以我們無法構造出合理的參數。如果隨便構造參數傳進去又會導致user32.dll模塊發生錯誤。所以通過調用這個函數接收其返回值的方法就不能用了。再次反匯編該函數的實現可以看出,在不同操作系統下該函數的最后三行代碼如下。

  2K系統:(5.0.2195.7032)

  :77E3565D B880D2E477 mov eax, 77E4D280:77E35662 C20800 ret 0008 XP系統:(5.1.2600.2180)

  :77D535F5 B88000D777 mov eax, 77D70080:77D535FA 5D pop ebp:77D535FB C20800 ret 0008 2003系統:(5.2.3790.1830)

  :77E514D9 B8C024E777 mov eax, 77E724C0:77E514DE C9 leave:77E514DF C2080000 ret 0008可以看到共同點,該函數的倒數第三行代碼就是將保存GUI TABLE指針的全局變量值賦值給寄存器EAX,只要我們想辦法搜索到這個值即可。能夠看出無論是哪個版本的函數實現中,都有 C20800代碼,含義是ret 0008.我們可以自UserRegisterWowHandlers函數的入口地址開始一直搜索到C20800,找到它以后再向前搜索B8指令,搜到以后B8指令后面的四個字節數據就是我們需要的數據。代碼如下。

  //獲得UserRegisterWowHandlers函數的入口地址DWORD UserRegisterWowHandlers = (DWORD) GetProcAddress(LoadLibrary("user32.dll"), "UserRegisterWowHandlers");PSHAREDINFO pGUITable;  //保存GUITable地址的指針for(DWORD i=UserRegisterWowHandlers; i<UserRegisterWowHandlers+1000; i++)

  { if((*(USHORT*)i==0x08c2)&&*(BYTE *)(i+2)== 0x00)

  {     //已找到ret 0008指令,然后往回搜索B8 for (int j=i; j>UserRegisterWowHandlers; j——)

  {   //找到B8它后面四個字節保存的數值即為GUITable地址if (*(BYTE *)j == 0xB8)

  { pGUITable = (PSHAREDINFO)*(DWORD *)(j+1);break;} }break;}得到SHAREDINFO結構指針后,它的成員pServerInfo的成員cHandleEntries就是句柄的總個數,然后循環遍歷每一個句柄,找到屬于指定模塊的消息鉤子句柄。代碼如下。

  int iHandleCount = pGUITable->pServerInfo->cHandleEntries;HOOK_INFO HookInfo;DWORD dwModuleBase;struct TINFO { DWORD dwProcessID;DWORD dwThreadID;};char cModuleName[256] = {0};for (i=0; i<iHandleCount; i++)

  {              //判斷句柄類型是否為消息鉤子句柄if (pGUITable->pHandleEntry[i].bType == TYPE_HOOK)

  { DWORD dwValue = (DWORD)pGUITable->pHandleEntry[i].pObject;//獲得消息鉤子內核對象數據GetKernelMemory(pGUITable->pHandleEntry[i].pObject, (BYTE *)&HookInfo, sizeof(HookInfo));W32THREAD w32thd;if( GetKernelMemory(HookInfo.pWin32Thread,(BYTE *)&w32thd , sizeof(w32thd)) )

  {  //獲取鉤子函數所在模塊的基址if (!GetKernelMemory((PVOID)((ULONG)w32thd.ppi+0xA8+4*HookInfo.iMod),(BYTE *)&dwModuleBase,   sizeof(dwModuleBase)))

  { continue;} TINFO tInfo;//獲取鉤子所屬進程ID和線程ID if (!GetKernelMemory((PVOID)((ULONG)w32thd.pEThread+0x1ec),(BYTE *)&tInfo,   sizeof(tInfo)))

  { continue;} HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, tInfo.dwProcessID);if (hProcess == INVALID_HANDLE_VALUE)

  { continue;} //根據模塊基址,獲取鉤子函數所屬模塊的名稱if (GetModuleFileNameEx(hProcess, (HMODULE)dwModuleBase, cModuleName, 256))

  { OutputDebugString(cModuleName);OutputDebugString("\r\n");}

  利用上面的代碼就可以找到所屬病毒DLL的消息鉤子句柄,然后調用UnhookWindowsHookEx函數卸載這個消息鉤子就OK了。


本文出自:億恩科技【www.ibaoshan.net】

服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線

     
     
    国产一卡二卡四卡无卡免费| 涩反差合集91综合一区二区清纯| 饭桌上故意张开腿让公H| 亚洲精品无码成人区久久| 日本VA欧美VA欧美VA精品| 寂寞视频一对一视频APP| 草草浮力影院禁止18进入| 亚洲熟妇AV一区二区三区漫画| 色婷婷综合中文久久一本| 久久综合亚洲色一区二区三区| 丰满少妇AV无码区| 已婚少妇美妙人妻系列| 久久综合九色综合欧美狠狠| 丰满老熟好大BBB| 与亲女洗澡时伦了| 无码色AV一二区在线播放 | 亚洲欧美日韩综合久久| 日本XX爽21护士| 久久国产精品成人片免费| 高清熟女国产一区二区三区| 与狼共舞 电视剧| 午夜精品一区二区三区在线视| 欧美精品VIDEOSEX极品| 狠狠色丁香五月综合婷婷| xxxx国产精品| 亚洲精品美女久久7777777 | 一边喘气一边说疼的视频| 调教小SAO货撅起打屁股作文| 免费观看的A级毛片的网站| 国产午夜亚洲精品理论片不卡 | 精品一区二区三区无码免费直播| 动性配人ⅩXXXX配| 在线无码一区二区| 亚洲 小说区 图片区 都市| 人人妻人人爽人人澡欧美二区| 久久精品无码一区二区三区免费| 国产精品成人一区二区三区视频 | 成人奭片免费观看| 又黄又无遮挡AAAAA毛片| 先の欲求不満な人妻无码| 人妻少妇精品视频一区二区三区| 久久精品噜噜噜成人AV| 国产精品久久久久久亚洲AV| JAPANESE丰满人妻HD| 亚洲一区二区三区中文字幕在线| 婷婷成人五月综合激情| 欧美性XXXXX极品少妇| 久久精品国产久精国产| 国产精品亚洲精品日韩已方| 暴躁老阿姨CSGO技巧| 怡红院亚洲第一综合久久| 亚洲AV成人片无码www电影| 日日噜狠狠噜天天噜AV| 末发育女AV片一区二区| 精品国产一区二区三区久久影院 | 丁香婷婷激情俺也去俺来也| 18禁黄网站禁片免费观看APP| 亚洲国产AV一区二区三区四区| 丝瓜草莓视频APP| 欧美人伦禁忌DVD| 久久婷婷色综合老司机| 国产制服丝袜在线无码| 高清播放器欧美大片| OM老熟女HDXⅩXXX69| 呦交小U女国产精品视频| 亚洲AV日韩AV高潮喷潮无码天| 日韩人妻AV在线| 欧美丰满性久久久久久久| 久久国内精品自在自线400部| 国产精品亚洲成在人线| 陈冠希实干阿娇13分钟| 37大但人文艺术A级都市天气| 亚洲一区二区三区乱码AⅤ蜜桃女| 午夜成人鲁丝片午夜精品 | 欧美色成人综合天天影院| 久久亚洲AV无码精品色午夜麻豆 | 亚洲丰满熟妇浓毛XXXX| 四虎成人精品无码永久在线| 欧美最猛黑人XXXⅩ猛男无码| 久久亚洲AV成人无码国产最大 | 久久精品国产色蜜蜜麻豆| 国产午夜精品一区二区三区软件| 儿子耕了母亲荒废的田清朝| AV永久免费网站入口| 曰本丰满成熟xxxx精品| 亚洲欧美成人久久综合中文网| 午夜A级理论片在线播放不卡| 日韩精品无码熟人妻视频| 欧美黑人XXXXXⅩ| 老头霸占人妻中文字幕| 精品视频一区二区三区在线观看| 国产精品无码无卡在线观看久| 纯肉无遮挡H肉动漫在线观看国产| AV人摸人人人澡人人超碰下载| 永久AV狼友网站在线观看| 亚洲国产精品一区二区久久HS | 国产精品乱码久久久久软件 | 免费人妻精品一区二区三区| 久久精品国产99精品国产2| 国产亚AV手机在线观看| 国产成人一区二区青青草原| 成人欧美一区二区| WWW.亚洲精品色情AⅤ色戒| .一区二区三区在线 | 欧洲 | AV无码一区二区三区| 岳两片蚌肉缓缓张开| 亚洲日本一线产区和二线产| 亚洲AV永久无码精品主页| 午夜理论影院第九电影院| 视频免费网站入口| 日韩精品一区二区亚洲AV| 青青草原精品国产亚洲AV| 男人女人做爽爽18禁网站| 老肥熟妇丰满大屁股在线播放| 久久精品国产久精国产思思| 精东传媒VS天美传媒在线老牛 | 久久精品99无色码中文字幕 | AE射频电源成色| 综合亚洲另类欧美久久成人精品| 一边摸一边做爽的视频17国产| 亚洲日本中文字幕乱码在线| 亚洲国产精品VA在线观看香蕉 | 亚洲色老汉AV无码专区最| 亚洲成AV人在线播放无码| 亚洲AⅤ中文无码字幕色下载软件| 无码熟熟妇丰满人妻啪啪喷水| 天天狠天天透天天爱综合| 少妇被躁爽到高潮无码| 日韩精品一区二区三区色欲AV| 人妻少妇中文字幕久久| 欧洲无人区天空码头IV在哪一本| 欧美黑人XXXXXⅩ| 农民人伦一区二区三区| 免费国产黄网站在线观看视频| 老师你的兔子好软水好多小时| 久久久久亚洲AV片无码下载蜜桃| 久久99精品久久久久久HB无码 | ASIAN日本裸体PICS| 999久久久国产精品消防器材| 18禁H漫免费漫画无码网站| 中国CHAIN同志GAY片国产| 伊人久久大香线焦AV综合影院| 亚洲中文字幕A∨| 亚洲最刺激成人无码| 亚洲色精品三区二区一区| 亚洲熟妇丰满XXXXX国语| 亚洲午夜性春猛交77777| 亚洲日韩精品无码专区网站| 亚洲欧美综合人成在线| 亚洲人成无码网站18禁10| 亚洲欧洲第一的日产SUV| 亚洲欧美V国产一区二区| 亚洲熟妇一区二区| 亚洲一区无码精品色| 夜里18款禁用软件APP| 一女被两男吃奶玩乳尖| 尤物99国产成人精品视频| 在线观看片免费人成视频无码| 幼儿HIPHOP仙踪林的功能| 在线人成视频播放午夜福利| 中文字幕久久波多野结衣AV| 自拍亚洲综合在线精品| 98在线视频噜噜噜国产| BGMBGMBGM老头野外| JEAⅠOUSVUE成熟少归| ZOOFILIA杂交JAPAN| 暴躁老阿姨CSGO攻略大全| 成人亚洲欧美在线观看| 丰满性熟妇ⅩXXOOOZZX| 国产成人精品亚洲午夜麻豆| 国产馆AV超薄肉色丝袜| 国产免费无遮挡吸乳视频在线观看| 国产手机在线精品| 国精产品砖一区二区三区糖心| 黑鬼吊太大少妇尖叫| 精品乱码一卡2卡三卡4卡二卡| 久久国语露脸国产精品电影| 久久香蕉国产线看观看亚洲小说| 久久人人做人人妻人人玩精品VA| 麻豆产精国品一二三产区区| 免费无遮挡毛片中文字幕| 女被啪到高潮的GIF动态图无遮| 欧美V日韩V亚洲V最新在线观看 | 国产精品9999久久久久| 国产免费久久精品国产传媒| 国色天香A区与B区| 精品性高朝久久久久久久| 久久久久人妻一区精品性色AV| 麻花豆传媒剧国产MV在线上-| 哦┅┅快┅┅用力啊┅┅动态图| 青草青草视频2免费观看| 日产一二三区别免费必看| 少妇又粗又大人妻无码| 无码人妻精品一区二区蜜桃网站 | 亚洲鲁丝片一区二区三区| 夜鲁鲁鲁夜夜综合视频欧美| 中文字幕日韩人妻在线乱码 | 婷婷国产成人精品视频| 无人区码一码二码三码| 亚洲AV中文无码字幕色本草|