日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS逆向学习笔记

發(fā)布時間:2025/3/11 javascript 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS逆向学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

JS逆向學習筆記

尋找深圳爬蟲工作,微信:cjh-18888

?

文章目錄

  • JS逆向學習筆記
    • 一. JS Hook
      • 1. JS HOOK 原理和作用
        • 原理:替換原來的方法. (好像寫了句廢話)
        • 作用: 可以去Hook一些內置的函數(shù), 例如Debugger, setInterval,JSON.stringify等等
      • 2.JSHook 檢測與過檢測
        • 原理: 其實就是檢測代碼是否和原來的相等.
        • 繞過手段: 修改Function的toString方法.
      • 3.JS過反調試
      • 4. JSHook 對象屬性
        • 1. Object.defindPropety()
    • 二. Chrome拓展(Chrome Extension)開發(fā)
      • 1. 基本介紹
        • 1. 什么是Chrome插件?
        • 2. 學習Chrome插件開發(fā)的意義
        • 3. 為什么是Chrome插件,而不是firefox插件?
      • 2. 文件結構
        • 1. manifest.json
        • 2. content-scripts
        • 3.background
        • 4. event-pages
        • 5. popup
        • 6. injected-script
        • 7.更多
      • 3.實戰(zhàn) - Js自動注入Hook代碼
        • 1. manifest.json
        • 2. content_script.js
    • 三. 調試技巧
      • 1. 快速定位關鍵代碼
      • 2. Conditional breakpoints
      • 3. Reres拓展插件
      • 4. monitor監(jiān)聽方法
      • 5. monitorEvents監(jiān)聽方法
      • 6. watch監(jiān)聽變量
      • 7.控制臺實時表達式
    • 四. 實戰(zhàn)
      • 1. webpack整體改寫方案
          • 整體改寫的思路如下:
            • 1. 找到加密位置
            • 2. 查到當前方法實現(xiàn)代碼,整體拿下.
            • 3. 找到"n"函數(shù)聲明位置.
            • 4. window.n = a;
      • 2. sojson反調試
        • 1. 修改setInterval
        • 2. Conditional breakpoints
        • 3. 函數(shù)替換,函數(shù)置空
        • 4. Activate breakpoints
        • 5. 修改debugger
        • 總結:個人認為,最好用的方法應該是1,2,4了. 操作簡單.
      • 3. 某視頻反調試案例
      • 4. 自寫算法案例 -1
      • 5. 自寫算法案例 -2
      • 6. JS混淆原理(eval和Function)
      • 7. JS混淆原理(數(shù)字混淆和字符串混淆)
      • 8. 五秒防火墻fuckjs原理分析改寫
      • 9. 流程控制混淆原理(switch)
      • 10. 流程控制混淆原理(逗號運算符)
    • 五.AST入門與實戰(zhàn)
      • 1. AST抽象語法樹入門
      • 2. Babel組件traverse
      • 3. Babel組件types
      • 4. 用Babel生成一個新函數(shù)
      • 5. Babel中節(jié)點操作
      • 6. 用Babel給函數(shù)加點料
      • 7. 用Babel實現(xiàn)變量名混淆
      • 7. 用Babel實現(xiàn)數(shù)組亂序
      • 8. 用Babel實現(xiàn)字符串加密
      • 9. 實現(xiàn)十六進制文本加密
      • 10. 實現(xiàn)unicode加密
      • 11. JS混淆還原(字符串解密)
      • 12. JS混淆還原(去除花指令)
      • 13. JS混淆還原(AST節(jié)點調試技巧)
      • 14. switch流程平坦化還原(復原指令順序)
      • 15. JS混淆實戰(zhàn)案例
    • 六. 滑塊破解
      • 1. 云片
      • 2. 2980

?

一. JS Hook

1. JS HOOK 原理和作用

原理:替換原來的方法. (好像寫了句廢話)

function test(aa,bb){cc = aa + bb;return cc; }

Hook代碼:

var _test = test; // 拿到test test = function(x,y){console.log(x,y); //輸出拿到的參數(shù)var retval = _test(x,y); // retval 是原來的計算結果console.log( retval)return retval + 1 // 修改返回結果 }
  • ?

此時重新調用test, 結果比正常值多了1

作用: 可以去Hook一些內置的函數(shù), 例如Debugger, setInterval,JSON.stringify等等

//Hook setInterval var _setInterval = setInterval; setInterval = function(a,b){console.log(a + '',b)return 'setInterval is Kill' }//Hook JSON.stringify stringify = JSON.stringify; JSON.stringify = function(a){ console.log('Hook JSON.stringify ->' + stringify(a)) return stringify(a) }

2.JSHook 檢測與過檢測

原理: 其實就是檢測代碼是否和原來的相等.

案例代碼:

function test(aa,bb){var cc = aa + bb;return cc;}function checkTest(func){test + '' == 'function test(aa,bb){var cc = aa + bb;return cc;}'?console.log('func未被修改'):console.log('func被修改了') }

此時我們可以把hook代碼置入到瀏覽器

//控制臺置入的代碼 var _test = test; test = function(x,y){console.log(x,y); var retval = _test(x,y); console.log( retval)return retval }

繞過手段: 修改Function的toString方法.

Function.prototype.toString=function(){return "function test(x,y){z=x+y;return z;}"; }

3.JS過反調試

反調試代碼:

var fuck=["\u0068\u0065\u006e\u0076\u0061\u0074","\u005f\u006b\u0070\u006f\u0076\u0074\u0071\u005f\u0076\u006b\u0074","\u0066\u006b\u005f\u0071\u0069\u0061\u0070\u0076","\u0068\u0071\u0070\u005f\u0076\u0065\u006b\u0070\u0022\u006f\u0076\u0074\u0056\u006b\u0051\u0065\u0070\u0076\u003a\u002a\u006f\u0076\u0074\u0025\u0077\u0068\u006b\u0074\u002a\u0078\u005d\u0074\u0022\u0065\u0039\u0032\u002e\u005d\u0074\u0074\u0039\u0057\u0059\u0037\u0065\u003e\u006f\u0076\u0074\u0030\u006e\u0061\u0070\u0063\u0076\u006a\u0037\u0065\u0027\u0027\u0025\u0077\u0078\u005d\u0074\u0022\u005d\u0039\u006f\u0076\u0074\u0030\u005f\u006a\u005d\u0074\u003f\u006b\u0066\u0061\u003d\u0076\u002a\u0065\u0025\u0037\u005d\u0074\u0074\u0030\u0072\u0071\u006f\u006a\u002a\u005d\u0021\u0034\u003b\u005d\u0029\u0036\u003c\u005d\u0027\u0034\u0025\u0037\u0079\u0074\u0061\u0076\u0071\u0074\u0070\u0022\u0070\u0061\u0073\u0022\u0051\u0065\u0070\u0076\u003a\u003d\u0074\u0074\u005d\u0075\u002a\u005d\u0074\u0074\u0025\u0037\u0079","\u0076\u006b\u004f\u0076\u0074\u0065\u0070\u0063","\u0074\u0061\u0076\u0071\u0074\u0070\u0022\u0076\u006a\u0065\u006f","\u0068\u0071\u005f\u0067\u0055\u006b\u0071","\u0070\u0067\u005b\u0059\u0078\u0061\u0067\u0072","\u006c\u0076\u005d\u006a","\u0066\u0061\u0059\u0072\u005b\u006c\u005d\u0072\u005f\u0065\u0059\u0067","\u0066\u0066\u0066","\u005b\u0067\u0072\u006b\u0067\u0070\u005d\u0032\u0070\u0067\u005f\u002c\u0026\u005d\u0076\u0076\u0026\u0021","\u006a\u0059\u0068\u0069\u005b\u005b\u0059\u0078\u002f","\u006c\u0069\u0074\u0057\u007a\u005d\u0063\u0074\u0026\u0067\u0059\u007a\u003d\u0074\u007a\u0059\u0078\u007c\u0055\u0072\u002e\u001d\u0026\u006f\u0026\u004f\u0074\u0055\u007a\u005d\u007c\u0059\u0026\u0057\u0063\u006a\u0059\u0051\u0026\u0071","\u006f\u0061\u0076\u0045\u0070\u0076\u0061\u0074\u0078\u005d\u006e\u002a\u0068\u0071\u005f\u0067\u002d\u0057\u0027\u0057\u0059\u0059\u0057\u006f\u0056\u006b\u004f\u002a\u0068\u0071\u005f\u0067\u0057\u0038\u0059\u0025\u0059\u002a\u0068\u0071\u005f\u0067\u002d\u0057\u0027\u0057\u0059\u0059\u0057\u006f\u0056\u006b\u004f\u002a\u0068\u0071\u005f\u0067\u0057\u0038\u0059\u0025\u0059\u002a\u0068\u0071\u005f\u0067\u002d\u0057\u0027\u0057\u0059\u0059\u0057\u006f\u0056\u006b\u004f\u002a\u0068\u0071\u005f\u0067\u0057\u0038\u0059\u0025\u0059\u002a\u0068\u0071\u005f\u0067\u0057\u002d\u0034\u0059\u0025\u0025\u0025\u002e\u002d\u0032\u0032\u0032\u0025","\u006a\u006d\u005b\u0063\u0029\u0053\u0023\u0053\u0055\u0055\u0053\u006b\u0058\u0067\u004b\u002c\u006b\u0058\u0067\u004b\u002c\u006a\u006d\u005b\u0063\u0053\u0031\u0055\u0021\u0021\u0055\u0035\u0035\u002b\u0037\u005b\u0067\u0072\u006b\u0067\u0070\u005d\u0032\u0070\u0067\u005f\u002c\u0026\u0067\u006e\u0066\u0063\u003e\u002f\u0038\u002f\u002f\u002f\u003a\u0026\u0023\u006a\u006d\u005b\u0063\u0029\u0053\u0023\u0053\u0055\u0055\u0053\u006b\u0058\u0067\u004b\u002c\u006b\u0058\u0067\u004b\u002c\u006a\u006d\u005b\u0063\u0053\u0031\u0055\u0021\u0021\u0055\u0023\u0026\u002f\u0038\u0026\u0021\u003e\u005b\u0067\u0072\u006b\u0067\u0070\u005d\u0032\u0070\u0067\u005f\u002c\u0026\u005d\u0076\u0076\u0026\u0021"],bianchengmao=-1,fff=-1;var fuck1=[1,2,3,4];console.log("過了檢測就會給你正確答案哦!");function Uint8ToStr_(arr){for(var i=0,str="";i<arr.length;i++){var a=arr[i];str+=String.fromCharCode(a)}return str}function strToUint8_(str){for(var i=0,arr=[];i<str.length;i++){var a=str.charCodeAt(i);arr.push(a)}return new Uint8Array(arr)}function strToUint8(str){for(var i=0,arr=[];i<str.length;i++){var a=str.charCodeAt(i);arr.push(a%2?a-4:a+2)}return new Uint8Array(arr)}function Uint8ToStr(arr){for(var i=0,str="";i<arr.length;i++){var a=arr[i];str+=String.fromCharCode(a%2?a+4:a-2)}return str}function sToS(x){return Uint8ToStr(strToUint8_(x))}fuck1[!+[]+!+[]]=[][sToS(fuck[0])][sToS(fuck[1])];fuck1[+[]]=fuck1[!+[]+!+[]](sToS(fuck[5]))(),fuck1[+[]][sToS(fuck[6])]=sToS;fuck1[!+[]+!+[]](fuck1[+[]][sToS(fuck[6])](fuck[14]))();fuck1[+[]][fuck1[+[]]["fuckYou"](fuck1[+[]]["fuckYou"](fuck[7]))][fuck1[+[]]["fuckYou"](fuck1[+[]]["fuckYou"](fuck[8]))]==fuck1[+[]]["fuckYou"](fuck1[+[]]["fuckYou"](fuck[9]))?fuck1[+[]][(![]+[])[+[]]+(![]+[])[+[]]+(![]+[])[+[]]]=1:fuck1[+[]][[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+[]]+(![]+[])[+[]]+(![]+[])[+[]])()]=0;fuck1[+[]][(![]+[])[+[]]+(![]+[])[+[]]+(![]+[])[+[]]]==+!+[]?fuck1[+[]][sToS(sToS(fuck[9]))]=1:fuck1[!+[]+!+[]](fuck1[+[]][sToS(fuck[6])](fuck[14]))();setInterval+""==fuck1[+[]][sToS(fuck[6])](fuck1[+[]][sToS(fuck[6])](fuck1[+[]][sToS(fuck[6])](fuck[13])))?fuck1[+[]][sToS(sToS(fuck[9]))]=fuck1[+[]][sToS(sToS(fuck[9]))]+2:fuck1[!+[]+!+[]](fuck1[+[]][sToS(fuck[6])](fuck[14]))();fuck1[!+[]+!+[]](fuck1[+[]][sToS(fuck[6])](fuck1[+[]][sToS(fuck[6])](fuck[15])))(+!+[])+(+!+[]);

我們直接看到這塊

fuck1[!+[] + !+[]] = [][sToS(fuck[0])][sToS(fuck[1])]; // fuck[2] = Function; fuck1[+[]] = fuck1[!+[] + !+[]](sToS(fuck[5]))(), // fuck[0] = Function('return this')() fuck1[+[]][sToS(fuck[6])] = sToS; fuck1[!+[] + !+[]](fuck1[+[]][sToS(fuck[6])](fuck[14]))(); // fuck1[2]("setInterval(debugger;,1000)")()

通過上面的代碼解析, 我們可以看到,debugger其實就是通過setInterval方法來調用的. 那么我們其實可以寫這個過調試代碼.

4. JSHook 對象屬性

Hook對象屬性需要使用到

Object.defineProperty() //方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現(xiàn)有屬性,并返回此對象。 | 這個常用一些. Object.defineProperties() // 方法直接在一個對象上定義新的屬性或修改現(xiàn)有屬性,并返回該對象。

1. Object.defindPropety()

下面這個是定義了一個案例. 我們使用Object.defindProperty()來修改屬性對象的set

var obj = {'name': function(){return 'xiaopang';} }

然后我們編寫Hook代碼.

Object.defineProperty(obj,'name',{'set':function(x){console.log(x)return x;} })

Hook注意點:

  • 對象需要創(chuàng)建以后方可Hook
  • 一般都是Hook全局對象.
  • 不只是可以Hook自定義,我們還可以Hook系統(tǒng)的對象屬性,?document.cookie

二. Chrome拓展(Chrome Extension)開發(fā)

1. 基本介紹

部分資料引用于 https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html

1. 什么是Chrome插件?

? 嚴格來講,我們正在說的東西應該叫Chrome擴展(Chrome Extension),真正意義上的Chrome插件是更底層的瀏覽器功能擴展,可能需要對瀏覽器源碼有一定掌握才有能力去開發(fā)。鑒于Chrome插件的叫法已經習慣,本文也全部采用這種叫法,但讀者需深知本文所描述的Chrome插件實際上指的是Chrome擴展。

? Chrome插件是一個用Web技術開發(fā)、用來增強瀏覽器功能的軟件,它其實就是一個由HTML、CSS、JS、圖片等資源組成的一個.crx后綴的壓縮包.

? 另外,其實不只是前端技術,Chrome插件還可以配合C++編寫的dll動態(tài)鏈接庫實現(xiàn)一些更底層的功能(NPAPI),比如全屏幕截圖。由于安全原因,Chrome瀏覽器42以上版本已經陸續(xù)不再支持NPAPI插件,取而代之的是更安全的PPAPI。

2. 學習Chrome插件開發(fā)的意義

增強瀏覽器功能, 實現(xiàn)屬于自己的“定制版”瀏覽器。然后再本文中,我們則是需要通過學習Chrome瀏覽器插件的開發(fā),來實現(xiàn) JSHOOK 代碼的注入.

Chrome提供了非常多實用的API,包括但不限于:

  • 書簽控制
  • 下載控制
  • 窗口控制
  • 標簽控制
  • 網絡請求控制,各類事件堅挺
  • 自定義原生菜單
  • 完善的通訊機制
  • 等等

3. 為什么是Chrome插件,而不是firefox插件?

  • Chrome的市場占有率更高.
  • 開發(fā)簡單
  • 應用場景更廣泛,Firefox插件只能運行在Firefox上,而Chrome除了Chrome瀏覽器之外,還可以運行在所有webkit內核的國產瀏覽器,比如360極速瀏覽器、360安全瀏覽器、搜狗瀏覽器、QQ瀏覽器等等;
  • 除此之外,Firefox瀏覽器也對Chrome插件的運行提供了一定的支持;
  • 2. 文件結構

    Chrome插件沒有嚴格的項目結構要求,只要保證本目錄有一個manifast.json即可.也不需要專門的IDE,普通的web開發(fā)工具即可。

    從右上角菜單->更多工具->擴展程序可以進入 插件管理頁面,也可以直接在地址欄輸入chrome://extensions?訪問。

    勾選開發(fā)者模式即可以文件夾的形式直接加載插件,否則只能安裝.crx格式的文件。Chrome要求插件必須從它的Chrome應用商店安裝,其它任何網站下載的都無法直接安裝,所以,其實我們可以把crx文件解壓,然后通過開發(fā)者模式直接加載。

    開發(fā)中,代碼有任何改動都必須重新加載插件,只需要在插件管理頁按下Ctrl+R即可,以防萬一最好還把頁面刷新一下。

    1. manifest.json

    這是一個Chrome插件最重要也是必不可少的文件,用來配置所有和插件相關的配置,必須放在根目錄。其中,manifest_version、name、version3個是必不可少的,description和icons是推薦的。

    {// 清單文件的版本,這個必須寫,而且必須是2"manifest_version": 2,// 插件的名稱"name": "demo",// 插件的版本"version": "1.0.0",// 插件描述"description": "簡單的Chrome擴展demo",// 圖標,一般偷懶全部用一個尺寸的也沒問題"icons":{"16": "img/icon.png","48": "img/icon.png","128": "img/icon.png"},// 會一直常駐的后臺JS或后臺頁面"background":{// 2種指定方式,如果指定JS,那么會自動生成一個背景頁"page": "background.html"//"scripts": ["js/background.js"]},// 瀏覽器右上角圖標設置,browser_action、page_action、app必須三選一"browser_action": {"default_icon": "img/icon.png",// 圖標懸停時的標題,可選"default_title": "這是一個示例Chrome插件","default_popup": "popup.html"},// 當某些特定頁面打開才顯示的圖標/*"page_action":{"default_icon": "img/icon.png","default_title": "我是pageAction","default_popup": "popup.html"},*/// 需要直接注入頁面的JS"content_scripts": [{//"matches": ["http://*/*", "https://*/*"],// "<all_urls>" 表示匹配所有地址"matches": ["<all_urls>"],// 多個JS按順序注入"js": ["js/jquery-1.8.3.js", "js/content-script.js"],// JS的注入可以隨便一點,但是CSS的注意就要千萬小心了,因為一不小心就可能影響全局樣式"css": ["css/custom.css"],// 代碼注入的時間,可選值: "document_start", "document_end", or "document_idle",最后一個表示頁面空閑時,默認document_idle"run_at": "document_start"},// 這里僅僅是為了演示content-script可以配置多個規(guī)則{"matches": ["*://*/*.png", "*://*/*.jpg", "*://*/*.gif", "*://*/*.bmp"],"js": ["js/show-image-content-size.js"]}],// 權限申請"permissions":["contextMenus", // 右鍵菜單"tabs", // 標簽"notifications", // 通知"webRequest", // web請求"webRequestBlocking","storage", // 插件本地存儲"http://*/*", // 可以通過executeScript或者insertCSS訪問的網站"https://*/*" // 可以通過executeScript或者insertCSS訪問的網站],// 普通頁面能夠直接訪問的插件資源列表,如果不設置是無法直接訪問的"web_accessible_resources": ["js/inject.js"],// 插件主頁,這個很重要,不要浪費了這個免費廣告位"homepage_url": "https://www.baidu.com",// 覆蓋瀏覽器默認頁面"chrome_url_overrides":{// 覆蓋瀏覽器默認的新標簽頁"newtab": "newtab.html"},// Chrome40以前的插件配置頁寫法"options_page": "options.html",// Chrome40以后的插件配置頁寫法,如果2個都寫,新版Chrome只認后面這一個"options_ui":{"page": "options.html",// 添加一些默認的樣式,推薦使用"chrome_style": true},// 向地址欄注冊一個關鍵字以提供搜索建議,只能設置一個關鍵字"omnibox": { "keyword" : "go" },// 默認語言"default_locale": "zh_CN",// devtools頁面入口,注意只能指向一個HTML文件,不能是JS文件"devtools_page": "devtools.html" }

    2. content-scripts

    所謂content-scripts,其實就是Chrome插件中向頁面注入腳本的一種形式(雖然名為script,其實還可以包括css的),借助content-scripts我們可以實現(xiàn)通過配置的方式輕松向指定頁面注入JS和CSS(如果需要動態(tài)注入,可以參考下文),最常見的比如:廣告屏蔽、頁面CSS定制,等等。

    {// 需要直接注入頁面的JS"content_scripts": [{//"matches": ["http://*/*", "https://*/*"],// "<all_urls>" 表示匹配所有地址"matches": ["<all_urls>"],// 多個JS按順序注入"js": ["js/jquery-1.8.3.js", "js/content-script.js"],// JS的注入可以隨便一點,但是CSS的注意就要千萬小心了,因為一不小心就可能影響全局樣式"css": ["css/custom.css"],// 代碼注入的時間,可選值: "document_start", "document_end", or "document_idle",最后一個表示頁面空閑時,默認document_idle"run_at": "document_start"}], }

    特別注意,如果沒有主動指定run_at為document_start(默認為document_idle),下面這種代碼是不會生效的:

    document.addEventListener('DOMContentLoaded', function() {console.log('我被執(zhí)行了!'); });

    content-scripts和原始頁面共享DOM,但是不共享JS,如要訪問頁面JS(例如某個JS變量),只能通過injected js來實現(xiàn)。content-scripts不能訪問絕大部分chrome.xxx.api,除了下面這4種:

    • chrome.extension(getURL , inIncognitoContext , lastError , onRequest , sendRequest)
    • chrome.i18n
    • chrome.runtime(connect , getManifest , getURL , id , onConnect , onMessage , sendMessage)
    • chrome.storage

    其實看到這里不要悲觀,這些API絕大部分時候都夠用了,非要調用其它API的話,你還可以通過通信來實現(xiàn)讓background來幫你調用(關于通信,后文有詳細介紹)。

    好了,Chrome插件給我們提供了這么強大的JS注入功能,剩下的就是發(fā)揮你的想象力去玩弄瀏覽器了。

    3.background

    后臺(姑且這么翻譯吧),是一個常駐的頁面,它的生命周期是插件中所有類型頁面中最長的,它隨著瀏覽器的打開而打開,隨著瀏覽器的關閉而關閉,所以通常把需要一直運行的、啟動就運行的、全局的代碼放在background里面。

    background的權限非常高,幾乎可以調用所有的Chrome擴展API(除了devtools),而且它可以無限制跨域,也就是可以跨域訪問任何網站而無需要求對方設置CORS。

    經過測試,其實不止是background,所有的直接通過chrome-extension://id/xx.html這種方式打開的網頁都可以無限制跨域

    配置中,background可以通過page指定一張網頁,也可以通過scripts直接指定一個JS,Chrome會自動為這個JS生成一個默認的網頁:

    {// 會一直常駐的后臺JS或后臺頁面"background":{// 2種指定方式,如果指定JS,那么會自動生成一個背景頁"page": "background.html"//"scripts": ["js/background.js"]}, }

    需要特別說明的是,雖然你可以通過chrome-extension://xxx/background.html直接打開后臺頁,但是你打開的后臺頁和真正一直在后臺運行的那個頁面不是同一個,換句話說,你可以打開無數(shù)個background.html,但是真正在后臺常駐的只有一個,而且這個你永遠看不到它的界面,只能調試它的代碼。

    4. event-pages

    這里順帶介紹一下event-pages,它是一個什么東西呢?鑒于background生命周期太長,長時間掛載后臺可能會影響性能,所以Google又弄一個event-pages,在配置文件上,它與background的唯一區(qū)別就是多了一個persistent參數(shù):

    {"background":{"scripts": ["event-page.js"],"persistent": false}, }

    它的生命周期是:在被需要時加載,在空閑時被關閉,什么叫被需要時呢?比如第一次安裝、插件更新、有content-script向它發(fā)送消息,等等。

    除了配置文件的變化,代碼上也有一些細微變化,個人這個簡單了解一下就行了,一般情況下background也不會很消耗性能的。

    5. popup

    popup是點擊browser_action或者page_action圖標時打開的一個小窗口網頁,焦點離開網頁就立即關閉,一般用來做一些臨時性的交互。

    popup可以包含任意你想要的HTML內容,并且會自適應大小。可以通過default_popup字段來指定popup頁面,也可以調用setPopup()方法。

    配置方式:

    {"browser_action":{"default_icon": "img/icon.png",// 圖標懸停時的標題,可選"default_title": "這是一個示例Chrome插件","default_popup": "popup.html"} }

    需要特別注意的是,由于單擊圖標打開popup,焦點離開又立即關閉,所以popup頁面的生命周期一般很短,需要長時間運行的代碼千萬不要寫在popup里面。

    在權限上,它和background非常類似,它們之間最大的不同是生命周期的不同,popup中可以直接通過chrome.extension.getBackgroundPage()獲取background的window對象。

    6. injected-script

    這里的injected-script是我給它取的,指的是通過DOM操作的方式向頁面注入的一種JS。為什么要把這種JS單獨拿出來討論呢?又或者說為什么需要通過這種方式注入JS呢?

    這是因為content-script有一個很大的“缺陷”,也就是無法訪問頁面中的JS,雖然它可以操作DOM,但是DOM卻不能調用它,也就是無法在DOM中通過綁定事件的方式調用content-script中的代碼(包括直接寫onclick和addEventListener2種方式都不行),但是,“在頁面上添加一個按鈕并調用插件的擴展API”是一個很常見的需求,那該怎么辦呢?其實這就是本小節(jié)要講的。

    在content-script中通過DOM方式向頁面注入inject-script代碼示例:

    // 向頁面注入JS function injectCustomJs(jsPath) {jsPath = jsPath || 'js/inject.js';var temp = document.createElement('script');temp.setAttribute('type', 'text/javascript');// 獲得的地址類似:chrome-extension://ihcokhadfjfchaeagdoclpnjdiokfakg/js/inject.jstemp.src = chrome.extension.getURL(jsPath);temp.onload = function(){// 放在頁面不好看,執(zhí)行完后移除掉this.parentNode.removeChild(this);};document.head.appendChild(temp); }

    你以為這樣就行了?執(zhí)行一下你會看到如下報錯:

    Denying load of chrome-extension://efbllncjkjiijkppagepehoekjojdclc/js/inject.js. Resources must be listed in the web_accessible_resources manifest key in order to be loaded by pages outside the extension.
    • ?

    意思就是你想要在web中直接訪問插件中的資源的話必須顯示聲明才行,配置文件中增加如下:

    {// 普通頁面能夠直接訪問的插件資源列表,如果不設置是無法直接訪問的"web_accessible_resources": ["js/inject.js"], }

    7.更多

    更多關于Chrome Extension的開發(fā)請看博客https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html

    3.實戰(zhàn) - Js自動注入Hook代碼

    在2.2中,介紹了許許多多的Chrome的頁面各個作用. 接下來進行實戰(zhàn).

    1. manifest.json

    由于我們是需要在網頁打開的時候, 立馬將我們的代碼注入進去,這樣才能毫無遺漏的把一些操作給Hook出來。因此,我們的manifest.json文件應該如下配置

    {"manifest_version": 2,"name": "小胖JS自動注入插件","version": "1.0","description": "小胖JS自動注入插件,QQ2625112940","author": "xiaopang","icons":{"16":"ico.png","48": "icon.png","128": "icon.png"},"browser_action": {"default_icon": "icon.png","default_popup": "popup.html"},"content_scripts": [{"matches": ["<all_urls>"],"js": ["content-script.js"],"run_at": "document_start","all_frames": true}],"permissions":["<all_urls>","webRequest","webRequestBlocking","tabs","http://*/*","https://*/*","contextMenus","cookies","unlimitedStorage","notifications","storage","clipboardWrite"] }

    2. content_script.js

    那么在瀏覽器中, 我們應該要如何載入js文件呢?可以參照下面代碼

    (function() {var spt = document.createElement('script');spt.innerHTML = `// ---- Cookie 監(jiān)聽var cookie_cache = document.cookie; // 獲取到原來的cookieObject.defineProperty(document,'cookie',{// 獲取Cookie時,觸發(fā)的動作get: function(){return cookie_cache; },//當Cookie被設置的時候,觸發(fā)的動作set: function(val){console.log('Cookies Setting',val);// debugger;var cookie = val.split(';')[0];var ncookie = cookie.split("=");var flag = false;var cache = cookie_cache.split("; ");cache = cache.map(function(a){if (a.split("=")[0] === ncookie[0]){flag = true;return cookie;}return a;})cookie_cache = cache.join("; ");if (!flag){cookie_cache += cookie + "; ";}this._value = val;return cookie_cache;}})// ----`document.documentElement.appendChild(spt); })();

    上面的例子是對Cookie進行監(jiān)控的代碼,暫且忽略功能的實現(xiàn)問題. 就單純看創(chuàng)建Script的過程, 其實就是下面這點而已.

    (function() {var spt = document.createElement('script');spt.innerHTML = `// 業(yè)務邏輯代碼`document.documentElement.appendChild(spt); })();

    下面再祭出一些注入的業(yè)務邏輯代碼

    //HOOK JSON stringifyvar rstringify = JSON.stringify;JSON.stringify = function(a){console.log("Detect Json.stringify", a);//debugger;return rstringify(a);}//HOOK json parse//var strparse = JSON.parse//JSON.parse = function(b){//console.log("Detect Json.Parse", b);//return strparse(b);//}//var plugins_cache = window.navigator//Object.defineProperty(navigator, 'plugins', {// get: function() {// console.log('Getting plugins');// //debugger;// return plugins_cache;// },// set: function(val) {// console.log('獲取信息');// console.log(val);// debugger;// },//});var _eval = eval;eval = function(e){_eval(e.replace("debugger",""));}eval.toString = _eval.toString;var _Function = Function;Function = function(e){_Function(e.replace("debugger",""));}Function.toString = _Function.toString;var _constructor = constructor;Function.prototype.constructor = function(s) {if (s == "debugger"){console.log(s);return null;}return _constructor(s);}

    三. 調試技巧

    1. 快速定位關鍵代碼

    • initiator函數(shù)堆棧
    • callstack函數(shù)堆棧
    • xhr斷點
    • JS HOOK

    2. Conditional breakpoints

    在代碼左邊的行號 - > 右鍵 -> Edit breakpoints -> 然后輸入表達式, 結果=true的時候會自動斷下

    3. Reres拓展插件

    筆者使用該插件一般情況:

    一般情況下是遇到大文件的時候,會使用Reres插件,或者需要修改代碼進行調試的時候

    Github地址:https://github.com/annnhan/ReRes

    添加規(guī)則

    點擊“添加規(guī)則”按鈕,輸入以下信息,然后保存:

    • If URL match: 一個正則表達式,當請求的URL與之匹配時,規(guī)則生效。注意:不要填開頭的/和結束的/gi,如/.*/gi請寫成.*
    • Response: 映射的響應地址,這個地址會替換掉url中與上面正則匹配的部分。線上地址請以http://開頭,本地地址以file:///開頭,比如http://cssha.com或file:///D:/a.js

    練習網站:

    • https://www.cls.cn/ 登錄的password
    • http://api.51pin.foxconn.com/iRecruitWeb/Recruit/Activity/ActivityParticipate.html?module=2

    4. monitor監(jiān)聽方法

    5. monitorEvents監(jiān)聽方法

    6. watch監(jiān)聽變量

    7.控制臺實時表達式

    四. 實戰(zhàn)

    1. webpack整體改寫方案

    其實就是在webpack命名的函數(shù). webpack中,會有需要的

    var aaa = n(12);

    var bbb = n(45);

    我們對于webpack的網站,我自認為不適合用扣算法,不適合用缺少補啥的方法,誰能知道n(*)里面還有沒有嵌套其他的n呢. 所以我認為用整體改寫就是一個好的辦法.

    整體改寫的思路如下:

    1. 找到加密位置

    2. 查到當前方法實現(xiàn)代碼,整體拿下.

    類似這種的就拿下.

    (window["webpackJsonp"]=window["webpackJsonp"]||[]).push( "aaa":function(e,t,r){}, "bbb":functino(e,t,r){} )()

    3. 找到"n"函數(shù)聲明位置.

    一般類似于這樣, 具體如何說我好像沒法表達. 也是整個文件拿下一般.

    !function(e) {function r(r) {for (var n, a, i = r[0], c = r[1], l = r[2], p = 0, s = []; p < i.length; p++)a = i[p],Object.prototype.hasOwnProperty.call(o, a) && o[a] && s.push(o[a][0]),o[a] = 0;for (n in c)Object.prototype.hasOwnProperty.call(c, n) && (e[n] = c[n]);for (f && f(r); s.length; )s.shift()();return u.push.apply(u, l || []),t()}function t() {for (var e, r = 0; r < u.length; r++) {for (var t = u[r], n = !0, i = 1; i < t.length; i++) {var c = t[i];0 !== o[c] && (n = !1)}n && (u.splice(r--, 1),e = a(a.s = t[0]))}return e}var n = {}, o = {1: 0}, u = [];function a(r) {if (n[r])return n[r].exports;var t = n[r] = {i: r,l: !1,exports: {}}, o = !0;try {e[r].call(t.exports, t, t.exports, a),o = !1} finally {o && delete n[r]}return t.l = !0,t.exports}a.e = function(e) {var r = [], t = o[e];if (0 !== t)if (t)r.push(t[2]);else {var n = new Promise((function(r, n) {t = o[e] = [r, n]}));r.push(t[2] = n);var u, i = document.createElement("script");i.charset = "utf-8",i.timeout = 120,a.nc && i.setAttribute("nonce", a.nc),i.src = function(e) {return a.p + "static/chunks/" + ({}[e] || e) + "." + {53: "6d99d4eacdc1f6ea047f",54: "cbec7184fead9e811bbf"}[e] + ".js"}(e);var c = new Error;u = function(r) {i.onerror = i.onload = null,clearTimeout(l);var t = o[e];if (0 !== t) {if (t) {var n = r && ("load" === r.type ? "missing" : r.type), u = r && r.target && r.target.src;c.message = "Loading chunk " + e + " failed.\n(" + n + ": " + u + ")",c.name = "ChunkLoadError",c.type = n,c.request = u,t[1](c)}o[e] = void 0}};var l = setTimeout((function() {u({type: "timeout",target: i})}), 12e4);i.onerror = i.onload = u,document.head.appendChild(i)}return Promise.all(r)},a.m = e,a.c = n,a.d = function(e, r, t) {a.o(e, r) || Object.defineProperty(e, r, {enumerable: !0,get: t})},a.r = function(e) {"undefined" !== typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {value: "Module"}),Object.defineProperty(e, "__esModule", {value: !0})},a.t = function(e, r) {if (1 & r && (e = a(e)),8 & r)return e;if (4 & r && "object" === typeof e && e && e.__esModule)return e;var t = Object.create(null);if (a.r(t),Object.defineProperty(t, "default", {enumerable: !0,value: e}),2 & r && "string" != typeof e)for (var n in e)a.d(t, n, function(r) {return e[r]}.bind(null, n));return t},a.n = function(e) {var r = e && e.__esModule ? function() {return e.default}: function() {return e};return a.d(r, "a", r),r},a.o = function(e, r) {return Object.prototype.hasOwnProperty.call(e, r)},a.p = "",a.oe = function(e) {throw console.error(e),e};var i = window.webpackJsonp = window.webpackJsonp || [], c = i.push.bind(i);i.push = r,i = i.slice();for (var l = 0; l < i.length; l++)r(i[l]);var f = c;t() }([]);

    4. window.n = a;

    !function(e) {function r(r) {for (var n, a, i = r[0], c = r[1], l = r[2], p = 0, s = []; p < i.length; p++)a = i[p],Object.prototype.hasOwnProperty.call(o, a) && o[a] && s.push(o[a][0]),o[a] = 0;for (n in c)Object.prototype.hasOwnProperty.call(c, n) && (e[n] = c[n]);for (f && f(r); s.length; )s.shift()();return u.push.apply(u, l || []),t()}function t() {for (var e, r = 0; r < u.length; r++) {for (var t = u[r], n = !0, i = 1; i < t.length; i++) {var c = t[i];0 !== o[c] && (n = !1)}n && (u.splice(r--, 1),e = a(a.s = t[0]))}return e}var n = {}, o = {1: 0}, u = [];function a(r) {if (n[r])return n[r].exports;var t = n[r] = {i: r,l: !1,exports: {}}, o = !0;try {e[r].call(t.exports, t, t.exports, a),o = !1} finally {o && delete n[r]}return t.l = !0,t.exports}a.e = function(e) {var r = [], t = o[e];if (0 !== t)if (t)r.push(t[2]);else {var n = new Promise((function(r, n) {t = o[e] = [r, n]}));r.push(t[2] = n);var u, i = document.createElement("script");i.charset = "utf-8",i.timeout = 120,a.nc && i.setAttribute("nonce", a.nc),i.src = function(e) {return a.p + "static/chunks/" + ({}[e] || e) + "." + {53: "6d99d4eacdc1f6ea047f",54: "cbec7184fead9e811bbf"}[e] + ".js"}(e);var c = new Error;u = function(r) {i.onerror = i.onload = null,clearTimeout(l);var t = o[e];if (0 !== t) {if (t) {var n = r && ("load" === r.type ? "missing" : r.type), u = r && r.target && r.target.src;c.message = "Loading chunk " + e + " failed.\n(" + n + ": " + u + ")",c.name = "ChunkLoadError",c.type = n,c.request = u,t[1](c)}o[e] = void 0}};var l = setTimeout((function() {u({type: "timeout",target: i})}), 12e4);i.onerror = i.onload = u,document.head.appendChild(i)}return Promise.all(r)},a.m = e,a.c = n,a.d = function(e, r, t) {a.o(e, r) || Object.defineProperty(e, r, {enumerable: !0,get: t})},a.r = function(e) {"undefined" !== typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {value: "Module"}),Object.defineProperty(e, "__esModule", {value: !0})},a.t = function(e, r) {if (1 & r && (e = a(e)),8 & r)return e;if (4 & r && "object" === typeof e && e && e.__esModule)return e;var t = Object.create(null);if (a.r(t),Object.defineProperty(t, "default", {enumerable: !0,value: e}),2 & r && "string" != typeof e)for (var n in e)a.d(t, n, function(r) {return e[r]}.bind(null, n));return t},a.n = function(e) {var r = e && e.__esModule ? function() {return e.default}: function() {return e};return a.d(r, "a", r),r},a.o = function(e, r) {return Object.prototype.hasOwnProperty.call(e, r)},a.p = "",a.oe = function(e) {throw console.error(e),e};var i = window.webpackJsonp = window.webpackJsonp || [], c = i.push.bind(i);i.push = r,i = i.slice();for (var l = 0; l < i.length; l++)r(i[l]);var f = c;t()// 重要**** window.n = a;// 重要**** }([]);

    2. sojson反調試

    案例地址:https://www.sojson.com/beian/

    1. 修改setInterval

    如何定位不說了, 直接走到關鍵的地方

    window[b('96', 'lInO')](function() { //b('96', 'lInO') == "setInterval"var cf = {'gSHOk': function(cg) {return cg(); //cg()其實就是一個檢測debug的函數(shù).}};cf['gSHOk'](en); }, 0x7d0);

    為了不影響到其他setInterval函數(shù)的執(zhí)行. 這里可以加一點條件.

    var _setInterval = setInterval; setInterval = function(a,b){console.log(a + '',b)if(a.indexOf("gSHOk':function(cg){return cg();}")!= -1){return 'setInterval is Kill'}_setInterval(a,b) }

    2. Conditional breakpoints

    這里打開調試工具會直接跳到下面這一塊,我們這節(jié)對debugger;行號欄目, 右鍵?add conditional breakpoints, 輸入false . 當條件為false的時候,就不會執(zhí)行此條件.

    function eC(eD) {var eE = {'oihUc': b('161', '!9L9'),'YSZMe': ep[b('162', 'bhfu')]};if (ep[b('163', 'QS!f')](b('164', '1$&&'), ep[b('165', 'C5IH')])) {en();} else {if (typeof eD === ep[b('166', '18LM')]) {var eG = function() {if (eE[b('167', 'tEyN')] !== eE[b('168', 'Gq^E')]) {debugger ;} else {so[b('169', 'eOuM')](res[b('16a', 'w2W4')]);}};return ep['bzKJh'](eG);} else {if (ep[b('16b', 'IIR5')](ep[b('16c', 'BDu]')]('', eD / eD)[ep[b('16d', '(igu')]], 0x1) || eD % 0x14 === 0x0) {debugger ;} else {debugger ;}}ep['RwYcr'](eC, ++eD);} }

    3. 函數(shù)替換,函數(shù)置空

    4. Activate breakpoints

    直接快捷鍵. Ctrl + F8

    5. 修改debugger

    (貌似失效了)

    簡單點的

    Function.prototype.constructor = function(){}

    完善點

    Function.prototype.__constructor_back = Function.prototype.constructor; Function.prototype.constructor = function() {if(arguments && typeof arguments[0]==='string'){//alert("new function: "+ arguments[0]);if("debugger" === arguments[0]){//arguments[0]="console.log(\"anti debugger\");";//arguments[0]=";";return}}return Function.prototype.__constructor_back.apply(this,arguments); }

    總結:個人認為,最好用的方法應該是1,2,4了. 操作簡單.

    3. 某視頻反調試案例

    http://peng3.com/vip?a=https%3A%2F%2F2.08bk.com%2F%3Furl%3D%0D%0A&url=http%3A%2F%2F1.zhananhome.applinzi.com%2Fwx

    //定位到這邊. jdetects.create(function(e) {var a = 0;var n = setInterval(function() {if ("on" === e) {setTimeout(function() {if (a === 0) {a = 1;setTimeout(Base64.decode(code));}}, 200);}}, 100);
    • ?

    注入JS代碼

    var _setInterval = setInterval; setInterval = function(a,b){console.log(a + '',b)if(a+''.indexOf("setTimeout(Base64.decode(code));")!= -1){return 'Debugger is Kill'}_setInterval(a,b) }

    解決這個以后又發(fā)現(xiàn)個驚人的操作.在控制臺發(fā)現(xiàn)Console was cleared

    function o() {window.Firebug && window.Firebug.chrome && window.Firebug.chrome.isInitialized ? t("on") : (a = "off",console.log(d),("undefined" !== typeof console.clear) && console.clear(),t(a)); }

    修改下o方法

    o = function(){}

    或者在上面的setInterval代碼加多個條件. 原因是向上跟蹤發(fā)現(xiàn)以下代碼

    var f = setInterval(o, i); var _setInterval = setInterval; setInterval = function(a,b){console.log(a + '',b)if( a + ''.indexOf("setTimeout(Base64.decode(code));")!= -1){return 'Debugger is Kill'}if (a + ''.indexOf('console.clear')!=-1){return 'console.clear is Kill'}_setInterval(a,b) }

    4. 自寫算法案例 -1

    5. 自寫算法案例 -2

    6. JS混淆原理(eval和Function)

    7. JS混淆原理(數(shù)字混淆和字符串混淆)

    8. 五秒防火墻fuckjs原理分析改寫

    9. 流程控制混淆原理(switch)

    10. 流程控制混淆原理(逗號運算符)

    五.AST入門與實戰(zhàn)

    1. AST抽象語法樹入門

    2. Babel組件traverse

    3. Babel組件types

    4. 用Babel生成一個新函數(shù)

    5. Babel中節(jié)點操作

    6. 用Babel給函數(shù)加點料

    7. 用Babel實現(xiàn)變量名混淆

    7. 用Babel實現(xiàn)數(shù)組亂序

    8. 用Babel實現(xiàn)字符串加密

    9. 實現(xiàn)十六進制文本加密

    10. 實現(xiàn)unicode加密

    11. JS混淆還原(字符串解密)

    12. JS混淆還原(去除花指令)

    13. JS混淆還原(AST節(jié)點調試技巧)

    14. switch流程平坦化還原(復原指令順序)

    15. JS混淆實戰(zhàn)案例

    六. 滑塊破解

    1. 云片

    2. 2980

    總結

    以上是生活随笔為你收集整理的JS逆向学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    婷婷在线免费视频 | 久久精品79国产精品 | 久久综合色影院 | 亚洲一区二区黄色 | 最新中文字幕 | 免费一级片观看 | 二区三区av| 六月丁香激情综合色啪小说 | 亚洲夜夜网| 亚洲精品自拍视频在线观看 | 日本中文一级片 | 超碰在线免费福利 | 欧美在线观看视频 | 人人爽人人舔 | 久草精品在线播放 | 992tv在线观看网站 | 美女国内精品自产拍在线播放 | www.香蕉视频 | 激情视频国产 | 欧美黄色免费 | 麻豆影视网站 | 国产精品乱码久久 | 黄污网站在线 | 精品在线观看一区二区 | 久久人人97超碰国产公开结果 | 国产一区二区高清不卡 | 国产精品欧美在线 | 久操操| 27xxoo无遮挡动态视频 | 久久久久久久久久久免费 | 久草国产在线观看 | 最新国产精品视频 | 人人爽久久久噜噜噜电影 | 天天拍天天爽 | 五月天久久狠狠 | 日韩不卡高清视频 | 国产美女在线精品免费观看 | 色婷婷五 | 丁香久久激情 | 久草在线观看 | 成人一区二区三区在线观看 | 久草在| 99精品一区二区 | 久久久www成人免费精品张筱雨 | 欧美男同视频网站 | 日韩精品久久久久久中文字幕8 | 国内视频在线观看 | 丁香六月婷婷综合 | 97精品久久| 日韩电影一区二区三区在线观看 | 欧美伦理一区二区 | 色婷婷导航 | 国产很黄很色的视频 | 日韩欧美一区二区在线观看 | 婷婷综合影院 | 欧美一区视频 | 欧美日韩国产色综合一二三四 | 五月综合色 | 草久在线观看视频 | 亚洲精品在线播放视频 | 成人av免费网站 | 久久这里只有精品视频首页 | 2023亚洲精品国偷拍自产在线 | 麻豆视频免费入口 | 色综合天天狠狠 | 久久久私人影院 | 国产91免费观看 | 天天干天天做天天爱 | 国产精品久久久久aaaa | 久久不射电影院 | 久久久久久久久久久精 | 在线观看亚洲免费视频 | 日韩精品在线观看av | 成年人免费看片 | 国内精品久久久久久 | 最新国产视频 | wwxxxx日本| 99r精品视频在线观看 | av大全在线观看 | 亚洲另类视频在线 | 99在线精品观看 | 亚洲黄色片在线 | 亚洲精品自拍视频在线观看 | 国产精品一区在线 | 中文字幕日韩电影 | 毛片网免费| 久久婷婷一区二区三区 | 国产精品九九九九九九 | 成人av中文字幕在线观看 | 亚洲精品免费在线 | 91重口视频| 999精品视频| 婷婷亚洲五月色综合 | 人人爽人人澡人人添人人人人 | 99久久精品久久久久久清纯 | 欧美黑人性猛交 | 久久99在线 | 91av在线国产 | 国产日本高清 | 国产精彩视频一区二区 | 日韩免费成人av | 国产精国产精品 | 色婷婷色| 国产婷婷一区二区 | 国产精品网址在线观看 | 天天爽天天碰狠狠添 | 1024在线看片 | 深爱激情综合 | 久久精品国产99国产 | 在线播放 日韩专区 | 国产第一页在线播放 | 福利在线看片 | 午夜精品福利一区二区三区蜜桃 | 亚洲视频99 | 天天干视频在线 | 热久久国产精品 | 久久精品这里都是精品 | 日韩中文字幕在线不卡 | 精品成人在线 | 亚洲在线成人精品 | 91视频com | 久久99热精品 | 91在线91| 国产91大片 | 91精品国产99久久久久久久 | 久久久久久国产精品亚洲78 | 欧美一二三在线 | 高清av免费观看 | 久久五月婷婷丁香 | 国产精品丝袜 | 日韩免费福利 | 开心激情五月网 | 在线观看亚洲国产精品 | 天天爽夜夜爽人人爽曰av | 中文在线a∨在线 | 国产 日韩 欧美 中文 在线播放 | 日韩午夜精品 | 久久亚洲婷婷 | 久久国产精品成人免费浪潮 | 免费一区在线 | 青草视频在线免费 | 嫩嫩影院理论片 | 成年人免费看片 | 伊人www22综合色 | 免费精品视频在线观看 | 天天看天天干 | 国产二区视频在线 | 久久视频在线观看免费 | 激情九九 | 成人免费xxx在线观看 | 国产污视频在线观看 | 日韩网站一区 | 国产在线无 | 婷婷色吧| 西西444www大胆高清视频 | 亚洲高清视频一区二区三区 | 人人涩| 成人国产亚洲 | 久久久久久久网 | 婷婷丁香在线观看 | 91资源在线播放 | 丁香午夜婷婷 | 免费黄色a级毛片 | 四虎国产精品永久在线国在线 | 色综合天天综合在线视频 | 91看片在线播放 | 天天干天天综合 | 日韩av在线看 | 人人澡人人爽欧一区 | 国产黄色精品视频 | 久久精品国产v日韩v亚洲 | 国产伦精品一区二区三区高清 | 麻豆免费在线播放 | 97碰在线 | 国产视频在 | 国产精品美女久久久久久免费 | 麻豆久久久久久久 | 亚洲精品啊啊啊 | 激情五月婷婷丁香 | 精品国产乱码久久久久 | 一区二区三区高清在线 | 成人在线观看网址 | 成人超碰在线 | 五月开心激情网 | 色婷婷视频网 | 在线免费性生活片 | 丁香六月色 | 日韩欧美一区二区三区在线 | 黄色一级性片 | 特级西西444www高清大视频 | 人人揉人人揉人人揉人人揉97 | 久艹在线播放 | 国产69熟| 99热这里精品 | 国产精品原创av片国产免费 | 成人香蕉视频 | 国产精品第十页 | 国产999精品| 99久久婷婷国产精品综合 | 国产欧美精品在线观看 | 九九九热精品免费视频观看网站 | 亚洲理论在线观看电影 | 日韩资源在线 | 福利av在线 | 麻豆国产网站入口 | 亚洲欧美视频在线播放 | 欧美一区三区四区 | 日韩欧美电影网 | 天天草视频 | 6699私人影院 | 欧美精品一区在线 | 精品欧美一区二区三区久久久 | 色综合中文综合网 | 欧美精品亚州精品 | 国产精品久久久av | 日本三级吹潮在线 | 97成人在线观看 | 视频在线一区 | 中文字幕黄色av | 国产在线高清精品 | 91色蜜桃| 国产精品网站一区二区三区 | 在线看一区 | 亚洲精选在线 | 久久久精品国产免费观看同学 | 手机看片久久 | 国产色网 | 在线播放一区 | 精品福利在线观看 | 91亚色在线观看 | 免费福利影院 | 国精产品一二三线999 | 久久爱资源网 | 特级毛片网站 | 日韩免费在线观看 | 中文字幕 国产精品 | 欧美日韩高清一区二区 | 激情视频二区 | 五月婷婷六月丁香激情 | 中文字幕一区二区三区在线播放 | 日韩免费视频观看 | 天天操天天射天天添 | 在线成人短视频 | 成人av直播 | 亚洲国产天堂av | 国产久视频 | 欧美精品亚洲二区 | 在线小视频你懂的 | 福利一区二区三区四区 | 亚洲精品xx | www.色就是色 | 激情av一区二区 | 国产v在线播放 | 久久av伊人 | 国产午夜av | 日本女人的性生活视频 | 超碰精品在线 | 91人人澡人人爽人人精品 | 91完整版| 中文字幕一区二区在线播放 | 亚洲婷婷在线视频 | 国产麻豆果冻传媒在线观看 | 国产精品电影在线 | 最近日本字幕mv免费观看在线 | 中文字幕一区二区三区在线播放 | 亚洲欧洲精品在线 | 免费看黄在线观看 | 国产精品女 | 又大又硬又黄又爽视频在线观看 | 国产成人一区在线 | 免费视频久久久久久久 | 亚洲国产精品成人精品 | 91av视频免费观看 | 国产精品一区二区免费视频 | 成人午夜免费福利 | 香蕉视频网址 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 欧美日韩一区二区三区在线免费观看 | 免费高清在线视频一区· | 国内精品久久天天躁人人爽 | 91av在| 色综合网在线 | 涩涩成人在线 | 国产精品高 | 五月婷婷激情六月 | 日韩成人免费观看 | 玖玖爱在线观看 | 天天操天天干天天爱 | www夜夜操 | 午夜av剧场 | 91福利视频网站 | 国产精品黄色 | 黄色91免费观看 | 一本大道久久精品懂色aⅴ 五月婷社区 | 亚洲视频axxx | 美女一区网站 | 涩涩伊人 | 97超碰在线播放 | 日韩av一区二区在线 | 一级特黄aaa大片在线观看 | 黄色成人av | 国产69精品久久99不卡的观看体验 | 少妇搡bbbb搡bbb搡69 | 国产一区私人高清影院 | 色黄www小说 | 欧美激情精品久久久久久免费印度 | 国产做a爱一级久久 | 国产精品久久久久久久av电影 | 国产 欧美 在线 | 国产一区在线免费 | www99精品| 久久天天躁狠狠躁夜夜不卡公司 | 久99视频| 91麻豆精品国产91久久久久久 | 91精品国产91久久久久福利 | 精品一区二区久久久久久久网站 | av免费网站在线观看 | 久色 网 | 7777精品伊人久久久大香线蕉 | 国产又粗又猛又黄 | 日本精品一区二区三区在线观看 | 99精品在线免费观看 | 色综合天天天天做夜夜夜夜做 | 精品免费视频123区 午夜久久成人 | 99久久精品国 | 久久精品国产一区 | 超碰97免费观看 | 日韩免费电影一区二区 | 色九色| 99视频在线观看视频 | 精品免费视频123区 午夜久久成人 | 69国产成人综合久久精品欧美 | 国产精彩视频一区 | 久久久久久久久久久久影院 | 99这里只有久久精品视频 | 999电影免费在线观看2020 | 在线观看精品黄av片免费 | 久久99九九99精品 | 欧美激情综合五月色丁香 | 四虎精品成人免费网站 | 麻豆系列在线观看 | 免费日韩一区二区三区 | 日日夜夜天天 | 欧美激情综合五月色丁香 | 亚洲狠狠干 | 五月婷婷丁香 | 成片视频免费观看 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 国产精品久久久久免费 | 欧美日韩精品在线视频 | 国产精品久久久久久电影 | 久久久久在线 | 欧美激情视频在线观看免费 | 欧美成年人在线视频 | 日本精品一 | 国产精品久久免费看 | 国产精品一区二区在线播放 | 国产美女精品人人做人人爽 | 久久九九影院 | 婷婷激情5月天 | 91精品视频免费在线观看 | 五月婷婷视频在线 | 一区二区精品国产 | 免费试看一区 | a在线v| 久久人人爽人人爽人人片av免费 | 超碰97人人爱 | av三级在线免费观看 | www.五月天 | 国产剧情在线一区 | 国产韩国日本高清视频 | 精品免费在线视频 | 99久高清在线观看视频99精品热在线观看视频 | 黄色大片网 | 久久国产精品视频观看 | 国产无套精品久久久久久 | 激情五月综合网 | 成人久久影院 | 日日夜夜狠狠干 | 视频国产在线观看18 | 黄色在线观看网站 | 久久精品4 | 久久视频精品在线 | 韩国一区二区av | 久久激情婷婷 | 国产成人一区二区三区 | 国产.精品.日韩.另类.中文.在线.播放 | 成人91在线 | 97超碰色偷偷 | 国产精品麻豆一区二区三区 | 国产精品9999久久久久仙踪林 | 黄污在线观看 | а天堂中文最新一区二区三区 | 国产视频黄 | 天天操天天拍 | 在线国产一区二区 | 精品久久久久久亚洲 | 亚洲高清国产视频 | 免费精品视频在线观看 | 99热这里有| 小草av在线播放 | 精品视频在线观看 | 一级理论片在线观看 | 9i看片成人免费看片 | 午夜影院先 | 久久综合五月天婷婷伊人 | 六月婷色 | 青青河边草免费视频 | 五月天天天操 | 亚洲国产中文字幕在线 | 国产1区2| 2019精品手机国产品在线 | 三上悠亚在线免费 | 日韩在线电影 | 久久成人高清视频 | 中文字幕 国产 一区 | 欧美在线视频日韩 | 亚洲婷婷网 | 久久久国产精华液 | 国产精品久久久久三级 | 久久久久久久久久久久国产精品 | 日韩免费电影一区二区 | 国产免费影院 | 91成人精品一区在线播放 | 91夫妻视频| 色吧久久 | 天天干天天干 | 久久久久久综合 | 福利视频入口 | 粉嫩aⅴ一区二区三区 | 天天干天天色2020 | 97理论片 | 午夜国产一区二区 | 精品国产一区二区三区噜噜噜 | 亚洲年轻女教师毛茸茸 | 日韩三级在线 | 国产亚洲欧美精品久久久久久 | 国产成人一区二区三区在线观看 | 一区二区三区免费播放 | 精精国产xxxx视频在线播放 | www.久久色 | 激情综合网五月激情 | 91免费试看 | 色婷婷88av视频一二三区 | 日精品 | 在线免费观看亚洲视频 | 久久蜜臀一区二区三区av | 天天综合日日夜夜 | 亚洲国产精品女人久久久 | 欧美99久久 | 天天干,天天射,天天操,天天摸 | 91av在线免费 | 99在线精品免费视频九九视 | 91麻豆精品国产91久久久久 | 国产精品高潮呻吟久久av无 | 在线国产一区二区 | 91在线精品视频 | 免费v片 | 日本久久中文字幕 | 国产免费久久精品 | 久久久国产网站 | 国产伦精品一区二区三区照片91 | 日韩av高潮| 免费一级片观看 | 丁香婷婷基地 | www久久九| 99精品在这里 | 色婷婷在线播放 | 日韩三级不卡 | 美女网色| 国产人成精品一区二区三 | 日日夜夜天天干 | 91尤物在线播放 | 九色视频自拍 | 亚洲91在线 | 亚洲开心色 | 日韩精品视频免费专区在线播放 | 91在线视频免费播放 | 日本性生活一级片 | 狠狠狠狠狠狠狠狠 | 免费aa大片| 久草视频免费在线观看 | 国产成人一区二区啪在线观看 | 亚洲精品国产精品乱码在线观看 | 激情久久久久久久久久久久久久久久 | 亚洲国产精品99久久久久久久久 | 国产精品日韩久久久久 | 51精品国自产在线 | 黄色一级大片在线免费看国产一 | 热久久影视 | 欧美成人亚洲成人 | 午夜精品久久久久久久99婷婷 | 91精品视频免费看 | 亚洲免费在线视频 | 91丨九色丨高潮丰满 | 77国产精品 | 91精品在线免费视频 | 青青久视频 | 九九视频在线播放 | 又色又爽又激情的59视频 | 日日久视频 | 免费黄在线观看 | 色婷婷成人网 | 成人综合免费 | 精品超碰 | 成人精品福利 | 久久久久久国产一区二区三区 | 免费网址在线播放 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 日韩在线免费小视频 | 91亚洲精品久久久久图片蜜桃 | 久久久久黄 | 97视频在线观看成人 | 综合天天| 娇妻呻吟一区二区三区 | 国产黄色一级片在线 | 久久高清国产视频 | 亚洲综合一区二区精品导航 | 在线国产不卡 | 欧美a性 | 亚洲天堂自拍视频 | 国产日韩精品一区二区 | 国产专区第一页 | 免费看污网站 | 日本中文字幕网址 | 久久综合五月婷婷 | 欧美日韩免费在线观看视频 | 日韩中文在线电影 | 免费观看版 | 成人影片在线免费观看 | 国产精品久久99 | 国产网站在线免费观看 | 超碰97中文| 91成人天堂久久成人 | 最新久久久 | www.夜夜操.com| 六月色 | 夜夜躁日日躁狠狠久久88av | av电影中文字幕在线观看 | 亚洲成人免费在线 | 欧美另类一二三四区 | 国产精品久久久久一区二区 | 久久www免费人成看片高清 | 一本大道久久精品懂色aⅴ 五月婷社区 | 亚洲国产精品成人va在线观看 | 狠狠躁夜夜av | 久久av一区二区三区亚洲 | 中文字幕一区二区三区在线视频 | 日本中文字幕在线看 | av成人资源 | 五月婷婷另类国产 | 久草在线中文888 | 中文字幕一区二区三区乱码在线 | 久久亚洲综合国产精品99麻豆的功能介绍 | 日韩在线中文字幕 | 黄色在线免费观看网址 | 久久伊人爱 | 色五婷婷 | 伊人春色电影网 | 伊人久久国产精品 | 9999在线| 国产精品久久久久久久久久久不卡 | 国产老太婆免费交性大片 | 欧美福利网站 | 中文字幕色网站 | 久久精品电影 | 日韩av免费一区 | 亚洲免费永久精品国产 | 色吊丝在线永久观看最新版本 | 国产精品美女久久久免费 | av电影一区二区三区 | 国产99久久| 中文字幕色在线 | 在线观看黄色的网站 | 久久婷婷色综合 | 日黄网站 | 亚洲另类在线视频 | 亚洲黄在线观看 | 在线黄色国产 | 91香蕉视频色版 | 久久久久久免费毛片精品 | 日本黄色免费在线 | 亚洲精品在线一区二区 | 综合色站导航 | 欧美a在线免费观看 | 天天草天天插 | a视频在线观看 | 日韩丝袜视频 | 最近中文字幕久久 | 日韩视频免费 | 一区二区精品在线 | 欧美大码xxxx| 超黄视频网站 | 国产日产精品一区二区三区四区 | 日韩xxxbbb | 在线欧美中文字幕 | 国产亚洲视频中文字幕视频 | 久久手机视频 | 日韩资源在线播放 | 亚洲欧洲在线视频 | 国产成人精品久久 | 成人动漫一区二区 | 91视频com| 日韩综合一区二区三区 | 国产日韩欧美在线观看 | 国产精品一区二区电影 | 中文在线字幕免 | 亚洲国产日韩在线 | av片无限看| 日本精油按摩3 | 97超碰人人澡人人爱学生 | 亚洲电影久久久 | 成人在线免费av | 日韩精品中文字幕有码 | 中文字幕精品久久 | 中文字幕成人一区 | 97福利视频 | 国产做a爱一级久久 | 国产99久久久国产 | 亚洲国产wwwccc36天堂 | 五月婷婷激情六月 | 国产精品毛片一区视频 | 五月天六月婷婷 | 99久久99精品 | 国产精品亚洲片在线播放 | 成人一区二区在线 | 三级黄色网络 | 91成年人在线观看 | 国产原创av片 | 在线国产视频一区 | 午夜视频99 | 欧美日韩国产在线观看 | 欧美激情视频三区 | 一区二区三区视频网站 | 欧美一区二区三区免费看 | 女人魂免费观看 | 亚洲精品动漫久久久久 | 九九99视频 | 久久精品国产亚洲 | 99久久精| 免费在线观看国产黄 | 亚洲精选在线 | 又黄又刺激视频 | 97电影网手机版 | 国产精品成人国产乱 | 91成人精品视频 | 香蕉视频久久 | 一区二区免费不卡在线 | 97超碰精品 | 欧美日韩视频在线一区 | 中文国产字幕在线观看 | 中文字幕精 | 五月婷婷激情网 | 国产一区二区精品久久 | 国产精品手机在线观看 | 麻豆视频免费版 | 久久字幕网 | 亚洲第一成网站 | 国产精品理论在线观看 | 伊人久在线| 天天视频色版 | 中文字幕av免费 | 九九精品视频在线观看 | www.97视频 | 一级特黄aaa大片在线观看 | 国产在线视频不卡 | 色婷婷国产精品 | 中文字幕文字幕一区二区 | 色综合久久精品 | a电影在线观看 | 欧美一级片在线播放 | 久久免费视频5 | 青青河边草观看完整版高清 | 激情图片区 | 久久深爱网 | 摸bbb搡bbb搡bbbb | 色偷偷88888欧美精品久久 | 中文字幕第一页在线播放 | 亚洲经典视频在线观看 | 日本大片免费观看在线 | 69国产在线观看 | 一区二区成人国产精品 | 日本在线观看中文字幕无线观看 | 久草视频2| 亚洲精品小区久久久久久 | 国产精品视频地址 | 久久久亚洲国产精品麻豆综合天堂 | 麻豆 91 在线 | 91av播放| 久久久久97国产 | 又黄又爽又无遮挡免费的网站 | 密桃av在线 | 不卡中文字幕在线 | 美女在线观看网站 | 国产精品久久三 | 国产精品久久久久9999吃药 | 人人玩人人添人人澡超碰 | 青青河边草手机免费 | 夜夜高潮夜夜爽国产伦精品 | av女优中文字幕在线观看 | 久久久国产精品电影 | 综合色中文 | 91社区国产高清 | 中文不卡视频在线 | 一级a毛片高清视频 | 日韩电影精品 | 91福利影院在线观看 | 狠狠躁天天躁综合网 | 在线v | 亚洲三级在线 | 午夜久久久影院 | 亚洲一区二区三区四区精品 | 亚洲四虎影院 | 国产精品国产三级国产 | 国产99精品在线观看 | 亚洲精品午夜aaa久久久 | 日韩欧美高清不卡 | 中文字幕视频一区 | 在线看片日韩 | 亚州精品在线视频 | 国产人成精品一区二区三 | 91一区二区三区久久久久国产乱 | 精品久久免费 | 久久久久久久久久影院 | 在线观看一二三区 | 天天躁天天躁天天躁婷 | 免费在线观看成人 | av在线com| 成人一区影院 | 国产高清久久久久 | 色偷偷97| 日韩1级片 | 国产丝袜 | 人人看看人人 | 99r在线| 久久婷婷国产色一区二区三区 | 亚洲天天看 | 中文字幕资源在线观看 | 久久国产综合视频 | 久久久国产高清 | 亚洲精品久久视频 | 国产剧情一区二区 | 天天射天天干天天插 | 人人澡人| 久久久久久久久久国产精品 | 99在线播放 | 少妇精品久久久一区二区免费 | 国产一级在线视频 | 亚洲精品777| 亚洲高清视频在线观看 | 一区二区三区国产欧美 | 99视频在线观看视频 | 国产精品毛片完整版 | 日韩av一区二区在线播放 | 人人草人人草 | 国产黄色观看 | 天天噜天天色 | 中文字幕丝袜制服 | 国产一区影院 | 免费h精品视频在线播放 | 一区免费观看 | 黄色福利视频网站 | 欧美日韩不卡一区 | 婷婷资源站 | 香蕉精品在线观看 | 精品成人国产 | 久久久久免费看 | 青青河边草免费观看完整版高清 | 国产资源在线免费观看 | 在线小视频 | 午夜av激情 | 国产打女人屁股调教97 | 亚洲一级电影 | 手机av片| 亚洲精品99久久久久中文字幕 | 久久精品xxx| 久久综合五月天婷婷伊人 | 免费在线观看黄网站 | 六月色丁| 国产精品黄色影片导航在线观看 | 91视频91色| 天天干人人干 | 女人久久久久 | 久久99精品波多结衣一区 | 久久久影院一区二区三区 | 久草在线久草在线2 | 国产拍揄自揄精品视频麻豆 | 精品久久久久久一区二区里番 | 91亚色免费视频 | 日韩av快播电影网 | 色综合天天视频在线观看 | 一区二区在线不卡 | 亚洲在线视频网站 | 国产视频久 | 亚洲最新av在线网站 | 91最新中文字幕 | 999国产 | 在线免费av网 | sesese图片| 玖玖在线免费视频 | 美女久久久久久久久久 | 在线观看精品一区 | 精品少妇一区二区三区在线 | 亚洲精品 在线视频 | 亚洲人在线7777777精品 | av片子在线观看 | 一区二区不卡在线观看 | 人人添人人| 草草草影院 | 午夜国产福利在线 | 国产在线色站 | 国产日韩欧美在线影视 | 亚洲伦理一区 | 精品久久免费 | 日韩精品三区四区 | 香蕉影视| 亚洲资源一区 | 国产成人精品国内自产拍免费看 | 91秒拍国产福利一区 | 久久国产精品99精国产 | 久久与婷婷 | 久久免费在线 | 国产一区二区不卡在线 | 九九热视频在线免费观看 | 久久精品之 | 在线观看韩日电影免费 | 亚洲第一伊人 | 国产一区二区观看 | 国产精品午夜av | 国产一区二区在线免费 | 天天摸天天操天天爽 | 国产视频久 | 国产一级片一区二区三区 | 国产九色视频在线观看 | 四虎国产精品免费观看视频优播 | 在线免费观看国产 | 爱射综合 | 亚洲国产中文字幕 | 国产五月婷婷 | 中文字幕亚洲欧美日韩 | 一级黄色毛片 | 精品人妖videos欧美人妖 | 99久久精品国产免费看不卡 | 欧美日韩国产色综合一二三四 | www.黄色小说.com | 天天草天天干天天射 | 日本免费一二三区 | 免费看黄20分钟 | 国产在线播放一区 | 亚洲 欧美 日韩 综合 | 欧美综合色在线图区 | 日韩精品一区二区三区三炮视频 | 欧美精品久久久久 | 中文字幕av电影下载 | 免费的黄色av | 在线免费黄色 | 免费av网站观看 | 黄色av大片 | 五月天婷婷视频 | 黄色高清视频在线观看 | 免费在线观看不卡av | 国产精品门事件 | 欧美疯狂性受xxxxx另类 | 91视频这里只有精品 | 国产成人精品午夜在线播放 | 欧美日一级片 | 日韩在线免费播放 | 国产不卡在线 | 丁香在线观看完整电影视频 | 国产精品99久久久久的智能播放 | 国产精品久久麻豆 | 日本mv大片欧洲mv大片 | 天天天天综合 | 96亚洲精品久久久蜜桃 | 欧美亚洲精品一区 | 午夜精品久久久99热福利 | 久久好看免费视频 | 国产一区视频在线播放 | 91自拍视频在线观看 | 日日弄天天弄美女bbbb | 日本视频久久久 | 69国产盗摄一区二区三区五区 | 国产精品专区一 | 成人av网页 | 毛片网在线播放 | 国产高清 不卡 | 免费的国产精品 | 91在线免费公开视频 | 免费网站黄| 久久夜视频 | 欧美一级小视频 | 国产成人av一区二区三区在线观看 | 色五月情| 亚洲伊人色 | 超碰在线天天 | 久久草草热国产精品直播 | 久久九九影院 | 国产精品视频内 | 人人超碰人人 | 美女露久久 | 精品视频中文字幕 | 99re在线视频观看 | 在线精品视频免费播放 | 久久久九九 | 天天干夜夜夜操天 | 丁香六月综合网 | 丁香婷婷色综合亚洲电影 | 伊人伊成久久人综合网站 | www.久久免费 | 国产精品一区二区久久久 | 亚洲天天在线 | 久久露脸国产精品 | 亚洲精品乱码久久久久久久久久 | 久久高清 | 四虎影视av| 亚洲精品视频二区 | 日韩精品一区二区三区免费视频观看 | 97精品国产97久久久久久免费 | 美女精品在线 | 中文字幕精 | 久久久久久久久久久精 | www黄色| 人人爽久久涩噜噜噜网站 | 日韩欧美高清免费 | 国产一区二区三区久久久 | 精品96久久久久久中文字幕无 | 永久免费看av| 91超级碰碰 | 美女精品久久 | 国产精品久久久久影视 | 日本护士三级少妇三级999 | 狠狠狠狠狠操 | 久久在视频 | 国产黄色免费在线观看 | 精品在线二区 | 亚洲精品国产综合99久久夜夜嗨 | 久久国产精品免费一区 | 亚洲第一色 | zzijzzij亚洲成熟少妇 | av激情五月 | 永久免费在线 | 亚洲最新av网站 | 丁香五月网久久综合 | 婷婷色视频 | av直接看| 亚洲精品国产第一综合99久久 | 国语精品久久 | 亚洲午夜av电影 | 婷婷网五月天 | 精品国产福利在线 | 97理论电影 | 成人国产精品入口 | 日日夜夜操av | 国产1区2区 | 午夜视频一区二区三区 | 久热爱 | 国产精品久久久久久欧美 | 色婷婷激婷婷情综天天 | 天天拍天天草 | avav99| 伊人天堂网 | 91精品国产一区二区三区 | 午夜国产一区二区三区四区 | 91粉色视频 | 国产精品热视频 | 97免费中文视频在线观看 | 五月天狠狠操 | 黄色av免费电影 | 国产精品自在线拍国产 | 在线亚洲小视频 | 久久激情视频 久久 | 天堂va欧美va亚洲va老司机 | 91丨九色丨国产丨porny精品 | 亚洲视频h| 欧美日韩一区二区三区在线观看视频 | 免费观看成人 | 国产精品久久久久一区二区 | 成人亚洲综合 | 久草在线视频免赞 | 天天射天天 | 欧美激情h | 国产在线999 | 婷婷丁香六月 | 日韩四虎| 久久美女视频 | 免费高清男女打扑克视频 | 国产xxxxx在线观看 | 欧美日韩国产色综合一二三四 | 久久久国产精华液 | 亚洲黄色在线 | 在线免费视频a | 国产精品国产三级国产不产一地 | 免费看av片网站 | 国产小视频免费在线网址 | 精品一区精品二区高清 | 日韩在线视频线视频免费网站 | 欧美一级裸体视频 | 国内精品久久久久影院日本资源 |