• <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>

            道。道。道

            安全特性不等于安全的特性

               :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理

            常用鏈接

            搜索

            •  

            最新評(píng)論

            網(wǎng)絡(luò)游戲盛行催生了各種外掛,讓商家頭痛不已,那么外掛是怎么設(shè)計(jì)的呢?看看本文就知道了

            ?

            一、 前言

              所謂游戲外掛,其實(shí)是一種游戲外輔程序,它可以協(xié)助玩家自動(dòng)產(chǎn)生游戲動(dòng)作、修改游戲網(wǎng)絡(luò)數(shù)據(jù)包以及修改游戲內(nèi)

            存數(shù)據(jù)等,以實(shí)現(xiàn)玩家用最少的時(shí)間和金錢(qián)去完成功力升級(jí)和過(guò)關(guān)斬將。雖然,現(xiàn)在對(duì)游戲外掛程序的“合法”身份眾說(shuō)

            紛紜,在這里我不想對(duì)此發(fā)表任何個(gè)人意見(jiàn),讓時(shí)間去說(shuō)明一切吧。


              隨著網(wǎng)絡(luò)游戲的時(shí)代的來(lái)臨,游戲外掛在原有的功能之上進(jìn)行了新的發(fā)展,它變得更加多種多樣,功能更加強(qiáng)大,操

            作更加簡(jiǎn)單,以至有些游戲的外掛已經(jīng)成為一個(gè)體系,比如《石器時(shí)代》,外掛品種達(dá)到了幾十種,自動(dòng)戰(zhàn)斗、自動(dòng)行走

            、自動(dòng)練級(jí)、自動(dòng)補(bǔ)血、加速、不遇敵、原地遇敵、快速增加經(jīng)驗(yàn)值、按鍵精靈……幾乎無(wú)所不包。

              游戲外掛的設(shè)計(jì)主要是針對(duì)于某個(gè)游戲開(kāi)發(fā)的,我們可以根據(jù)它針對(duì)的游戲的類(lèi)型可大致可將外掛分為兩種大類(lèi)。

              一類(lèi)是將游戲中大量繁瑣和無(wú)聊的攻擊動(dòng)作使用外掛自動(dòng)完成,以幫助玩家輕松搞定攻擊對(duì)象并可以快速的增加玩家

            的經(jīng)驗(yàn)值。比如在《龍族》中有一種工作的設(shè)定,玩家的工作等級(jí)越高,就可以駕馭越好的裝備。但是增加工作等級(jí)卻不

            是一件有趣的事情,毋寧說(shuō)是重復(fù)枯燥的機(jī)械勞動(dòng)。如果你想做法師用的杖,首先需要做基本工作--?砍樹(shù)。砍樹(shù)的方法

            很簡(jiǎn)單,在一棵大樹(shù)前不停的點(diǎn)鼠標(biāo)就可以了,每10000的經(jīng)驗(yàn)升一級(jí)。這就意味著玩家要在大樹(shù)前不停的點(diǎn)擊鼠標(biāo),這

            種無(wú)聊的事情通過(guò)"按鍵精靈"就可以解決。外掛的"按鍵精靈"功能可以讓玩家擺脫無(wú)趣的點(diǎn)擊鼠標(biāo)的工作。

              另一類(lèi)是由外掛程序產(chǎn)生欺騙性的網(wǎng)絡(luò)游戲封包,并將這些封包發(fā)送到網(wǎng)絡(luò)游戲服務(wù)器,利用這些虛假信息欺騙服務(wù)

            器進(jìn)行游戲數(shù)值的修改,達(dá)到修改角色能力數(shù)值的目的。這類(lèi)外掛程序針對(duì)性很強(qiáng),一般在設(shè)計(jì)時(shí)都是針對(duì)某個(gè)游戲某個(gè)

            版本來(lái)做的,因?yàn)槊總€(gè)網(wǎng)絡(luò)游戲服務(wù)器與客戶(hù)端交流的數(shù)據(jù)包各不相同,外掛程序必須要對(duì)欺騙的網(wǎng)絡(luò)游戲服務(wù)器的數(shù)據(jù)

            包進(jìn)行分析,才能產(chǎn)生服務(wù)器識(shí)別的數(shù)據(jù)包。這類(lèi)外掛程序也是當(dāng)前最流利的一類(lèi)游戲外掛程序。

              另外,現(xiàn)在很多外掛程序功能強(qiáng)大,不僅實(shí)現(xiàn)了自動(dòng)動(dòng)作代理和封包功能,而且還提供了對(duì)網(wǎng)絡(luò)游戲的客戶(hù)端程序的

            數(shù)據(jù)進(jìn)行修改,以達(dá)到欺騙網(wǎng)絡(luò)游戲服務(wù)器的目的。我相信,隨著網(wǎng)絡(luò)游戲商家的反外掛技術(shù)的進(jìn)展,游戲外掛將會(huì)產(chǎn)生

            更多更優(yōu)秀的技術(shù),讓我們期待著看場(chǎng)技術(shù)大戰(zhàn)吧......

              三、外掛技術(shù)綜述

              可以將開(kāi)發(fā)游戲外掛程序的過(guò)程大體上劃分為兩個(gè)部分:

              前期部分工作是對(duì)外掛的主體游戲進(jìn)行分析,不同類(lèi)型的外掛分析主體游戲的內(nèi)容也不相同。如外掛為上述談到的外

            掛類(lèi)型中的第一類(lèi)時(shí),其分析過(guò)程常是針對(duì)游戲的場(chǎng)景中的攻擊對(duì)象的位置和分布情況進(jìn)行分析,以實(shí)現(xiàn)外掛自動(dòng)進(jìn)行攻

            擊以及位置移動(dòng)。如外掛為外掛類(lèi)型中的第二類(lèi)時(shí),其分析過(guò)程常是針對(duì)游戲服務(wù)器與客戶(hù)端之間通訊包數(shù)據(jù)的結(jié)構(gòu)、內(nèi)

            容以及加密算法的分析。因網(wǎng)絡(luò)游戲公司一般都不會(huì)公布其游戲產(chǎn)品的通訊包數(shù)據(jù)的結(jié)構(gòu)、內(nèi)容和加密算法的信息,所以

            對(duì)于開(kāi)發(fā)第二類(lèi)外掛成功的關(guān)鍵在于是否能正確分析游戲包數(shù)據(jù)的結(jié)構(gòu)、內(nèi)容以及加密算法,雖然可以使用一些工具輔助

            分析,但是這還是一種堅(jiān)苦而復(fù)雜的工作。

              后期部分工作主要是根據(jù)前期對(duì)游戲的分析結(jié)果,使用大量的程序開(kāi)發(fā)技術(shù)編寫(xiě)外掛程序以實(shí)現(xiàn)對(duì)游戲的控制或修改

            。如外掛程序?yàn)榈谝活?lèi)外掛時(shí),通常會(huì)使用到鼠標(biāo)模擬技術(shù)來(lái)實(shí)現(xiàn)游戲角色的自動(dòng)位置移動(dòng),使用鍵盤(pán)模擬技術(shù)來(lái)實(shí)現(xiàn)游

            戲角色的自動(dòng)攻擊。如外掛程序?yàn)榈诙?lèi)外掛時(shí),通常會(huì)使用到擋截Sock和擋截API函數(shù)技術(shù),以擋截游戲服務(wù)器傳來(lái)的

            網(wǎng)絡(luò)數(shù)據(jù)包并將數(shù)據(jù)包修改后封包后傳給游戲服務(wù)器。另外,還有許多外掛使用對(duì)游戲客戶(hù)端程序內(nèi)存數(shù)據(jù)修改技術(shù)以及

            游戲 加速技術(shù)

              本文主要是針對(duì)開(kāi)發(fā)游戲外掛程序后期使用的程序開(kāi)發(fā)技術(shù)進(jìn)行探討,重點(diǎn)介紹的如下幾種在游戲外掛中常使用的程

            序開(kāi)發(fā)技術(shù)

              ● 動(dòng)作模擬技術(shù):主要包括鍵盤(pán)模擬技術(shù)和鼠標(biāo)模擬技術(shù)

              ● 封包技術(shù):主要包括擋截Sock技術(shù)和擋截API技術(shù)

            四、動(dòng)作模擬技術(shù)

              我們?cè)谇懊娼榻B過(guò),幾乎所有的游戲都有大量繁瑣和無(wú)聊的攻擊動(dòng)作以增加玩家的功力,還有那些數(shù)不完的迷宮,這

            些好像已經(jīng)成為了角色游戲的代名詞。現(xiàn)在,外掛可以幫助玩家從這些繁瑣而無(wú)聊的工作中擺脫出來(lái),專(zhuān)注于游戲情節(jié)的

            進(jìn)展。外掛程序?yàn)榱藢?shí)現(xiàn)自動(dòng)角色位置移動(dòng)和自動(dòng)攻擊等功能,需要使用到鍵盤(pán)模擬技術(shù)和鼠標(biāo)模擬技術(shù)。下面我們將重

            點(diǎn)介紹這些技術(shù)并編寫(xiě)一個(gè)簡(jiǎn)單的實(shí)例幫助讀者理解動(dòng)作模擬技術(shù)的實(shí)現(xiàn)過(guò)程。

              1. 鼠標(biāo)模擬技術(shù)
              
              幾乎所有的游戲中都使用了鼠標(biāo)來(lái)改變角色的位置和方向,玩家僅用一個(gè)小小的鼠標(biāo),就可以使角色暢游天下。那么

            ,我們?nèi)绾螌?shí)現(xiàn)在沒(méi)有玩家的參與下角色也可以自動(dòng)行走呢。其實(shí)實(shí)現(xiàn)這個(gè)并不難,僅僅幾個(gè)Windows API函數(shù)就可以搞

            定,讓我們先來(lái)認(rèn)識(shí)認(rèn)識(shí)這些API函數(shù)。

              (1) 模擬鼠標(biāo)動(dòng)作API函數(shù)mouse_event,它可以實(shí)現(xiàn)模擬鼠標(biāo)按下和放開(kāi)等動(dòng)作。

                VOID mouse_event(
                  DWORD dwFlags, // 鼠標(biāo)動(dòng)作標(biāo)識(shí)。
                  DWORD dx, // 鼠標(biāo)水平方向位置。
                  DWORD dy, // 鼠標(biāo)垂直方向位置。
                  DWORD dwData, // 鼠標(biāo)輪子轉(zhuǎn)動(dòng)的數(shù)量。
                  DWORD dwExtraInfo // 一個(gè)關(guān)聯(lián)鼠標(biāo)動(dòng)作輔加信息。
                );

              其中,dwFlags表示了各種各樣的鼠標(biāo)動(dòng)作和點(diǎn)擊活動(dòng),它的常用取值如下:

               MOUSEEVENTF_MOVE 表示模擬鼠標(biāo)移動(dòng)事件。

               MOUSEEVENTF_LEFTDOWN 表示模擬按下鼠標(biāo)左鍵。

               MOUSEEVENTF_LEFTUP 表示模擬放開(kāi)鼠標(biāo)左鍵。

               MOUSEEVENTF_RIGHTDOWN 表示模擬按下鼠標(biāo)右鍵。

               MOUSEEVENTF_RIGHTUP 表示模擬放開(kāi)鼠標(biāo)右鍵。

               MOUSEEVENTF_MIDDLEDOWN 表示模擬按下鼠標(biāo)中鍵。

               MOUSEEVENTF_MIDDLEUP 表示模擬放開(kāi)鼠標(biāo)中鍵。

              (2)、設(shè)置和獲取當(dāng)前鼠標(biāo)位置的API函數(shù)。獲取當(dāng)前鼠標(biāo)位置使用GetCursorPos()函數(shù),設(shè)置當(dāng)前鼠標(biāo)位置使用

            SetCursorPos()函數(shù)。

                BOOL GetCursorPos(
                 LPPOINT lpPoint // 返回鼠標(biāo)的當(dāng)前位置。
                );
                BOOL SetCursorPos(
                int X, // 鼠標(biāo)的水平方向位置。
                  int Y //鼠標(biāo)的垂直方向位置。
                );?

              通常游戲角色的行走都是通過(guò)鼠標(biāo)移動(dòng)至目的地,然后按一下鼠標(biāo)的按鈕就搞定了。下面我們使用上面介紹的API函

            數(shù)來(lái)模擬角色行走過(guò)程。

               CPoint oldPoint,newPoint;
               GetCursorPos(&oldPoint); //保存當(dāng)前鼠標(biāo)位置。
               newPoint.x = oldPoint.x+40;
               newPoint.y = oldPoint.y+10;
               SetCursorPos(newPoint.x,newPoint.y); //設(shè)置目的地位置。
               mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);//模擬按下鼠標(biāo)右鍵。
               mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);//模擬放開(kāi)鼠標(biāo)右鍵。?

              2. 鍵盤(pán)模擬技術(shù)

              在很多游戲中,不僅提供了鼠標(biāo)的操作,而且還提供了鍵盤(pán)的操作,在對(duì)攻擊對(duì)象進(jìn)行攻擊時(shí)還可以使用快捷鍵。為

            了使這些攻擊過(guò)程能夠自動(dòng)進(jìn)行,外掛程序需要使用鍵盤(pán)模擬技術(shù)。像鼠標(biāo)模擬技術(shù)一樣,Windows API也提供了一系列

            API函數(shù)來(lái)完成對(duì)鍵盤(pán)動(dòng)作的模擬。

              模擬鍵盤(pán)動(dòng)作API函數(shù)keydb_event,它可以模擬對(duì)鍵盤(pán)上的某個(gè)或某些鍵進(jìn)行按下或放開(kāi)的動(dòng)作。

               VOID keybd_event(
                 BYTE bVk, // 虛擬鍵值。
                 BYTE bScan, // 硬件掃描碼。
                 DWORD dwFlags, // 動(dòng)作標(biāo)識(shí)。
                 DWORD dwExtraInfo // 與鍵盤(pán)動(dòng)作關(guān)聯(lián)的輔加信息。
               );

              其中,bVk表示虛擬鍵值,其實(shí)它是一個(gè)BYTE類(lèi)型值的宏,其取值范圍為1-254。有關(guān)虛擬鍵值表請(qǐng)?jiān)贛SDN上使用關(guān)鍵

            字“Virtual-Key Codes”查找相關(guān)資料。bScan表示當(dāng)鍵盤(pán)上某鍵被按下和放開(kāi)時(shí),鍵盤(pán)系統(tǒng)硬件產(chǎn)生的掃描碼,我們可

            以MapVirtualKey()函數(shù)在虛擬鍵值與掃描碼之間進(jìn)行轉(zhuǎn)換。dwFlags表示各種各樣的鍵盤(pán)動(dòng)作,它有兩種取值:

            KEYEVENTF_EXTENDEDKEY和KEYEVENTF_KEYUP。

              下面我們使用一段代碼實(shí)現(xiàn)在游戲中按下Shift+R快捷鍵對(duì)攻擊對(duì)象進(jìn)行攻擊

               keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0); //按下CTRL鍵。
               keybd_event(0x52,MapVirtualKey(0x52,0),0,0);//鍵下R鍵。
               keybd_event(0x52,MapVirtualKey(0x52,0), KEYEVENTF_KEYUP,0);//放開(kāi)R鍵。
               keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),
               KEYEVENTF_KEYUP,0);//放開(kāi)CTRL鍵。

              3. 激活外掛

              上面介紹的鼠標(biāo)和鍵盤(pán)模擬技術(shù)實(shí)現(xiàn)了對(duì)游戲角色的動(dòng)作部分的模擬,但要想外掛能工作于游戲之上,還需要將其與

            游戲 的場(chǎng)景窗口聯(lián)系起來(lái)或者使用一個(gè)激活鍵,就象按鍵精靈的那個(gè)激活鍵一樣。我們可以用GetWindow函數(shù)來(lái)枚舉窗口

            ,也可以用Findwindow函數(shù)來(lái)查找特定的窗口。另外還有一個(gè)FindWindowEx函數(shù)可以找到窗口的子窗口,當(dāng)游戲切換場(chǎng)景

            的時(shí)候我們可以用FindWindowEx來(lái)確定一些當(dāng)前窗口的特征,從而判斷是否還在這個(gè)場(chǎng)景,方法很多了,比如可以

            GetWindowInfo來(lái)確定一些東西,比如當(dāng)查找不到某個(gè)按鈕的時(shí)候就說(shuō)明游戲場(chǎng)景已經(jīng)切換了等等辦法。當(dāng)使用激活鍵進(jìn)

            行關(guān)聯(lián),需要使用Hook技術(shù)開(kāi)發(fā)一個(gè)全局鍵盤(pán)鉤子,在這里就不具體介紹全局鉤子的開(kāi)發(fā)過(guò)程了,在后面的實(shí)例中我們將

            會(huì)使用到全局鉤子,到時(shí)將學(xué)習(xí)到全局鉤子的相關(guān)知識(shí)


              4. 實(shí)例實(shí)現(xiàn)

              通過(guò)上面的學(xué)習(xí),我們已經(jīng)基本具備了編寫(xiě)動(dòng)作式游戲外掛的能力了。下面我們將創(chuàng)建一個(gè)畫(huà)筆程序外掛,它實(shí)現(xiàn)自

            動(dòng)移動(dòng)畫(huà)筆字光標(biāo)的位置并寫(xiě)下一個(gè)紅色的“R”字。以這個(gè)實(shí)例為基礎(chǔ),加入相應(yīng)的游戲動(dòng)作規(guī)則,就可以實(shí)現(xiàn)一個(gè)完

            整的游戲外掛。這里作者不想使用某個(gè)游戲作為例子來(lái)開(kāi)發(fā)外掛(因沒(méi)有游戲商家的授權(quán)啊!),如讀者感興趣的話可以

            找一個(gè)游戲試試,最好僅做測(cè)試技術(shù)用。

              首先,我們需要編寫(xiě)一個(gè)全局鉤子,使用它來(lái)激活外掛,激活鍵為F10。創(chuàng)建全局鉤子步驟如下:

              (1).選擇MFC AppWizard(DLL)創(chuàng)建項(xiàng)目ActiveKey,并選擇MFC Extension DLL(共享MFC拷貝)類(lèi)型。

              (2).插入新文件ActiveKey.h,在其中輸入如下代碼

               #ifndef _KEYDLL_H
               #define _KEYDLL_H

               class AFX_EXT_CLASS CKeyHook:public CObject
               {
                public:
             CKeyHook();
             ~CKeyHook();
             HHOOK Start(); //安裝鉤子
             BOOL Stop(); //卸載鉤子
               };
               #endif?

              (3).在ActiveKey.cpp文件中加入聲明"#include ActiveKey.h"。

              (4).在ActiveKey.cpp文件中加入共享數(shù)據(jù)段,代碼如下:

               //Shared data section
               #pragma data_seg("sharedata")
               HHOOK glhHook=NULL; //鉤子句柄。
               HINSTANCE glhInstance=NULL; //DLL實(shí)例句柄。
               #pragma data_seg()?

              (5).在ActiveKey.def文件中設(shè)置共享數(shù)據(jù)段屬性,代碼如下:

               SETCTIONS
               shareddata READ WRITE SHARED

              (6).在ActiveKey.cpp文件中加入CkeyHook類(lèi)的實(shí)現(xiàn)代碼和鉤子函數(shù)代碼

               //鍵盤(pán)鉤子處理函數(shù)。
               extern "C" LRESULT WINAPI KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
               {
               if( nCode >= 0 )
               {
               if( wParam == 0X79 )//當(dāng)按下F10鍵時(shí),激活外掛。
             {
              //外掛實(shí)現(xiàn)代碼
            CPoint newPoint,oldPoint;
               GetCursorPos(&oldPoint);
               newPoint.x = oldPoint.x+40;
               newPoint.y = oldPoint.y+10;
               SetCursorPos(newPoint.x,newPoint.y);
               mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//模擬按下鼠標(biāo)左鍵。
              mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//模擬放開(kāi)鼠標(biāo)左鍵。
              keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),0,0); //按下SHIFT鍵。
              keybd_event(0x52,MapVirtualKey(0x52,0),0,0);//按下R鍵。
              keybd_event(0x52,MapVirtualKey(0x52,0),KEYEVENTF_KEYUP,0);//放開(kāi)R鍵。
              keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),KEYEVENTF_KEYUP,0);//放開(kāi)SHIFT鍵。
                  SetCursorPos(oldPoint.x,oldPoint.y);
             }
               }
               return CallNextHookEx(glhHook,nCode,wParam,lParam);
               }

               CKeyHook::CKeyHook(){}
               CKeyHook::~CKeyHook()
               { 
               if( glhHook )
            Stop();
               }
               //安裝全局鉤子。
               HHOOK CKeyHook::Start()
               {
            glhHook = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,glhInstance,0);//設(shè)置鍵盤(pán)鉤子。
            return glhHook;
            }
               //卸載全局鉤子。
               BOOL CKeyHook::Stop()
               {
               BOOL bResult = TRUE;
             if( glhHook )
               bResult = UnhookWindowsHookEx(glhHook);//卸載鍵盤(pán)鉤子。
               return bResult;
               }?

              (7).修改DllMain函數(shù),代碼如下:

               extern "C" int APIENTRY
               DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
               {
            //如果使用lpReserved參數(shù)則刪除下面這行
            UNREFERENCED_PARAMETER(lpReserved);

            if (dwReason == DLL_PROCESS_ATTACH)
            {
              TRACE0("NOtePadHOOK.DLL Initializing!\n");
               //擴(kuò)展DLL僅初始化一次
              if (!AfxInitExtensionModule(ActiveKeyDLL, hInstance))
            return 0;
              new CDynLinkLibrary(ActiveKeyDLL);
                  //把DLL加入動(dòng)態(tài)MFC類(lèi)庫(kù)中
              glhInstance = hInstance;
              //插入保存DLL實(shí)例句柄
            }
            else if (dwReason == DLL_PROCESS_DETACH)
            {
              TRACE0("NotePadHOOK.DLL Terminating!\n");
              //終止這個(gè)鏈接庫(kù)前調(diào)用它
              AfxTermExtensionModule(ActiveKeyDLL);
            }
            return 1;
               }

            posted on 2006-11-18 16:53 獨(dú)孤九劍 閱讀(558) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Win32Visual C++ 8.0misc
            国产精品福利一区二区久久| 欧美日韩精品久久免费| 日本三级久久网| 伊人热热久久原色播放www| 怡红院日本一道日本久久| 日本精品一区二区久久久| 欧洲人妻丰满av无码久久不卡 | 九九99精品久久久久久| 久久本道久久综合伊人| 浪潮AV色综合久久天堂| 精品久久久久久国产三级| 欧美va久久久噜噜噜久久| 欧美激情精品久久久久久久九九九 | 精品综合久久久久久98| 91精品免费久久久久久久久| 久久精品国产亚洲AV久| 久久国产成人亚洲精品影院| 久久精品毛片免费观看| 香蕉99久久国产综合精品宅男自 | 色欲久久久天天天综合网精品| 国产女人aaa级久久久级| 国产成人久久精品激情| 久久天天躁夜夜躁狠狠| 久久久久久久久久久免费精品 | 久久久久亚洲AV无码永不| 久久久久亚洲AV成人网| 一本大道久久a久久精品综合| 久久精品国产亚洲av麻豆色欲| 亚洲国产天堂久久久久久| 久久精品国产亚洲7777| 国产精品免费久久久久影院| 久久99精品久久久久久| 久久av无码专区亚洲av桃花岛| 日韩欧美亚洲综合久久| 热久久最新网站获取| 国产精品99久久久精品无码| 久久久久久久亚洲精品| 亚洲国产成人久久精品99| 伊人色综合九久久天天蜜桃| 思思久久99热只有频精品66| 18禁黄久久久AAA片|