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

隨筆 - 74, 文章 - 0, 評論 - 26, 引用 - 0
數據加載中……

直接運行內存中的程序 轉

Windows的PE加載器在啟動程序的時候,會將磁盤上的文件加載到內存,然后做很多操作,如函數導入表重定位,變量預處理之類的。這位仁兄等于是自己寫了一個PE加載器。直接將內存中的程序啟動。記得以前的“紅色代碼”病毒也有相同的特性。
    直接啟動內存中的程序相當于加了一個殼,可以把程序加密保存,運行時解密到內存,然后啟動,不過對于增加破解難度還要稍微復雜點。否則人家把內存中的進程DUMP出來然后修復導入表就被拖出來了。
#include "stdafx.h"  
  
  
typedef IMAGE_SECTION_HEADER (
*PIMAGE_SECTION_HEADERS)[1];   
  
// 計算對齊后的大小   
unsigned long GetAlignedSize(unsigned long Origin, unsigned long Alignment)   
{   
    
return (Origin + Alignment - 1/ Alignment * Alignment;   
}
   
  
// 計算加載pe并對齊需要占用多少內存   
//
 未直接使用OptionalHeader.SizeOfImage作為結果是因為據說有的編譯器生成的exe這個值會填0   
unsigned long CalcTotalImageSize(PIMAGE_DOS_HEADER MzH   
                                 , unsigned 
long FileLen   
                                 , PIMAGE_NT_HEADERS peH   
                                 , PIMAGE_SECTION_HEADERS peSecH)   
{   
    unsigned 
long res;   
    
// 計算pe頭的大小   
    res = GetAlignedSize( peH->OptionalHeader.SizeOfHeaders   
        , peH
->OptionalHeader.SectionAlignment   
        );   
  
    
// 計算所有節的大小   
    forint i = 0; i < peH->FileHeader.NumberOfSections; ++i)   
    
{   
        
// 超出文件范圍   
        if(peSecH[i]->PointerToRawData + peSecH[i]->SizeOfRawData > FileLen)   
            
return 0;   
        
else if(peSecH[i]->VirtualAddress)//計算對齊后某節的大小   
        {   
            
if(peSecH[i]->Misc.VirtualSize)   
            
{   
                res 
= GetAlignedSize( peSecH[i]->VirtualAddress + peSecH[i]->Misc.VirtualSize   
                    , peH
->OptionalHeader.SectionAlignment   
                    );   
            }
   
            
else  
            
{   
                res 
= GetAlignedSize( peSecH[i]->VirtualAddress + peSecH[i]->SizeOfRawData   
                    , peH
->OptionalHeader.SectionAlignment   
                    );   
            }
   
        }
   
        
else if( peSecH[i]->Misc.VirtualSize < peSecH[i]->SizeOfRawData )   
        
{   
            res 
+= GetAlignedSize( peSecH[i]->SizeOfRawData   
                , peH
->OptionalHeader.SectionAlignment   
                );   
        }
   
        
else  
        
{   
            res 
+= GetAlignedSize( peSecH[i]->Misc.VirtualSize   
                , peH
->OptionalHeader.SectionAlignment   
                );   
        }
// if_else   
    }
// for   
       
    
return res;   
}
   
  
  
  
  
// 加載pe到內存并對齊所有節   
BOOL AlignPEToMem( void *Buf   
                  , 
long Len   
                  , PIMAGE_NT_HEADERS 
&peH   
                  , PIMAGE_SECTION_HEADERS 
&peSecH   
                  , 
void *&Mem   
                  , unsigned 
long &ImageSize)   
{   
    PIMAGE_DOS_HEADER SrcMz;
// DOS頭   
    PIMAGE_NT_HEADERS SrcPeH;// PE頭   
    PIMAGE_SECTION_HEADERS SrcPeSecH;// 節表   
       
    SrcMz 
= (PIMAGE_DOS_HEADER)Buf;   
  
    
if( Len < sizeof(IMAGE_DOS_HEADER) )    
        
return FALSE;   
       
    
if( SrcMz->e_magic != IMAGE_DOS_SIGNATURE )   
        
return FALSE;   
       
    
if( Len < SrcMz->e_lfanew + (long)sizeof(IMAGE_NT_HEADERS) )   
        
return FALSE;   
  
    SrcPeH 
= (PIMAGE_NT_HEADERS)((int)SrcMz + SrcMz->e_lfanew);   
    
if( SrcPeH->Signature != IMAGE_NT_SIGNATURE )   
        
return FALSE;   
  
    
if( (SrcPeH->FileHeader.Characteristics & IMAGE_FILE_DLL) ||   
        (SrcPeH
->FileHeader.Characteristics & IMAGE_FILE_EXECUTABLE_IMAGE == 0||   
        (SrcPeH
->FileHeader.SizeOfOptionalHeader != sizeof(IMAGE_OPTIONAL_HEADER)) )   
    
{   
        
return FALSE;   
    }
   
  
  
    SrcPeSecH 
= (PIMAGE_SECTION_HEADERS)((int)SrcPeH + sizeof(IMAGE_NT_HEADERS));   
    ImageSize 
= CalcTotalImageSize( SrcMz, Len, SrcPeH, SrcPeSecH);   
  
    
if( ImageSize == 0 )   
        
return FALSE;   
       
    Mem 
= VirtualAlloc( NULL, ImageSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE); // 分配內存   
    if( Mem != NULL )   
    
{   
        
// 計算需要復制的PE頭字節數   
        unsigned long l = SrcPeH->OptionalHeader.SizeOfHeaders;   
        
forint i = 0; i < SrcPeH->FileHeader.NumberOfSections; ++i)   
        
{   
            
if( (SrcPeSecH[i]->PointerToRawData) &&   
                (SrcPeSecH[i]
->PointerToRawData < l) )   
            
{   
                l 
= SrcPeSecH[i]->PointerToRawData;   
            }
   
        }
   
        memmove( Mem, SrcMz, l);   
        peH 
= (PIMAGE_NT_HEADERS)((int)Mem + ((PIMAGE_DOS_HEADER)Mem)->e_lfanew);   
        peSecH 
= (PIMAGE_SECTION_HEADERS)((int)peH + sizeof(IMAGE_NT_HEADERS));   
  
        
void *Pt = (void *)((unsigned long)Mem    
            
+ GetAlignedSize( peH->OptionalHeader.SizeOfHeaders   
            , peH
->OptionalHeader.SectionAlignment)   
            );   
  
        
for( i = 0; i < peH->FileHeader.NumberOfSections; ++i)   
        
{   
            
// 定位該節在內存中的位置   
            if(peSecH[i]->VirtualAddress)   
                Pt 
= (void *)((unsigned long)Mem + peSecH[i]->VirtualAddress);   
  
            
if(peSecH[i]->SizeOfRawData)   
            
{   
                
// 復制數據到內存   
                memmove(Pt, (const void *)((unsigned long)(SrcMz) + peSecH[i]->PointerToRawData), peSecH[i]->SizeOfRawData);   
                
if(peSecH[i]->Misc.VirtualSize < peSecH[i]->SizeOfRawData)   
                    Pt 
= (void *)((unsigned long)Pt + GetAlignedSize(peSecH[i]->SizeOfRawData, peH->OptionalHeader.SectionAlignment));   
                
else // pt 定位到下一節開始位置   
                    Pt = (void *)((unsigned long)Pt + GetAlignedSize(peSecH[i]->Misc.VirtualSize, peH->OptionalHeader.SectionAlignment));   
            }
   
            
else  
            
{   
                Pt 
= (void *)((unsigned long)Pt + GetAlignedSize(peSecH[i]->Misc.VirtualSize, peH->OptionalHeader.SectionAlignment));   
            }
   
        }
   
    }
   
    
return TRUE;   
}
   
  
  
  
typedef 
void *(__stdcall *pfVirtualAllocEx)(unsigned longvoid *, unsigned long, unsigned long, unsigned long);   
pfVirtualAllocEx MyVirtualAllocEx 
= NULL;   
  
BOOL IsNT()   
{   
    
return MyVirtualAllocEx!=NULL;   
}
   
  
// 生成外殼程序命令行   
char *PrepareShellExe(char *CmdParam, unsigned long BaseAddr, unsigned long ImageSize)   
{   
    
if(IsNT())   
    
{   
        
char *Buf = new char[256];   
        memset(Buf, 
0256);   
        GetModuleFileName(
0, Buf, 256);   
        strcat(Buf, CmdParam);   
        
return Buf; // 請記得釋放內存;-)   
    }
   
    
else  
    
{   
        
// Win98下的處理請參考原文;-)   
        // http://community.csdn.net/Expert/topic/4416/4416252.xml?temp=8.709133E-03   
        return NULL;   
    }
   
}
   
  
// 是否包含可重定向列表   
BOOL HasRelocationTable(PIMAGE_NT_HEADERS peH)   
{   
    
return (peH->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress)   
        
&& (peH->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size);   
}
   
  
  
  
  
#pragma pack(push, 
1)   
typedef struct
{   
    unsigned 
long VirtualAddress;   
    unsigned 
long SizeOfBlock;   
}
 *PImageBaseRelocation;   
#pragma pack(pop)   
  
// 重定向PE用到的地址   
void DoRelocation(PIMAGE_NT_HEADERS peH, void *OldBase, void *NewBase)   
{   
    unsigned 
long Delta = (unsigned long)NewBase - peH->OptionalHeader.ImageBase;   
    PImageBaseRelocation p 
= (PImageBaseRelocation)((unsigned long)OldBase    
        
+ peH->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress);   
    
while(p->VirtualAddress + p->SizeOfBlock)   
    
{   
        unsigned 
short *pw = (unsigned short *)((int)p + sizeof(*p));   
        
for(unsigned int i=1; i <= (p->SizeOfBlock - sizeof(*p)) / 2++i)   
        
{   
            
if((*pw) & 0xF000 == 0x3000){   
                unsigned 
long *= (unsigned long *)((unsigned long)(OldBase) + p->VirtualAddress + ((*pw) & 0x0FFF));   
                
*+= Delta;   
            }
   
            
++pw;   
        }
   
        p 
= (PImageBaseRelocation)pw;   
    }
   
}
   
  
// 卸載原外殼占用內存   
BOOL UnloadShell(HANDLE ProcHnd, unsigned long BaseAddr)   
{   
    typedef unsigned 
long (__stdcall *pfZwUnmapViewOfSection)(unsigned long, unsigned long);   
    pfZwUnmapViewOfSection ZwUnmapViewOfSection 
= NULL;   
    BOOL res 
= FALSE;   
    HMODULE m 
= LoadLibrary("ntdll.dll");   
    
if(m){   
        ZwUnmapViewOfSection 
= (pfZwUnmapViewOfSection)GetProcAddress(m, "ZwUnmapViewOfSection");   
        
if(ZwUnmapViewOfSection)   
            res 
= (ZwUnmapViewOfSection((unsigned long)ProcHnd, BaseAddr) == 0);   
        FreeLibrary(m);   
    }
   
    
return res;   
}
   
  
// 創建外殼進程并獲取其基址、大小和當前運行狀態   
BOOL CreateChild(char *Cmd, CONTEXT &Ctx, HANDLE &ProcHnd, HANDLE &ThrdHnd,    
                 unsigned 
long &ProcId, unsigned long &BaseAddr, unsigned long &ImageSize)   
{   
    STARTUPINFOA si;   
    PROCESS_INFORMATION pi;   
    unsigned 
long old;   
    MEMORY_BASIC_INFORMATION MemInfo;   
    memset(
&si, 0, sizeof(si));   
    memset(
&pi, 0, sizeof(pi));   
    si.cb 
= sizeof(si);   
       
    BOOL res 
= CreateProcess(NULL, Cmd, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi); // 以掛起方式運行進程;   
    if(res){   
        ProcHnd 
= pi.hProcess;   
        ThrdHnd 
= pi.hThread;   
        ProcId 
= pi.dwProcessId;   
        
// 獲取外殼進程運行狀態,[ctx.Ebx+8]內存處存的是外殼進程的加載基址,ctx.Eax存放有外殼進程的入口地址   
        Ctx.ContextFlags = CONTEXT_FULL;   
        GetThreadContext(ThrdHnd, 
&Ctx);   
        ReadProcessMemory(ProcHnd, (
void *)(Ctx.Ebx+8), &BaseAddr, sizeof(unsigned long), &old); // 讀取加載基址   
        void *= (void *)BaseAddr;   
        
// 計算外殼進程占有的內存   
        while(VirtualQueryEx(ProcHnd, p, &MemInfo, sizeof(MemInfo)))   
        
{   
            
if(MemInfo.State = MEM_FREE) break;   
            p 
= (void *)((unsigned long)p + MemInfo.RegionSize);   
        }
   
        ImageSize 
= (unsigned long)p - (unsigned long)BaseAddr;   
    }
   
    
return res;   
}
   
  
// 創建外殼進程并用目標進程替換它然后執行   
HANDLE AttachPE(char *CmdParam, PIMAGE_NT_HEADERS peH, PIMAGE_SECTION_HEADERS peSecH,    
                
void *Ptr, unsigned long ImageSize, unsigned long &ProcId)   
{   
    HANDLE res 
= INVALID_HANDLE_VALUE;   
    CONTEXT Ctx;   
    HANDLE Thrd;   
    unsigned 
long Addr, Size;   
    
char *= PrepareShellExe(CmdParam, peH->OptionalHeader.ImageBase, ImageSize);   
    
if(s==NULL) return res;   
    
if(CreateChild(s, Ctx, res, Thrd, ProcId, Addr, Size)){   
        
void *= NULL;   
        unsigned 
long old;   
        
if((peH->OptionalHeader.ImageBase == Addr) && (Size >= ImageSize)){// 外殼進程可以容納目標進程并且加載地址一致   
            p = (void *)Addr;   
            VirtualProtectEx(res, p, Size, PAGE_EXECUTE_READWRITE, 
&old);   
        }
   
        
else if(IsNT()){   
            
if(UnloadShell(res, Addr)){// 卸載外殼進程占有內存   
                p = MyVirtualAllocEx((unsigned long)res, (void *)peH->OptionalHeader.ImageBase, ImageSize, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);   
            }
   
            
if((p == NULL) && HasRelocationTable(peH)){// 分配內存失敗并且目標進程支持重定向   
                p = MyVirtualAllocEx((unsigned long)res, NULL, ImageSize, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);   
                
if(p) DoRelocation(peH, Ptr, p); // 重定向   
            }
   
        }
   
        
if(p){   
            WriteProcessMemory(res, (
void *)(Ctx.Ebx+8), &p, sizeof(DWORD), &old); // 重置目標進程運行環境中的基址   
            peH->OptionalHeader.ImageBase = (unsigned long)p;   
            
if(WriteProcessMemory(res, p, Ptr, ImageSize, &old)){// 復制PE數據到目標進程   
                Ctx.ContextFlags = CONTEXT_FULL;   
                
if((unsigned long)p == Addr)   
                    Ctx.Eax 
= peH->OptionalHeader.ImageBase + peH->OptionalHeader.AddressOfEntryPoint; // 重置運行環境中的入口地址   
                else  
                    Ctx.Eax 
= (unsigned long)p + peH->OptionalHeader.AddressOfEntryPoint;   
                SetThreadContext(Thrd, 
&Ctx);// 更新運行環境   
                ResumeThread(Thrd);// 執行   
                CloseHandle(Thrd);   
            }
   
            
else{// 加載失敗,殺掉外殼進程   
                TerminateProcess(res, 0);   
                CloseHandle(Thrd);   
                CloseHandle(res);   
                res 
= INVALID_HANDLE_VALUE;   
            }
   
        }
   
        
else{// 加載失敗,殺掉外殼進程   
            TerminateProcess(res, 0);   
            CloseHandle(Thrd);   
            CloseHandle(res);   
            res 
= INVALID_HANDLE_VALUE;   
        }
   
    }
   
    
delete[] s;   
    
return res;   
}
   
  
  
  
  
 
/**//*******************************************************  
{ ******************************************************* }  
{ *                 從內存中加載并運行exe               * }  
{ ******************************************************* }  
{ * 參數:                                                }  
{ * Buffer: 內存中的exe地址                               }  
{ * Len: 內存中exe占用長度                                }  
{ * CmdParam: 命令行參數(不包含exe文件名的剩余命令行參數)}  
{ * ProcessId: 返回的進程Id                               }  
{ * 返回值: 如果成功則返回進程的Handle(ProcessHandle),   }  
{            如果失敗則返回INVALID_HANDLE_VALUE           }  
{ ******************************************************* }  
 ******************************************************
*/
  
HANDLE MemExecute(
void *ABuffer, long Len, char *CmdParam, unsigned long *ProcessId)   
{   
    HANDLE res 
= INVALID_HANDLE_VALUE;   
    PIMAGE_NT_HEADERS peH;   
    PIMAGE_SECTION_HEADERS peSecH;   
    
void *Ptr;   
    unsigned 
long peSz;   
    
if(AlignPEToMem(ABuffer, Len, peH, peSecH, Ptr, peSz))   
    
{   
        res 
= AttachPE(CmdParam, peH, peSecH, Ptr, peSz, *ProcessId);   
        VirtualFree(Ptr, peSz, MEM_DECOMMIT);   
    }
   
    
return res;   
}
   
  
// 初始化   
class CInit   
{   
public:   
    CInit()   
    
{   
        MyVirtualAllocEx 
= (pfVirtualAllocEx)GetProcAddress(GetModuleHandle("Kernel32.dll"), "VirtualAllocEx");   
    }
   
}
Init;   
  
  
  
  
int APIENTRY WinMain(HINSTANCE hInstance,   
                     HINSTANCE hPrevInstance,   
                     LPSTR     lpCmdLine,   
                     
int       nCmdShow)   
{   
    HANDLE hFile 
= NULL;   
    hFile 
= ::CreateFile( "f:\SourceFromCsdn2.exe"  
        , FILE_ALL_ACCESS   
        , 
0   
        , NULL   
        , OPEN_EXISTING   
        , FILE_ATTRIBUTE_NORMAL   
        , NULL   
        );   
    
if( hFile == INVALID_HANDLE_VALUE )   
        
return -1;   
  
    ::SetFilePointer( hFile, 
0, NULL, FILE_BEGIN);   
    DWORD dwFileSize 
= ::GetFileSize( hFile, NULL);   
  
    LPBYTE pBuf 
= new BYTE[dwFileSize];   
    memset( pBuf, 
0, dwFileSize);   
  
    DWORD dwNumberOfBytesRead 
= 0;   
    ::ReadFile( hFile   
        , pBuf   
        , dwFileSize   
        , 
&dwNumberOfBytesRead   
        , NULL   
        );   
  
    ::CloseHandle(hFile);   
       
    unsigned 
long ulProcessId = 0;   
    MemExecute( pBuf, dwFileSize, 
""&ulProcessId);   
    
delete[] pBuf;   
  
       
    
return 0;   
}
  

posted on 2008-10-31 15:18 井泉 閱讀(506) 評論(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>
            欧美另类视频| 亚洲国产一区在线观看| 欧美视频中文在线看| 免费不卡在线视频| 快播亚洲色图| 久久亚洲春色中文字幕| 久久久久这里只有精品| 久久资源av| 欧美另类一区二区三区| 欧美极品色图| 欧美视频福利| 欧美视频一区二区| 国产精品五月天| 国产无遮挡一区二区三区毛片日本| 国产精品人人做人人爽| 国产亚洲欧美一区在线观看| 国产欧美在线视频| 尤物yw午夜国产精品视频| 又紧又大又爽精品一区二区| 亚洲国内精品| 亚洲在线成人| 久色成人在线| 亚洲久久一区二区| 午夜欧美理论片| 久久久国产一区二区三区| 欧美国产精品人人做人人爱| 欧美午夜久久| 狠狠色丁香久久婷婷综合丁香| 艳妇臀荡乳欲伦亚洲一区| 亚洲男人第一网站| 免费日本视频一区| 夜夜嗨av一区二区三区| 欧美尤物巨大精品爽| 欧美精品情趣视频| 国产伦精品一区二区三区在线观看| 国产小视频国产精品| 在线亚洲免费视频| 久久久久九九九| 一本一本久久a久久精品综合妖精| 欧美夜福利tv在线| 欧美日韩成人一区二区三区| 狠狠色综合一区二区| 亚洲无限av看| 亚洲日本国产| 欧美中文字幕在线观看| 欧美午夜久久| 久久综合给合久久狠狠色| 久久一区中文字幕| 亚洲精品国精品久久99热一| 欧美韩日一区二区| **欧美日韩vr在线| 亚洲第一伊人| 久久精品亚洲国产奇米99| 亚洲黄页一区| 久久精品一区二区三区不卡牛牛| 欧美国产日韩一区二区三区| 国产在线视频不卡二| 亚洲欧美日韩在线综合| 亚洲欧洲一区二区在线观看| 玖玖玖免费嫩草在线影院一区| 国产精品视频免费| 亚洲欧美电影在线观看| 亚洲桃色在线一区| 亚洲一区二区三区乱码aⅴ蜜桃女| 午夜视频在线观看一区二区三区| 欧美va亚洲va国产综合| 欧美一级大片在线观看| 国产目拍亚洲精品99久久精品| 99在线热播精品免费99热| 农夫在线精品视频免费观看| 久久精品官网| 国产视频丨精品|在线观看| 久久av一区二区三区漫画| 一区二区三区视频在线看| 欧美日韩国产色站一区二区三区| 亚洲国产日韩欧美一区二区三区| 裸体素人女欧美日韩| 久久精品欧美| 亚洲日本成人网| 亚洲福利av| 欧美亚洲三区| 欧美成人一区二免费视频软件| 亚洲免费久久| 久久精品国产精品亚洲精品| 欧美一区二区| 国内久久精品视频| 欧美国产激情| 欧美xx视频| 亚洲影院免费| 久久精品国产综合精品| 亚洲国产天堂久久国产91| 欧美国产亚洲精品久久久8v| 免费看精品久久片| 亚洲自拍偷拍麻豆| 欧美中文字幕视频在线观看| 亚洲精品一区二区在线观看| 亚洲无亚洲人成网站77777| 伊人夜夜躁av伊人久久| 亚洲国产精品精华液2区45| 久久国产精品久久久久久久久久| 久久精品国产99精品国产亚洲性色| 亚洲视频每日更新| 午夜在线一区二区| 日韩视频国产视频| 欧美日韩在线高清| 小辣椒精品导航| 久久青草久久| 中文精品视频| 日韩一区二区免费高清| 久久综合色婷婷| 久久久久久久一区| 亚洲欧美日韩直播| 亚洲先锋成人| 9i看片成人免费高清| 亚洲黄色尤物视频| 国产亚洲欧美一区二区三区| 欧美黄色一区| 久久精品五月婷婷| 亚洲一区二区在| 一区二区三区四区五区精品视频 | 国产精品一区久久久| 欧美精品在线一区二区三区| 另类春色校园亚洲| 毛片一区二区| 欧美激情综合亚洲一二区| 老鸭窝91久久精品色噜噜导演| 欧美一区二区三区在线看| 久久久人成影片一区二区三区观看 | 国产精品国产三级国产专播品爱网 | 亚洲日本久久| 欧美在线免费观看| 午夜久久久久久| 欧美日韩午夜精品| 亚洲精品国产日韩| 亚洲精品久久久久久一区二区| 久久精品人人做人人综合| 久久久91精品| 国产一区二三区| 欧美在线亚洲一区| 91久久国产综合久久| 久久成人免费| 亚洲一区二区免费| av成人免费在线观看| 欧美激情中文不卡| 亚洲国产精品久久久久久女王| 在线成人激情视频| 玖玖精品视频| 亚洲激情在线观看| 日韩一级不卡| 欧美黄色一级视频| 夜夜嗨av一区二区三区免费区| 亚洲桃花岛网站| 欧美色视频一区| 亚洲午夜激情在线| 久久av一区二区三区| 狠狠色2019综合网| 欧美福利视频一区| 中文亚洲字幕| 久久国产免费| 亚洲国产日韩精品| 欧美视频不卡| 欧美中文在线观看| 欧美高清一区二区| 国产精品99久久久久久久女警| 国产精品扒开腿爽爽爽视频| 亚洲免费影视第一页| 裸体丰满少妇做受久久99精品 | 亚洲精品在线视频| 欧美日韩精品在线观看| 午夜精品久久久久久久99热浪潮| 久久激五月天综合精品| 开元免费观看欧美电视剧网站| 亚洲福利视频网| 亚洲欧美国产日韩中文字幕| 国产午夜精品一区二区三区欧美| 米奇777超碰欧美日韩亚洲| 中文在线一区| 欧美国产日产韩国视频| 亚洲欧美美女| 亚洲精品护士| 国模一区二区三区| 欧美三级视频| 久久综合九色综合欧美狠狠| 国产精品99久久久久久久女警| 玖玖综合伊人| 香蕉精品999视频一区二区 | 久久午夜精品一区二区| 亚洲永久免费观看| 日韩视频在线观看| 激情综合网激情| 国产精品入口夜色视频大尺度| 免费久久99精品国产自在现线| 香蕉视频成人在线观看| 一区二区三区回区在观看免费视频| 久热精品视频| 久久精品久久99精品久久| 中文在线资源观看网站视频免费不卡| 在线电影国产精品| 国产真实精品久久二三区| 国产精品美女主播|