亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

共享軟件的注冊加密法

2019-09-06 23:33:34
字體:
來源:轉載
供稿:網友

                        Internet網絡的迅速發展,為軟件高效傳播開辟更加廣闊的天地。如國內著名的金蜘蛛軟件下載中心,就是一個典型的發布軟件集散地。發布共享軟件主要包括兩種形式:日期限制形式和電子注冊形式。日期限制形式允許下載軟件的用戶使用軟件一段時間,如一個月等,如果用戶認可該軟件,可購買該軟件的注冊序列號繼續使用;電子注冊形式就是根據用戶所用機器的硬件信息產生注冊碼,并在軟件中對某些先進或常用功能進行限制,如果用戶要使用其全部功能,必須將軟件采集的有關硬件信息反饋給開發者,并交一定的注冊費可獲得該軟件在自己機器中的注冊碼,才能正常使用。
   前一種形式很容易給盜版者造成可乘之機,如果制作盜版者購買了一個注冊序列號并公布于天下,則所有用戶使用這個注冊號都可進行正常使用;后者對用戶來說注冊手段稍顯復雜些,對開發者來說也需要一定的編程真功夫,但其具有“八點鎖緊”功能,防盜性卻是不容置疑。本文根據自己的實踐,將后者的實現過程介紹給想要制作發布共享軟件的讀者。
   一、注冊源
   在WIN98/95的保護模式下,要根據硬件信息形成注冊碼可不是一件容易的事,在實模式下可通過硬盤端口1F6H和1F7H直接讀取硬盤的序列號等信息作為注冊的數據源,但這一方法在保護模式下卻被亮出了紅牌。利用BIOS中的主板序列號、BIOS版本序列號或主機出廠日期和標志等,完全可以作為注冊碼的注冊源。如ROMBIOS中F000H-FFFFH區域中就存在與硬件配置有關的信息,還可以采集其它一處或幾處主板等的信息作為注冊碼的生產基地。例如可根據F000H:FFF5H-F000H:FFFFH 中存放的主機出廠日期和主機標志值,產生應用程序的注冊碼。由于計算機產品的更新換代比較快,而且所有用戶使用的計算機不可能配置都完全相同,所以注冊碼產生的源也不會完全相同。而且這些硬件信息內容在任何操作系統下均完全相同,兼容性非常好,更不會因為操作系統的更新而造成注冊功能失效。
   注冊源確定之后,關鍵的問題就是共享軟件安裝程序如何采集注冊源信息,并讓用戶將其返回給開發者。最簡單的方法就是將采集到的注冊源信息經過位操作加密后存放到一個文本中,形成注冊碼的數據源資料。這個注冊源數據串可稍長一些,但不宜過長,使用戶能夠通過電子郵箱、電話或信件順利轉給開發者為宜。如筆者安裝程序是用C語言編制的,如果將上述內存地址作為注冊源,數據串文本文件名為KEYID.DOC,長度為20個字符。其示例代碼如下:
   FILE  *fp2;
   unsigned int keyrom[9];
   unsigned char buff[0x410];
   unsigned char pathstmp[80];
   unsigned char path[80]={"C:/WBCOOL"};
   unsigned int far *pt=(unsigned int far*)0xf000fff6L;
   ......
   outportb(0x21,0x2);
   strcpy(pathstmp,path);
   strcat(pathstmp,"/");
   strcat(pathstmp,"KEYID.DOC");
   for(i=0;i<5;i++)
     keyrom=(*(pt+i)+0x1818)^0x5858;//第一級加密算法
   sprintf(buff,"KEYID:%04x%04x%04x%04x%04x",
     keyrom[0],keyrom[1],keyrom[2],keyrom[3],keyrom[4]);
   buff[0x1a]=0;
   if((fp2=fopen(pathstmp,"wb"))==NULL)
   {
     printf("FILE %s CREATE ERROR!",pathtmp);
   } else {
     fseek(fp2,0L,SEEK_SET);
     fprintf(fp2,"%sxdxa",buff);
     fclose(fp2);
   }
   outportb(0x21,0x0);
   
   二、注冊機
   
   開發者得到用戶提供的注冊源數據之后,就需要利用注冊機生成注冊碼并返回給用戶。注冊機利用既定的位操作和不可逆算法,形成用戶比較容易操作的字符串注冊碼,注冊碼的長度一般為8-16位為宜,用戶只需注冊一次就可以長期使用,所以注冊碼的長度不會影響用戶的注冊操作。當然注冊機的算法應與共享軟件中的算法部分基本相同。對于遠程用戶,注冊機應該具有從鍵盤和內存兩種取得注冊源數據的功能,所以注冊機的加密算法實際為兩個分支:第一個分支是從鍵盤獲取注冊源數據后直接根據注冊算法形成注冊碼的過程,是直接給遠程用戶反饋注冊碼的過程;第二個分支是直接從ROM BIOS中根據注冊源算法取得注冊源數據,再根據注冊算法形成注冊碼的過程,是直接讀取本地機注冊碼的。
   用戶得到注冊碼后,根據共享發布軟件的注冊方法進行一次注冊,應用程序會自動將這個注冊碼存放到軟件的特定位置處,當應用程序被他人拷貝到其它機器中去后,由于注冊碼因不同機器而異,所以應用程序的功能或使用次數仍然受限,要在其它機器中使用該應用程序,還必須進行重新注冊,達到共享軟件發布目的。同時由于注冊源數據的算法和注冊碼算法均可因人而異,因此這種方法非??煽俊1救藢崿F的注冊機帶參數時接受鍵盤輸入注冊源;不帶任何參數時從本地機器內直接采集注冊源數據。我的注冊機示例程序如下:
#include <conio.h>
#include <dos.h>
#include <io.h>
#include <dir.h>
#include <alloc.h>
#include <string.h>
#include <stdio.h>
#include <process.h>
#include <fcntl.h>
#include <ctype.h>
#include <stdlib.h>
unsigned char Buff[18];
unsigned char Buff1[18];
unsigned int  keyrom[9];
unsigned int sum,sum1,sumi,sumj;
unsigned int far *pt=(unsigned int far *)0xf000fff6L;
unsigned int i=0,j=0,m,imecom;
unsigned char p;
unsigned int  nn,nn1,nn2;
unsigned char rbuff[100],cc,cc1,cc2;
int fp;
void main(int argc,char *argv[])
{
 if(argc>=2){
   printf("KEYID:");
   scanf("%s",rbuff);//接受鍵盤輸入遠程注冊源
   j=strlen(rbuff);
   if(j!=20) exit(1);
   for(i=0;i<20;i++){//讀入20位注冊源數據
     if((rbuff>='a')&&(rbuff<='f')) rbuff&=0xdf;
     if((rbuff>='A')&&(rbuff<='F')) rbuff-=0x37;
     else if((rbuff>='0')&&(rbuff<='9')) rbuff-=0x30;
     else exit(1);
   }
   for(i=0;i<5;i++){//形成字符串
     cc1=rbuff[i*4]&0xf;
     cc2=rbuff[i*4+1]&0xf;
     cc=(cc1<<4)|cc2;
     nn1=(unsigned int)cc;
     cc1=rbuff[i*4+2]&0xf;
     cc2=rbuff[i*4+3]&0xf;
     cc=(cc1<<4)|cc2;
     nn2=(unsigned int)cc;
     nn=(nn1<<8)|nn2;
     keyrom=nn;
   }
   sum=0x1234;
   sum1=0x7456;
   for(sumj=0;sumj<4;sumj++){//形成16位注冊碼
     for(sumi=0;sumi<5;sumi++){
/tsum+=keyrom[sumi];    //形成前4位碼
/tsum1+=keyrom[sumi];
     }
     sum^=0x1234<<sumj;      //進行移位異或處理
     sum1^=0x7456<<sumj;
     sprintf(Buff+4*sumj,"%04x",sum);
     sprintf(Buff1+4*sumj,"%04x",sum1);
   }/t/t/t //形成16位注冊碼
   printf("WIN-KEY:");
   printf(Buff);
   printf("DOS-KEY:");
   printf(Buff1);
   exit(1);
 } else {
   sum=0x1234;
   sum1=0x7456;
   for(sumj=0;sumj<4;sumj++){//形成16位注冊碼
     for(sumi=0;sumi<5;sumi++){
/tsum+=(*(pt+sumi)+0x1818)^0x5858;
/tsum1+=(*(pt+sumi)+0x1818)^0x5858;
     }
     sum^=0x1234<<sumj;
     sum1^=0x7456<<sumj;//進行移位異或處理
     sprintf(Buff+4*sumj,"%04x",sum);
     sprintf(Buff1+4*sumj,"%04x",sum1);
   }
   printf("WIN-KEY:");
   printf(Buff);
   printf("DOS-KEY:");
   printf(Buff1);
 }
}
   三、注冊碼
   當用戶注冊成功后,注冊碼就被寫到共享軟件的相應位置。這時共享軟件必須對用戶注冊碼進行實時檢測與判斷,才能實現注冊限制功能。這時要求共享軟件必須內部取得注冊源數據,并利用注冊機中相同的算法產生內部注冊碼。這就要求共享軟件直接讀取ROM BIOS的注冊源信息,并在共享軟件中需要限制的功能處增加注冊碼檢測判斷功能,這需要根據共享軟件的實際需要、軟件大小和實現的難易程度來確定限制的數量,使盜版者很難進行解密。這樣既使計算機中多個共享軟件使用相同的注冊源,也不會發生注冊沖突問題;既使是使用了相同的注冊源數據,由于注冊算法的不同注冊碼也不會相同;即使解密者知道注冊算法的注冊源地址,由于無法知道注冊算法而且注冊點遍布整個共享軟件,也很難進行盜版。因此,這一注冊方法使共享軟件有效地跨越各種系統平臺。
   要在共享軟件內部產生注冊碼,必須在共享軟件中讀取ROM BIOS數據源內存數據。WINDOWS保護模式下必須利用段選擇符方法和API編程接口提供的函數才能實現:
   1.AllocSelector(Selector)分配一個與參數相同的空選擇器
   2.FreeSelector(Selector) 釋放分配的選擇器
   3.SetSelectorBase()      設置選擇器描述符物理起始地址
   4.GetSelectorBase()      獲取選擇器描述符物理起始地址
   5.SetSelectorLimit()     設置選擇器描述符訪問界限
   6.GetSelectorLimit()     獲取選擇器描述符訪問界限
   其中函數AllocSelector(Selector) 是保護模式下物理內存訪問的關鍵,Selector是分配空選擇器的段寄存器模板,可以利用GlobalAlloc()函數分配內存,再利用GlobalHandleToSel()函數將內存句柄轉換為相應選擇器,內存單元訪問結束后再利用GlobalFree()釋放分配的內存。最簡單的方法就是將系統的數據段寄存器__DS直接作為模板參數,這個參數在一般應用程序中完全可以正常使用。然后利用SetSelectorBase()和SetSelectorLimit( )函數分別設置內存的物理起始地址和訪問界限值,利用正常的指針操作*pt=Value和Value=*pt訪問物理內存單元,訪問結束后必須使用FreeSelector()函數釋放分配的選擇器,因為WINDOWS 并不自動釋放無用的選擇器,而且系統的選擇器共享資源是非常有限,只有8192個供使用。根據以上原理及注冊機中的注冊源和注冊碼算法,就不難實現共享軟件內部注冊碼函數:
UINT ImeCmpkey(void)
{ //共享軟件內部注冊碼產生函數
   static unsigned int sum;
   static BOOL  flag;
   static unsigned int far *pt;
   static UINT  Sel1,Sel2;
   static WORD  Seg,Off,Start;
   static DWORD Bas,Lim;
   flag=TRUE;
   sum=0x1234;
   __asm mov Sel1,ds;//將DS作為模板
   Sel2=AllocSelector(Sel1);//分配一個新選擇符
   if(Sel2==NULL){
     flag=FALSE;
     pt=(unsigned int far*)0xf000fff0L;
   } else {
     Seg=0xffff;    //絕對地址段址
     Off=0x10;      //絕對地址偏移
     Start=0x0;
     Bas=((unsigned long)Seg)<<4|Start;
     Lim=(unsigned long)Off-1;
     SetSelectorBase(Sel2,Bas);
     SetSelectorLimit(Sel2,Lim);
     pt=(unsigned int far*)((((unsigned long)Sel2)<<16)|Start);
   }
   for(j=0;j<4;j++){//形成16位注冊碼
     for(i=0;i<5;i++) sum+=(*(pt+3+i)+0x1818)^0x5858;//形成前4位
     sum^=0x1234<<j;//進行移位異或處理
     wsprintf((LPSTR)sImeG.ImeKey+4*j,(LPSTR)"%04x",sum);
   }
   if(flag==TRUE) FreeSelector(Sel2);
   sImeG.ImeKey[16]=0;//對注冊碼本身加密
   for(i=16;i>0;i--) sImeG.ImeKey[16-i]^=(unsigned char)i;
   for(i=0;i<16;i++){ //判斷注冊碼
     if(sImeG.ImeKey!=lpImeL->ZcMyOk) break;
   }
   if(i==16){
     sImeG.ZcFlag=FALSE;
     sImeG.ZcCount=0x0;
     lpImeL->UseNum=0x0;
     for(i=0;i<16;i++) sImeG.ImeKey=0x0;
     return(0);
   } else {
     sImeG.ZcFlag=TRUE;
     sImeG.ZcCount=0x0;
     sImeG.iSel    = 1;
     sImeG.FScrCz  = TRUE;
     lstrcpy(sImeG.szSel[0],(LPSTR)"注冊:_________________");
     sImeG.szSel[0][6]=0x11;
     sImeG.szSel[0][23]=0x0;
     UpdateInList();
     return(~0);
   }
}
   四、注冊點
   共享軟件內部注冊碼產生后,需要對抗盜版的注冊點的多少取決于共享軟件的自身價值、開發者的加密深度和軟件實現的復雜程度等諸多因素,同時這也決定了注冊提示信息的顯示頻度,來套磁用戶進行合法使用。但就筆者自身而言,至少應該將共享軟件中實現難度較大、深受用戶歡迎以及普遍使用的功能加上注冊點。建議不同平臺之間的注冊碼要分別設計注冊算法和注冊碼。其代碼示例如下:
   注冊點一:
   if(lpImeL->UseNum>=0x3f80){
     if(ImeCmpKey()==~0){
/tsImeG.ZcFlag=TRUE;
     } else {
/tsImeG.ZcFlag=FALSE;
/tlpImeL->UseNum=0x0;
     }
   } else lpImeL->UseNum+=sImeG.iWord;
   注冊點二:
   if(ImeCmpKey()==~0){
     sImeG.ZcFlag=TRUE;
     return;
   } else {
     sImeG.ZcFlag=FALSE;
     lpImeL->UseNum=0x0;
   }

   五、注冊口
   對于共享軟件,不管其實現何種功能,最好采取再線注冊方式,這樣可以減少用戶很多重復操作。同時應該采取多個注冊入口,如本人軟件可以在增加或刪除詞組等時進行注冊,只要一處注冊成功整個軟件就算注冊成功,并注意對注冊口輸入的注冊碼進行再加密處理。
   筆者共享軟件中注冊口代碼示例代碼如下:
   if(sImeG.ZcFlag==TRUE){
     if((cCharCode==0x8)||(cCharCode==0x4b)){
/tif(sImeG.ZcCount>0){ //刪除鍵處理
/t  if(sImeG.ZcCount<17)
/t    sImeG.szSel[0][sImeG.ZcCount+6]=0x5f;
/t  else sImeG.szSel[0][sImeG.ZcCount+6]=0x0;
/t  sImeG.ZcCount--;
/t  sImeG.szSel[0][sImeG.ZcCount+6]=0x11;
/t  lpImeL->ZcMyOk[sImeG.ZcCount]=0x0;
/t  sImeG.iSel = 0x1;
/t  sImeG.FScrCz  = TRUE;
/t  UpdateInList();
/t} else MessageBeep(-1);
     } else if (cCharCode==0xd){//回車鍵處理
/tif(sImeG.ZcCount==0x10){
/t  sImeG.ZcFlag=FALSE;
/t  sImeG.ZcCount=0x0;
/t  sImeG.iSel = 0x0;
/t  ScrnCode(sImeG.iStart);
/t  sImeG.FScrCz  = TRUE;
/t  UpdateInList();
/t  for(i=16;i>0;i--)
/t    lpImeL->ZcMyOk[16-i]^=(unsigned char)i;
/t  lpImeL->ZcMyOk[16]=0;
/t  for(i=0;i<16;i++){
/t    if(sImeG.ImeKey!=lpImeL->ZcMyOk) break;
/t  }
/t  if(i==16){//寫入注冊碼
/t    for(i=0;i<16;i++) sImeG.ImeKey=0x0;
/t    j=GetSystemDirectory(FileName,80);
/t    if((j==0)||(j>64)){
/t      wsprintf((LPSTR)sImeG.ImeBuff,(LPSTR)"系統路徑非法!");
/t      ErrMessageBox((LPSTR)sImeG.ImeBuff);
/t      for(i=0;i<16;i++) lpImeL->ZcMyOk=0x0;
/t      ShowMessTs(8);
/t    } else {
/t      lstrcat(FileName,(LPSTR)"/");
/t      lstrcat(FileName,(LPSTR)"WBCOOL.IME");
/t      if((hTmp=_lopen(FileName,READ_WRITE))==-1){
/t/twsprintf((LPSTR)sImeG.ImeBuff,(LPSTR)"程序打開出錯!");
/t/tErrMessageBox((LPSTR)sImeG.ImeBuff);
/t/tfor(i=0;i<16;i++) lpImeL->ZcMyOk=0x0;
/t/tShowMessTs(8);
/t      } else {
/t/t_llseek(hTmp,0x12345L,SEEK_SET);//12345為注冊碼地址
/t/t_lwrite(hTmp,lpImeL->ZcMyOk,16);
/t/t_lclose(hTmp);
/t/tShowMessTs(7);
/t      }
/t    }
/t  } else {
/t    for(i=0;i<16;i++){
/t      sImeG.ImeKey=0x0;
/t      lpImeL->ZcMyOk=0x0;
/t    }
/t    ShowMessTs(8);
/t  }
/t} else MessageBeep(-1);
     } else if ((cCharCode>=0x30)&&(cCharCode<='~')){
/tif(sImeG.ZcCount<16){
/t  if((cCharCode>='A')&&(cCharCode<='Z')) cCharCode^=0x20;
/t  lpImeL->ZcMyOk[sImeG.ZcCount]=cCharCode;
/t  sImeG.szSel[0][sImeG.ZcCount+6]=cCharCode;
/t  sImeG.ZcCount++;
/t  sImeG.szSel[0][sImeG.ZcCount+6]=0x11;
/t  sImeG.iSel = 0x1;
/t  sImeG.FScrCz  = TRUE;
/t  UpdateInList();
/t} else MessageBeep(-1);
     } else MessageBeep(-1);
     return(iRet);
   }
   總之,共享發布軟件的制作應做到:注冊源要選準、注冊算法要多變、注冊碼要再加密、注冊機要管好、注冊點要多方位、注冊方式要在線、注冊入口要多點。這樣才能確保軟件的安全可靠。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品永久免费| 国产精品永久免费在线| 久久香蕉精品香蕉| 国产精品久久久久久久久久99| 久青草国产97香蕉在线视频| 久久久爽爽爽美女图片| 亚洲伊人久久大香线蕉av| 色狠狠av一区二区三区香蕉蜜桃| 一区二区三区亚洲| 97视频在线观看亚洲| 亚洲一级免费视频| 精品美女永久免费视频| 国产精品日韩欧美大师| 国产精品99久久久久久白浆小说| 日韩欧美极品在线观看| 久久这里只有精品99| 97久久精品视频| 97超级碰碰人国产在线观看| 91系列在线播放| 国产精品久久久久免费a∨大胸| 7m第一福利500精品视频| 日韩av免费看网站| 欧美大人香蕉在线| 久久久久久久久久久人体| 欧美色videos| 国外成人在线视频| 国产精品aaaa| 亚洲一区二区三| 国产精品一区二区3区| 欧美一级淫片aaaaaaa视频| 成人性教育视频在线观看| 久久影院在线观看| 久久精品人人做人人爽| 亚洲性xxxx| 成人在线中文字幕| 正在播放国产一区| 久久成人综合视频| 久久在精品线影院精品国产| 欧美乱大交做爰xxxⅹ性3| 国产精品日韩久久久久| 久久亚洲精品视频| 成人免费视频在线观看超级碰| 国产国语videosex另类| 久久久亚洲精品视频| 欧美体内谢she精2性欧美| 国产97人人超碰caoprom| 国产日韩在线视频| 欧美激情xxxx性bbbb| 国产亚洲精品高潮| 日韩女在线观看| 国产热re99久久6国产精品| 日韩精品视频在线观看免费| 亚洲视频国产视频| 日韩精品免费在线视频| 国产999精品久久久| 亚洲图片欧美午夜| 九九久久精品一区| 久久综合国产精品台湾中文娱乐网| 欧美专区日韩视频| 国产乱肥老妇国产一区二| 最新国产精品亚洲| 国产精品成人va在线观看| 亚洲欧美国产精品专区久久| 日韩高清欧美高清| 性欧美视频videos6一9| 亚洲最新中文字幕| 日韩精品在线免费播放| 亚洲少妇激情视频| 在线激情影院一区| 国产999精品| 国产91精品久久久久久| 国产精品精品久久久| 日韩欧美亚洲国产一区| 中文字幕日韩精品在线观看| 久久久久久久久久久人体| 亚洲成成品网站| 国产欧美中文字幕| 久久久国产精品一区| 欧美极品欧美精品欧美视频| 欧美日韩中文字幕日韩欧美| 欧美人与性动交| 久久久免费观看| 色天天综合狠狠色| 精品网站999www| 国产精品久久久久久久久久| 欧洲亚洲免费在线| 成人免费直播live| 欧美最猛性xxxxx(亚洲精品)| 成人h猎奇视频网站| 大荫蒂欧美视频另类xxxx| 久久久精品影院| 97精品久久久| 欧美另类交人妖| 欧美孕妇性xx| 亚洲日韩中文字幕在线播放| 日本一区二三区好的精华液| 亚洲区免费影片| 国产在线久久久| 91精品视频免费看| 91精品国产91久久久久福利| 亚洲一区二区三区xxx视频| 国产91精品久久久久久久| 亚洲精品国产精品乱码不99按摩| 欧美午夜片欧美片在线观看| 国产精品久久精品| 久久男人的天堂| 日韩欧美国产中文字幕| 爱福利视频一区| 久久99亚洲热视| 国产91精品久久久| 精品久久久久久中文字幕| 欧美日韩国产在线播放| 亚洲在线免费观看| 91精品视频观看| 精品网站999www| 亚洲激情电影中文字幕| 7m精品福利视频导航| 91亚洲午夜在线| 国产一区深夜福利| 亚洲乱码av中文一区二区| 日日摸夜夜添一区| 国产午夜精品全部视频播放| 亚洲欧美日韩爽爽影院| 欧美丰满少妇xxxxx做受| 日韩精品久久久久| 亚洲风情亚aⅴ在线发布| 韩国三级电影久久久久久| 欧美美女15p| 亚洲国产精品字幕| 亚洲人成在线播放| 久久99久久久久久久噜噜| 亚洲精品日韩在线| 亚洲区中文字幕| 久热精品视频在线观看一区| 久久精品成人一区二区三区| 国产精品视频成人| 日韩最新在线视频| 国产69精品久久久| 欧美三级欧美成人高清www| 欧美日韩另类在线| 国产精品青草久久久久福利99| 欧美精品久久久久a| 国产精品欧美一区二区三区奶水| 国产精品福利小视频| 亚洲欧美另类在线观看| 激情久久av一区av二区av三区| 欧美洲成人男女午夜视频| 亚洲精品美女免费| 精品国偷自产在线视频99| 欧美激情极品视频| 欧美激情喷水视频| 欧美制服第一页| 亚洲欧美国产一本综合首页| 亚洲第一av在线| 欧美巨猛xxxx猛交黑人97人| 国产精品男女猛烈高潮激情| 欧美成人免费在线观看| 日韩欧美亚洲一二三区| 亚洲一区二区免费在线| 久久久在线视频| 国产精品久久久久999| 欧美资源在线观看| 国产91热爆ts人妖在线| 高跟丝袜欧美一区|