亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C#遍歷DLL導出函數

2019-11-14 15:54:24
字體:
來源:轉載
供稿:網友

C#如何去遍歷一個由C++或E語言編寫的本地DLL導出函數呢 不過在這里我建議對PE一無所知的人 

你或許應先補補這方面的知識,我不知道為什么PE方面的 應用在C#中怎么這么少,我查閱過相關

C#的知識大概只見一個人寫過關于PE的應用 還只是從PE信息中判斷執行文件是X86還是X64方式

編譯,難道C#程序員真的很差 真的只能會點asp.net / MVC?想想看雪論壇那些玩inline-asm / 

inline-hook的牛牛 真是感到有很大差距 不過不論什么語言 在我看來其實都差不多 重點在于人是否

有心。雖然我不敢保證C#可以嵌入動態匯編(auto-asm)但是我可以保證C#可以做inline-hook雖然會

的人比較少,不過也還好,至少C#程序員不會是一群渣渣。不過我在寫下述代碼時,可是累得緊 寫

結構體部分有些麻煩 而且C#與C++有些不同 當然也可以動態偏移地址搞定不過那個有些麻煩了,你

想推敲地址可不是那么好玩的事情,可能你自己推敲半天結果發現你推敲錯了,那種方法用在結構體

層次較少的情況下的確可以提升逼格 反正別人看不懂就好嘛? 呵呵。下面的代碼需要在X86的環境下

使用主要在于該代碼中使用的PE信息全是32位的結構體而非64位的PE信息結構體 所以需要X86環境

不過不論是X86還是X64方法都是相等的,只是兩者的結構體與對稱不太一樣而已。

PE格式,是微軟Win32環境可移植執行文件如(exe / sys / dll / vxd / vdm)等都是標準的文件格式

 

PE格式衍生于VAX / VMS上的COFF文件格式,Portable是指對于不同的Windows版本和不同的

CPU類型上PE文件的格式是一樣的,或許CPU不一指令與二進制編碼不一,但是文件中各種東

西的布局是一至的。

PE文件中第一個字節是MS-DOS信息頭即IMAGE_DOS_HEADER與IMAGE_NT_HEADER中包

含許多PE裝載器用到。

 

[csharp] view plaincopy
  1. [STAThread]  
  2. unsafe static void Main()  
  3. {  
  4.     IntPtr hFileBase = Win32Native._lopen(@"C:/Windows/System32/ATL.dll", Win32Native.OF_SHARE_COMPAT);  
  5.     IntPtr hFileMapping = Win32Native.CreateFileMapping(hFileBase, Win32Native.NULL, Win32Native.PAGE_READONLY, 0, 0, null);  
  6.     IntPtr PSDos32pe = Win32Native.MapViewOfFile(hFileMapping, Win32Native.FILE_MAP_READ, 0, 0, Win32Native.NULL);  // e_lfanew 248       
  7.     IMAGE_DOS_HEADER sDos32pe = (IMAGE_DOS_HEADER)Marshal.PtrToStructure(psDos32pe, typeof(IMAGE_DOS_HEADER));  
  8.     IntPtr psNt32pe = (IntPtr)(sDos32pe.e_lfanew + (long)psDos32pe);  
  9.     IMAGE_NT_HEADERS sNt32pe = (IMAGE_NT_HEADERS)Marshal.PtrToStructure(psNt32pe, typeof(IMAGE_NT_HEADERS));  
  10.     // 63 63 72 75 6E 2E 63 6F 6D  
  11.     IntPtr psExportDirectory = Win32Native.ImageRvaToVa(psNt32pe, psDos32pe, sNt32pe.OptionalHeader.ExportTable.VirtualAddress, Win32Native.NULL);  
  12.     IMAGE_EXPORT_DIRECTORY sExportDirectory = (IMAGE_EXPORT_DIRECTORY)Marshal.PtrToStructure(psExportDirectory, typeof(IMAGE_EXPORT_DIRECTORY));  
  13.     IntPtr ppExportOfNames = Win32Native.ImageRvaToVa(psNt32pe, psDos32pe, sExportDirectory.AddressOfNames, Win32Native.NULL);  
  14.     for (uint i = 0, nNoOfExports = sExportDirectory.NumberOfNames; i < nNoOfExports; i++)  
  15.     {  
  16.         IntPtr pstrExportOfName = Win32Native.ImageRvaToVa(psNt32pe, psDos32pe, (uint)Marshal.ReadInt32(ppExportOfNames, (int)(i * 4)), Win32Native.NULL);  
  17.         Console.WriteLine(Marshal.PtrToStringAnsi(pstrExportOfName));  
  18.     }  
  19.     Win32Native.UnmapViewOfFile(psDos32pe);  
  20.     Win32Native.CloseHandle(hFileMapping);  
  21.     Win32Native._lclose(hFileBase);  
  22.     Console.ReadKey(false);  
  23. }  

包含 入口點 Entry Point 

文件偏移地址 File Offset

虛擬地址 Virtual Address(VA)

基地址 Image Base

相對虛擬地址 Relative Virual Address(RVA)

公式:RVA (相對虛擬地址) = VA(虛擬地址) - Image Base (基地址)

文件偏移地址和虛擬地址轉換

在X86系統中,每個內存頁的大小是4KB

文件偏移地址 File Offset = RVA(相對虛擬地址) - ΔK

文件偏移地址 File Offset = VA(虛擬地址) - Image Base (基地址) - ΔK

詳細解釋內容請參考百度百科,反正你想真正理解還需要自己去研究PE文件

IMAGE_NT_HEADERS在MS-DOS信息頭后面它是標準的Win32執行文件信息頭,其中包含了

導入的函數表,導出函數表,資源信息表、CLR運行時頭,IAT、TLS表、包括調試信息 等等

我們現在要做的就是獲取在DLL中導出的函數名,而DLL是屬于標準Win32執行文件中的一種

那么我們則必須要獲取到IMAGE_NT_HEADERS結構,實際上需要定位NT結構是很簡單的,

因為在規定中NT信息頭在DOS信息頭后面,即IMAGE_DOS_HEADER.e_lfanew +  IMAGE_DOS_HEADER

所以你會看到我在代碼中有這樣一句話IntPtr psNt32pe = (IntPtr)(sDos32pe.e_lfanew + (long)psDos32pe);

IMAGE_OPTIONAL_HEADER可選映像頭是一個可選結構,但是IMAGE_FILE_HEADER結構不滿足PE文件

需求定義的屬性,因此這些屬性在OPTIONAL結構中定義,因此FILE+OPTIONAL兩個結構聯合起來 才是一

個完整的PE文件結構,在其中包含了很多重要的信息字段 如 AddressOfEntryPoint、DataDirectory、Subsystem

不過提到DataDirectory我想說一下,在C#中不好定義所以在代碼中該字段換了另一種方式定義,DataDirectory

默認是有16個IMAGE_DATA_DIRECTORY的尺寸,所以在代碼中你可以看到有很多該類型的定義。它們則是表

示DataDirectory中信息IMAGE_DIRECTORY_ENTRY_EXPORT導出表 我們現在只需要獲取它的信息,在這里

我們需要用到ImageRvaToVa(相對虛擬地址到虛擬地址)有人是這樣理解的, 物理地址到虛擬地址 不過原來我在

理解時這個地方也是小小糾結了一番,不過后來則釋然了。ImageRvaToVa(NT_H, DOS_H, RVA, RvaSection);

IMAGE_DATA_DIRECTORY中包含兩個字段,一個VirtualAddress(RVA)另一個為Size(尺寸)獲取到結構體中的

RVA但是這個地址我們不管怎么轉換都沒法使用,對的因為提供給我的地址根本沒法用 那么我們則需要把RVA

轉換為VA利用上面提到函數,只有默默的感謝微軟一番 呵呵,當轉換后會得到IMAGE_EXPORT_DIRECTORY

在這里我需要提示一下大家,不是每個DataDirectory包含的RVA對應的結構都是EXPORT每個都有自己獨立的

解釋結構,不要搞混了 不然肯定會飛高的。

我們需要IMAGE_EXPORT_DIRECTORY中NumberOfNames(函數名總數)與AddressOfNames(函數名地址)

兩個字段中的內容,不過AddressOfNames中包含的是相對虛擬地址RVA,所以我們需要做一次轉換,會返回有

效char**的指針前提你提供的數據有效否則返回NULL,由于C#中你懂的char占兩個字節,即char=wchar_t那么

我們查看指針中的數據肯定會有問題DLL導出函數名全部是Ascii編碼,所以為了方便在C#專用干脆IntPtr方便通過

Marshal進行轉換最后只是進行一個資源釋放的操作好了基本就是這個樣子剩下的還需要大家自己去理解多說無益

 

[csharp] view plaincopy
  1. using System;  
  2. using System.Runtime.InteropServices;  
  3.   
  4. // #include "stdafx.h"  
  5. // #include <ImageHlp.h>  
  6. // #include <Windows.h>  
  7. // #

 

  1. static partial class Win32Native  
  2. {  
  3.     [DllImport("dbghelp", SetLastError = true)] // PIMAGE_SECTION_HEADER LastRvaSection  
  4.     public static extern IntPtr ImageRvaToVa(IntPtr NtHeaders, IntPtr Base, uint Rva, int LastRvaSection);  
  5.   
  6.     [DllImport("kernel32", SetLastError = true)]  
  7.     public static extern IntPtr _lopen(string lpPathName, int iReadWrite);  
  8.   
  9.     [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]  
  10.     public static extern IntPtr CreateFileMapping(IntPtr hFile, int lpFileMappingAttributes, int flProtect, uint dwMaximumSizeHigh, uint dwMaximumSizeLow, string lpName);  
  11.   
  12.     [DllImport("kernel32.dll", SetLastError = true)]  
  13.     public static extern IntPtr MapViewOfFile(IntPtr hFileMappingObject, int dwDesiredaccessuint dwFileOffsetHigh, uint dwFileOffsetLow, int dwNumberOfBytesToMap);  
  14.   
  15.     [DllImport("kernel32.dll", SetLastError = true)]  
  16.     public static extern int UnmapViewOfFile(IntPtr hMapFile);  
  17.   
  18.     [DllImport("kernel32.dll", SetLastError = true)]  
  19.     public static extern int _lclose(IntPtr hFile);  
  20.   
  21.     [DllImport("kernel32.dll", SetLastError = true)]  
  22.     public static extern int CloseHandle(IntPtr hObject);  
  23. }  
  24.   
  25. static partial class Win32Native  
  26. {  
  27.     public const int NULL = 0;  
  28.     public const int OF_SHARE_COMPAT = 0;  
  29.     public const int PAGE_READONLY = 2;  
  30.     public const int FILE_MAP_READ = 4;  
  31.     public const int IMAGE_DIRECTORY_ENTRY_EXPORT = 0;  
  32. }  
  33.   
  34. [StructLayout(LayoutKind.Sequential)]  
  35. public struct IMAGE_DOS_HEADER  
  36. {  
  37.     [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]  
  38.     public char[] e_magic;       // Magic number  
  39.     public ushort e_cblp;    // Bytes on last page of file  
  40.     public ushort e_cp;      // Pages in file  
  41.     public ushort e_crlc;    // Relocations  
  42.     public ushort e_cparhdr;     // Size of header in paragraphs  
  43.     public ushort e_minalloc;    // Minimum extra paragraphs needed  
  44.     public ushort e_maxalloc;    // Maximum extra paragraphs needed  
  45.     public ushort e_ss;      // Initial (relative) SS value  
  46.     public ushort e_sp;      // Initial SP value  
  47.     public ushort e_csum;    // Checksum  
  48.     public ushort e_ip;      // Initial IP value  
  49.     public ushort e_cs;      // Initial (relative) CS value  
  50.     public ushort e_lfarlc;      // File address of relocation table  
  51.     public ushort e_ovno;    // Overlay number  
  52.     [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]  
  53.     public ushort[] e_res1;    // Reserved Words  
  54.     public ushort e_oemid;       // OEM identifier (for e_oeminfo)  
  55.     public ushort e_oeminfo;     // OEM information; e_oemid specific  
  56.     [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]  
  57.     public ushort[] e_res2;    // Reserved words  
  58.     public int e_lfanew;      // File address of new exe header  
  59.   
  60.     private string _e_magic  
  61.     {  
  62.         get { return new string(e_magic); }  
  63.     }  
  64.   
  65.     public bool isValid  
  66.     {  
  67.         get { return _e_magic == "MZ"; }  
  68.     }  
  69. }  
  70.   
  71. [StructLayout(LayoutKind.Explicit)]  
  72. public struct IMAGE_OPTIONAL_HEADERS  
  73. {  
  74.     [FieldOffset(0)]  
  75.     public MagicType Magic;  
  76.   
  77.     [FieldOffset(2)]  
  78.     public byte MajorLinkerVersion;  
  79.   
  80.     [FieldOffset(3)]  
  81.     public byte MinorLinkerVersion;  
  82.   
  83.     [FieldOffset(4)]  
  84.     public uint SizeOfCode;  
  85.   
  86.     [FieldOffset(8)]  
  87.     public uint SizeOfInitializedData;  
  88.   
  89.     [FieldOffset(12)]  
  90.     public uint SizeOfUninitializedData;  
  91.   
  92.     [FieldOffset(16)]  
  93.     public uint AddressOfEntryPoint;  
  94.   
  95.     [FieldOffset(20)]  
  96.     public uint BaSEOfCode;  
  97.   
  98.     // PE32 contains this additional field  
  99.     [FieldOffset(24)]  
  100.     public uint BaseOfData;  
  101.   
  102.     [FieldOffset(28)]  
  103.     public uint ImageBase;  
  104.   
  105.     [FieldOffset(32)]  
  106.     public uint SectionAlignment;  
  107.   
  108.     [FieldOffset(36)]  
  109.     public uint FileAlignment;  
  110.   
  111.     [FieldOffset(40)]  
  112.     public ushort MajorOperatingSystemVersion;  
  113.   
  114.     [FieldOffset(42)]  
  115.     public ushort MinorOperatingSystemVersion;  
  116.   
  117.     [FieldOffset(44)]  
  118.     public ushort MajorImageVersion;  
  119.   
  120.     [FieldOffset(46)]  
  121.     public ushort MinorImageVersion;  
  122.   
  123.     [FieldOffset(48)]  
  124.     public ushort MajorSubsystemVersion;  
  125.   
  126.     [FieldOffset(50)]  
  127.     public ushort MinorSubsystemVersion;  
  128.   
  129.     [FieldOffset(52)]  
  130.     public uint Win32VersionValue;  
  131.   
  132.     [FieldOffset(56)]  
  133.     public uint SizeOfImage;  
  134.   
  135.     [FieldOffset(60)]  
  136.     public uint SizeOfHeaders;  
  137.   
  138.     [FieldOffset(64)]  
  139.     public uint CheckSum;  
  140.   
  141.     [FieldOffset(68)]  
  142.     public SubSystemType Subsystem;  
  143.   
  144.     [FieldOffset(70)]  
  145.     public DllCharacteristicsType DllCharacteristics;  
  146.   
  147.     [FieldOffset(72)]  
  148.     public uint SizeOfStackReserve;  
  149.   
  150.     [FieldOffset(76)]  
  151.     public uint SizeOfStackCommit;  
  152.   
  153.     [FieldOffset(80)]  
  154.     public uint SizeOfHeapReserve;  
  155.   
  156.     [FieldOffset(84)]  
  157.     public uint SizeOfHeapCommit;  
  158.   
  159.     [FieldOffset(88)]  
  160.     public uint LoaderFlags;  
  161.   
  162.     [FieldOffset(92)]  
  163.     public uint NumberOfRvaAndSizes;  
  164.   
  165.     [FieldOffset(96)]  
  166.     public IMAGE_DATA_DIRECTORY ExportTable;  
  167.   
  168.     [FieldOffset(104)]  
  169.     public IMAGE_DATA_DIRECTORY ImportTable;  
  170.   
  171.     [FieldOffset(112)]  
  172.     public IMAGE_DATA_DIRECTORY ResourceTable;  
  173.   
  174.     [FieldOffset(120)]  
  175.     public IMAGE_DATA_DIRECTORY ExceptionTable;  
  176.   
  177.     [FieldOffset(128)]  
  178.     public IMAGE_DATA_DIRECTORY CertificateTable;  
  179.   
  180.     [FieldOffset(136)]  
  181.     public IMAGE_DATA_DIRECTORY BaseRelocationTable;  
  182.   
  183.     [FieldOffset(144)]  
  184.     public IMAGE_DATA_DIRECTORY Debug;  
  185.   
  186.     [FieldOffset(152)]  
  187.     public IMAGE_DATA_DIRECTORY Architecture;  
  188.   
  189.     [FieldOffset(160)]  
  190.     public IMAGE_DATA_DIRECTORY GlobalPtr;  
  191.   
  192.     [FieldOffset(168)]  
  193.     public IMAGE_DATA_DIRECTORY TLSTable;  
  194.   
  195.     [FieldOffset(176)]  
  196.     public IMAGE_DATA_DIRECTORY LoadConfigTable;  
  197.   
  198.     [FieldOffset(184)]  
  199.     public IMAGE_DATA_DIRECTORY BoundImport;  
  200.   
  201.     [FieldOffset(192)]  
  202.     public IMAGE_DATA_DIRECTORY IAT;  
  203.   
  204.     [FieldOffset(200)]  
  205.     public IMAGE_DATA_DIRECTORY DelayImportDescriptor;  
  206.   
  207.     [FieldOffset(208)]  
  208.     public IMAGE_DATA_DIRECTORY CLRRuntimeHeader;  
  209.   
  210.     [FieldOffset(216)]  
  211.     public IMAGE_DATA_DIRECTORY Reserved;  
  212. }  
  213.   
  214. [StructLayout(LayoutKind.Sequential)]  
  215. public struct IMAGE_FILE_HEADER  
  216. {  
  217.     public ushort Machine;  
  218.     public ushort NumberOfSections;  
  219.     public uint TimeDateStamp;  
  220.     public uint PointerToSymbolTable;  
  221.     public uint NumberOfSymbols;  
  222.     public ushort SizeOfOptionalHeader;  
  223.     public ushort Characteristics;  
  224. }  
  225.   
  226. public enum MachineType : ushort  
  227. {  
  228.     Native = 0,  
  229.     I386 = 0x014c,  
  230.     Itanium = 0x0200,  
  231.     x64 = 0x8664  
  232. }  
  233. public enum MagicType : ushort  
  234. {  
  235.     IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x10b,  
  236.     IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x20b  
  237. }  
  238. public enum SubSystemType : ushort  
  239. {  
  240.     IMAGE_SUBSYSTEM_UNKNOWN = 0,  
  241.     IMAGE_SUBSYSTEM_NATIVE = 1,  
  242.     IMAGE_SUBSYSTEM_WINDOWS_GUI = 2,  
  243.     IMAGE_SUBSYSTEM_WINDOWS_CUI = 3,  
  244.     IMAGE_SUBSYSTEM_POSIX_CUI = 7,  
  245.     IMAGE_SUBSYSTEM_WINDOWS_CE_GUI = 9,  
  246.     IMAGE_SUBSYSTEM_EFI_application = 10,  
  247.     IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11,  
  248.     IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER = 12,  
  249.     IMAGE_SUBSYSTEM_EFI_ROM = 13,  
  250.     IMAGE_SUBSYSTEM_XBOX = 14  
  251.   
  252. }  
  253. public enum DllCharacteristicsType : ushort  
  254. {  
  255.     RES_0 = 0x0001,  
  256.     RES_1 = 0x0002,  
  257.     RES_2 = 0x0004,  
  258.     RES_3 = 0x0008,  
  259.     IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE = 0x0040,  
  260.     IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY = 0x0080,  
  261.     IMAGE_DLL_CHARACTERISTICS_NX_COMPAT = 0x0100,  
  262.     IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = 0x0200,  
  263.     IMAGE_DLLCHARACTERISTICS_NO_SEH = 0x0400,  
  264.     IMAGE_DLLCHARACTERISTICS_NO_BIND = 0x0800,  
  265.     RES_4 = 0x1000,  
  266.     IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = 0x2000,  
  267.     IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000  
  268. }  
  269.   
  270. [StructLayout(LayoutKind.Sequential)]  
  271. public struct IMAGE_DATA_DIRECTORY  
  272. {  
  273.     public uint VirtualAddress;  
  274.     public uint Size;  
  275. }  
  276.   
  277. [StructLayout(LayoutKind.Sequential)]  
  278. public struct IMAGE_EXPORT_DIRECTORY  
  279. {  
  280.     public uint Characteristics;  
  281.     public uint TimeDateStamp;  
  282.     public ushort MajorVersion;  
  283.     public ushort MinorVersion;  
  284.     public uint Name;  
  285.     public uint Base;  
  286.     public uint NumberOfFunctions;  
  287.     public uint NumberOfNames;  
  288.     public uint AddressOfFunctions;     // RVA from base of image  
  289.     public uint AddressOfNames;     // RVA from base of image  
  290.     public uint AddressOfNameOrdinals;  // RVA from base of image  
  291. }  
  292.   
  293. [StructLayout(LayoutKind.Explicit)]  
  294. public struct IMAGE_NT_HEADERS  
  295. {  
  296.     [FieldOffset(0)]  
  297.     [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]  
  298.     public char[] Signature;  
  299.   
  300.     [FieldOffset(4)]  
  301.     public IMAGE_FILE_HEADER FileHeader;  
  302.   
  303.     [FieldOffset(24)]  
  304.     public IMAGE_OPTIONAL_HEADERS OptionalHeader;  
  305.   
  306.     private string _Signature  
  307.     {  
  308.         get { return new string(Signature); }  
  309.     }  
  310.   
  311.     public bool isValid  
  312.     {  
  313.         get { return _Signature == "PE/0/0" && (OptionalHeader.Magic == MagicType.IMAGE_NT_OPTIONAL_HDR32_MAGIC || OptionalHeader.Magic == MagicType.IMAGE_NT_OPTIONAL_HDR64_MAGIC); }  
  314.     }  
  315. }  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人黄色av播放免费| 久久精品99国产精品酒店日本| 欧美成人免费全部| 亚洲最大福利网站| 国产精品视频在线观看| 亚洲最大福利视频网| 日韩免费视频在线观看| 日韩av在线网| 亚洲欧美日韩爽爽影院| 欧美高清视频免费观看| 精品日韩视频在线观看| 日韩成人av在线播放| 亚洲欧洲午夜一线一品| 日韩av电影手机在线| 亚洲精品久久久久久下一站| 韩国国内大量揄拍精品视频| 欧美影院在线播放| 精品成人乱色一区二区| 亚洲电影在线看| 97在线视频免费| 亚洲国产成人爱av在线播放| 日韩视频永久免费观看| 国产精品久久久久久av福利软件| 日韩av男人的天堂| 成人黄在线观看| 亚洲bt欧美bt日本bt| 亚洲国内精品视频| 成人免费高清完整版在线观看| 欧美丝袜一区二区| 欧美精品手机在线| 91极品视频在线| 国产一区二区精品丝袜| 欧美日韩在线看| 欧美在线观看视频| 亚洲日韩中文字幕在线播放| 成人网在线视频| 欧美激情第一页xxx| 国产精品ⅴa在线观看h| 亚洲美女福利视频网站| 国产精品三级网站| 成人国产精品日本在线| 欧美日韩性视频| 国内免费久久久久久久久久久| 久久精品在线视频| 日本欧美国产在线| 国产日韩欧美在线看| 久久视频这里只有精品| wwwwwwww亚洲| 日韩美女视频中文字幕| 欧美激情欧美狂野欧美精品| 亚洲sss综合天堂久久| 亚洲天堂网在线观看| 日本午夜在线亚洲.国产| 午夜精品一区二区三区视频免费看| 国产精品99久久久久久久久| 欧美国产日韩xxxxx| 欧美美最猛性xxxxxx| 红桃av永久久久| 亚洲电影成人av99爱色| 国产九九精品视频| 亚洲成在人线av| 日韩精品在线免费播放| 亚洲国产精品va| 欧美激情一二三| 日韩精品福利网站| 日韩欧美亚洲一二三区| 91chinesevideo永久地址| 欧美激情高清视频| 国产亚洲成av人片在线观看桃| 亚洲japanese制服美女| 九九热这里只有精品6| 亚洲欧洲在线播放| 日韩精品免费在线播放| 久久久精品一区| 成人激情视频在线播放| 91国偷自产一区二区三区的观看方式| 97视频在线观看免费高清完整版在线观看| 色哟哟入口国产精品| 2020欧美日韩在线视频| 亚州精品天堂中文字幕| 欧美最猛性xxxx| 日韩在线视频免费观看| 欧美日韩电影在线观看| 深夜精品寂寞黄网站在线观看| 7777精品久久久久久| 国产精品久久久91| 成人免费看吃奶视频网站| 97视频免费观看| 91免费的视频在线播放| 亚洲精品自拍第一页| 国产精品96久久久久久又黄又硬| 成人有码在线播放| 一本色道久久88精品综合| 日韩精品极品视频| 日韩69视频在线观看| 精品国产依人香蕉在线精品| 91在线中文字幕| 91人人爽人人爽人人精88v| 欧美日韩在线观看视频| 成人午夜在线影院| 亚洲综合最新在线| 欧美日韩在线影院| 久久亚洲精品一区二区| 亚洲欧美激情另类校园| 国产精品久久久久一区二区| 日韩精品电影网| 国产精品入口夜色视频大尺度| 久久久久中文字幕2018| 欧美在线免费视频| 国产人妖伪娘一区91| 一区二区三区亚洲| 国外色69视频在线观看| 亚洲二区在线播放视频| 亚州成人av在线| 国产日韩av高清| 欧美视频二区36p| 欧美三级欧美成人高清www| 久99九色视频在线观看| 国产精品狼人色视频一区| 国产精品久久不能| 亚洲欧美日韩一区在线| 国产丝袜一区视频在线观看| 精品国产一区二区三区久久| 欧美激情视频一区| 国产一区二区三区在线免费观看| 欧美成人精品一区| 久久精品免费电影| 日韩精品视频免费| 亚洲视频自拍偷拍| 亚洲第一精品福利| 亚洲最新av在线网站| 欧美做爰性生交视频| 日本乱人伦a精品| 欧美一乱一性一交一视频| 日本免费久久高清视频| 亚洲欧美日韩国产成人| 乱亲女秽乱长久久久| 日韩麻豆第一页| 69av成年福利视频| 国产精自产拍久久久久久蜜| 国产精品稀缺呦系列在线| 精品久久久久久久中文字幕| 欧美在线视频一二三| 欧美亚洲免费电影| 欧美一级电影在线| 亚洲天堂av在线播放| 久久久精品亚洲| 成人欧美一区二区三区在线湿哒哒| 91国产在线精品| 自拍偷拍亚洲精品| 欧美日本啪啪无遮挡网站| 日韩最新免费不卡| 国产在线精品一区免费香蕉| 富二代精品短视频| 色哟哟入口国产精品| 国产精品一区二区三区在线播放| 久久精品成人欧美大片古装| 国外成人在线播放| 国产91精品最新在线播放| 国产视频综合在线| 影音先锋欧美在线资源| 欧洲亚洲在线视频| 欧美成年人网站| 国产精品日日做人人爱|