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

用ChatGPT逆向工程壓縮后的Js代碼,表現驚艷 精華

發布于 2024-8-30 12:03
瀏覽
0收藏

互聯網世界里,每個開發者都有這么一個瞬間:你遇到一個炫酷的小組件,想知道它是怎么實現的,但源碼卻是最小化的,看起來全是亂碼。這時,你會怎么做?今天,Frank Fiegel要和大家分享一個非常時髦和實用的方法——用ChatGPT來逆向工程被壓縮的JavaScript代碼。

發現炫酷組件

在某個閑暇的夜晚,我無意間瀏覽到了一個網站,發現了一個非常有趣的組件(https://reactive.network/hackathon)。它展示了一個以ASCII藝術形式呈現的動態動畫,著實是令人眼前一亮。

用ChatGPT逆向工程壓縮后的Js代碼,表現驚艷-AI.x社區

動態效果

出于好奇,我決定深入研究它的實現。但當我打開源碼時,發現這些代碼被壓縮和最小化了,看起來十分費解。

const { floor: ra, abs: KE, min: QE } = Math,
    O5 = ["reactive.network REACTIVE.NETWORK", "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,^`'. .:a–‘a–’a–“a–?"],
    G7 = Date.now() % 3 ? O5[1] : O5[0],
    V5 = G7.length,
    JE = { fps: 60 };
function eT(e, t, n, r) {
    const i = t.time * 8e-5,
        s = QE(t.cols, t.rows),
        o = t.metrics.aspect * 0.2,
        l = { x: ((4 * (e.x - t.cols / 6.25)) / s) * o, y: (5 * (e.y - t.rows / 4)) / s },
        u = ra(KE(YE(l) - i) * V5 + (ra(e.x / 1) % 2) * 2) % V5;
    return G7[u];
}
const tT = () => {
    const e = j.useRef(null),
        [t, n] = j.useState({ height: null, width: null });
    return (
        j.useEffect(() => {
            function r() {
                n({ height: window.innerHeight, width: window.innerWidth });
            }
            if (typeof window < "u") return n({ height: window.innerHeight, width: window.innerWidth }), window.addEventListener("resize", r), () => window.removeEventListener("resize", r);
        }, []),
        j.useEffect(() => {
            const r = e.current;
            if (!r) return;
            const i = 12,
                s = ra(t.width / i) * 1.6,
                o = ra(t.height / i),
                l = { aspect: s / o },
                u = setInterval(() => {
                    let c = "";
                    for (let d = 0; d < o; d++) {
                        for (let f = 0; f < s; f++) c += eT({ x: f, y: d }, { cols: s, rows: o, metrics: l, time: Date.now() });
                        c += `
`;
                    }
                    r.textContent = c;
                }, 1e3 / JE.fps);
            return () => clearInterval(u);
        }, [t]),
        a.jsx("div", { style: { position: "absolute", top: 0, left: 0, width: "100%", height: "100%" }, children: a.jsx("div", { ref: e, style: { width: "100%", height: "100%", whiteSpace: "pre", overflow: "hidden" } }) })
    );
};
function nT(e) {
    return Math.cos(e.x * e.x - e.y * e.y);
}
const { floor: ia, abs: rT, min: iT } = Math,
    D5 = ["reactive.network REACTIVE.NETWORK", "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,^`'. .:a–‘a–’a–“a–?"],
    X7 = Date.now() % 3 ? D5[1] : D5[0],
    F5 = X7.length,
    sT = { fps: 60 };
function oT(e, t, n, r) {
    const i = t.time * 8e-5,
        s = iT(t.cols, t.rows),
        o = t.metrics.aspect * 0.2,
        l = { x: ((4 * (e.x - t.cols / 6.25)) / s) * o, y: (5 * (e.y - t.rows / 4)) / s },
        u = ia(rT(nT(l) - i) * F5 + (ia(e.x / 1) % 2) * 2) % F5;
    return X7[u];
}
const aT = () => {
    const e = j.useRef(null),
        [t, n] = j.useState({ height: null, width: null });
    return (
        j.useEffect(() => {
            function r() {
                n({ height: window.innerHeight, width: window.innerWidth });
            }
            if (typeof window < "u") return n({ height: window.innerHeight, width: window.innerWidth }), window.addEventListener("resize", r), () => window.removeEventListener("resize", r);
        }, []),
        j.useEffect(() => {
            const r = e.current;
            if (!r) return;
            const i = 12,
                s = ia(t.width / i) * 1.6,
                o = ia(t.height / i),
                l = { aspect: s / o },
                u = setInterval(() => {
                    let c = "";
                    for (let d = 0; d < o; d++) {
                        for (let f = 0; f < s; f++) c += oT({ x: f, y: d }, { cols: s, rows: o, metrics: l, time: Date.now() });
                        c += `
`;
                    }
                    r.textContent = c;
                }, 1e3 / sT.fps);
            return () => clearInterval(u);
        }, [t]),
        a.jsx("div", { style: { position: "absolute", top: 0, left: 0, width: "100%", height: "100%" }, children: a.jsx("div", { ref: e, style: { width: "100%", height: "100%", whiteSpace: "pre", overflow: "hidden" } }) })
    );
},

使用ChatGPT逆向工程

通常情況下,我會耐心地閱讀這些亂成一團的代碼,嘗試理解其實現原理,或者找一個.map文件來還原原本的代碼。然而,這次我想到了一個新奇的辦法:為什么不讓ChatGPT幫我解讀這些代碼呢?

于是,我將以上代碼復制并詢問ChatGPT:“能解釋一下這段代碼嗎?”以下是它的回復:

概覽

代碼定義了幾個函數和組件,特別是用于React應用的。它主要處理生成一些動態文本內容,可能是ASCII藝術或者使用預定義字符集的某些視覺效果。此外,它還包括事件處理、性能計時和HTML內容轉換的實用工具函數。

核心組件和函數

  1. 字符集選擇:

const { floor: ra, abs: KE, min: QE } = Math;
const O5 = ["reactive.network REACTIVE.NETWORK", "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,^`'. .:a–‘a–’a–“a–?"];
const G7 = Date.now() % 3 ? O5[1] : O5[0];
const V5 = G7.length;

這部分代碼引入了一些常用的數學函數,并定義了兩個字符集。基于當前的時間戳(Date.now() % 3),選擇其中一個字符集使用,并計算其長度。

  1. 動態字符選擇函數:

function eT(e, t, n, r) {
 const i = t.time * 8e-5;
 const s = QE(t.cols, t.rows);
 const o = t.metrics.aspect * 0.2;
 const l = { x: ((4 * (e.x - t.cols / 6.25)) / s) * o, y: (5 * (e.y - t.rows / 4)) / s };
 const u = ra(KE(YE(l) - i) * V5 + (ra(e.x / 1) % 2) * 2) % V5;
 return G7[u];
 }

eT函數根據輸入位置和當前時間生成字符。調整位置后,基于時間和位置選擇一個字符。

  1. React組件用于顯示動態內容:

const tT = () => {
    const e = j.useRef(null);
    const [t, n] = j.useState({ height: null, width: null });
    j.useEffect(() => {
        function r() {
            n({ height: window.innerHeight, width: window.innerWidth });
        }
        if (typeof window < "u") {
            n({ height: window.innerHeight, width: window.innerWidth });
            window.addEventListener("resize", r);
            return () => window.removeEventListener("resize", r);
        }
    }, []);

    j.useEffect(() => {
        const r = e.current;
        if (!r) return;
        const i = 12;
        const s = ra(t.width / i) * 1.6;
        const o = ra(t.height / i);
        const l = { aspect: s / o };
        const u = setInterval(() => {
            let c = "";
            for (let d = 0; d < o; d++) {
                for (let f = 0; f < s; f++) c += eT({ x: f, y: d },                     { cols: s, rows: o, metrics: l, time: Date.now()         });
                c += `
                    `;
            }
            r.textContent = c;
        }, 1e3 / JE.fps);
        return () => clearInterval(u);
    }, [t]);

        return a.jsx("div", { style: { position: "absolute", top: 0,       lef  t: 0, width: "100%", height: "100%" }, children: a.jsx("d      iv", { ref: e, style: { width: "100%", height: "100%", whiteSpa      ce: "pre", overflow: "hidden" } }) });
      };

這是一個React組件,設置一個間隔以定期更新div?元素的內容。它根據窗口大小計算列和行數,然后用動態生成的字符填充div。

將代碼轉換為TypeScript并變得可讀

我進一步要求ChatGPT將其中的代碼轉換為TypeScript,并使其更加可讀。以下是它的回復:

import React, { useEffect, useRef, useState } from 'react';

const selectedCharacterSet =
  "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,^`'. .:a–‘a–’a–“a–?";
const characterSetLength = selectedCharacterSet.length;

const calculateCharacter = (
  x: number,
  y: number,
  cols: number,
  rows: number,
  aspect: number,
  time: number,
): string => {
  const timeFactor = time * 0.000_08;
  const size = Math.min(cols, rows);
  const aspectRatio = aspect * 0.2;
  const position = {
    x: ((4 * (x - cols / 6.25)) / size) * aspectRatio,
    y: (5 * (y - rows / 4)) / size,
  };

  const index =
    Math.floor(
      Math.abs(
        Math.cos(position.x * position.x - position.y * position.y) -
          timeFactor,
      ) *
        characterSetLength +
        (Math.floor(x) % 2) * 2,
    ) % characterSetLength;
  return selectedCharacterSet[index];
};

type Size = {
  height: null | number;
  width: null | number;
};

const AsciiArtGenerator: React.FC = () => {
  const textRef = useRef<HTMLDivElement>(null);
  const [size, setSize] = useState<Size>({ height: null, width: null });

  useEffect(() => {
    const handleResize = () => {
      setSize({ height: window.innerHeight, width: window.innerWidth });
    };

    // Initial size setting
    handleResize();

    window.addEventListener('resize', handleResize);
    return () => {
      window.removeEventListener('resize', handleResize);
    };
  }, []);

  useEffect(() => {
    const element = textRef.current;
    if (!element || !size.width || !size.height) return undefined;

    const cols = Math.floor(size.width / 12) * 1.6;
    const rows = Math.floor(size.height / 12);
    const aspectRatio = cols / rows;

    const intervalId = setInterval(() => {
      let content = '';

      for (let y = 0; y < rows; y++) {
        for (let x = 0; x < cols; x++) {
          content += calculateCharacter(
            x,
            y,
            cols,
            rows,
            aspectRatio,
            Date.now(),
          );
        }

        content += '\n';
      }

      element.textContent = content;
    }, 1_000 / 60); // 60 fps

    return () => {
      clearInterval(intervalId);
    };
  }, [size]);

  return (
    <div
      ref={textRef}
      style={{
        height: '100%',
        overflow: 'hidden',
        whiteSpace: 'pre',
        width: '100%',
      }}
    />
  );
};

export default () => {
  return <AsciiArtGenerator />;
};

當我將ChatGPT生成的代碼與原始組件進行比較時,我發現輸出幾乎是完全一致的。雖然最初我認為LLM在復制代碼時忽略了一些實現細節,但進一步調查發現,問題很可能是字符編碼錯誤。還原正確字符后,輸出是完全一致的。

筆者嘗試使用當紅辣子雞Cursor來復現這一過程,看看是否能夠完成這一工作。以下是cursor生成的代碼,大家看chatGPT和Cursor Claude 3.5誰更勝一籌:

import React, { useRef, useState, useEffect } from 'react';

const ASCII_CHARS = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,^`'. .:■■□□";
const TEXT = "reactive.network REACTIVE.NETWORK";
const CHAR_SET = Math.random() < 0.67 ? ASCII_CHARS : TEXT;
const CHAR_LENGTH = CHAR_SET.length;
const FPS = 60;

function calculateChar(x, y, cols, rows, aspect, time) {
const scale = Math.min(cols, rows);
const adjustedX = ((4 * (x - cols / 6.25)) / scale) * aspect * 0.2;
const adjustedY = (5 * (y - rows / 4)) / scale;
const value = Math.cos(adjustedX * adjustedX - adjustedY * adjustedY);
const index = Math.floor(Math.abs(value - time * 8e-5) * CHAR_LENGTH + (Math.floor(x) % 2) * 2) % CHAR_LENGTH;
return CHAR_SET[index];
}

const AsciiAnimation = () => {
const containerRef = useRef(null);
const [dimensions, setDimensions] = useState({ height: null, width: null });

useEffect(() => {
  const updateDimensions = () => {
    setDimensions({ height: window.innerHeight, width: window.innerWidth });
  };

  if (typeof window !== 'undefined') {
    updateDimensions();
    window.addEventListener('resize', updateDimensions);
    return () => window.removeEventListener('resize', updateDimensions);
  }
}, []);

useEffect(() => {
  const container = containerRef.current;
  if (!container) return;

  const cellSize = 12;
  const cols = Math.floor(dimensions.width / cellSize) * 1.6;
  const rows = Math.floor(dimensions.height / cellSize);
  const aspect = cols / rows;

  const animationInterval = setInterval(() => {
    let frame = '';
    for (let y = 0; y < rows; y++) {
      for (let x = 0; x < cols; x++) {
        frame += calculateChar(x, y, cols, rows, aspect, Date.now());
      }
      frame += '\n';
    }
    container.textContent = frame;
  }, 1000 / FPS);

  return () => clearInterval(animationInterval);
}, [dimensions]);

return (
  <div style={{ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%' }}>
    <div ref={containerRef} style={{ width: '100%', height: '100%', whiteSpace: 'pre', overflow: 'hidden' }} />
  </div>
);
};

export default AsciiAnimation;

最后,不得不承認,LLM正變得越來越強大,它不僅能夠進行復雜的代碼解釋,還能幫你逆向實現一些非常實用的功能。可以預見未來還會有更多用途被挖掘出來,大家拭目以待。

參考:https://glama.ai/blog/2024-08-29-reverse-engineering-minified-code-using-openai

本文轉載自 ??AI工程化??,作者: ully

收藏
回復
舉報
回復
相關推薦
另类小说综合网| 欧美激情久久久久久| 91插插插插插插插插| 国产写真视频在线观看| 99久久精品情趣| 国产男女猛烈无遮挡91| 国产第100页| 欧美一区二区三区高清视频| 欧美一区二区视频免费观看| 成人在线免费在线观看| 久久日韩视频| 久久人人爽爽爽人久久久| 91色中文字幕| 亚洲av无码不卡| 欧美日韩国产色综合一二三四| 精品丝袜一区二区三区| 日韩精品xxx| 日本在线视频一区二区| 亚洲成人免费视| 中文字幕久精品免| 欧洲综合视频| 成人精品视频一区二区三区尤物| 国产精品久久久久久久久| 日本系列第一页| 亚洲无中文字幕| 中文字幕亚洲情99在线| 无码人妻精品一区二区三区温州| 一区二区在线免费播放| 欧美精品第1页| 老头吃奶性行交视频| 69av成人| 午夜视频一区二区| 欧美日韩激情四射| 国产剧情在线| 国产欧美日韩亚州综合| 精品欧美一区二区久久久伦| 亚洲av无码乱码国产精品久久| 奇米777欧美一区二区| 777国产偷窥盗摄精品视频| 国产大学生自拍| 国产精品久久久久久久免费观看| 国产亚洲美女精品久久久| www.88av| 精品女人视频| 亚洲精品v天堂中文字幕| 国产人妻精品久久久久野外| 国产精品视频一区视频二区| 51精品秘密在线观看| 99热这里只有精品在线播放| 丝袜美腿诱惑一区二区三区| 欧美视频在线观看免费| 国产亚洲综合视频| 午夜欧美激情| 欧美性videos高清精品| 北条麻妃在线观看| 日本免费久久| 欧美性xxxxxx少妇| 九色porny自拍| 欧美亚洲黄色| 91精品国产色综合久久久蜜香臀| 日韩av一卡二卡三卡| 91精品视频一区二区| 欧美一区二区三区在线| 国产成人av免费观看| 超碰97成人| 亚洲成成品网站| 国产精品jizz| 第一社区sis001原创亚洲| 中文字幕亚洲一区在线观看 | 波多野结衣三级在线| 韩国中文字幕在线| 亚洲一区二区在线播放相泽| 无码人妻精品一区二区蜜桃网站| h片在线观看| 欧美午夜美女看片| 在线观看免费视频高清游戏推荐| av在线播放一区二区| 精品粉嫩aⅴ一区二区三区四区| 亚洲中文字幕无码av| 国产一区二区在线| 久久久精品免费| 日韩欧美不卡视频| 免费精品视频在线| 99久热re在线精品996热视频| 欧美特级特黄aaaaaa在线看| 久久综合九色综合97婷婷| 亚洲综合第一| а√天堂中文资源在线bt| 91黄视频在线观看| 97超碰免费在线观看| 日韩超碰人人爽人人做人人添| 一区国产精品视频| 久久一二三四区| 男人的j进女人的j一区| 97人人模人人爽人人少妇| 韩国中文字幕2020精品| 亚洲欧美日韩国产成人精品影院| 国产精品333| 国产精品久久久久久久久久久久久久久 | 久久综合一区二区| 亚洲成人动漫在线| 国产精品高清乱码在线观看| 日韩网站在线看片你懂的| a天堂中文字幕| 国内视频精品| 国产日韩欧美在线| 亚洲av成人无码网天堂| 1000部国产精品成人观看| 欧美 日韩精品| baoyu135国产精品免费| 久久精品成人欧美大片古装| 日本三级小视频| 国产成人午夜视频| 中文字幕一区二区三区乱码 | 国产在线超碰| 婷婷久久综合九色国产成人| 奇米777在线| 99精品在线观看| 国产成人中文字幕| 特级丰满少妇一级aaaa爱毛片| 亚洲欧美一区二区三区国产精品| 黄色一级大片在线观看| 国产成人在线中文字幕| 欧美第一黄色网| 国产男女裸体做爰爽爽| 中文字幕不卡在线观看| 男女av免费观看| 午夜先锋成人动漫在线| 久久人人爽人人| 亚洲产国偷v产偷v自拍涩爱| 日韩毛片一二三区| 色啦啦av综合| 99视频精品全国免费| 国产精品黄视频| 你懂的视频在线播放| 欧美日韩另类字幕中文| 日本一级大毛片a一| 中文在线日韩| 国产一区视频在线播放| www在线播放| 欧美性猛交xxxxxxxx| b站大片免费直播| 首页综合国产亚洲丝袜| 麻豆成人在线播放| 中文字幕在线视频网站| 日韩精品久久久久久久玫瑰园 | 亚洲理论在线| 韩国成人av| 色一区二区三区| 亚洲欧美制服综合另类| 无码人妻丰满熟妇奶水区码| 久久久国产综合精品女国产盗摄| 国产精品欧美激情在线观看| 国产不卡一二三区| 国产精品欧美日韩一区二区| 天堂地址在线www| 69堂成人精品免费视频| 久久久久亚洲av成人片| av亚洲精华国产精华精华| 中国丰满人妻videoshd| 欧美精选视频在线观看| 国产又爽又黄的激情精品视频| 黄网页免费在线观看| 日韩一区二区免费高清| 国产大片中文字幕| 久久精品人人做人人爽97| 亚洲污视频在线观看| 重囗味另类老妇506070| 国产免费一区二区| 一区在线影院| 米奇精品一区二区三区在线观看| 肥臀熟女一区二区三区| 岛国视频午夜一区免费在线观看| 四虎国产精品成人免费入口| 蜜臀av在线播放一区二区三区| 视色,视色影院,视色影库,视色网| 国产精品对白久久久久粗| 日本精品久久久久久久| 久久久久久久久免费视频| 欧美tickling挠脚心丨vk| 亚洲天堂男人av| 亚洲欧美日韩电影| 美女久久久久久久久久| 国内久久婷婷综合| 777久久久精品一区二区三区| 日韩精品永久网址| 超碰97在线人人| 小黄鸭精品aⅴ导航网站入口| 精品国模在线视频| 香蕉视频黄在线观看| 欧美麻豆精品久久久久久| 国产一级视频在线播放| 中文字幕第一区二区| 在线播放av网址| 奇米亚洲午夜久久精品| 免费观看国产精品视频| 久久精品国产www456c0m| 精品无人区一区二区三区| 亚洲欧洲日韩精品在线| 欧美孕妇孕交黑巨大网站| 91麻豆国产福利在线观看宅福利| 亚洲剧情一区二区| 亚洲精品成av人片天堂无码| 91福利精品第一导航| 国产精品suv一区二区| 国产精品久久久久三级| 泷泽萝拉在线播放| 国产成人午夜精品影院观看视频 | 国产成人av在线影院| 亚洲五月天综合| 激情国产一区| 日韩人妻一区二区三区蜜桃视频| 精品视频亚洲| 久久久com| 911精品国产| 91色精品视频在线| 青草综合视频| 国产成人免费av| 日本在线影院| 亚洲**2019国产| 免费男女羞羞的视频网站在线观看| 中文字幕九色91在线| 日韩三级电影网| 亚洲国语精品自产拍在线观看| 国产99久一区二区三区a片| 在线观看亚洲专区| 一二三区免费视频| 欧美色播在线播放| 亚洲国产综合久久| 一区二区三区av电影| 亚洲不卡在线播放| 国产精品电影院| 国产激情av在线| 国产日产欧美一区| 日韩一级av毛片| 久久婷婷色综合| 黄瓜视频污在线观看| 99热国产精品| 爱爱免费小视频| 久久亚洲精华国产精华液 | 亚洲精品小区久久久久久| 国产伦精品一区二区三区高清| 欧美日本三级| 999精品视频一区二区三区| 精品国产麻豆| 97在线中文字幕| 91在线一区| 国产精品一区二区免费看| 9l视频自拍蝌蚪9l视频成人| 国产精品对白一区二区三区| 欧美韩一区二区| 欧美日韩精品综合| 欧美视频免费| 99久久久无码国产精品性色戒| 欧美jizz| 国产911在线观看| 狠狠综合久久av一区二区老牛| 麻豆tv在线播放| 久久精品五月| 中文字幕第100页| 国产一区二区三区精品视频| 999久久久精品视频| 国产成人鲁色资源国产91色综| 丰满少妇xbxb毛片日本| 26uuu色噜噜精品一区| 日韩丰满少妇无码内射| 国产精品盗摄一区二区三区| 青青草偷拍视频| 精品久久久久人成 | 91精品国产免费久久综合| www.国产欧美| 亚洲精品国产成人| 在线激情小视频| 欧美激情在线视频二区| 高潮一区二区| 91中文字幕一区| 久久九九热re6这里有精品| 日韩影视精品| 欧美日韩国产在线一区| 日本www在线播放| 久久99国产精品久久| 国产a√精品区二区三区四区| 久久亚洲精华国产精华液 | 亚洲国产婷婷| 污色网站在线观看| 成人av在线一区二区三区| 免费看91的网站| 亚洲狠狠爱一区二区三区| 日韩美一区二区| 欧美va在线播放| 高清毛片在线看| 久久久久久九九九| 国模一区二区| 国产伦精品一区二区三区高清版| 精品日产免费二区日产免费二区| 久久久99精品视频| 蜜臀精品一区二区三区在线观看| jjzz黄色片| 最近日韩中文字幕| 无码人妻久久一区二区三区| 日韩视频在线你懂得| av影片免费在线观看| 97免费中文视频在线观看| 粉嫩一区二区三区在线观看| 欧美精品一区二区三区四区五区| 国产综合色产| 拔插拔插华人永久免费| 久久夜色精品国产噜噜av| 久久精品www人人爽人人| 欧美日韩免费一区二区三区视频 | 亚洲不卡在线| 致1999电视剧免费观看策驰影院| 久久成人免费| chinese麻豆新拍video| 亚洲综合在线观看视频| 91黄色在线视频| 欲色天天网综合久久| 欧美调教sm| 国产精品久久精品视| 91精品秘密在线观看| 性chinese极品按摩| 久久久99精品免费观看不卡| xxxxxx国产| 日韩欧美第一区| 国产鲁鲁视频在线观看特色| 国产精品一区二区三区毛片淫片 | 中文字幕无线精品亚洲乱码一区 | 国产精品免费区二区三区观看| 久久精品亚洲欧美日韩精品中文字幕| 午夜激情福利在线| 久久精品一区蜜桃臀影院| 国产精品美女久久久久av爽| 精品久久久久久久一区二区蜜臀| 最新黄网在线观看| 91黄在线观看| 综合久久亚洲| 午夜影院免费版| 亚洲女同一区二区| 国产伦一区二区| 久久97精品久久久久久久不卡| 亚洲资源在线| 警花观音坐莲激情销魂小说| 精品一二三四区| 久久国产精品国语对白| 在线观看91精品国产麻豆| 五月天精品在线| 欧美日韩一区二区三区在线| 成人在线二区| 国产一区深夜福利| 亚洲综合专区| 国产xxx在线观看| 亚洲成人精品在线观看| 日韩在线视频第一页| 91精品国产91久久久久| 亚洲小说图片| 高清av免费看| 亚洲人123区| 狠狠综合久久av一区二区| 韩国三级日本三级少妇99| 牛牛影视久久网| www.欧美日本| **欧美大码日韩| 二区三区在线视频| 浅井舞香一区二区| 成人中文视频| www.色就是色.com| 亚洲福中文字幕伊人影院| 天堂a√在线| 国产精品永久免费观看| 欧美成人有码| 成年人网站免费看| 欧美电影一区二区| 国产蜜臀av在线播放| 欧美日韩一区二区视频在线观看| 免费欧美日韩国产三级电影| 欧美黑吊大战白妞| 日韩成人中文字幕在线观看| 播放一区二区| www.亚洲成人网| 国产亚洲成年网址在线观看| 国产欧美综合视频| 欧美在线观看视频| 99久久综合狠狠综合久久aⅴ| 男人网站在线观看| 欧美日韩在线播| 草莓视频丝瓜在线观看丝瓜18| 日本一区二区在线| 国产成人免费av在线| 精品久久久久久久久久久久久久久久久久| 日韩中文在线不卡| 久久夜色精品国产噜噜av小说| 中文字幕第100页| 午夜电影网一区| 国产二区三区在线| 欧美日韩在线精品一区二区三区| 国产一区视频在线看| 91精品国产高清一区二区三密臀| 欧美伊人精品成人久久综合97| 国产精选第一页| 亚洲精品videossex少妇|