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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

深入理解计算机系统-bomblab详解

發(fā)布時間:2023/12/14 windows 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解计算机系统-bomblab详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • Phase 1
  • Phase 2
  • Phase 3
  • Phase 4
  • Phase 5
  • Phase 6
  • Secret Phase
  • 幾條野路子

下載實驗用的文件們戳這里
bomblab的背景很有趣。Dr. Evil把“二進制炸彈”裝在了教室的機子里。想要拆掉炸彈,你必須反編譯“炸彈”,通過其中的匯編指令推測出可以拆掉炸彈的phrase。
好啦,我們看一看下載的文件夾里都有什么。bomb就是要我們?nèi)ゲ鸬摹罢◤棥?#xff1b;bomb.c是炸彈的源代碼,但是最為關(guān)鍵的部分被刪掉了,只保留了骨架。gdbnotes-x86-64是個重要的文件,里面有這個實驗里用到的各種工具的使用方法。剩下的就是實驗的各種說明了~

Phase 1

我們來看一看phase_1的反匯編是什么樣子。一種方法是直接在終端里輸入"objdump -d bomb > bomb.txt", 直接把objdump的輸出重定向到bomb.txt里,之后就可以直接在記事本里面看反匯編了;或者,先在終端里輸入"gdb bomb", 進到gdb里面;再輸入"disas phase_1", 就能看到phase_1的反匯編了。我們這里用第一種方法,最終在記事本里看到的結(jié)果是下面這個樣子:

0000000000400ee0 <phase_1>:400ee0: 48 83 ec 08 sub $0x8,%rsp400ee4: be 00 24 40 00 mov $0x402400,%esi400ee9: e8 4a 04 00 00 callq 401338 <strings_not_equal>400eee: 85 c0 test %eax,%eax400ef0: 74 05 je 400ef7 <phase_1+0x17>400ef2: e8 43 05 00 00 callq 40143a <explode_bomb>400ef7: 48 83 c4 08 add $0x8,%rsp400efb: c3 retq

那我們就先來捋順這段匯編的邏輯吧。這段代碼先把一個值,更準確地說,是字符串的地址(0x402400)放到%esi里,之后調(diào)用一個叫"strings_not_equal"的函數(shù);最后判斷這個函數(shù)的返回值:等于零,通過;不等于零,調(diào)用"explode_bomb"把炸彈炸掉(或許你會問%edi在哪里?其實%edi就是我們輸入的字符串的地址)。顯然,這短短的一段匯編里,最重要的就是對strings_not_equal函數(shù)的調(diào)用。至于這個函數(shù)是干什么的,猜也能猜得出來:判斷兩個字符串是不是相等:相等,返回零;否則返回非零(仔細看strings_not_equal的實現(xiàn),實際上不相等時返回1)(當然你也可以自己翻到0x401338,看一看這個推測是否正確。)。
現(xiàn)在讓我們考慮一下strings_not_equal這個函數(shù)的兩個參數(shù)。%rdi中的值,就是我們輸入的字符串的地址;%rsi中的值是后面?zhèn)鬟M去的0x402400.那么0x402400指向的是什么字符串呢?我們打開gdb看一看。在終端中輸入:

gdb bomb x /s 0x402400

輸出是什么呢?

0x402400: "Border relations with Canada have never been better."

只要我們的輸入和上面這個字符串相同就行了。打開終端試一試~
(P.S. 這個字符串是2016年初更新的。它的出處是,2001年時任美國總統(tǒng)的喬治·布什,為歡迎加拿大總理訪美所作的講話。原句為"Border relations between Canada and Mexico have never been better. " 5年后,布什簽署法案,授權(quán)在美墨邊境修建隔離墻。2015年9月,特朗普宣布競選美國總統(tǒng),而其競選承諾中有一條就是“在美墨邊境修墻”。從這個細節(jié),我們似乎可以一瞥作者對美墨邊境相關(guān)政策的態(tài)度。)

Phase 2

前面那個Phase就當熱身啦,接下來的幾個Phase才是重頭戲。還是剛才的辦法,我們把phase_2的匯編也拿出來:

0000000000400efc <phase_2>:400efc: 55 push %rbp400efd: 53 push %rbx400efe: 48 83 ec 28 sub $0x28,%rsp400f02: 48 89 e6 mov %rsp,%rsi400f05: e8 52 05 00 00 callq 40145c <read_six_numbers>... ...

這段匯編先“讀入“六個數(shù)(0x400f05:read_six_numbers)。從哪里“讀入”呢?當然不是stdin。我們注意到,和上面那個Phase一樣,%rdi并沒有在調(diào)用這個函數(shù)之前出現(xiàn)。也就是說,phase_2函數(shù)的第一個參數(shù),被原封不動地傳到了read_six_numbers的第一個參數(shù)。那么%rsi,也就是第二個參數(shù),代表的是什么呢?注意看這兩行匯編:

400efe: 48 83 ec 28 sub $0x28,%rsp400f02: 48 89 e6 mov %rsp,%rsi

知道了嗎?%rsi里放的是地址!結(jié)合read_six_numbers第一個參數(shù)的含義(恰好是我們輸入的字符串)大膽猜想,我們可以知道—— 1. read_six_numbers從我們自己輸進去的字符串里"read"; 2. %rsi在源代碼里應該是個指針,這個指針指向一個數(shù)組的開頭,而這個數(shù)組就是放read_six_numbers從字符串里抽出的六個數(shù)用的。不過我們還是來看一看read_six_numbers具體是怎么實現(xiàn)的:

000000000040145c <read_six_numbers>:40145c: 48 83 ec 18 sub $0x18,%rsp401460: 48 89 f2 mov %rsi,%rdx401463: 48 8d 4e 04 lea 0x4(%rsi),%rcx401467: 48 8d 46 14 lea 0x14(%rsi),%rax40146b: 48 89 44 24 08 mov %rax,0x8(%rsp)401470: 48 8d 46 10 lea 0x10(%rsi),%rax401474: 48 89 04 24 mov %rax,(%rsp)401478: 4c 8d 4e 0c lea 0xc(%rsi),%r940147c: 4c 8d 46 08 lea 0x8(%rsi),%r8401480: be c3 25 40 00 mov $0x4025c3,%esi401485: b8 00 00 00 00 mov $0x0,%eax40148a: e8 61 f7 ff ff callq 400bf0 <__isoc99_sscanf@plt>40148f: 83 f8 05 cmp $0x5,%eax401492: 7f 05 jg 401499 <read_six_numbers+0x3d>401494: e8 a1 ff ff ff callq 40143a <explode_bomb>401499: 48 83 c4 18 add $0x18,%rsp40149d: c3 retq

%rsi是什么?我們猜是數(shù)組首個元素的地址。0x4(%rsi)是什么?我們猜是數(shù)組第二個元素的地址。那么0x14(%rsi)、0x10(%rsi)等等呢?同理。以上這些都被read_six_numbers做成了sscanf的末幾個參數(shù)(不是"scanf"!多了一個"s"!!!)(注意到了嗎?有幾個地址,因為寄存器放不下,被送到棧里面了)。sscanf的第一個參數(shù),從匯編來看,是read_six_numbers的第一個參數(shù),也就是我們輸入的字符串;而第二個參數(shù)是存儲在0x4025c3的字符串。和上面一樣,我們來看一看0x4025c3里有什么。

0x4025c3: "%d %d %d %d %d %d"

覺得熟悉嗎?事實上,sscanf的作用與scanf類似,只不過scanf從sdtin中讀取數(shù)據(jù),sscanf從它的第一個參數(shù)中讀取數(shù)據(jù)。read_six_numbers就是借助sscanf,把我們輸入的字符串中的數(shù)抽出來,放到一個數(shù)組里。我們的猜測是對的。
現(xiàn)在,我們知道了phase_2的要求是輸入6個特定的數(shù),數(shù)與數(shù)之間用空格隔開。那么這六個數(shù)又是什么呢?我們接著往下看。

... ...400f0a: 83 3c 24 01 cmpl $0x1,(%rsp)400f0e: 74 20 je 400f30 <phase_2+0x34>400f10: e8 25 05 00 00 callq 40143a <explode_bomb>400f15: eb 19 jmp 400f30 <phase_2+0x34>... ...

我們已經(jīng)知道了,%rsp里放的就是數(shù)組第一個元素的地址。所以說,很顯然,這段匯編在判斷我們輸入的六個數(shù),第一個數(shù)是不是等于一。判斷了之后就跳到0x400f30:

... ...400f30: 48 8d 5c 24 04 lea 0x4(%rsp),%rbx400f35: 48 8d 6c 24 18 lea 0x18(%rsp),%rbp400f3a: eb db jmp 400f17 <phase_2+0x1b>... ...

嗯,這三行匯編把第二個數(shù)(int是四個字節(jié))的地址放進%rbx里,把最后一個數(shù)下一個字節(jié)((18)16=(24)10(18)_{16} = (24)_{10}(18)16?=(24)10?)的地址放進%rbp里(是判斷循環(huán)終止條件用的),之后跳到0x400f17.

... ...400f17: 8b 43 fc mov -0x4(%rbx),%eax400f1a: 01 c0 add %eax,%eax400f1c: 39 03 cmp %eax,(%rbx)400f1e: 74 05 je 400f25 <phase_2+0x29>400f20: e8 15 05 00 00 callq 40143a <explode_bomb>400f25: 48 83 c3 04 add $0x4,%rbx400f29: 48 39 eb cmp %rbp,%rbx400f2c: 75 e9 jne 400f17 <phase_2+0x1b>... ...

從0x400f17這里,程序就開始循環(huán)處理我們輸進去的六個數(shù)了。首先,程序把%rbx指向的數(shù)的前一個放到%eax里,之后讓它翻倍:

400f17: 8b 43 fc mov -0x4(%rbx),%eax400f1a: 01 c0 add %eax,%eax

翻倍之后再檢查%eax里的值是不是和%rbx當前指向的數(shù)相同:

400f1c: 39 03 cmp %eax,(%rbx)400f1e: 74 05 je 400f25 <phase_2+0x29>400f20: e8 15 05 00 00 callq 40143a <explode_bomb>

如果相同呢,就跳到0x400f25;如果不相同,就調(diào)用explode_bomb引爆炸彈。看來,這好像是個等比數(shù)列!1為首項,2為公比!
我們最后再來看一看0x400f25那里的匯編是什么。

400f25: 48 83 c3 04 add $0x4,%rbx400f29: 48 39 eb cmp %rbp,%rbx400f2c: 75 e9 jne 400f17 <phase_2+0x1b>

和我們想得一樣,這里程序把%rbx里的指針后移四字節(jié),再判斷指針是否到達了數(shù)組末尾。
所以,要過這個phase,只要輸入以一為首項,二為公比的等比數(shù)列前六項就行了。

Phase 3

這個phase考的是switch語句的匯編表示。
好啦,先看題吧。phase_3開頭和上面那個read_six_numbers很像,也調(diào)用了sscanf,從我們輸入的字符串里提取數(shù)字。只不過這次只有兩個數(shù),第一個放在0x8(%rsp)那里,第二個放在0xc(%rsp)那里。
仔細看匯編。我們發(fā)現(xiàn),0x8(%rsp)和0xc(%rsp)這兩個值,只在兩個地方出現(xiàn)過。對于0x8(%rsp), 這個地方是:

400f71: 8b 44 24 08 mov 0x8(%rsp),%eax400f75: ff 24 c5 70 24 40 00 jmpq *0x402470(,%rax,8)

而對于0xc(%rsp), 這個地方是:

400fbe: 3b 44 24 0c cmp 0xc(%rsp),%eax400fc2: 74 05 je 400fc9 <phase_3+0x86>400fc4: e8 71 04 00 00 callq 40143a <explode_bomb>

在0x400f75這一行,代碼究竟要跳轉(zhuǎn)到哪里呢?應該是0x402470這個地址中儲存的值(星號解引用,和指針一樣),和8乘%rax里的值加在一起組成的地址。%rax里的值我們知道,就是我們輸入的第一個數(shù);那么0x402470這個地址中的值又是什么呢?還是像前面那樣,我們在gdb中輸入x /wx 0x402470,看一看輸出:

(gdb) x /wx 0x402470 0x402470: 0x00400f7c

0x400f7c顯然是個地址。翻回到bomb的匯編,我們發(fā)現(xiàn)這個地址就是0x400f75的下一行;而這行恰巧對應switch的第一個case。其實,從0x402470這個地址開始,儲存著7個指向不同case的地址。而從匯編來看,這7個case處理輸入輸出的邏輯是一致的,比如第一個case,對應"case 0:",也就是我們輸入的首個值為零的情況:

400f7c: b8 cf 00 00 00 mov $0xcf,%eax400f81: eb 3b jmp 400fbe <phase_3+0x7b>

這兩行匯編的邏輯,想必不難理解。先把一個數(shù)放到%eax里,之后跳到0x400fbe。當然0x400fbe那里有什么,上面已經(jīng)提到過了——程序在那里處理我們輸入的第二個數(shù)!
這樣看來,程序的邏輯就清楚了。我們需要先輸入兩個數(shù),第一個指示應該用哪個case;第二個用來和這個case放到%eax里的數(shù)比較。如果相等,這個phase就過掉了;不相等就引爆炸彈。
所以,這個phase的答案也不是唯一的啦。每一個case對應不同的值,只要我們輸入的兩個值像匯編里的值那樣對應好就行。比如我們輸入的第一個數(shù)是0(小于七的非負數(shù)就好),查過第一個case之后(0x400f7c)我們就知道第二個數(shù)應該是0xcf,也就是十進制的207.之后把"0 207"輸進去就行了~

Phase 4

加油加油!phase已經(jīng)做掉一半啦~
嗯,關(guān)于這個phase,我只能說我先看到了bomb.c里的一段注釋:

/* Oh yeah? Well, how good is your math? Try on this saucy problem! */

我的數(shù)學水平……嗯,一言難盡。還是來看匯編吧。phase_4和上面phase_3的開頭是類似的,也是讓我們輸入兩個數(shù),并且要求第一個數(shù)不大于14,第二個數(shù)等于零(作者大概是想重用上面的字符串?還是另有原因呢……)。之后程序調(diào)用func4。func4第一個參數(shù)就是我們輸入的第一個數(shù),第二個、第三個參數(shù)都是常數(shù),是0和14(%edx里的那個)。func4返回之后,程序判斷func4的返回值,等于零就通過,否則引爆炸彈。
好了,我們現(xiàn)在來看一看func4里到底發(fā)生了什么。

0000000000400fce <func4>:400fce: 48 83 ec 08 sub $0x8,%rsp400fd2: 89 d0 mov %edx,%eax400fd4: 29 f0 sub %esi,%eax400fd6: 89 c1 mov %eax,%ecx400fd8: c1 e9 1f shr $0x1f,%ecx400fdb: 01 c8 add %ecx,%eax400fdd: d1 f8 sar %eax400fdf: 8d 0c 30 lea (%rax,%rsi,1),%ecx400fe2: 39 f9 cmp %edi,%ecx400fe4: 7e 0c jle 400ff2 <func4+0x24>400fe6: 8d 51 ff lea -0x1(%rcx),%edx400fe9: e8 e0 ff ff ff callq 400fce <func4>400fee: 01 c0 add %eax,%eax400ff0: eb 15 jmp 401007 <func4+0x39>400ff2: b8 00 00 00 00 mov $0x0,%eax400ff7: 39 f9 cmp %edi,%ecx400ff9: 7d 0c jge 401007 <func4+0x39>400ffb: 8d 71 01 lea 0x1(%rcx),%esi400ffe: e8 cb ff ff ff callq 400fce <func4>401003: 8d 44 00 01 lea 0x1(%rax,%rax,1),%eax401007: 48 83 c4 08 add $0x8,%rsp40100b: c3 retq

當然這段匯編很亂……我最后把它翻譯成了C語言代碼:

int func4(int edi, int esi, int edx) {int eax = edx;eax -= esi;int ecx = eax;ecx >>= 31;eax += ecx;eax >>= 1;ecx = eax + esi;if (ecx > edi){edx = ecx - 1;eax = func4(edi, esi, edx);eax *= 2;return eax;}else{eax = 0;if(ecx < edi){esi = ecx + 1;eax = func4(edi, esi, edx);eax = eax * 2 + 1;return eax;}elsereturn eax;} }

其實改一改就更好理解了:

int func4(int edi, int esi, int edx) {int eax = edx - esi;if (eax < 0)eax -= 1;eax /= 2;int ecx = eax + esi;if (ecx > edi)return func4(edi, esi, ecx - 1) * 2;else if (ecx < edi)return func4(edi, ecx + 1, edx) * 2 + 1;elsereturn 0; }

或許這個函數(shù)有它的現(xiàn)實意義(我很想知道!)。不過現(xiàn)在我們只要讓它返回零……這個簡單。既然edx是14,esi是0,那么開頭三行代碼執(zhí)行完之后ecx就是7. 什么情況下func4會返回零呢?當然是ecx等于edi的情況。這樣我們就可以確定,edi是7!
(實際上滿足題意的數(shù)不僅僅是7. 寫循環(huán)把0到14的值都試一遍就知道了。不過我覺得作者的本意可能是讓我們先推出func4的數(shù)學表達式……)

Phase 5

phase 5呢,讓我們先輸入一個長為六的字符串,之后程序就進到循環(huán)里操作這些字符串了:

40108b: 0f b6 0c 03 movzbl (%rbx,%rax,1),%ecx40108f: 88 0c 24 mov %cl,(%rsp)401092: 48 8b 14 24 mov (%rsp),%rdx401096: 83 e2 0f and $0xf,%edx401099: 0f b6 92 b0 24 40 00 movzbl 0x4024b0(%rdx),%edx4010a0: 88 54 04 10 mov %dl,0x10(%rsp,%rax,1) 4010a4: 48 83 c0 01 add $0x1,%rax4010a8: 48 83 f8 06 cmp $0x6,%rax4010ac: 75 dd jne 40108b <phase_5+0x29>

%rbx的地址就是我們輸入的字符串的地址,%rax里是字符的索引。每輪循環(huán),程序先把字符串的一個字符放到%edx里((%rsp)其實就是個中介),之后用0xf按位與。之后再把按位與的結(jié)果當成索引,從0x4024b0那里的字符串拿出在對應位置的字節(jié),放到一個數(shù)組里(就是0x10(%rsp))。當然這個數(shù)組也相當于一個字符串。我們猜測,循環(huán)結(jié)束之后,程序很有可能會把這個這個字符串和某個特定的字符串比較。不過我們看一看0x4024b0那里的字符串是什么。

(gdb) x /s 0x4024b0 0x4024b0 <array.3449>: "maduiersnfotvbylSo you think you can stop the bomb with ctrl-c, do you?"

嗯,有點亂,對不對?現(xiàn)在我們再來看循環(huán)結(jié)束之后程序又做了什么。

4010ae: c6 44 24 16 00 movb $0x0,0x16(%rsp)4010b3: be 5e 24 40 00 mov $0x40245e,%esi4010b8: 48 8d 7c 24 10 lea 0x10(%rsp),%rdi4010bd: e8 76 02 00 00 callq 401338 <strings_not_equal>4010c2: 85 c0 test %eax,%eax4010c4: 74 13 je 4010d9 <phase_5+0x77>4010c6: e8 6f 03 00 00 callq 40143a <explode_bomb>

看到了沒有?在這里,程序調(diào)用了strings_not_equal,而它的第一個參數(shù)是前面新生成的字符串,第二個參數(shù)是0x40245e那里的一個字符串。現(xiàn)在我們來看一看0x40245e那里是什么:

(gdb) x /s 0x40245e 0x40245e: "flyers"

再翻回到前面那個有點亂的的字符串,這里的六個字母前面都有對不對?所以,我們首先要逐一找到flyers里的六個字母在前面那個字符串里對應的索引;之后從可打印的字符中找到六個,讓它們和0xf按位與的結(jié)果,恰好等于那些索引就行了。
好啦,我們很容易找到這六個字母對應的索引是“9 15 14 5 6 7”,而它們對應的二進制值是“1001 1111 1110 101 110 111“。0xf對應的二進制值是“1111”。什么樣的字符是滿足要求的呢?我們知道,可打印字符ascii碼的范圍是33-126,也就是說,只要我們在這個范圍內(nèi),找到二進制表示下末尾幾位和上面的值相同的數(shù)就可以了(所以說,這個phase答案也是不唯一的)。其實也不用太費心地去找,只要在上面那些二進制索引之前,都添上兩個一就行(三位的先在前面添上0補成四位)。所以我們最后得到的字符串是“9/>567“。試試吧~

Phase 6

phase_6好長好長,而且循環(huán)好多好多!不過沒關(guān)系,我們分塊來看這些不知所云的匯編。
phase_6也是要求我們輸入6個數(shù),而且調(diào)用了前面的read_six_numbers. 我們知道,read_six_numbers這個函數(shù)會把讀入的六個數(shù)放到第二個參數(shù)指向的一塊內(nèi)存里。在這里,第二個參數(shù)是%rsp的值;而在調(diào)用read_six_numbers之前,%rsp的值已經(jīng)被同時拷到%r13里了。所以,%r13實際上包含了指向我們輸入的六個數(shù)的地址。這個下面會用到。
在非常耐心地盯了很長時間匯編之后,我們發(fā)現(xiàn)第一個循環(huán)從0x401114開始,到0x401151結(jié)束。仔細捋里面的代碼,我們發(fā)現(xiàn)其實從0x401135到0x40114b又是一個循環(huán)。那么這兩個循環(huán)是干什么用的呢?我們先把這段匯編貼出來:

401114: 4c 89 ed mov %r13,%rbp401117: 41 8b 45 00 mov 0x0(%r13),%eax40111b: 83 e8 01 sub $0x1,%eax40111e: 83 f8 05 cmp $0x5,%eax401121: 76 05 jbe 401128 <phase_6+0x34>401123: e8 12 03 00 00 callq 40143a <explode_bomb>401128: 41 83 c4 01 add $0x1,%r12d40112c: 41 83 fc 06 cmp $0x6,%r12d401130: 74 21 je 401153 <phase_6+0x5f>401132: 44 89 e3 mov %r12d,%ebx--------------------------------------------------------------401135: 48 63 c3 movslq %ebx,%rax401138: 8b 04 84 mov (%rsp,%rax,4),%eax40113b: 39 45 00 cmp %eax,0x0(%rbp)40113e: 75 05 jne 401145 <phase_6+0x51>401140: e8 f5 02 00 00 callq 40143a <explode_bomb>401145: 83 c3 01 add $0x1,%ebx401148: 83 fb 05 cmp $0x5,%ebx40114b: 7e e8 jle 401135 <phase_6+0x41>--------------------------------------------------------------40114d: 49 83 c5 04 add $0x4,%r13401151: eb c1 jmp 401114 <phase_6+0x20>

我們已經(jīng)知道,%r13里是我們輸入的第一個數(shù)的地址(放在循環(huán)里來說,就是本輪迭代中檢查到的那個數(shù));所以前幾行匯編的意思不難理解,就是檢查一下我們輸入的數(shù)是不是比六大。檢查了之后呢,就把當前數(shù)的索引值加一,再放到%ebx里。重頭戲在兩條虛線之間的嵌套循環(huán)那里:先把%ebx里的索引放到%rax里;之后算出上面查過的數(shù)的地址,通過地址找到這個數(shù),放到%eax里;之后把%eax和0x0(%rbp)中的中進行比較(當然你很可能會覺得%rbp出現(xiàn)得非常突兀——其實0x0(%rbp)指向的也是我們在上面檢查過的那個數(shù))。如果相等,就引爆炸彈。我們再來觀察后面控制循環(huán)的指令。直到%ebx等于五,也就是查到了我們輸入的最后一個數(shù),循環(huán)才終止。之后程序把%r13加上4(移到下一個數(shù)),開始新一輪循環(huán)。
這樣描述是不是有些抽象?沒關(guān)系,我們把這段匯編翻譯成C語言:

int six_numbers[6] = { /* 我們輸入的六個數(shù) */ }; for (int i = 0; i < 6; ++i) {if (six_numbers[i] > 6)explode_bomb();for (int j = i + 1; j < 6; ++j)if (six_numbers[i] == six_numbers[j])explode_bomb(); }

所以說,這段匯編的實際作用是確定我們輸入的六個數(shù)是不是全部小于等于六,并且是不是互不相等。這樣的要求和數(shù)組索引的要求好像!那么這組數(shù)究竟是不是真正的索引呢?我們接著往下看。

401153: 48 8d 74 24 18 lea 0x18(%rsp),%rsi401158: 4c 89 f0 mov %r14,%rax40115b: b9 07 00 00 00 mov $0x7,%ecx-------------------------------------------------------------401160: 89 ca mov %ecx,%edx401162: 2b 10 sub (%rax),%edx401164: 89 10 mov %edx,(%rax) 401166: 48 83 c0 04 add $0x4,%rax40116a: 48 39 f0 cmp %rsi,%rax40116d: 75 f1 jne 401160 <phase_6+0x6c> ------------------------------------------------------------- 40116f: be 00 00 00 00 mov $0x0,%esi401174: eb 21 jmp 401197 <phase_6+0xa3>

這段匯編里也有一段循環(huán)。循環(huán)初始,%ecx的值是7,%rax指向我們輸入的六個數(shù);之后的操作就是用7減去每一個我們輸入的數(shù)……(401162,401164;循環(huán)的控制語句是401166到40116d)如果這六個數(shù)真是索引的話,Dr. Evil您可真會玩兒……
緊挨著這段匯編的又是一段循環(huán);注意這段循環(huán)是從中間的401197開始執(zhí)行的:

401176: 48 8b 52 08 mov 0x8(%rdx),%rdx40117a: 83 c0 01 add $0x1,%eax40117d: 39 c8 cmp %ecx,%eax40117f: 75 f5 jne 401176 <phase_6+0x82>401181: eb 05 jmp 401188 <phase_6+0x94>401183: ba d0 32 60 00 mov $0x6032d0,%edx401188: 48 89 54 74 20 mov %rdx,0x20(%rsp,%rsi,2)40118d: 48 83 c6 04 add $0x4,%rsi401191: 48 83 fe 18 cmp $0x18,%rsi401195: 74 14 je 4011ab <phase_6+0xb7>401197: 8b 0c 34 mov (%rsp,%rsi,1),%ecx40119a: 83 f9 01 cmp $0x1,%ecx40119d: 7e e4 jle 401183 <phase_6+0x8f>40119f: b8 01 00 00 00 mov $0x1,%eax4011a4: ba d0 32 60 00 mov $0x6032d0,%edx4011a9: eb cb jmp 401176 <phase_6+0x82>

401197把剛才洗過的數(shù)放到%ecx里,之后把它和一比較。如果這個數(shù)小于等于一,就跳到401183. 否則,就把兩個數(shù)分別放到兩個寄存器里,之后跳到401176. 順著這兩個分支分別看過去,一個神奇的數(shù)引起了我們的注意:0x6032d0. 這種無厘頭的魔數(shù),出現(xiàn)在這里,超級像地址(“你確信嗎?”),但是我們現(xiàn)在還沒有證據(jù)。不過我們接著往下看大于一程序會往哪里走(等于一太特殊了,看大于一的一般情況就夠了)。40119f那里,程序把兩個數(shù)分別放到兩個寄存器里,就朝著401176去了;401176的指令,證明了我們的猜想:確實,0x6032d0是個地址。但是為什么是 “mov 0x8(%rdx),%rdx” 呢?為什么偏移量偏偏就是8呢?我們接著往下看。40117a,程序把%eax加上了一,之后,40117d判斷%ecx是否和%eax相等。不相等,就回到401176?看來,0x8(%rdx)可能也是個地址呢……因為之前放到%rdx里的值又被當成地址引用了一次……那么,如果兩個值相等呢?程序會跳到401188,把%rdx里的地址放到內(nèi)存里的某個位置,看起來像個數(shù)組。到底是什么樣的地址值得如此大存特存呢?我們還是打開gdb查一查:

(gdb) x /wx 0x6032d0 0x6032d0 <node1>: 0x0000014c

嗯,gdb提示0x6032d0屬于一個叫node1的變量。這下清楚了……敢情phase 6這兒有個鏈表……
我們繼續(xù)看其他的地址:

(gdb) x /24wx 0x6032d0 0x6032d0 <node1>: 0x0000014c | 0x00000001 | 0x006032e0 0x00000000 0x6032e0 <node2>: 0x000000a8 | 0x00000002 | 0x006032f0 0x00000000 0x6032f0 <node3>: 0x0000039c | 0x00000003 | 0x00603300 0x00000000 0x603300 <node4>: 0x000002b3 | 0x00000004 | 0x00603310 0x00000000 0x603310 <node5>: 0x000001dd | 0x00000005 | 0x00603320 0x00000000 0x603320 <node6>: 0x000001bb | 0x00000006 | 0x00000000 0x00000000

這架勢……單向鏈表實錘……
看起來nodeX開頭四字節(jié)是節(jié)點存儲的值,最后八字節(jié)是下個節(jié)點的地址,中間四字節(jié)相當于索引值。
看來node結(jié)構(gòu)在源文件中應該是這樣定義的:

typedef struct node {int key;int index;struct node* next; } node;

之后弄了不少全局變量:

node node6 = { 6, 0x1bb, NULL }; node node5 = { 5, 0x1dd, &node6 }; node node4 = { 4, 0x2b3, &node5 }; node node3 = { 3, 0x39c, &node4 }; node node2 = { 2, 0xa8, &node3 }; node node1 = { 1, 0x14c, &node2 };

這樣,你應該就清楚了前面那個嵌套循環(huán)的具體作用——根據(jù)我們輸入的索引,找到對應node變量的地址,并且把這個地址放到一個數(shù)組里。如果寫成C語言就是這樣的:

node* addresses[6] = { 0 }; //存node變量地址的數(shù)組 for (int i = 0; i < 6; ++i) {int index = six_numbers[i];addresses[i] = &node1;while (addresses[i]->index != index)addresses[i] = addresses[i]->next; }

沒辦法,C語言里可可愛愛的幾行,放在匯編里就是不知所云的一大片。
現(xiàn)在我們可以說是搞定了整個phase 6最難的一部分!勝利在望!
接下來的四行,是折騰地址用的。0x20(%rsp)里放的相當于是addresses[0]的地址;0x28(%rsp)是addresses[1]的地址;這樣一來,%rbx里放的就是addresses[0];%rax里放的就是(addresses + 1)。

4011ab: 48 8b 5c 24 20 mov 0x20(%rsp),%rbx4011b0: 48 8d 44 24 28 lea 0x28(%rsp),%rax4011b5: 48 8d 74 24 50 lea 0x50(%rsp),%rsi4011ba: 48 89 d9 mov %rbx,%rcx

下面又是一個循環(huán)。不過比起之前我們分析的那些,下面這幾個就是小巫見大巫了。

4011bd: 48 8b 10 mov (%rax),%rdx4011c0: 48 89 51 08 mov %rdx,0x8(%rcx)4011c4: 48 83 c0 08 add $0x8,%rax 4011c8: 48 39 f0 cmp %rsi,%rax4011cb: 74 05 je 4011d2 <phase_6+0xde>4011cd: 48 89 d1 mov %rdx,%rcx4011d0: eb eb jmp 4011bd <phase_6+0xc9>4011d2: 48 c7 42 08 00 00 00 movq $0x0,0x8(%rdx)

這邊循環(huán)折騰寄存器確實很亂……先從%rax指向的位置拿出某個node變量的地址,取道%rdx放到0x8(%rcx)里。那么這個0x8(%rcx)相當于什么呢?我們可以看出,%rcx里放的總是addresses數(shù)組里%rax指向元素的上一個,是某個node變量的地址;那么0x8(%rcx)就是nodeX.next. 原本nodeX.next里放的應該是node(X + 1)的地址對不對?假設我們輸入的索引是" X Y Z…", 那么一輪循環(huán)執(zhí)行完之后,nodeX.next里放的就是nodeY的地址了。這個循環(huán)是重排節(jié)點用的。
我們終于來到了最后一個循環(huán)(眼睛覺得不行的話,就休息一下吧……馬上就結(jié)束了)。這個循環(huán)是最后判斷我們輸入的索引順序?qū)Σ粚Φ摹?/p> 4011da: bd 05 00 00 00 mov $0x5,%ebp4011df: 48 8b 43 08 mov 0x8(%rbx),%rax4011e3: 8b 00 mov (%rax),%eax4011e5: 39 03 cmp %eax,(%rbx)4011e7: 7d 05 jge 4011ee <phase_6+0xfa>4011e9: e8 4c 02 00 00 callq 40143a <explode_bomb>4011ee: 48 8b 5b 08 mov 0x8(%rbx),%rbx4011f2: 83 ed 01 sub $0x1,%ebp4011f5: 75 e8 jne 4011df <phase_6+0xeb>

%rbx指向我們輸入的第一個索引對應的節(jié)點。4011df把nodeX.next放到%rax里,再通過這個地址拿出%rax指向的節(jié)點的key值,把它和%rbx指向節(jié)點的key比較,如果前者大與等于后者就通過。
所以這個循環(huán)要求我們降序排列節(jié)點中的key值。翻回到前面看一看各個索引對應的key值,排好序就行了。別忘了輸入之前每個值都要用7減哦。(所以最后結(jié)果是"4 3 2 1 6 5")

Secret Phase

Dr. Evil提示我們,可能有什么東西被忽略了:

/* Wow, they got it! But isn't something... missing? Perhaps* something they overlooked? Mua ha ha ha ha! */

翻到匯編一看,還真是。phase_6之后還有一個secret_phase. 我們先來搜一下這個函數(shù)是在哪里調(diào)用的:
嗯,是在phase_defused里面。現(xiàn)在讓我們來研究一下什么情況下會觸發(fā)secret_phase:

4015e1: 4c 8d 44 24 10 lea 0x10(%rsp),%r84015e6: 48 8d 4c 24 0c lea 0xc(%rsp),%rcx4015eb: 48 8d 54 24 08 lea 0x8(%rsp),%rdx4015f0: be 19 26 40 00 mov $0x402619,%esi4015f5: bf 70 38 60 00 mov $0x603870,%edi4015fa: e8 f1 f5 ff ff callq 400bf0 <__isoc99_sscanf@plt>4015ff: 83 f8 03 cmp $0x3,%eax401602: 75 31 jne 401635 <phase_defused+0x71>401604: be 22 26 40 00 mov $0x402622,%esi401609: 48 8d 7c 24 10 lea 0x10(%rsp),%rdi40160e: e8 25 fd ff ff callq 401338 <strings_not_equal>401613: 85 c0 test %eax,%eax401615: 75 1e jne 401635 <phase_defused+0x71>401617: bf f8 24 40 00 mov $0x4024f8,%edi40161c: e8 ef f4 ff ff callq 400b10 <puts@plt>401621: bf 20 25 40 00 mov $0x402520,%edi401626: e8 e5 f4 ff ff callq 400b10 <puts@plt>40162b: b8 00 00 00 00 mov $0x0,%eax401630: e8 0d fc ff ff callq 401242 <secret_phase>

phase_defused調(diào)用sscanf處理在0x603870那里的一個字符串。之后把sscanf的第五個參數(shù)(輸出參數(shù))和0x402622那里的一個字符串比較,相等就可以觸發(fā)phase_defused。那么我們先來看一看0x603870那里有什么。


我們先在合適的位置設好斷點,之后按順序輸入之前的字符串。之后程序會在調(diào)用sscanf之前停下。輸出0x603870那里的字符串,我們發(fā)現(xiàn)它和我們在phase_4中輸入的內(nèi)容是一致的。再看一看sscanf的格式說明符,我們發(fā)現(xiàn)只要我們再在phase_4的兩個數(shù)后面加上一個合適的字符串,就能觸發(fā)secret_phase了。那么這個字符串是什么呢?自己看一看0x402622那里的字符串~ 于是我們順利地來到了secret_phase~
secret_phase調(diào)用了strtol,把我們輸入的字符串轉(zhuǎn)換成數(shù)(具體用法自行百度)。里面還有一行是檢查這個數(shù)的大小的,不能大于1001(好有童話色彩的魔數(shù)!)。查完就調(diào)用fun7(沒少敲"c"!!!真的是fun!),fun7返回之后檢查返回值,等于二就通過。
那我們就看一看fun7吧。fun7的第一個參數(shù)是0x6030f0(又是魔數(shù)!),第二個參數(shù)是strtol的返回值。和func4類似,fun7有令人頭疼的遞歸結(jié)構(gòu):

401204: 48 83 ec 08 sub $0x8,%rsp401208: 48 85 ff test %rdi,%rdi40120b: 74 2b je 401238 <fun7+0x34>40120d: 8b 17 mov (%rdi),%edx40120f: 39 f2 cmp %esi,%edx401211: 7e 0d jle 401220 <fun7+0x1c>401213: 48 8b 7f 08 mov 0x8(%rdi),%rdi401217: e8 e8 ff ff ff callq 401204 <fun7>40121c: 01 c0 add %eax,%eax40121e: eb 1d jmp 40123d <fun7+0x39>401220: b8 00 00 00 00 mov $0x0,%eax401225: 39 f2 cmp %esi,%edx401227: 74 14 je 40123d <fun7+0x39>401229: 48 8b 7f 10 mov 0x10(%rdi),%rdi40122d: e8 d2 ff ff ff callq 401204 <fun7>401232: 8d 44 00 01 lea 0x1(%rax,%rax,1),%eax401236: eb 05 jmp 40123d <fun7+0x39>401238: b8 ff ff ff ff mov $0xffffffff,%eax40123d: 48 83 c4 08 add $0x8,%rsp401241: c3 retq

根據(jù)之前的經(jīng)驗,我們猜測%rdi里放著的應該也是個指向結(jié)構(gòu)的指針,因為%rdi指向的值拿出來還是可以當成地址引用。所以經(jīng)過大膽的聯(lián)想與想象,我們猜測fun7原本應該是這樣寫的:

int fun7(node* rdi, int rsi) {if (rdi == NULL)return -1;int key = rdi->key;if (rsi < key){rdi = /* 不知道怎么寫…… */;return 2 * fun7(rdi, rsi) + 1;}else if (rsi == key)return 0;elsereturn 2 * fun7(rdi->next /* 是嗎…… */ , rsi); }

確實,基本結(jié)構(gòu)是這樣。不過如果你假設這里的數(shù)據(jù)結(jié)構(gòu)還是上面的單向鏈表的話,你會發(fā)現(xiàn)"mov 0x10(%rdi),%rdi"這行匯編用C語言是描述不出來的……因為如果假設%rdi指向某個節(jié)點,那么0x10(%rdi)將指向下個節(jié)點的key值,這就相當于直接把一個int值當成了地址……
所以,我們?nèi)タ匆豢茨莻€魔數(shù)(0x6030f0)附近到底有什么……

(gdb) x /120wx 0x6030f0 0x6030f0 <n1>: 0x00000024 0x00000000 0x00603110 0x00000000 0x603100 <n1+16>: 0x00603130 0x00000000 0x00000000 0x00000000 0x603110 <n21>: 0x00000008 0x00000000 0x00603190 0x00000000 0x603120 <n21+16>: 0x00603150 0x00000000 0x00000000 0x00000000 0x603130 <n22>: 0x00000032 0x00000000 0x00603170 0x00000000 0x603140 <n22+16>: 0x006031b0 0x00000000 0x00000000 0x00000000 0x603150 <n32>: 0x00000016 0x00000000 0x00603270 0x00000000 0x603160 <n32+16>: 0x00603230 0x00000000 0x00000000 0x00000000 0x603170 <n33>: 0x0000002d 0x00000000 0x006031d0 0x00000000 0x603180 <n33+16>: 0x00603290 0x00000000 0x00000000 0x00000000 0x603190 <n31>: 0x00000006 0x00000000 0x006031f0 0x00000000 0x6031a0 <n31+16>: 0x00603250 0x00000000 0x00000000 0x00000000 0x6031b0 <n34>: 0x0000006b 0x00000000 0x00603210 0x00000000 0x6031c0 <n34+16>: 0x006032b0 0x00000000 0x00000000 0x00000000 0x6031d0 <n45>: 0x00000028 0x00000000 0x00000000 0x00000000 0x6031e0 <n45+16>: 0x00000000 0x00000000 0x00000000 0x00000000 0x6031f0 <n41>: 0x00000001 0x00000000 0x00000000 0x00000000 0x603200 <n41+16>: 0x00000000 0x00000000 0x00000000 0x00000000 0x603210 <n47>: 0x00000063 0x00000000 0x00000000 0x00000000 0x603220 <n47+16>: 0x00000000 0x00000000 0x00000000 0x00000000 0x603230 <n44>: 0x00000023 0x00000000 0x00000000 0x00000000 0x603240 <n44+16>: 0x00000000 0x00000000 0x00000000 0x00000000 0x603250 <n42>: 0x00000007 0x00000000 0x00000000 0x00000000 0x603260 <n42+16>: 0x00000000 0x00000000 0x00000000 0x00000000 0x603270 <n43>: 0x00000014 0x00000000 0x00000000 0x00000000 0x603280 <n43+16>: 0x00000000 0x00000000 0x00000000 0x00000000 0x603290 <n46>: 0x0000002f 0x00000000 0x00000000 0x00000000 0x6032a0 <n46+16>: 0x00000000 0x00000000 0x00000000 0x00000000 0x6032b0 <n48>: 0x000003e9 0x00000000 0x00000000 0x00000000 0x6032c0 <n48+16>: 0x00000000 0x00000000 0x00000000 0x00000000

好吧。這是棵二叉搜索樹(相信你一眼就看出來了~)。每個變量前四字節(jié)(前八字節(jié)也說不定)是節(jié)點的key,從第九字節(jié)到第十六字節(jié)是指向左子結(jié)點的指針,從第十七字節(jié)開始的八字節(jié)是指向右子結(jié)點的指針,最后八字節(jié)用途不明(可能是對齊用的?)。畫出來長這樣:

所以fun7應該是這樣寫的:

int fun7(node* current, int input) {if (current == NULL)return -1;int key = current->key;if (input > key)return 2 * fun7(current->right, input) + 1;else if (input == key)return 0;elsereturn 2 * fun7(current->left, input); }

要讓fun7返回2,我們應該怎么設計input的值呢?看fun7的C代碼我們可以發(fā)現(xiàn),我們的輸入只能是樹中的某個節(jié)點值,否則返回值肯定是負的。另外,我們也可以發(fā)現(xiàn),最后一行,返回(2 * fun7()), 是虛的,只能把原來的值翻倍,而不能從0造出新的值。所以要想湊出2,只能從前面的(2 * fun7() + 1)入手。
我們從樹頂?shù)?x24開始,自頂向下地搭一棵遞歸樹。最初調(diào)用的fun7()要返回2對不對。此時它面臨向左向右兩種選擇。如果向右呢,就要求之后調(diào)用的fun7()要返回0.5——當然這是不可能的,所以只好向左走啦——要求之后調(diào)用的fun7()返回1.

好了,現(xiàn)在我們來到了遞歸樹的第二層。這一層,%eax里的值應該是1才行。向左還是向右呢?如果向左走的話,那么要湊出返回值1,那么之后調(diào)用的fun7()又要返回0.5了對不對。所以這里要向右走,這時之后調(diào)用的fun7()只要返回0就可以了。

什么樣的情況下fun7()會返回0呢?很顯然,input等于key的時候。所以,8的右子結(jié)點值0x16就是答案。
不過,這個答案是唯一的嗎?
事實上,從0x16那個節(jié)點,還可以再向左走一步到0x14,返回值也滿足要求。

所以,secret_phase的答案有兩個,20和22.

幾條野路子

如果你時間緊任務重,只想快速刷掉這些phase,可以試試下面的方法。

  • 我們知道,gdb可以查看寄存器或者某個地址的值。既然查看可以,那么修改也應該可以……
    其實gdb里的set命令就是干這個用的。語法是"set [something] = [value]",something那里填的東西和匯編里訪問寄存器、內(nèi)存的語法類似,不過要注意所有百分號都要換成’$’,而立即數(shù)之前的’$'去掉.
    我們用phase 1演示一下。先在合適的位置打上斷點:

    (gdb) b *0x400eee Breakpoint 1 at 0x400eee

    沒錯,0x400eee就是strings_not_equal執(zhí)行完之后的下一行。之后隨便輸些什么東西:

    (gdb) r Starting program: /media/snowingfield/Data2/csapp-lab/bomb/bomb2 Welcome to my fiendish little bomb. You have 6 phases with which to blow yourself up. Have a nice day! 北京歡迎你,為你開天辟地

    輸完之后敲回車。因為我們設了斷點,所以程序會在判斷%eax的值之前停下來。當然我們知道現(xiàn)在%eax里的值肯定不是0:

    Breakpoint 1, 0x0000000000400eee in phase_1 () (gdb) p $eax $1 = 1

    之后就可以用set命令了:

    (gdb) set $eax = 0 (gdb) p $eax $2 = 0 (gdb) c Continuing. Phase 1 defused. How about the next one?

    成功地騙過了bomb呢。

  • 當然我們也可以在explode_bomb上做些手腳。我們先看一看explode_bomb的匯編:

    000000000040143a <explode_bomb>: 40143a: 48 83 ec 08 sub $0x8,%rsp 40143e: bf a3 25 40 00 mov $0x4025a3,%edi 401443: e8 c8 f6 ff ff callq 400b10 <puts@plt> 401448: bf ac 25 40 00 mov $0x4025ac,%edi 40144d: e8 be f6 ff ff callq 400b10 <puts@plt> 401452: bf 08 00 00 00 mov $0x8,%edi 401457: e8 c4 f7 ff ff callq 400c20 <exit@plt>

    explode_bomb是不會返回的,因為它最后調(diào)用了exit。如果我們把explode_bomb里的內(nèi)容全部抹掉,并且直接修改字節(jié)碼讓它正常返回,炸彈不就不會爆炸了嗎?所以我們用十六進制文本編輯器打開bomb文件,找到explode_bomb的位置(就是在編輯器里偏移量為143a的位置),并且把里面的內(nèi)容全部用"90"(nop指令)替代,再把最后一字節(jié)改成"C3"(ret指令):

    之后我們只要隨便輸進一些東西就能過掉phase了。

    直接把火藥去掉了呢。

  • secret_phase不知道怎么進?沒關(guān)系,我們通過改字節(jié)碼的方式直接在main調(diào)用它。
    觀察發(fā)現(xiàn),main后面足足有9字節(jié)的nop指令!簡直就是為了方便我們設計的好嗎!觀察一下其他位置的call指令,我們發(fā)現(xiàn)call指令占五字節(jié),第一個字節(jié)都是"e8",后面跟上四字節(jié)的偏移量。不過在開始添指令之前,為了保證main正常返回,我們先把main的最后三個指令向后挪5字節(jié):


    之后算call指令的偏移量 = 0x401242(secret_phase的地址)- 0x400ed1(e8后面那個字節(jié)的地址) - 4(e8后跟偏移量的長度,單位是字節(jié)) = 0x36d.(第七章有這個公式) 之后我們把"e8 6d 03 00 00"(偏移量按小尾數(shù)擺)填到那個5字節(jié)的空位里:

  • 保存運行就行了。
    突然覺得Dr. Evil應該給他的bomb加個殼的。[暗中觀察][狗頭][狗頭]

    總結(jié)

    以上是生活随笔為你收集整理的深入理解计算机系统-bomblab详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    97人人爽 | 超碰在线最新 | 国产精品久久久久久久免费 | 国产精品久久久影视 | 久草在线电影网 | 99久久久久久久久 | 四虎影视精品永久在线观看 | 叶爱av在线 | 欧美成人中文字幕 | 久久久在线视频 | 成人av片免费观看app下载 | 91成人精品在线 | 最新日本中文字幕 | 日本久久久久久久久久久 | 91免费在线播放 | 一区二区视频网站 | 亚洲三级精品 | 又污又黄的网站 | 国产一区免费观看 | 久久久久久久久久久久影院 | 国产中文字幕免费 | 日日干美女 | 亚洲精品国产精品国自 | 午夜三级大片 | 一级久久精品 | 成片免费 | 五月香视频在线观看 | 992tv在线观看网站 | 韩日精品在线观看 | 国产黄在线观看 | 日韩av一区在线观看 | 亚洲aⅴ在线 | 欧洲视频一区 | 在线日韩精品视频 | 精品国产一区二区三区蜜臀 | 青草视频在线免费 | 国产一级黄色电影 | 久久久国产在线视频 | 日本成人黄色片 | a视频在线观看 | 毛片精品免费在线观看 | 中文字幕在线播放av | 日本中文字幕观看 | 久久人人爽人人爽人人片av免费 | 亚洲欧美成人在线 | 最近更新好看的中文字幕 | 日本最新中文字幕 | 婷婷视频在线 | 国产在线观看你懂得 | 一区二区三区免费在线观看视频 | 天天草天天摸 | 在线成人短视频 | 国产精品综合在线 | 国产区免费 | 在线不卡视频 | 国产亚洲精品久久久网站好莱 | 久久久.com | 在线91av| 91传媒在线看 | www.香蕉视频在线观看 | 国产精品久久三 | 香蕉在线播放 | 99久久99久国产黄毛片 | 成人午夜剧场在线观看 | 亚洲日本一区二区在线 | 成人一级片免费看 | 国产三级av在线 | 美女福利视频一区二区 | av电影免费在线播放 | 日韩电影中文,亚洲精品乱码 | 午夜久久久精品 | 色吊丝在线永久观看最新版本 | 日韩欧美网址 | 国产成人精品在线 | 国内久久久久 | 91夫妻视频 | 五月天免费网站 | 干狠狠| 波多野结衣一区二区 | 亚洲性视频 | 精品一区二区久久久久久久网站 | 国产午夜麻豆影院在线观看 | 在线看黄色av | 综合色站导航 | 五月激情丁香图片 | 亚洲成人av一区 | 久久影院精品 | 免费中文字幕 | 激情网站网址 | 欧美一级性生活视频 | 国产精品露脸在线 | 最新中文在线视频 | 中文在线a在线 | 久久精品一区二区 | 国产精品99久久久久久宅男 | 国内精品久久久久久久久久久 | 99这里只有久久精品视频 | 久久草在线免费 | 天天干,天天草 | 亚洲精品88欧美一区二区 | 天天玩天天干 | 亚洲影视九九影院在线观看 | 九九热视频在线免费观看 | 亚洲精品视频在线观看免费 | 日韩av电影网站在线观看 | 亚洲国产精品成人精品 | 国产精品99在线播放 | 国产视频每日更新 | 亚洲美女视频在线 | 天天鲁一鲁摸一摸爽一爽 | 久久视频精品在线 | 国产最新在线视频 | 国产小视频免费观看 | 日韩理论 | 久久与婷婷 | www.色国产| 国产精品久久99 | 国产精品2019 | 特级西西人体444是什么意思 | 一区二区亚洲精品 | 亚洲闷骚少妇在线观看网站 | 亚洲精品合集 | 国产精品久久久久永久免费观看 | 精品免费一区 | 不卡中文字幕在线 | 久久在线免费 | 97色婷婷| 欧美日韩亚洲国产一区 | 伊人精品在线 | 亚洲精品视频免费在线观看 | www夜夜操com | 狠狠久久 | 国产精品国产三级国产aⅴ9色 | 国产超碰97 | 91人网站| 99se视频在线观看 | 麻豆网站免费观看 | 东方av在线免费观看 | 日批视频 | 91久久精品日日躁夜夜躁国产 | 欧美aa一级片 | 国产精品一区二区中文字幕 | 日本精品二区 | 免费网站黄 | av看片在线观看 | 国产精品青草综合久久久久99 | 国产在线色视频 | 五月开心激情 | 久久国精品 | 久久综合婷婷 | 婷婷av在线| 亚洲精品无 | 久久婷婷综合激情 | 精品国产欧美一区二区三区不卡 | 久久这里只有精品视频99 | 99久久999久久久精玫瑰 | 97精品视频在线播放 | 国产美女精品视频 | 久久 亚洲视频 | 亚洲午夜精品一区二区三区电影院 | 91在线播放视频 | 久久精品久久精品久久精品 | 草免费视频 | 亚洲人久久久 | 亚洲理论片| 亚洲日本欧美 | 色狠狠操 | 国产一级不卡毛片 | 天堂在线一区二区三区 | 久久99国产精品久久 | 99久e精品热线免费 99国产精品久久久久久久久久 | 日韩av手机在线观看 | 五月婷婷在线观看视频 | 久久久18 | 国产一区在线精品 | 在线视频久久 | 欧美aa一级 | 丁香激情综合国产 | 狠狠搞,com| 国产精品第一页在线观看 | 91激情在线视频 | 国产又粗又猛又爽 | 成人国产精品免费 | 天天玩天天干天天操 | 人人狠狠综合久久亚洲婷 | 91黄色小网站 | 国产成人免费在线 | 欧美午夜激情网 | 日日干天夜夜 | 精品国产乱码久久久久久1区二区 | 成人一级免费视频 | 精品字幕在线 | 亚洲黄色av | 午夜婷婷在线播放 | 在线观看日韩av | 久久九精品 | 91成人精品一区在线播放69 | 亚洲人成影院在线 | 一区 二区电影免费在线观看 | 国产久草在线观看 | 五月天婷婷狠狠 | 久久久久高清毛片一级 | 日韩高清久久 | 亚洲九九影院 | 一色av | 色五月成人 | 国产一区二区在线观看免费 | 91av资源在线 | 视频一区视频二区在线观看 | 国产精品久久久久永久免费 | 日韩精品免费 | 在线精品视频免费播放 | 亚洲一区二区三区在线看 | 中日韩在线 | 超碰人人超| 国产精品 日韩 | 国内精品久久久久久中文字幕 | 视频在线观看亚洲 | 天天干天天干天天干天天干天天干天天干 | av免费网站| 成人影片在线播放 | 欧美一二三视频 | 欧美一级日韩三级 | 国产精品理论片在线观看 | 色爱成人网 | 久久久久久久久久久影院 | 四虎天堂| 久久免费视频网站 | 五月激情站 | a一片一级| 毛片一区二区 | 香蕉视频在线免费 | 亚州av网站| av一区在线 | 中文一二区 | 欧美日韩精品在线观看视频 | 日韩高清三区 | 久久精品视频3 | 97在线观看免费观看高清 | 天天操操 | 日本中文字幕电影在线免费观看 | 久青草视频在线观看 | 中文字幕专区高清在线观看 | 91日韩在线专区 | 国产99久久99热这里精品5 | 国产探花视频在线播放 | 在线免费性生活片 | 日韩欧美综合在线视频 | 欧美成人久久 | 久久久久成人精品 | 国产一区电影在线观看 | 五月激情av| 欧美日韩性| 久久婷婷开心 | 在线高清一区 | 国产精品乱码久久 | 国产精品美女在线观看 | 欧美日韩亚洲精品在线 | 国产精品白丝jk白祙 | 国产一区二区久久久 | av大片免费看 | 亚洲国产经典视频 | 日韩高清不卡一区二区三区 | 久久精品男人的天堂 | 日本mv大片欧洲mv大片 | 黄色av成人在线 | 国产精品久久久久久电影 | 国产xxxx性hd极品 | 成人av中文字幕在线观看 | 最近日本mv字幕免费观看 | 色九九影院 | 中文字幕在线日本 | 天天天干天天射天天天操 | 免费看的黄色片 | www.久久免费| 亚洲不卡av一区二区三区 | 免费网址在线播放 | 成人永久在线 | 亚洲精品国产精品国自产在线 | av 一区 二区 久久 | 97碰碰视频 | 亚洲最大的av网站 | 日韩美女高潮 | 成人高清在线观看 | 激情网站网址 | 亚洲国产成人av网 | 999久久国产精品免费观看网站 | 久久 精品一区 | 成人性生交视频 | 国产午夜免费视频 | 欧美精品在线观看 | 超碰大片 | 亚洲国产精彩中文乱码av | 久久久国产精品人人片99精片欧美一 | 五月婷婷色综合 | 日本公乱妇视频 | 亚洲激精日韩激精欧美精品 | 色婷婷综合久久久久中文字幕1 | 91av播放 | 久久久久免费电影 | 欧美一二区视频 | 米奇四色影视 | 五月花丁香婷婷 | 69热国产视频 | 精品国偷自产在线 | 全久久久久久久久久久电影 | a在线观看免费视频 | 天天爽夜夜爽人人爽曰av | 国产亚洲欧美在线视频 | 黄色毛片视频免费观看中文 | 综合成人在线 | 黄色日本片 | 国产精品久久久久永久免费观看 | 欧美日韩高清 | 国精产品满18岁在线 | 久久婷婷网 | 波多野结衣视频一区二区三区 | 国产精品av久久久久久无 | 久久精品麻豆 | 国产永久免费高清在线观看视频 | 精品国产欧美一区二区三区不卡 | 欧美黑人xxxx猛性大交 | 在线观看视频免费大全 | 四虎成人在线 | 久久久久国产a免费观看rela | 国产高清亚洲 | 久久久久久久久久久久久9999 | 综合久久久久 | 在线看片91| 免费视频黄色 | 91色蜜桃| 极品久久久久 | 成人免费 在线播放 | 国产男女爽爽爽免费视频 | 日本高清中文字幕有码在线 | 久久色亚洲 | 亚洲丁香日韩 | 五月天久久综合网 | 成人精品999| 久久福利| 成人一级 | 欧美综合国产 | av看片网址| 色综合久久五月天 | 欧美日韩一区二区在线观看 | 精品在线视频一区二区三区 | 911国产在线观看 | 国产一级性生活 | 国产亚洲精品成人av久久ww | 日韩免费电影在线观看 | 婷婷久久久久 | 国产又粗又猛又黄视频 | 国产免费二区 | 精品国产精品久久一区免费式 | 欧美精品久久久久久久久老牛影院 | 中文字幕精 | www.香蕉视频 | 91欧美日韩国产 | 国产精品久久一卡二卡 | 欧美性生活免费看 | av色综合 | 免费看一级黄色 | 亚洲少妇天堂 | 99久久夜色精品国产亚洲96 | 日韩欧美一区二区三区在线 | 久久高清国产 | 日韩网站视频 | 99久久精品免费一区 | 91高清在线| 日韩电影在线观看中文字幕 | 在线高清 | 国产美女永久免费 | 日本最大色倩网站www | 人人爽人人爽人人片av | 国产一级做a | 国产午夜一级毛片 | 久久久久国产精品厨房 | 中文字幕在线看视频国产 | 国产精品99久久久久久人免费 | 成年人在线 | 99色人 | 国产1区在线观看 | 我要看黄色一级片 | 一区二区三区免费网站 | 黄色软件视频大全免费下载 | 久久婷婷精品 | 日韩免费在线一区 | 91网免费观看 | 国产69久久久欧美一级 | 一个色综合网站 | 最近中文字幕视频网 | 亚洲国产成人久久 | 中文av影院 | 99精品国产99久久久久久福利 | 免费视频久久久 | 免费欧美高清视频 | 国产一级久久 | 国产在线探花 | 在线观看中文字幕一区二区 | 成人av直播 | 黄色一级大片免费看 | 日韩精品视频在线观看网址 | 久草在线网址 | 国产一级二级在线 | 久久综合九色综合欧美就去吻 | 99久久夜色精品国产亚洲96 | 91免费黄视频 | 国产亚洲91| 久久99国产精品免费 | www久草 | 免费av免费观看 | free. 性欧美.com | 欧美一区二区日韩一区二区 | 在线a视频免费观看 | 91最新视频在线观看 | 久久无码av一区二区三区电影网 | 91精品视频免费观看 | 亚洲区精品 | 亚洲性xxxx| 在线视频日韩 | 91在线视频观看免费 | 国产一级二级三级在线观看 | 中文字幕亚洲精品在线观看 | 在线观看免费视频 | 99在线精品免费视频九九视 | 成人在线网站观看 | 日日色综合 | 日韩在线免费播放 | 国产午夜免费视频 | 成人av电影网址 | 亚洲va欧美va| 日韩激情久久 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 综合影视 | 国产精品亚洲精品 | 色黄www小说| 6699私人影院 | 久久激情日本aⅴ | 亚洲国产中文在线 | 最新av在线播放 | 久久毛片网站 | 99视频在线观看一区三区 | 免费欧美 | 高清免费在线视频 | 国产免费久久 | 国产男女爽爽爽免费视频 | 天堂av在线中文在线 | 日p视频 | 欧美午夜精品久久久久久浪潮 | 国产精品成人一区 | 97av在线 | 国产专区视频 | 久草电影免费在线观看 | 99综合影院在线 | 99成人精品 | 日日草视频 | 一级黄色在线免费观看 | 久久99热精品这里久久精品 | 99视频国产精品 | 日韩和的一区二在线 | 日日夜夜网 | 婷婷播播网| 日韩免费一区二区三区 | 久久超| 一区二精品 | 久久久久久高清 | 午夜久久福利影院 | 免费91在线| 美女在线观看av | 色丁香久久 | 午夜精品久久久久久久爽 | 丰满少妇在线观看网站 | 久久av免费 | 中文字幕区 | 色a网| 青青色影院 | www.伊人网 | 亚洲专区视频在线观看 | 99精品视频在线看 | 久草视频在线观 | 亚洲精品中文字幕视频 | 天天干天天天天 | 亚洲精品中文字幕在线 | 国产在线播放一区二区三区 | 麻豆视频在线观看免费 | 国产色就色 | 五月婷婷伊人网 | 免费看片网址 | 亚洲天堂免费视频 | 97在线超碰 | 亚洲性xxxx | 美女视频黄色免费 | 999国产 | 黄色软件在线观看 | 人人爽人人片 | 精品国产伦一区二区三区观看体验 | 色综合久久66 | 在线国产专区 | 国产精品四虎 | 波多野结衣在线观看一区 | 亚洲综合国产精品 | 日日草天天干 | 天天干天天操天天射 | 91av在线播放视频 | 91精品久久久久 | 伊人中文在线 | 五月婷婷色播 | 亚洲有 在线 | 免费亚洲片 | 天天爽天天摸 | 国产美女精品视频免费观看 | 亚洲天堂网在线视频观看 | 中文字幕2021| 四虎影视成人永久免费观看视频 | 黄色在线网站噜噜噜 | 国产精品久久影院 | 久久理论影院 | 亚洲视频1| 亚洲影视九九影院在线观看 | 午夜黄色大片 | 在线观看国产区 | 五月开心婷婷 | 久久久国产精品免费 | 99视频黄| 色在线高清 | 免费一区在线 | 国产99自拍 | 免费av网址大全 | 精品国产免费观看 | 免费看三级黄色片 | 99在线视频免费观看 | 国产伦理精品一区二区 | 成人久久久久久久久久 | 最近2019好看的中文字幕免费 | 国产不卡精品 | 在线视频精品播放 | 亚洲成人动漫在线观看 | 色资源在线 | 天天搞天天干 | 最新动作电影 | 国产精品99久久免费黑人 | 日韩中文在线播放 | 亚洲爱视频 | 九九久久久久久久久激情 | 91视频高清完整版 | 日韩欧美国产免费播放 | 久热免费在线观看 | 日韩高清免费在线观看 | 国产区免费 | 欧美a性 | 嫩草伊人久久精品少妇av | 日本在线视频一区二区三区 | av资源免费在线观看 | 国产精品亚洲人在线观看 | 91福利社在线观看 | 91在线视频免费播放 | 在线黄色免费av | 人人要人人澡人人爽人人dvd | 九色最新网址 | 美女啪啪图片 | 国产精品综合久久久 | 久久福利在线 | 在线国产片| 91在线播| 久久99精品久久久久婷婷 | 国产精品18久久久久久vr | 天天拍天天干 | 亚洲综合一区二区精品导航 | 伊人久久影视 | 韩国av电影在线观看 | 一本—道久久a久久精品蜜桃 | 九色最新网址 | 免费看黄在线 | 色综合久久久久网 | a黄色影院| 字幕网在线观看 | 九色免费视频 | 精品国产一区二区三区在线 | 亚洲一级片在线看 | 国产成人精品午夜在线播放 | 国产无限资源在线观看 | 欧美午夜精品久久久久久浪潮 | 国产精品毛片久久蜜 | av免费观看网址 | 久久综合毛片 | 97视频在线观看网址 | 国产精品久久久久影视 | 亚洲精品mv在线观看 | 天天操天天操天天操天天 | 天天爱天天操天天爽 | 国产成人91 | 在线观看视频97 | 国产成人精品久久久久 | 噜噜色官网 | 成人av影视 | 中国成人一区 | 高潮毛片无遮挡高清免费 | 日韩有码在线观看视频 | 黄色一级动作片 | 91久久爱热色涩涩 | 综合久久一本 | 91成人天堂久久成人 | 中国一级片在线观看 | 美女国产精品 | 97精品国产97久久久久久 | 欧美日韩一区二区三区在线观看视频 | 免费观看一级一片 | 揉bbb玩bbb少妇bbb | 国产高清黄| 激情久久久久久久久久久久久久久久 | 超级碰碰碰碰 | 国产美女在线免费观看 | 亚洲天堂网在线视频观看 | 国产一级二级三级在线观看 | 欧美日韩一区二区三区在线观看视频 | 国产精品一区在线 | 91精品一区二区在线观看 | 欧美在线视频一区二区 | 国产精品婷婷午夜在线观看 | 久久久久中文 | 精品毛片久久久久久 | 91中文字幕网 | 成人午夜电影在线播放 | 色激情五月 | 免费看黄网站在线 | 天天搞天天 | 国产亚洲成人网 | 国产午夜三级一区二区三 | 成人动漫一区二区 | 亚洲精品中文字幕视频 | 手机看片1042 | 激情五月五月婷婷 | 中文字幕美女免费在线 | 国产精品一区二区免费 | 99久免费精品视频在线观看 | 精品久久综合 | www久久国产 | 欧美一级裸体视频 | 成人av手机在线 | 色综合咪咪久久网 | 激情电影在线观看 | 国产黄色观看 | 99中文视频在线 | 一本一道波多野毛片中文在线 | 在线精品观看国产 | 日韩欧美大片免费观看 | 天天操天天干天天操天天干 | 午夜黄色一级片 | 欧美日韩精品在线播放 | 成人av资源网 | 国产一级片观看 | 精品久久一区二区三区 | 亚洲高清视频在线播放 | 亚洲涩涩一区 | 一本一道久久a久久精品蜜桃 | 久久精品高清 | 亚洲色图av | 国产一区二区三区免费在线 | 国产主播大尺度精品福利免费 | 在线中文字幕网站 | 成人午夜电影在线 | 天天综合网天天 | a级国产乱理论片在线观看 特级毛片在线观看 | 国产免费资源 | 成人一级片视频 | 91精品国产乱码 | 日韩高清dvd | 久久久久久久久久久网 | 精品国精品自拍自在线 | 五月天电影免费在线观看一区 | 亚洲精品在线视频观看 | 美女黄色网在线播放 | 国产视频18 | 欧美一级裸体视频 | 在线黄色观看 | 在线观看av中文字幕 | 三上悠亚一区二区在线观看 | 中文字幕资源网在线观看 | 欧美激情视频一二区 | 国产精品久久久久三级 | 婷婷色在线播放 | 日韩精品极品视频 | 五月视频| 激情五月婷婷综合 | av免费在线观看1 | 国产亚洲一区二区在线观看 | 六月婷操 | 成人欧美一区二区三区黑人麻豆 | 久久久久久久久久久久av | 国产综合香蕉五月婷在线 | 亚洲开心色| 亚洲狠狠婷婷 | 天堂视频中文在线 | 精品国产一二三四区 | 日韩欧美v| 国产欧美在线一区二区三区 | 亚洲成人午夜在线 | 精品成人a区在线观看 | 中文字幕 国产视频 | 在线观看播放av | 欧美成人aa | 91精品国产福利 | 国产黄色片久久久 | 色在线视频 | 欧美日韩视频一区二区三区 | 18做爰免费视频网站 | 2020天天干夜夜爽 | 天堂在线一区二区 | 午夜视频在线观看网站 | 超级碰视频 | 狠狠干狠狠色 | 亚洲 欧洲 国产 日本 综合 | 久草在线观看 | 久久久不卡影院 | 国产大陆亚洲精品国产 | 特级西西444www大精品视频免费看 | 日韩精品免费一区二区在线观看 | 激情综合色综合久久 | 怡春院av | 国产日产欧美在线观看 | 色天天综合久久久久综合片 | 人人插人人爱 | www.xxx.性狂虐 | 最近最新最好看中文视频 | 国产麻豆精品一区 | 五月婷婷开心 | 一区二区三区在线观看 | av免费观看高清 | 91免费视频网站在线观看 | 久久久影院官网 | 不卡的av片| 国产精品中文字幕在线 | 久久精品这里精品 | 久久99国产精品久久99 | 亚洲干视频在线观看 | 国产精品毛片一区二区 | 中文字幕在线观看免费观看 | 亚洲日本va午夜在线电影 | 日日干视频 | 亚洲精品乱码久久久久久写真 | 中文字幕在线日本 | 欧美日韩国产高清视频 | 丁香5月婷婷 | 国产精品成人一区二区 | 91大片网站 | 亚洲精品伦理在线 | 欧美精品在线一区 | 在线观看一区二区视频 | 精产嫩模国品一二三区 | 97麻豆视频 | 午夜电影av | 免费观看一区二区三区视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 在线观看国产亚洲 | 国产综合激情 | 国产不卡精品 | 国产免费作爱视频 | 久久高清视频免费 | 久久久999免费视频 日韩网站在线 | 欧美精品久久久久久久久免 | 国产97超碰| 中文字幕在线观看视频一区二区三区 | 五月婷婷久久综合 | 人人爽人人爽人人片 | 久久精品首页 | 激情五月激情综合网 | 国产精品福利午夜在线观看 | 国产精品午夜久久 | 伊人色综合久久天天网 | 久久久久亚洲精品男人的天堂 | 开心激情网五月天 | 伊人五月综合 | 四虎影视成人永久免费观看视频 | 91最新地址永久入口 | 18国产精品白浆在线观看免费 | 美女视频永久黄网站免费观看国产 | 国产精品日韩久久久久 | 亚洲成av片人久久久 | 国产三级精品三级在线观看 | 9999亚洲| 在线视频第一页 | 日韩av网站在线播放 | 久久精品影片 | 成年人视频免费在线 | 成人国产精品一区二区 | 国产成人久久av | 国产精品欧美久久久久天天影视 | 成人h电影| 96视频免费在线观看 | 国产一区黄色 | 8x成人在线 | 在线日本看片免费人成视久网 | 久久久96| www蜜桃视频| 国内精品久久久久久久久久 | 日本不卡一区二区三区在线观看 | 一级片视频免费观看 | 美女视频黄的免费的 | 中文字幕在线免费播放 | 三级av小说| 免费在线黄色av | 国产亚洲精品精品精品 | 精品国精品自拍自在线 | 国产美女在线免费观看 | 日韩欧美在线中文字幕 | 波多野结衣在线视频免费观看 | 在线观看网站你懂的 | 国产精品久久影院 | 国产精品国产自产拍高清av | 国产一区电影在线观看 | 日韩av在线看 | 久久久久久久久久网站 | 久久国产精品色av免费看 | 亚洲国产高清在线观看视频 | 亚洲国产精品人久久电影 | 91中文字幕一区 | 一区二区三区四区精品视频 | 日韩av一区二区三区在线观看 | 亚洲最大成人免费网站 | 国产成人亚洲在线观看 | 久久99偷拍视频 | 国产精品久久久久久久久久尿 | 国产精品成人一区二区三区吃奶 | 在线一二区 | 成人黄色片在线播放 | 婷婷亚洲最大 | 欧美精品国产综合久久 | 日本xxxxav| 五月婷婷久久综合 | 深夜免费福利 | 97国产超碰在线 | 日韩在线中文字幕 | 日韩最新在线视频 | 久久福利综合 | 日韩av一区二区三区四区 | 国产黄影院色大全免费 | www.五月天色| 国产福利精品一区二区 | 91麻豆精品91久久久久同性 | 91在线看黄 | 天天在线免费视频 | 国产精品欧美日韩 | 国产中文字幕在线视频 | 欧美性大战久久久久 | 在线播放国产一区二区三区 | 日韩天堂网 | 999在线视频| 亚洲色综合 | 伊人六月 | 香蕉蜜桃视频 | 黄色精品久久久 | 色视频成人在线观看免 | 超碰97.com| 中文字幕av影院 | av中文天堂| 99999精品 | 日本精品一区二区三区在线观看 | 二区三区在线观看 | 久99久久| 日本丶国产丶欧美色综合 | 69国产盗摄一区二区三区五区 | 日韩av电影一区 | 天天爽天天爽天天爽 | 99久高清在线观看视频99精品热在线观看视频 | 亚洲高清免费在线 | 国产又黄又爽又猛视频日本 | 四虎在线永久免费观看 | 国产黄免费在线观看 | 日韩中文字幕免费视频 | 欧美国产不卡 | 青青草国产精品视频 | 久久视频这里只有精品 | 亚洲永久精品在线 | 九九视频精品在线 | 伊人激情综合 | 亚洲精品777 | 成人精品一区二区三区电影免费 | 91在线你懂的 | 精品视频免费在线 | 久久国产精品久久国产精品 | 国产高清区| 男女激情麻豆 | 国产精品入口a级 | 丁香久久 | www.久久久.com | 中文字幕资源网在线观看 | 国产精品1000 | 久久婷婷综合激情 | 欧美日韩精品在线 | 狠狠干综合网 | www视频在线免费观看 | 国产精品久久久久久久免费 | 特级毛片网 | 97超级碰 | 三级av网站 | 日本不卡一区二区 | 一区二区精品在线 | 在线不卡视频 | 麻豆视频成人 | 国产高清在线一区 | 国产精品视频99 | 中文字幕一区二区三区四区久久 | 精品欧美一区二区三区久久久 | 天天色天天艹 | 精品亚洲一区二区 | 国产精品免费一区二区三区 | 久久久久久久久久久久久久免费看 | 91看片淫黄大片91 | 色丁香综合 | 午夜在线看 | 欧美成人精品欧美一级乱 | 波多野结衣视频一区二区三区 | 不卡av在线免费观看 | 97网站| 999在线精品 | 免费成人短视频 | 激情五月播播久久久精品 | 精品少妇一区二区三区在线 | 久久天天躁夜夜躁狠狠躁2022 | 91麻豆免费视频 | 日本免费久久高清视频 | 91精品爽啪蜜夜国产在线播放 | 最近字幕在线观看第一季 | 在线观看视频亚洲 | 日韩免费二区 | 91麻豆精品国产91久久久久 | 国产中文在线字幕 | 日韩精品欧美一区 | 色视频在线免费 | 美女免费黄视频网站 | 欧美一级在线看 | 国产色影院 | 激情五月av | 欧美色888 | 日韩精品免费一区二区在线观看 | 久久精品99国产精品 | 91精品国产乱码久久桃 | 久久久久网址 | 五月婷婷,六月丁香 | 免费av大片| 午夜久草 | 亚洲激色 | av一本久道久久波多野结衣 | 91黄色在线视频 | 亚洲欧美国产精品 | 久久久久久久久毛片 | 国产原创在线视频 | 国产麻豆视频在线观看 | 美女视频黄频大全免费 | 久久人人爽人人爽人人片av软件 | 精品毛片一区二区免费看 | 久久久久久久福利 | 天天色天天射综合网 | 成人天堂网 | 一级性av | www欧美日韩 | 日韩精品一区二区三区免费视频观看 | 在线视频国产区 | 综合色伊人 | 亚洲综合色丁香婷婷六月图片 | 国产h片在线观看 | 久久精品直播 | 在线观看免费av网 | 精品国产黄色片 | 五月亚洲 | 黄色日批网站 | 麻豆精品视频 | 国产高清av在线播放 | 中文字幕在线播放第一页 | 欧美做受高潮 | 国产一级视频在线免费观看 | 免费a级黄色毛片 | 日本中文字幕影院 | 成人在线黄色电影 | 岛国av在线免费 | 亚洲欧美国产精品 | 国产91综合一区在线观看 | 狠狠色丁香婷婷综合橹88 | 婷婷丁香自拍 | av在观看 | 成人一级片免费看 | 久久精品资源 | 欧美一级视频免费看 | 中文字幕在线观看完整 | 91免费在线看片 | 亚洲一一在线 | 丁香激情婷婷 | 国产精品美女久久久久久久久久久 | 视频91在线| 91精品推荐 | 欧美在线a视频 | 国产精品一区二区在线 | 久久久精品网 | 国产精品二区三区 | 日韩欧美电影在线观看 | 午夜精品福利一区二区 | 成人蜜桃 | 欧美污在线观看 |