精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

微信小程序“反編譯”實戰(二):源碼還原

移動開發
本文包含一部分源碼分析,由于手機屏幕較小,閱讀體驗可能不佳,建議在電腦上瀏覽。下文使用的還原工具來自于 GitHub 上的開源項目 wxappUnpacker,在此特別感謝原作者的無私貢獻。

在上一篇文章《微信小程序“反編譯”實戰(一):解包》中,我們詳細介紹了如何獲取某一個小程序的 .wxapkg 包,以及分析了 .wxapkg 包的結構,***通過腳本解壓獲取包中的文件:小程序“編譯”后的代碼文件和資源文件,但是由于這些文件大部分被混淆了,可讀性很差,所以本文將進一步分析,盡可能地把 .wxapkg 包的內容還原為“編譯”前的內容。

注:本文包含一部分源碼分析,由于手機屏幕較小,閱讀體驗可能不佳,建議在電腦上瀏覽。

特別感謝:下文使用的還原工具來自于 GitHub 上的開源項目 wxappUnpacker,在此特別感謝原作者的無私貢獻。

概覽

我們知道,前端 Web 網頁編程采用的是 HTML + CSS + JS 這樣的組合,其中 HTML 是用來描頁面的結構,CSS 用來描述頁面的樣子,JS 通常用來處理頁面邏輯和用戶的交互。類似地,在小程序中也有同樣的角色,一個小程序工程主要包括如下幾類文件:

  • .json 后綴的 JSON 配置文件
  • .wxml 后綴的 WXML 模板文件
  • .wxss 后綴的 WXSS 樣式文件
  • .js 后綴的 JavaScript 腳本邏輯文件

例如“知識小集”的小程序源碼工程結構如下:

 

然而,根據上一篇文章介紹,對“知識小集”小程序的 .wxapkg 解包后得到如下文件:

 

主要包括 app-config.json, app-service.js, page-frame.html, *.html, 資源文件 等,但這些文件已經被“編譯混淆”并重新整合壓縮,微信開發者工具并不能識別它們,我們無法直接對它們進行調試/編譯運行。

所以,我們先嘗試分析一下從 .wxapkg 提取出來的各個文件內容的結構及其用途,然后介紹如何用腳本工具把它們一鍵還原為“編譯”前的源碼,并在微信開發者工具中跑起來。

文件分析

本節主要以“知識小集”小程序的 .wxapkg 解包后的源碼文件為例,進行分析。

你也可以跳過本節的分析,直接看下一節介紹用腳本“反編譯”還原源碼。

app-config.json

小程序工程主要包括工具配置 project.config.json,全局配置 app.json 以及頁面配置 page.json 三類 JSON 配置文件。其中:

  • project.config.json 主要用于對開發者工具進行個性化配置以及包括小程序項目工程的一些基礎配置,所以它不會被“編譯”到 .wxapkg 包中;
  • app.json 是對當前小程序的全局配置,包括了小程序的所有頁面路徑、界面表現、網絡超時時間、底部 tab 等;
  • page.json 用于對每一個頁面的窗口表現進行配置,頁面中配置項會覆蓋 app.json 的 window 中相同的配置項。

因此“編譯”后的文件 app-config.json 其實就是 app.json 和各個頁面的配置文件的匯總,它的內容大致如下:

  1.   "page": { // 各頁面配置 
  2.     "pages/index/index.html": { // 某一頁面地址 
  3.       "window": { // 某一頁面具體配置 
  4.         "navigationBarTitleText""知識小集"
  5.         "enablePullDownRefresh"true 
  6.       } 
  7.     }, 
  8.     // 此處省略... 
  9.   }, 
  10.   "entryPagePath""pages/index/index.html", // 小程序入口地址 
  11.   "pages": ["pages/index/index""pages/detail/detail""pages/search/search"], // 頁面列表 
  12.   "global": { // 全局頁面配置 
  13.     "window": { 
  14.       "navigationBarTextStyle""black"
  15.       "navigationBarTitleText""知識小集"
  16.       "navigationBarBackgroundColor""#F8F8F8"
  17.       "backgroundColor""#F8F8F8" 
  18.     } 
  19.   } 

通過與原工程 app.json 和各頁面配置 page.json 內容的對比,我們可以得出 app-config.json 匯總文件的簡單整合規律,很容易把它拆分成“編譯”前對應的各 json 文件。

app-service.js

在小程序項目中 JS 文件負責交互邏輯,主要包括 app.js,每個頁面的 page.js,開發者自定義的 JS 文件和引入的第三方 JS 文件,在“編譯”后所有這些 JS 文件都會被匯總到 app-service.js 文件中,它的結構如下:

  1. // 一些全局變量的聲明 
  2. var __wxAppData = {}; 
  3. var __wxRoute; 
  4. var __wxRouteBegin; 
  5. var __wxAppCode__ = {}; 
  6. var global = {}; 
  7. var __wxAppCurrentFile__; 
  8. var Component = Component || function(){}; 
  9. var definePlugin = definePlugin || function(){}; 
  10. var requirePlugin = requirePlugin || function(){}; 
  11. var Behavior = Behavior || function(){}; 
  12.  
  13. // 小程序編譯基礎庫版本 
  14. /*v0.6vv_20180125_fbi*/ 
  15. global.__wcc_version__='v0.6vv_20180125_fbi'
  16. global.__wcc_version_info__={"customComponents":true,"fixZeroRpx":true,"propValueDeepCopy":false}; 
  17.  
  18. // 工程中第三方或者自定義的一些 JS 源碼 
  19. define("utils/util.js"function(require, module, exports, window,document,frames,self,location,navigator,localStorage,history,Caches,screen,alert,confirm,prompt,XMLHttpRequest,WebSocket,Reporter,webkit,WeixinJSCore) { 
  20.   "use strict"
  21.   // ... 具體源碼內容 
  22. }); 
  23.  
  24. // ... 
  25.  
  26. // app.js 源碼定義 
  27. define("app.js"function(...) { 
  28.   "use strict"
  29.   // ... app.js 源碼內容 
  30. }); 
  31. require("app.js"); 
  32.  
  33. // 每個頁面對應的 JS 源碼定義 
  34. __wxRoute = 'pages/index/index'; // 頁面路由地址 
  35. __wxRouteBegin = true
  36. define("pages/index/index.js"function(...){ 
  37.   "use strict"
  38.   // ... page.js 源碼內容 
  39. }); 
  40. require("pages/index/index.js"); 

在這個文件中,原有小程序工程中的每個 JS 文件都被 define 方法定義聲明,定義中包含 JS 文件的路徑和內容,如下:

  1. define("path/to/xxx.js"function(...){ 
  2.   "use strict"
  3.   // ... xxx.js 源碼內容 
  4. }); 

因此,我們同樣很容易提取這些 JS 文件源碼,并恢復至相應的路徑位置中。當然,這些 JS 文件中的內容經過混淆壓縮,我們可以使用 UglifyJS 這樣的工具進行美化,但仍很難還原一些原始變量名,不過基本不影響正常閱讀和使用。

page-frame.html

在小程序中使用 WXML 文件描述頁面的結構,WXSS 文件描述頁面的樣式。工程中有一個 app.wxss 文件用于定義一些全局的樣式,會自動被 import 到各個頁面中;另外每個頁面也都分別包含 page.wxml 和 page.wxss 用于描述其頁面的結構和樣式;同時,我們也會自定義一些公共的 xxxCommon.wxss 樣式文件和公共的 xxxTemplate.wxml 模板文件供一些頁面復用,一般在各自頁面的 page.wxss 和 page.wxml 中去 import。

當“編譯”小程序后,所有的 .wxml 文件和 app.wxss 及公共 xxxCommon.wxss 樣式文件的將被整合到 page-frame.html 文件中,而每個頁面的 page.wxss 樣式文件,將分別單獨在各自的路徑下生成一個 page.html 文件。

page-frame.html 文件的內容結構如下:

  1. <!DOCTYPE html> 
  2. <html lang="zh-CN"
  3.   <head> 
  4.     <meta charset="UTF-8" /> 
  5.     <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" /> 
  6.     <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'"
  7.     <link rel="icon" href="data:image/ico;base64,aWNv"
  8.     <script> 
  9.       // 一些全局變量的聲明 
  10.       var __pageFrameStartTime__ = Date.now(); 
  11.       var __webviewId__; 
  12.       var __wxAppCode__ = {}; 
  13.       var __WXML_GLOBAL__ = { 
  14.         entrys: {}, 
  15.         defines: {}, 
  16.         modules: {}, 
  17.         ops: [], 
  18.         wxs_nf_init: undefined, 
  19.         total_ops: 0 
  20.       }; 
  21.        
  22.       // 小程序編譯基礎庫版本 
  23.       /*v0.6vv_20180125_fbi*/ 
  24.       window.__wcc_version__ = 'v0.6vv_20180125_fbi'
  25.       window.__wcc_version_info__ = { 
  26.         "customComponents"true
  27.         "fixZeroRpx"true
  28.         "propValueDeepCopy"false 
  29.       }; 
  30.        
  31.       var $gwxc 
  32.       var $gaic = {} 
  33.       $gwx = function(path, global) { 
  34.         // $gwx 方法定義(最核心) 
  35.       } 
  36.        
  37.       var BASE_DEVICE_WIDTH = 750; 
  38.       var isIOS = navigator.userAgent.match("iPhone"); 
  39.       var deviceWidth = window.screen.width || 375; 
  40.       var deviceDPR = window.devicePixelRatio || 2; 
  41.       function checkDeviceWidth() { 
  42.         // checkDeviceWidth 方法定義 
  43.       } 
  44.       checkDeviceWidth() 
  45.        
  46.       var eps = 1e-4; 
  47.       function transformRPX(number, newDeviceWidth) { 
  48.         // transformRPX 方法定義 
  49.       } 
  50.        
  51.       var setCssToHead = function(file, _xcInvalid) { 
  52.         // setCssToHead 方法定義 
  53.       } 
  54.       setCssToHead([])(); // 先清空 Head 中的 CSS 
  55.       setCssToHead([...]); // 設置 app.wxss 的內容到 Head 中,其中 ... 為小程序工程中 app.wxss 的內容 
  56.       var __pageFrameEndTime__ = Date.now() 
  57.           </script> 
  58.   </head> 
  59.   <body> 
  60.     <div></div> 
  61.   </body> 
  62. </html> 

相比其他文件,page-frame.html 比較復雜,微信把 .wxml 和部分 .wxss 直接“編譯”并混淆成 JS 代碼放入上述文件中,然后通過調用這些 JS 代碼來構造 Virtual-Dom,進而渲染頁面。

其中最核心的是 $gwx 和 setCssToHead 這兩個方法。

$gwx 用于通過 JS 代碼生成所有 .wxml 文件,其中每個 .wxml 文件的內容結構都在 $gwx 方法中被定義好并混淆了,我們只要傳給它頁面的 .wxml 路徑參數,即可獲取到每個 .wxml 的內容,再簡單加工一下即可還原成“編譯”前的內容。

在 $gwx 中有一個 x 數組用于存儲當前小程序都有哪些 .wxml 文件,例如,“知識小集”小程序的 x 值如下:

  1. var x = ['./pages/detail/detail.wxml''/towxml/entry.wxml''./pages/index/index.wxml''./pages/search/search.wxml''./towxml/entry.wxml''/towxml/renderTemplate.wxml''./towxml/renderTemplate.wxml']; 

此時我們可以在 Chrome 中打開 page-frame.html 文件,然后在 Console 中輸入如下命令,即可得到 index.wxml 的內容(輸出一個 JS 對象,通過遍歷這個對象即可還原出 .wxml 的內容)

  1. $gwx("./pages/index/index.wxml"

setCssToHead 方法用于根據幾段被拆分的樣式字符串數組生成 .wxss 代碼并設置到 HTML 的 Head 中,同時,它還將所有被 import 引用的 .wxss 文件(公共 xxxCommon.wxss樣式文件)所對應的樣式數組內嵌在該方法中的 _C 變量中,并標記哪些文件引用了 _C 中數據。另外在 page-frame.html 文件的末尾,調用了該方法生成全局 app.wxss 的內容設置到 Head 中。

因此,我們可以在每個調用 setCssToHead 方法的地方提取相應 .wxss 的內容并還原。

對于 page-frame.html 文件中 $gwx 和 setCssToHead 這兩個方法更詳細的分析,可以參考這篇文章。

此外,checkDeviceWidth 方法顧明思議,用于檢測屏幕的寬度,其檢測結果將用于 transformRPX 方法中將 rpx 單位轉換為 px 像素。

rpx 的全稱是 responsive pixel,它是小程序自己定義的一個尺寸單位,可以根據當前設備屏幕寬度進行自適應。小程序中規定,所有的設備屏幕寬度都為 750rpx,根據設備屏幕實際寬度的不同,1rpx所代表的實際像素值也不一樣。

*.html

上面提到,每個頁面的 page.wxss 樣式文件,“編譯”后將分別在各自的所在路徑下生成一個 page.html 文件,每個 page.html 的結構如下:

  1. <style></style> 
  2. <page></page> 
  3. <script> 
  4.   var __setCssStartTime__ = Date.now(); 
  5.   setCssToHead([...])() // 設置 search.wxss 的內容 
  6.   var __setCssEndTime__ = Date.now(); 
  7.   document.dispatchEvent(new CustomEvent("generateFuncReady", { 
  8.     detail: { 
  9.       generateFunc: $gwx('./pages/search/search.wxml'
  10.     } 
  11.   })) 
  12. </script> 

在該文件中通過調用 setCssToHead 方法將 .wxss 樣式內容設置到 Head 中,所以同樣地,我們可以根據 setCssToHead 的調用參數提取每個頁面的 page.wxss。

資源文件

小程序工程中的圖片、音頻等資源文件在“編譯”后將直接被拷貝到 .wxapkg 包中,其原始的路徑也保留不變,因此我們可以直接使用。

“反編譯”

在上一節,我們完成了 .wxapkg 包幾乎所有文件內容的簡要分析。現在我們介紹一下如何通過 node.js 腳本幫我們還原出小程序的源碼。

在這里需要再次感謝 wxappUnpacker 作者提供的還原工具,讓我們可以“站在巨人的肩膀上”輕松地去完成“反編譯”。它的使用如下:

  • node wuConfig.js : 將 app-config.json 中的內容拆分成各個頁面所對應的 page.json 和 app.json;
  • node wuJs.js : 將 app-service.js 拆分成一系列原先獨立的 JS 文件,并使用 Uglify-ES 美化工具盡可能將代碼還原為“編譯”前的內容;
  • node wuWxml.js [-m] : 從 page-frame.html 中提取并還原各頁面的 .wxml 和 app.wxss 及公共 .wxss 樣式文件;
  • node wuWxss.js : 該命令參數為 .wxapkg 解包后目錄,它將分析并從各個 page.html 中提取還原各頁面的 page.wxss 樣式文件;

同時,作者還提供了一鍵解包并還原的腳本,你只需要提供一個小程序的 .wxapkg 文件,然后執行如下命令:

  1. node wuWxapkg.js [-d] 

此腳本就會自動將 .wxapkg 文件解包,并將包中相關的已被“編譯/混淆”的文件自動地恢復原狀(包括目錄結構)。

PS: 此工具依賴 uglify-es, vm2, esprima, cssbeautify, css-tree 等 node.js 包,所以你可能需要 npm install xxx 安裝這些依賴包才能正確執行。

更詳細的用法及相關問題請查閱該開源項目的 GitHub repo。

***,我們在 微信開發者工具 中新建一個空小程序工程,并將上述還原后的相關目錄文件導入工程,即可編譯運行起來,如下圖為“知識小集”小程序 .wxapkg 還原后的代碼工程:

 

以上,大功告成!

總結

本文詳細分析了 .wxapkg 解包后的各文件結構,并介紹了如何通過腳本“一鍵還原”得到任意小程序的源碼。

對于一些簡單的,且使用微信官方介紹的原生開發方式開發的小程序,用上述工具基本可以直接還原得到可運行的源碼,但是對于一些邏輯復雜,或者使用 WePY、Vue 等一些框架開發的小程序,還原后的源碼可能會有一些小問題,需要我們人肉去分析解決。

后續

本文對小程序源碼“編譯”后的各文件內容結構及用途的分析相對比較零散,而且沒有對各文件的依賴關系及加載邏輯進行研究,后續我們再寫一些文章講解微信客戶端是如何解析加載小程序 .wxapkg 包并運行起來。

責任編輯:未麗燕 來源: kangzubin.com
相關推薦

2018-05-11 10:16:41

微信小程序反編譯

2017-05-08 15:03:07

微信小程序開發實戰

2016-11-28 15:52:09

微信小程序開發

2023-06-26 22:18:19

2023-01-12 17:53:42

2016-11-04 10:47:51

微信小程序

2016-10-20 21:02:12

微信小程序javascript

2017-01-09 10:01:49

微信小程序

2017-06-09 10:40:00

微信小程序架構分析

2017-06-09 12:58:20

微信小程序架構分析

2016-09-28 18:10:59

微信程序MINA

2016-11-04 10:31:49

微信程序指南

2017-06-09 10:06:54

微信小程序架構分析

2016-11-22 11:23:52

微信小程序騰訊微信

2016-09-27 15:40:58

微信程序前端

2016-11-04 10:49:48

微信小程序

2016-09-27 16:38:24

JavaScript微信Web

2021-06-10 10:51:27

程序基礎架構

2011-05-31 14:38:04

Android 反編譯

2016-11-19 18:06:44

微信小程序張小龍
點贊
收藏

51CTO技術棧公眾號

成人免费毛片视频| 26uuu国产| 91官网在线| 国产综合一区二区| 国内揄拍国内精品少妇国语| 国产三级视频网站| 一区在线不卡| 午夜精品久久久久久久久久久| 欧美在线一区二区三区四区| 在线免费观看一区二区| 激情婷婷亚洲| 中文字幕亚洲欧美在线| 精品人妻二区中文字幕| 欧洲精品一区二区三区| 亚洲乱码国产乱码精品精的特点 | 久久黄色片视频| 国产高清一区在线观看| 国产成人精品影视| 国产精品18久久久久久首页狼| 9999热视频| 欧美顶级毛片在线播放| 91麻豆精品国产自产在线| 播放灌醉水嫩大学生国内精品| 国产网站在线免费观看| 久久久精品天堂| 岛国视频一区| 91国内精品视频| 久热精品在线| 国模私拍一区二区三区| 成人性生活毛片| 精品国产乱码| 日韩电影大全免费观看2023年上| 国产精品久久久久久久99| 性欧美超级视频| 亚洲国产精品久久不卡毛片| 咪咪色在线视频| 国产黄在线观看| 99久久99久久精品国产片果冻| 成人xxxxx| 中文字幕永久在线| 亚洲专区欧美专区| 海角国产乱辈乱精品视频| 日本午夜在线观看| 久久国产成人午夜av影院宅| 亚洲午夜av电影| 瑟瑟视频在线观看| 三级小说欧洲区亚洲区| 欧美精品一区二区三区蜜臀| 日本一区二区三区在线免费观看| 韩国理伦片久久电影网| 91国偷自产一区二区开放时间| 国产视频一视频二| 国产高清视频色在线www| 一区二区免费在线播放| 伊人再见免费在线观看高清版| 久草中文在线观看| 最新欧美精品一区二区三区| 亚洲午夜在线观看| 欧洲美女少妇精品| 综合电影一区二区三区 | 精品国产免费久久久久久尖叫| 国产成人麻豆精品午夜在线 | 色视频欧美一区二区三区| 亚洲中文字幕无码专区| 老色鬼在线视频| 午夜久久久影院| 国产最新免费视频| 另类图片综合电影| 在线观看亚洲精品| 国内外成人免费在线视频| jizz久久久久久| 欧美美女直播网站| 97人人模人人爽人人澡| 日韩最新av| 亚洲电影免费观看高清完整版在线观看 | 国产成人一二片| 日韩精品日韩在线观看| 香蕉视频久久久| 日韩精品免费| 色综合老司机第九色激情| 日本a在线观看| 欧美一级一区| 国产一区红桃视频| 午夜精品久久久久久久99老熟妇 | 另类国产ts人妖高潮视频| 国产精品27p| 国产色视频在线| k8久久久一区二区三区| 欧美色欧美亚洲另类七区| 天堂а√在线资源在线| 亚洲色图欧美偷拍| 99在线精品免费视频| 亚洲承认视频| 91精品国产色综合久久不卡蜜臀| 欧美大喷水吹潮合集在线观看| 欧美日韩123| 久久天堂电影网| 久久久国产高清| 麻豆精品在线播放| 极品尤物一区二区三区| 中文字幕在线播放| 午夜伊人狠狠久久| 国产一级片自拍| 豆花视频一区二区| 日韩综合视频在线观看| 日韩精品国产一区二区| 精品中文字幕一区二区| 精品九九九九| free性欧美hd另类精品| 色综合久久久久综合99| 亚洲免费黄色网| 日本一区福利在线| 萌白酱国产一区二区| 国产一级片免费在线观看| 国产91富婆露脸刺激对白| 色涩成人影视在线播放| 四季久久免费一区二区三区四区| 欧洲精品一区二区| 白嫩情侣偷拍呻吟刺激| 99久久亚洲精品蜜臀| 日韩av免费看| 高清国产mv在线观看| 中文字幕在线不卡| 日本成人中文字幕在线| 开心激情综合| 欧美大片在线免费观看| 亚洲天堂狠狠干| 久久久精品免费免费| 每日在线观看av| 日本少妇精品亚洲第一区| www日韩中文字幕在线看| 91精品国产高清一区二区三密臀| 国产白丝精品91爽爽久久| 夜夜爽99久久国产综合精品女不卡 | 欧美一区二不卡视频| 亚洲视频综合在线| 污版视频在线观看| 国产亚洲一区| 清纯唯美亚洲综合| 性感美女视频一二三| 夜夜夜精品看看| 久久久久亚洲av无码麻豆| 欧美国产一级| 国产精品嫩草影院久久久| 国产小视频免费在线观看| 精品magnet| 国产婷婷在线观看| 在线高清一区| 国语精品免费视频| 蜜桃在线视频| 精品亚洲男同gayvideo网站 | 91cn在线观看| 欧美一区二区三区系列电影| 日韩va亚洲va欧美va清高| 青青草成人在线观看| 少妇精品久久久久久久久久| 成人在线爆射| 中文字幕无线精品亚洲乱码一区 | 欧美黑人3p| 日韩免费va| 中文字幕在线国产精品| 一本色道久久综合精品婷婷| 1024精品合集| 老司机av网站| 99国产精品视频免费观看一公开| 精品日本一区二区三区在线观看| 欧美激情网站| 中文字幕av一区| 91久久国语露脸精品国产高跟| 亚洲欧洲性图库| 国产黄色一区二区三区| 国语精品一区| 久久99精品久久久久久三级 | 无码 人妻 在线 视频| 免费人成黄页网站在线一区二区| 在线视频一区观看| 999久久久精品一区二区| 91精品国产99久久久久久| 国产原创av在线| 欧美精品日韩一区| 日韩三级小视频| 久久精品亚洲麻豆av一区二区 | 日韩一区二区三区精品| 久久久久久久激情视频| 欧美日韩国产亚洲沙发| 欧美日韩视频在线第一区| 久久久久久久久久久久国产| 99天天综合性| 成人免费在线观看视频网站| 欧美日韩日本国产亚洲在线 | 日本50路肥熟bbw| 免费精品视频| 久久99国产精品一区| 猫咪成人在线观看| 91精品久久久久久| 国产美女精品写真福利视频| 在线一区二区日韩| 欧美一区二区三区成人片在线| 欧美在线播放高清精品| 九九视频免费观看| 国产日产欧美一区| av电影中文字幕| 麻豆91精品91久久久的内涵| 欧美久久久久久久久久久久久| av中文一区| 国产一级精品aaaaa看| 四虎国产精品免费久久| 88xx成人精品| 性直播体位视频在线观看| 亚洲天堂日韩电影| 国产 欧美 自拍| 欧美高清视频不卡网| 久久免费激情视频| 一区二区三区欧美| 男女全黄做爰文章| 久久精品日韩一区二区三区| 丰满人妻一区二区三区免费视频棣| 久久成人羞羞网站| 激情五月开心婷婷| 99国产精品| 久久精品无码中文字幕| 亚洲h色精品| 亚洲人成人77777线观看| 国产精品探花在线观看| 激情小说网站亚洲综合网| 视频欧美一区| 成人免费自拍视频| 国产精品黄色片| 国产成人福利网站| 大桥未久在线视频| 久久久亚洲天堂| 在线看三级电影| 日韩视频免费看| 成人精品福利| 亚洲香蕉伊综合在人在线视看 | 91亚洲精品乱码久久久久久蜜桃| 国内精品国产三级国产aⅴ久| 麻豆91精品视频| 亚洲77777| 蜜桃一区二区三区在线观看| 成人小视频在线看| 免费亚洲一区| 欧美日韩在线中文| 性欧美xxxx大乳国产app| a级黄色一级片| 国产亚洲毛片在线| 欧美精品99久久| 99热这里只有成人精品国产| 老太脱裤让老头玩ⅹxxxx| 亚洲午夜黄色| 欧美在线一区视频| 一本色道88久久加勒比精品| 日韩免费一级视频| 久久久青草婷婷精品综合日韩| 啊啊啊一区二区| 亚久久调教视频| 日韩av片网站| 久久99久久久欧美国产| 久久久久久久久久一区二区| 国产一区二区三区四区在线观看| 亚洲网中文字幕| 国产成人av电影在线观看| 挪威xxxx性hd极品| 91麻豆视频网站| 西西444www无码大胆| 国产精品无码永久免费888| 少妇高潮惨叫久久久久| 亚洲日本va午夜在线影院| 国产免费无码一区二区视频| 性感美女久久精品| 日韩在线播放中文字幕| 欧美日韩一级片在线观看| 97人妻精品一区二区三区| 日韩亚洲欧美成人一区| 日本韩国在线观看| 国产亚洲精品成人av久久ww| 久久久久久久久免费视频| 久久久久久久久久久av| 自拍视频在线看| 国产精品影院在线观看| 亚洲精品在线a| 蜜桃臀一区二区三区| 久久影视一区| 人人妻人人澡人人爽欧美一区双 | 九色视频成人自拍| 久久精品国产69国产精品亚洲 | 午夜电影网一区| 中文字幕永久在线| 精品久久久网站| 大片免费播放在线视频| 精品中文字幕视频| 欧美人体一区二区三区| 51精品国产人成在线观看| 日韩美女毛片| 色香蕉在线观看| 久久久久99| 一区二区在线免费观看视频| 久久久精品综合| 久久这里只有精品国产| 欧洲日韩一区二区三区| 免费观看黄色av| 中文字幕亚洲在线| 岛国av免费在线观看| 国产久一一精品| 欧洲亚洲视频| www国产免费| 蜜臀av亚洲一区中文字幕| 人妻av一区二区| 中文字幕欧美一| 无码视频一区二区三区| 精品国产一区二区在线观看| 欧美精品videos另类| 日本精品一区二区三区在线播放视频| 视频精品一区二区三区| 一区二区免费电影| 久色成人在线| 中文字幕在线免费看线人| 一区二区三区在线视频观看58| 亚洲精品国产欧美在线观看| 亚洲国产又黄又爽女人高潮的| 精品国产99久久久久久| 国产精品久久久久久久7电影| 欧美精品中文| www.av毛片| 懂色av一区二区三区免费看| 免费黄色在线网址| 欧洲亚洲国产日韩| 国产在线视频你懂得| 日本亚洲欧洲色| 私拍精品福利视频在线一区| 中文字幕人妻熟女人妻洋洋| 国产麻豆91精品| 亚洲色图27p| 欧美日韩在线三区| 婷婷在线视频| 国产欧美日韩高清| 色135综合网| 欧美大尺度做爰床戏| 国产欧美日韩卡一| 艳妇乳肉豪妇荡乳av无码福利| 日韩精品在线免费播放| av福利在线导航| 国产精品美女久久久久av福利| 欧美日韩亚洲一区二区三区在线| 婷婷激情综合五月天| 亚洲三级理论片| 国产三级三级在线观看| 久久成年人视频| 伊人久久大香线蕉av超碰| 99久久久精品视频| 国产尤物一区二区在线| 日韩欧美123区| 日韩精品中午字幕| 丰乳肥臀在线| 精品日韩电影| 日韩制服丝袜先锋影音| youjizz亚洲女人| 91精品综合久久久久久| 欧美精品videos另类| 亚洲精品欧美日韩专区| 国语自产精品视频在线看8查询8| 国产精品成人99一区无码| 精品国产福利在线| 国产在线一在线二| 91久久久精品| 亚洲高清网站| 亚洲精品成人无码| 欧美久久久久中文字幕| 污视频在线看网站| 久99久在线| 日韩精品亚洲专区| 国产极品美女在线| 亚洲大胆人体视频| 浪潮色综合久久天堂| 四虎免费在线观看视频| 成人黄色综合网站| 无码人妻精品一区二区| 精品国产视频在线| h视频久久久| 日本999视频| 亚洲精品国产无天堂网2021| 日韩在线观看视频一区| 国产精品第三页| 国产精品xvideos88| 在线免费观看麻豆| 欧美一卡2卡三卡4卡5免费| 国产精品论坛| 一区二区精品在线| 99久免费精品视频在线观看 | 日韩免费视频线观看| 色资源二区在线视频| 亚洲图色在线| 99精品久久久久久| 一级做a爱片久久毛片| 午夜美女久久久久爽久久| 日本女优一区| 中文乱码人妻一区二区三区视频| 欧美日韩午夜影院| 超级碰碰久久| 日韩欧美精品免费|