亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? driver.c

?? ExcpHook is an open source (see license.txt) Exception Monitor for Windows made by Gynvael Coldwind
?? C
字號(hào):
/* 
 * ExcpHook Global ring0 Exception Monitor (KiDispatchException Hooking Driver)
 * code by gynvael.coldwind//vx
 * mailto: gynvael@coldwind.pl
 * www   : http://gynvael.vexillium.org
 *
 * LICENSE
 * Permission is hereby granted to use, copy, modify, and distribute this
 * source code, or portions hereof, for any purpose, without fee, subject
 * to the following restrictions:
 * 
 * 1. The origin of this source code must not be misrepresented.
 * 
 * 2. Altered versions must be plainly marked as such and must not
 *    be misrepresented as being the original source.
 * 
 * 3. This Copyright notice may not be removed or altered from any
 *    source or altered source distribution. 
 * 
 * This software is provided AS IS. The author does not guarantee that 
 * this program works, is bugfree, etc. The author does not take any
 * responsibility for eventual damage caused by this program.
 * Use at own risk.
 *
 *
 * Command list (WRITE):
 * DWORD    Command  
 * 00000000 Get Version     CHAR  Buffer[], DWORD Size
 *
 * Response list (READ):
 * DWORD    Response        Format
 * Exception data
 */
#include <ntddk.h>
#include <windef.h>
#include "../config.h"

// Special thx to Frank Boldewin for german KiDispatchException signature
static const unsigned char *FuncSig =
  "\x68\x90\x03\x00\x00\x68\x00\x00\x00\x00\xE8\x00\x00\x00\x00\xA1"
  "\x00\x00\x00\x00\x89\x45\xE4\x8B\x75\x08\x89\xB5\x14\xFD\xFF\xFF"
  "\x8B\x4D\x0C\x89\x8D\x10\xFD\xFF\xFF\x8B\x5D\x10\x89\x9D\x08\xFD"
  "\xFF\xFF\x00\xA1\x20\x00\x00\x00\xFF\x80\x04\x05\x00\x00\xC7\x85"
  "\x18\xFD";

static const unsigned char *FuncMask =
  "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\x00\x00\x00\x00\xFF"
  "\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
  "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
  "\xFF\xFF\x00\xFF\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
  "\xFF\xFF";

#define SIG_LENGTH 66
#define SIG_FIRST_SIGHT 6

// Changed to 128
#define MAX_EXCP_COUNT 128

static unsigned char HookCode[] =
  "\xB8\x44\x33\x22\x11" // mov eax, JUMP
  "\xFF\xE0"             // jmp eax
  "\x90\x90\x90";        // nop padding

NTSTATUS ExcpHookClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
NTSTATUS ExcpHookCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
NTSTATUS ExcpHookRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
NTSTATUS ExcpHookWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
NTSTATUS ExcpHookUnsupported(PDEVICE_OBJECT DeviceObject, PIRP Irp);
void DriverUnload(PDRIVER_OBJECT DriverObject);
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath);

static char *sDriverVersion = "ExcpHook driver v" EXCPHOOK_VERSION " by gynvael.coldwind//vx.\0\0\0\0"; // zero padded

#pragma alloc_text(INIT, DriverEntry)

static BOOL bClientConnected;

unsigned char OrgKiDispatchException_Entry[16];
PVOID OrgKiDispatchException;
DWORD OrgKiDispatchException_SecondPushValue;
DWORD OrgKiDispatchException_JmpAddress;
DWORD OrgKiDispatchException_HookSet;

PEXCEPTION_RECORD ExcpRecords;
DWORD ExcpIdx;
DWORD ExcpMax;

// Spin locks
KSPIN_LOCK         SpLock;
KLOCK_QUEUE_HANDLE SpLockQueue;

/*******************************************************************
 * MySetExceptionInfo()
 *******************************************************************/
void
MySetExceptionInfo(PEXCEPTION_RECORD ExceptionRecord, BOOLEAN FirstChance)
{
  DWORD AddParms = (FirstChance << 16) | ((WORD)PsGetCurrentProcessId());
  DWORD Idx;

  // Acquire spinlock
  KeAcquireInStackQueuedSpinLock(&SpLock, &SpLockQueue);

  // Can throw in the exception ?
  if(ExcpIdx < ExcpMax)
  {
    // Throw it in
    Idx = ExcpIdx++;

    // Add the data
    memcpy(&ExcpRecords[Idx], ExceptionRecord, sizeof(*ExceptionRecord));
    ExcpRecords[Idx].ExceptionRecord = (PEXCEPTION_RECORD)AddParms;
  }

  // Release the spinlock and return
  KeReleaseInStackQueuedSpinLock(&SpLockQueue); 
}

/*******************************************************************
 * MyKiDispatchException()
 *
 * Original function params:
 *  IN PEXCEPTION_RECORD ExceptionRecord,
 *  IN PVOID ExceptionFrame,
 *  IN PVOID TrapFrame,
 *  IN KPROCESSOR_MODE PreviousMode,
 *  IN BOOLEAN FirstChance
 *******************************************************************/
__declspec(naked) VOID
MyKiDispatchException(VOID)
{
  __asm
  {
    // Stack: ESP -> [RET] [ExceptionRecord] [ExceptionFrame] [TrapFrame] [PreviousMode] [FirstChance]
    cmp [esp+0x10], KernelMode
    je BailOut

    // Push ExceptionRecord and FirstChance back to the stack
    push [esp+0x14] // FirstChance
    push [esp+0x8]  // ExceptionRecord
    mov eax, MySetExceptionInfo
    call eax // STDCALL
 
    // Done
    BailOut:

    // Restore stack
    push 0x390
    push [OrgKiDispatchException_SecondPushValue]

    // Jump
    jmp [OrgKiDispatchException_JmpAddress]
  }
}

/*******************************************************************
 * HandleGetVersion()
 *******************************************************************/
NTSTATUS HandleGetVersion(char *Ptr, DWORD Size)
{
  NTSTATUS NtStatus = STATUS_SUCCESS;

  // Calculate items requiers
  DWORD StrSize = strlen(sDriverVersion) + 1;

  if(StrSize <= Size) 
  {
    RtlCopyMemory(Ptr, sDriverVersion, StrSize);
  }
  else
  {
    NtStatus = STATUS_UNSUCCESSFUL;
  }

  return NtStatus;
}

/*******************************************************************
 * DriverUnload()
 *******************************************************************/
void
DriverUnload(
  IN PDRIVER_OBJECT DriverObject
  )
{
  UNICODE_STRING usDosDeviceName;

  // Show some debug message
  DbgPrint("ExcpHook: Driver Unload\r\n");

  // Aquire a spinlock
  KeAcquireInStackQueuedSpinLock(&SpLock, &SpLockQueue);

  // Free data list
  ExFreePoolWithTag((PVOID)ExcpRecords, 'PCXE');
  ExcpMax = 0;
  ExcpIdx = 0;

  // Release the spinlock
  KeReleaseInStackQueuedSpinLock(&SpLockQueue); 

  // Remove device
  RtlInitUnicodeString(&usDosDeviceName, L"\\DosDevices\\ExcpHook");
  IoDeleteSymbolicLink(&usDosDeviceName);
  IoDeleteDevice(DriverObject->DeviceObject);

  // Show some debug message
  DbgPrint("ExcpHook: Driver Unload completed\r\n");
}

/*******************************************************************
 * DriverEntry()
 *******************************************************************/
NTSTATUS
DriverEntry(
  IN PDRIVER_OBJECT DriverObject,
  IN PUNICODE_STRING RegistryPath
  )
{
  NTSTATUS NtStatus = STATUS_SUCCESS;
  UNICODE_STRING usDriverName, usDosDeviceName;
  PDEVICE_OBJECT pDeviceObject = NULL;
  UINT i;

  // Some debug message
  DbgPrint("ExcpHook: Driver Entry\r\n");

  // Try to allocate the memory first
  ExcpRecords = (PEXCEPTION_RECORD)ExAllocatePoolWithTag(NonPagedPool, sizeof(EXCEPTION_RECORD) * MAX_EXCP_COUNT, 'PCXE');
  if(ExcpRecords == NULL)
  {
    // Hmm, no memory, no fun
    return STATUS_UNSUCCESSFUL;
  }

  // Set the ExcpMax
  ExcpMax = MAX_EXCP_COUNT;

  // Initialise spinlocks
  KeInitializeSpinLock(&SpLock);

  // Create a device
  RtlInitUnicodeString(&usDriverName, L"\\Device\\ExcpHook");
  RtlInitUnicodeString(&usDosDeviceName, L"\\DosDevices\\ExcpHook");

  NtStatus = IoCreateDevice(DriverObject, 0, &usDriverName, 
      FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &pDeviceObject);
  
  // Set Functions
  for(i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
    DriverObject->MajorFunction[i] = ExcpHookUnsupported;

  DriverObject->MajorFunction[IRP_MJ_CLOSE]  = ExcpHookClose;
  DriverObject->MajorFunction[IRP_MJ_CREATE] = ExcpHookCreate;
  DriverObject->MajorFunction[IRP_MJ_READ]   = ExcpHookRead;
  DriverObject->MajorFunction[IRP_MJ_WRITE]  = ExcpHookWrite;

  DriverObject->DriverUnload = DriverUnload;

  pDeviceObject->Flags |= DO_DIRECT_IO;
  pDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;

  // Create a symbolic link
  IoCreateSymbolicLink(&usDosDeviceName, &usDriverName);
  
  // Reset the bClientConnected
  bClientConnected = FALSE;
 
  // And another debug msg
  DbgPrint("ExcpHook: Driver Entry completed\r\n");

  return NtStatus;
}

/*******************************************************************
 * ExcpHookUnsupported()
 *******************************************************************/
NTSTATUS 
ExcpHookUnsupported(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
  DbgPrint("ExcpHook: Unsupporeted\r\n");
  return STATUS_NOT_SUPPORTED;
}

/*******************************************************************
 * ExcpHookClose()
 *******************************************************************/
NTSTATUS 
ExcpHookClose(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
  NTSTATUS NtStatus = STATUS_SUCCESS;
  DbgPrint("ExcpHook: Close\r\n");

  if(!bClientConnected)
    return STATUS_UNSUCCESSFUL; // zombie close r evil!

  bClientConnected = FALSE;

  // Unset hook
  if(OrgKiDispatchException_HookSet)
  {
    DbgPrint("ExcpHook: Trying to unhook\n");
    __try
    {
      memcpy(OrgKiDispatchException, OrgKiDispatchException_Entry, 16);
      DbgPrint("ExcpHook: Unhooked.\n");
      OrgKiDispatchException_HookSet = 0;
    }
    __except(1)
    {
      DbgPrint("ExcpHook: Unhook failed, expect BSoD\n");
    }
  }

  return NtStatus;
}

/*******************************************************************
 * ExcpHookCreate()
 *******************************************************************/
NTSTATUS 
ExcpHookCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
  NTSTATUS NtStatus = STATUS_SUCCESS;
  DWORD Addr, EndAddr, i;
  DbgPrint("ExcpHook: Create\r\n");

  if(bClientConnected)
    return STATUS_UNSUCCESSFUL; // only one client per time

  bClientConnected = TRUE;

  // Set up hook
  Addr = (DWORD)RtlInitString & 0xfff00000 - 0x10000;
  EndAddr = Addr + 0x100000; // 100 pages should be OK

  DbgPrint("ExcpHook: Looking for KiDispatchException from %.8x\n", Addr);

  // Find
  for(;Addr < EndAddr; Addr++)
  {
    // Check first sight
    if(memcmp((PVOID)Addr, FuncSig, SIG_FIRST_SIGHT) == 0)
    {
      // Double check with whole sig
      int OK = 1;
      DbgPrint("ExcpHook: SIG_FIRST_SIGHT at %.8x\n", Addr);
      for(i = 0; i < SIG_LENGTH; i++)
        if((((unsigned char*)Addr)[i] & FuncMask[i]) != FuncSig[i])
        {
          OK = 0;
          DbgPrint("ExcpHook: Diffrent at %.8x\n", Addr+i);
          break;
        }

      if(!OK) continue;

      // Address is OK, hook!
      DbgPrint("ExcpHook: Found KiDispatchException at %.8x, hooking\n", Addr);
      __try
      {
        OrgKiDispatchException = (PVOID)Addr;
        memcpy(OrgKiDispatchException_Entry, (PVOID)Addr, 16);
        memcpy(&OrgKiDispatchException_SecondPushValue, (PVOID)(Addr + 6), 4);
        OrgKiDispatchException_JmpAddress = Addr + 10;

        *(DWORD*)(HookCode + 1) = (DWORD)MyKiDispatchException;

        memcpy((PVOID)Addr, HookCode, 10);

        OrgKiDispatchException_HookSet = 1;
        DbgPrint("ExcpHook: Hook set!\n");      
      }
      __except(1)
      {
        DbgPrint("ExcpHook: Hooking faild!\n");
      }

      break;
    }
  }

  if(Addr >= EndAddr)
  {
    DbgPrint("ExcpHook: KiDispatchException not found (huh?)\n");
  }



  return NtStatus;
}


/*******************************************************************
 * ExcpHookRead()
 *******************************************************************/
NTSTATUS 
ExcpHookRead(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
  NTSTATUS NtStatus = STATUS_UNSUCCESSFUL;
  void *pReadDataBuffer;
  UINT dwDataRead = 0;
  DWORD i, Written;
  PIO_STACK_LOCATION pIoStackIrp = NULL;
//  DbgPrint("ExcpHook: Read\r\n");
  pIoStackIrp = IoGetCurrentIrpStackLocation(Irp);

  if(pIoStackIrp && Irp->MdlAddress)
  {
    pReadDataBuffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);

    if(pReadDataBuffer)
    {
      DWORD MaxCount = pIoStackIrp->Parameters.Read.Length / sizeof(EXCEPTION_RECORD);
      dwDataRead = 0;

      // Acquire spinlock to access the data
      KeAcquireInStackQueuedSpinLock(&SpLock, &SpLockQueue);

      // Check limits
      if(MaxCount > ExcpIdx) MaxCount = ExcpIdx;

      // Can we copy something ?
      if(MaxCount >= 1)
      {
        // DbgPrint("ExcpHook: Data count %x\n", MaxCount);
                
        // Count the data read
        dwDataRead = MaxCount * sizeof(EXCEPTION_RECORD);

        // Copy the data
        memcpy(pReadDataBuffer, ExcpRecords, MaxCount * sizeof(EXCEPTION_RECORD));

        // Move the data
        ExcpIdx -= MaxCount;

        if(ExcpIdx)
          memmove(ExcpRecords, &ExcpRecords[MaxCount], ExcpIdx * sizeof(EXCEPTION_RECORD));
        
      }

      // Release the spinlock
      KeReleaseInStackQueuedSpinLock(&SpLockQueue); 


      NtStatus = STATUS_SUCCESS;
     // DbgPrint("ExcpHook: Read complete %x\r\n", dwDataRead);
    }
  }

  Irp->IoStatus.Status = NtStatus;
  Irp->IoStatus.Information = dwDataRead;

  IoCompleteRequest(Irp, IO_NO_INCREMENT);
 
  return NtStatus;
}

/*******************************************************************
 * ExcpHookWrite()
 *******************************************************************/
#define INVOKE(a,b) if(i+a < DataSize) { b; i+=a; }
#define ARG(a)  (Data[i+a+1])
NTSTATUS 
ExcpHookWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
  NTSTATUS NtStatus = STATUS_SUCCESS;
  PIO_STACK_LOCATION pIoStackIrp = NULL;
  DWORD DataSize, *Data, i;
  void *pWriteDataBuffer;
  pIoStackIrp = IoGetCurrentIrpStackLocation(Irp);
  
  DbgPrint("ExcpHook: Write\r\n");

  if(pIoStackIrp && Irp->MdlAddress && pIoStackIrp->Parameters.Write.Length >= 4)
  {
    pWriteDataBuffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);

    if(pWriteDataBuffer)
    {
      DataSize = pIoStackIrp->Parameters.Write.Length / 4;
      Data = (DWORD*)pWriteDataBuffer;
      for(i = 0; i < DataSize; i++)
      {
        switch(Data[i])
        {
          case 0x00000000:
            INVOKE(2, NtStatus = HandleGetVersion((char*)ARG(0), ARG(1)));
            break;

          default: NtStatus = STATUS_UNSUCCESSFUL;
        }
      }
      DbgPrint("ExcpHook: Write complete\r\n");
    }
  }

  Irp->IoStatus.Status = NtStatus;
  IoCompleteRequest(Irp, IO_NO_INCREMENT);

  return NtStatus;
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚州韩日在线看免费版国语版| 久久91精品久久久久久秒播| 99精品视频在线播放观看| 国产精品五月天| 97国产精品videossex| 亚洲最色的网站| 欧美一区二区三区成人| 免费不卡在线观看| 精品国产乱码久久久久久1区2区| 精品一区二区久久| 国产精品美女久久福利网站| 日本韩国精品在线| 蜜臀精品一区二区三区在线观看 | 欧美日韩亚洲综合一区| 亚洲成a人片在线不卡一二三区| 欧美日高清视频| 国精产品一区一区三区mba视频 | 亚洲国产精品t66y| 91激情在线视频| 免费看日韩a级影片| 国产亚洲欧美日韩在线一区| 91免费版在线看| 日韩中文字幕av电影| 久久免费视频色| 在线亚洲人成电影网站色www| 日韩av一区二区在线影视| 久久久91精品国产一区二区三区| 色噜噜夜夜夜综合网| 久久疯狂做爰流白浆xx| 日韩毛片高清在线播放| 欧美一区二区美女| 99精品视频在线观看| 美国毛片一区二区| 亚洲欧洲一区二区三区| 日韩一区二区三免费高清| 99久久er热在这里只有精品15| 亚洲h在线观看| 国产精品毛片久久久久久久| 国产精品超碰97尤物18| 欧美精品aⅴ在线视频| 成人免费视频一区| 捆绑紧缚一区二区三区视频| 国产精品高潮久久久久无| 日韩欧美一二三区| 在线区一区二视频| 国产福利91精品一区二区三区| 亚洲高清在线视频| 国产精品久久久久久久久久免费看| 欧美一区欧美二区| 在线观看视频一区二区| 懂色av中文字幕一区二区三区| 日本欧美在线看| 亚洲自拍偷拍网站| 亚洲欧洲美洲综合色网| 国产午夜精品在线观看| 欧美一区二区三区性视频| 91麻豆成人久久精品二区三区| 久久99在线观看| 亚洲18影院在线观看| 亚洲视频免费在线| 欧美国产在线观看| 久久无码av三级| 欧美一区二区私人影院日本| 欧美调教femdomvk| 色菇凉天天综合网| 91蜜桃免费观看视频| 成人自拍视频在线| 国产在线麻豆精品观看| 老司机午夜精品| 麻豆精品在线观看| 美日韩一级片在线观看| 日韩综合小视频| 奇米一区二区三区| 蜜桃视频一区二区| 免费人成网站在线观看欧美高清| 丝袜亚洲精品中文字幕一区| 亚洲va国产天堂va久久en| 亚洲综合色成人| 亚洲国产精品久久艾草纯爱| 亚洲一区二区在线视频| 亚洲成精国产精品女| 天堂成人免费av电影一区| 偷拍日韩校园综合在线| 日本色综合中文字幕| 欧美a一区二区| 国产一区福利在线| 懂色av一区二区在线播放| 成人国产在线观看| 色嗨嗨av一区二区三区| 欧美日韩在线播放三区| 91精品国产一区二区| 日韩免费性生活视频播放| 欧美精品一区二区三区久久久| 久久噜噜亚洲综合| 亚洲国产精品99久久久久久久久 | 亚洲一区二区三区中文字幕在线| 亚洲精品国产精华液| 婷婷中文字幕一区三区| 麻豆极品一区二区三区| 国产黑丝在线一区二区三区| 9i在线看片成人免费| 91久久奴性调教| 欧美一级欧美一级在线播放| 久久综合狠狠综合| 中文字幕一区在线观看| 亚洲国产精品一区二区久久| 蜜桃视频第一区免费观看| 国产成人午夜视频| 91丨九色丨蝌蚪丨老版| 欧美一区二区视频观看视频| 中文字幕av免费专区久久| 亚洲综合久久久| 国产一区在线精品| 91精品办公室少妇高潮对白| 欧美一区二区成人6969| 国产精品美女视频| 日韩av电影免费观看高清完整版在线观看| 国产在线精品国自产拍免费| 欧美综合天天夜夜久久| 国产亚洲欧美中文| 天堂蜜桃一区二区三区| 高清国产午夜精品久久久久久| 欧美日韩精品一区二区三区四区| 久久久久久久久久美女| 亚洲一区二区三区爽爽爽爽爽| 国产在线麻豆精品观看| 欧美另类变人与禽xxxxx| 日本一区二区三区视频视频| 日韩电影在线一区| 91丝袜美女网| 国产亚洲一本大道中文在线| 天涯成人国产亚洲精品一区av| 成人久久18免费网站麻豆| 日韩视频一区二区三区| 亚洲精品va在线观看| 国产成人一级电影| 日韩女优毛片在线| 一区二区三区四区视频精品免费| 国产麻豆成人精品| 5月丁香婷婷综合| 一区二区视频在线| 成人爱爱电影网址| 精品日韩av一区二区| 日韩av中文在线观看| 欧美性一级生活| 亚洲精品久久嫩草网站秘色| 成人黄色在线视频| 国产亚洲欧美一级| 激情五月婷婷综合| 日韩视频一区二区三区| 日韩高清电影一区| 欧美日韩精品高清| 一二三区精品福利视频| 99r国产精品| 国产精品久久久久久妇女6080| 国产乱国产乱300精品| 欧美mv日韩mv| 美女一区二区视频| 欧美大白屁股肥臀xxxxxx| 日韩国产精品久久| 日韩三级高清在线| 日韩成人伦理电影在线观看| 欧美日韩精品综合在线| 亚洲福利电影网| 欧美亚洲动漫精品| 亚洲mv在线观看| 欧美一级黄色录像| 老司机精品视频在线| 精品国产亚洲一区二区三区在线观看 | 色婷婷综合久色| 亚洲色图在线视频| 97久久超碰国产精品| 中文字幕综合网| 日本韩国一区二区三区| 亚洲午夜一区二区| 欧美剧情片在线观看| 日本成人在线一区| 日韩视频不卡中文| 精品一区二区三区久久久| 久久久久久久久久久久电影| 国产成人免费视频网站高清观看视频 | 亚洲成a人片在线观看中文| 欧美精品少妇一区二区三区| 日韩电影在线观看网站| 日韩一级成人av| 国产成人在线视频网站| 亚洲美女免费视频| 欧美三级一区二区| 奇米精品一区二区三区在线观看| 精品国产一区二区三区不卡| 高清国产一区二区三区| 一区二区三区精密机械公司| 欧美精品一级二级三级| 激情伊人五月天久久综合| 国产精品久久久久久久久久免费看| 91高清视频在线| 另类小说视频一区二区| 中文字幕一区二区三区精华液| 欧美日韩国产乱码电影| 韩国视频一区二区|