色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

手動(dòng)映射加載EXE:內(nèi)存中運(yùn)行程序的實(shí)現(xiàn)源碼解析

手動(dòng)映射加載EXE:內(nèi)存中運(yùn)行程序的實(shí)現(xiàn)源碼解析 簡(jiǎn)介一套圍繞內(nèi)存DLL與內(nèi)存加載EXE的完整源碼包面向熟悉Windows編程、希望深入進(jìn)程注入與PE加載原理的開發(fā)者可用于學(xué)習(xí)如何擺脫傳統(tǒng)磁盤路徑直接在內(nèi)存中加載并執(zhí)行EXE同時(shí)以DLL接口形式對(duì)外提供調(diào)用。包內(nèi)共17個(gè)文件主要包含cpp、h源碼和rc資源腳本另有dsp、dsw工程文件、def導(dǎo)出定義、lib/exp鏈接文件及一個(gè)可運(yùn)行的樣例DLL/EXE整體約942KB。已有192人學(xué)習(xí)過。源碼展示了從內(nèi)存中解析PE結(jié)構(gòu)、處理重定位、申請(qǐng)內(nèi)存并創(chuàng)建線程執(zhí)行入口點(diǎn)的關(guān)鍵步驟也給出了封裝接口函數(shù)的具體實(shí)現(xiàn)參考價(jià)值較高。通過閱讀工程代碼讀者可掌握CreateRemoteThread、VirtualAllocEx等API的典型用法并為自行開發(fā)內(nèi)存加載或安全分析工具打下基礎(chǔ)。1. 從磁盤啟動(dòng)到內(nèi)存執(zhí)行這份DLL源碼到底在解決什么問題有一次我在排查一個(gè)進(jìn)程頻繁閃退的問題查了半天發(fā)現(xiàn)根本不是程序自身的問題——是有人把另一個(gè)EXE當(dāng)成DLL直接塞進(jìn)了這個(gè)進(jìn)程的地址空間里執(zhí)行。當(dāng)時(shí)我就意識(shí)到內(nèi)存DLL、內(nèi)存加載EXE這套玩法在實(shí)際項(xiàng)目中遠(yuǎn)比教科書寫得要復(fù)雜得多。這份“DLL源碼啟動(dòng)”壓縮包就是這么一套完整的工程調(diào)用方宿主、被加載的EXE、簽名庫(kù)全配齊適合想做PE加載器、調(diào)試注入邏輯、研究手動(dòng)映射技術(shù)的人。它的核心價(jià)值在于讓你不再依賴 CreateProcess 去拉起一個(gè)新進(jìn)程而是把 EXE 當(dāng)作一組二進(jìn)制數(shù)據(jù)在當(dāng)前進(jìn)程里完成裝載、修復(fù)、執(zhí)行。這套技能在接口封裝、功能改造、逆向調(diào)試和特殊場(chǎng)景部署里都繞不開。2. 為什么不用 LoadLibrary手動(dòng)映射的原理與選型2.1 LoadLibrary 的硬限制路徑、落盤和加載回調(diào)傳統(tǒng)的 LoadLibrary / LoadLibraryEx必須給一個(gè)磁盤路徑。Windows 會(huì)沿著這個(gè)路徑找到文件讀入系統(tǒng)緩存再交給裝載器做映射。在這個(gè)過程中文件路徑會(huì)出現(xiàn)在進(jìn)程模塊列表里DLL 的加載事件會(huì)被 ETW 記錄而且 DLL 里的 DllMain 會(huì)因?yàn)檫M(jìn)程線程狀態(tài)的變化被多次調(diào)用參數(shù)從 DLL_PROCESS_ATTACH 到 DLL_THREAD_ATTACH 輪番上陣。如果你只是想“在當(dāng)前進(jìn)程里跑一段現(xiàn)成的 EXE 邏輯”LoadLibrary 這條路根本行不通——它只能加載 DLL加載不了 EXE。就算你把 EXE 強(qiáng)行改名成 DLL裝載器會(huì)因?yàn)樾r?yàn) PE 頭、檢查 Subsystem 字段等原因拒絕加載。就算你用 LoadLibraryEx 加 LOAD_LIBRARY_AS_DATAFILE 把它當(dāng)數(shù)據(jù)文件讀入那也只是把二進(jìn)制讀進(jìn)內(nèi)存并不能執(zhí)行。這就要一個(gè)更底層的方案手動(dòng)映射也就是業(yè)內(nèi)常說(shuō)的 Manual Map。手動(dòng)映射的本質(zhì)是繞開系統(tǒng)的加載流程自己把 PE 文件的每個(gè)節(jié)區(qū)復(fù)制到內(nèi)存里修復(fù)重定位表和導(dǎo)入表然后直接跳到入口點(diǎn)。整個(gè)過程里磁盤上可以沒有這個(gè) EXE。2.2 手動(dòng)映射的六個(gè)標(biāo)準(zhǔn)步驟第一步讀取文件內(nèi)容。直接用 CreateFile ReadFile 把 EXE 的二進(jìn)制讀進(jìn)一塊緩沖區(qū)這塊緩沖區(qū)只是原始數(shù)據(jù)不參與執(zhí)行。第二步解析 DOS 頭和 PE 頭。校驗(yàn) e_magic 是否為 MZ、Signature 是否為 PE\0\0從這里拿到節(jié)區(qū)表、可選頭的入口點(diǎn)地址、鏡像基址、數(shù)據(jù)目錄。第三步按 SizeOfImage 分配一塊可讀可寫可執(zhí)行的內(nèi)存。這里有個(gè)容易踩的坑分配粒度要按 SectionAlignment 對(duì)齊不能直接拿文件大小來(lái)分配。第四步按節(jié)區(qū)表的 VirtualAddress 和 PointerToRawData把每個(gè)節(jié)區(qū)從文件偏移復(fù)制到內(nèi)存偏移同時(shí)把文件頭復(fù)制到鏡像起始位置。第五步判斷模塊被加載到的新地址是否和 ImageBase 一致。不一致就遍歷重定位表把所有絕對(duì)地址加上一個(gè) Delta 值。第六步遍歷導(dǎo)入表逐個(gè) LoadLibrary 和 GetProcAddress把導(dǎo)入地址表 IAT 替換成真實(shí)函數(shù)地址。最后跳到 AddressOfEntryPoint 執(zhí)行。整個(gè)流程看起來(lái)不復(fù)雜但每一步都有很多細(xì)節(jié)。一旦某一步寫錯(cuò)程序不會(huì)給你報(bào)錯(cuò)只會(huì)靜默崩潰。而且崩潰點(diǎn)往往不在出錯(cuò)的那一步而是拖到執(zhí)行入口點(diǎn)之后才爆發(fā)排查起來(lái)非常難受。我做這個(gè)功能時(shí)習(xí)慣在每個(gè)步驟后加一個(gè)狀態(tài)輸出把 Section 數(shù)量、ImageBase、入口點(diǎn)地址、重定位表大小這些關(guān)鍵參數(shù)先打出來(lái)確認(rèn)每一步都有據(jù)可查。2.3 三個(gè)關(guān)鍵選型點(diǎn)入口點(diǎn)、重定位、導(dǎo)入表入口點(diǎn)要不要作為線程啟動(dòng)常見做法是 CreateThread傳入入口地址作為起始地址。好處是加載器線程可以立即返回不會(huì)阻塞調(diào)用方壞處是如果 EXE 的 WinMain 里做了大量初始化線程生命周期就脫離了加載器的控制。我一般傾向用 CreateThread 啟動(dòng)然后 WaitForSingleObject 等待入口點(diǎn)函數(shù)返回這樣不會(huì)出現(xiàn)加載器線程已經(jīng)退出、入口點(diǎn)還在另一個(gè)線程里跑的情況。但要注意如果目標(biāo) EXE 內(nèi)部調(diào)用了 ExitProcess那整個(gè)進(jìn)程還是會(huì)結(jié)束這一點(diǎn)沒得商量。重定位是否必須做如果 EXE 的 ImageBase 和 VirtualAlloc 分配到的地址恰好一致重定位理論上可以跳過。但這么想的基本都會(huì)翻車——VirtualAlloc 能分到的地址由系統(tǒng)決定不能保證一致。尤其是開啟了 ASLR 的系統(tǒng)EXE 頭里聲明的 ImageBase 基本不可能被滿足。所以重定位處理是所有內(nèi)存加載器里最不能省的邏輯。導(dǎo)入表修復(fù)則是另一個(gè)生死線它決定了 EXE 里能不能調(diào)用系統(tǒng) API。如果導(dǎo)入表不修復(fù)加載出來(lái)的 EXE 只要碰到一個(gè)外部函數(shù)調(diào)用就會(huì)瞬間崩掉而且崩在 ntdll 里看起來(lái)像是系統(tǒng)問題。2.4 手動(dòng)映射和進(jìn)程注入的區(qū)別很多人把手動(dòng)映射和進(jìn)程注入混為一談。實(shí)際上進(jìn)程注入強(qiáng)調(diào)的是“把代碼放進(jìn)別人的進(jìn)程空間”手法可以是 CreateRemoteThread、SetWindowsHookEx、APC 注入而手動(dòng)映射強(qiáng)調(diào)的是“不通過系統(tǒng)加載器來(lái)裝載 PE”兩者可以結(jié)合使用。比如把手動(dòng)映射出來(lái)的 DLL 通過遠(yuǎn)程線程注入到目標(biāo)進(jìn)程那就是一套完整的注入方案。但如果只是在自己進(jìn)程里加載一個(gè) EXE那只需要手動(dòng)映射不需要遠(yuǎn)程線程。這份資源里的做法更接近后者宿主和加載目標(biāo)都在同一進(jìn)程里。3. 壓縮包內(nèi)的文件布局PotPlayer 工程、HWSignature 與 SGDownload 的分工打開這個(gè)壓縮包第一眼看上去文件很多其實(shí)大部分是編譯生成物。怎么把它們分層、找出來(lái)源是能不能看懂這份源碼的關(guān)鍵。3.1 文件清單與角色判斷從文件后綴和命名看這是基于 Visual C 6.0 工程.dsp / .dsw的一套方案。我把文件分成幾類分類文件角色宿主源碼PotPlayer.dsp / PotPlayer.dsw / PotPlayer.cpp / StdAfx.cpp / StdAfx.h調(diào)用方工程主體資源與定義Potplayer.rc / resource.h / Potplayer.def界面資源與導(dǎo)出符號(hào)定義編譯生成物Release\HWSignature.exp / HWSignature.lib / HWSignature.dll簽名庫(kù)的導(dǎo)入庫(kù)和 DLL目標(biāo)與臨時(shí)Bin\HWSignature.dll / Bin\temp / Release\SGDownload.exe運(yùn)行時(shí)依賴與目標(biāo)加載對(duì)象清理腳本刪除臨時(shí)文件.bat清理運(yùn)行后殘留PotPlayer 是這個(gè)工程的宿主名字。為什么叫 PotPlayer一種可能是它借了播放器的外殼實(shí)際干的卻是加載器的活。PotPlayer.cpp 是主入口里面應(yīng)該封裝了內(nèi)存加載邏輯和接口調(diào)用。注意 Potplayer.def 這個(gè)文件它在 DLL 工程里用來(lái)聲明哪些函數(shù)可以被外部程序調(diào)用如果一個(gè) EXE 工程里出現(xiàn)了 .def很可能是想讓 EXE 也導(dǎo)出函數(shù)給別的模塊使用或者用它來(lái)重定向入口點(diǎn)。HWSignature.dll 從名字看是“硬件簽名”相關(guān)模塊可能的作用是校驗(yàn)被加載的 EXE 是否合法或者在加載完成后做簽名檢查。這一塊在調(diào)試時(shí)可以直接忽略但務(wù)必保證它存在因?yàn)樗拗鞒绦蚣虞d時(shí)很可能通過 LoadLibrary 依賴了它。SGDownload.exe 是典型的目標(biāo)程序——被加載者。從命名看它可能是一個(gè)下載器程序這里被當(dāng)成內(nèi)存加載的對(duì)象。在真實(shí)使用場(chǎng)景里這個(gè)文件不應(yīng)該常駐磁盤而是由宿主程序在內(nèi)存中直接執(zhí)行。3.2 調(diào)用方與被加載方的連接方式內(nèi)存加載和普通 DLL 調(diào)用最大的不同在于DLL 可以通過 GetProcAddress 找導(dǎo)出函數(shù)而內(nèi)存加載的 EXE 沒有標(biāo)準(zhǔn)的導(dǎo)出機(jī)制。那么調(diào)用方怎么和 SGDownload.exe 溝通常見做法是在調(diào)用方里定義接口結(jié)構(gòu)體。比如定義一個(gè)結(jié)構(gòu)體 SGDOWNLOAD_INTERFACE里面放函數(shù)指針。然后調(diào)用方在內(nèi)存加載完成后找到 EXE 的入口點(diǎn)給它傳一個(gè)結(jié)構(gòu)體地址讓它把自身的函數(shù)指針填入這個(gè)結(jié)構(gòu)體。這樣調(diào)用方就能像調(diào)用本地函數(shù)一樣調(diào)用加載到內(nèi)存中的 EXE 功能。這個(gè)思路在工程里可能以 PotPlayer.cpp 里的一段全局結(jié)構(gòu)體形式存在// InterfaceDef.h typedef struct _SGDOWNLOAD_INTERFACE { int nStructSize; // 結(jié)構(gòu)體大小用于版本協(xié)商 DWORD dwFunctionFlags; // 支持的功能位掩碼 BOOL (*SetSourceURL)(const char* lpszUrl); // 設(shè)置下載地址 BOOL (*StartDownload)(const char* lpszSavePath, DWORD dwTimeout); BOOL (*StopDownload)(void); DWORD (*GetProgress)(void); // 返回下載進(jìn)度百分比 void (*Release)(void); // 釋放內(nèi)部資源 } SGDOWNLOAD_INTERFACE;這段代碼定義了調(diào)用方和內(nèi)存中 EXE 之間的接口契約。nStructSize 用于版本協(xié)商避免兩邊結(jié)構(gòu)體對(duì)齊方式不一致導(dǎo)致字段錯(cuò)位dwFunctionFlags 讓調(diào)用方在調(diào)用前先確認(rèn)目標(biāo)支持哪些功能。SetSourceURL 和 StartDownload 是業(yè)務(wù)函數(shù)。通過這種結(jié)構(gòu)體傳參方式內(nèi)存加載的 EXE 也能像 DLL 一樣提供清晰的函數(shù)入口。參數(shù)里我沒有寫路徑和文件句柄因?yàn)閮?nèi)存模式下不依賴落盤所有地址都是函數(shù)指針。3.3 哪些文件是源碼、哪些是生成物去掉 Release、Debug、Bin 這些目錄后純凈的源碼其實(shí)只有十來(lái)個(gè)文件。當(dāng)你拿到這樣的壓縮包時(shí)第一件事是重建工程結(jié)構(gòu)新建一個(gè)目錄從 dsp / dsw 恢復(fù) VC6 工程把 cpp / h / rc / def 放進(jìn)去再編譯。編譯時(shí)注意 HWSignature.lib 要能鏈接上否則會(huì)報(bào)“無(wú)法解析的外部符號(hào)”。Release 目錄下那幾個(gè) .exp / .lib 是為了和 HWSignature.dll 一起鏈接用的如果只是看加載器的邏輯不需要深究它的簽名算法。還要留意 PotPlayer.plg 這個(gè)文件它是 VC6 的編譯日志記錄的是某一次編譯的輸出信息。這個(gè)文件基本沒有保留價(jià)值但有時(shí)能從里面看到工程文件的編譯順序和依賴關(guān)系比如要不要先編譯 HWSignature 再編譯 PotPlayer。刪除臨時(shí)文件.bat 這個(gè)文件值得多說(shuō)一句。它清理的是 Bin\temp 目錄下的臨時(shí)文件。內(nèi)存加載雖然不需要目標(biāo) EXE 常駐磁盤但在某些方案里為了配合下載流程會(huì)先把 EXE 寫到臨時(shí)目錄再立即用內(nèi)存方式讀入并刪除。這個(gè)批處理就是把沒刪干凈的殘骸清理掉。4. 手寫一版內(nèi)存加載器從 PE 解析到入口點(diǎn)執(zhí)行這一章是落地章節(jié)用 C 把整個(gè)手動(dòng)映射流程拆開寫一遍。代碼以 Windows API 為主編譯環(huán)境可以是 VS2022也可以退回 VC6核心邏輯不變。4.1 把 EXE 讀進(jìn)內(nèi)存并校驗(yàn) PE 頭// LoadFile.cpp HANDLE hFile CreateFileA(SGDownload.exe, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (hFile INVALID_HANDLE_VALUE) { return FALSE; // 文件不存在或沒有權(quán)限 } DWORD fileSize GetFileSize(hFile, NULL); BYTE* pBuffer new BYTE[fileSize]; DWORD bytesRead 0; ReadFile(hFile, pBuffer, fileSize, bytesRead, NULL); CloseHandle(hFile); // 校驗(yàn) DOS 頭和 PE 頭 IMAGE_DOS_HEADER* pDos (IMAGE_DOS_HEADER*)pBuffer; if (pDos-e_magic ! IMAGE_DOS_SIGNATURE) { // MZ delete[] pBuffer; return FALSE; } IMAGE_NT_HEADERS* pNt (IMAGE_NT_HEADERS*)(pBuffer pDos-e_lfanew); if (pNt-Signature ! IMAGE_NT_SIGNATURE) { // PE\0\0 delete[] pBuffer; return FALSE; }這里把 EXE 整體讀成一塊緩沖區(qū)然后強(qiáng)轉(zhuǎn)成 IMAGE_DOS_HEADER 并校驗(yàn) e_magic再通過 e_lfanew 跳轉(zhuǎn)到 NT 頭校驗(yàn) Signature。注意 e_lfanew 這個(gè)字段是 DOS 頭里指向 PE 頭的文件偏移不能直接假設(shè)它固定是 0x80。用 ImageNtHeaders 宏也能做轉(zhuǎn)換但這里手動(dòng)寫更直觀也方便打印中間變量。讀文件時(shí)我用了 FILE_SHARE_READ這樣即使目標(biāo) EXE 被其他進(jìn)程打開了也不會(huì)因?yàn)楣蚕頉_突讀失敗。4.2 按節(jié)區(qū)分配內(nèi)存并復(fù)制數(shù)據(jù)// AllocImage.cpp IMAGE_OPTIONAL_HEADER32* pOpt pNt-OptionalHeader; BYTE* pImageBase (BYTE*)VirtualAlloc(NULL, pOpt-SizeOfImage, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); if (pImageBase NULL) { delete[] pBuffer; return FALSE; } // 復(fù)制文件頭部分 memcpy(pImageBase, pBuffer, pOpt-SizeOfHeaders); // 遍歷節(jié)區(qū)表并按節(jié)區(qū)實(shí)際數(shù)據(jù)大小復(fù)制 IMAGE_SECTION_HEADER* pSec IMAGE_FIRST_SECTION(pNt); for (int i 0; i pNt-FileHeader.NumberOfSections; i) { memcpy(pImageBase pSec[i].VirtualAddress, pBuffer pSec[i].PointerToRawData, pSec[i].SizeOfRawData); }分配內(nèi)存用的是 VirtualAlloc分配大小是 SizeOfImage 而不是文件大小。SizeOfImage 是加載到內(nèi)存后整個(gè)鏡像的虛擬大小包含節(jié)區(qū)對(duì)齊后的空隙和頭部對(duì)齊所以它一般會(huì)比文件大小大。如果只分配文件大小PE 頭里所有基于 VirtualAddress 的地址都會(huì)越界等執(zhí)行到入口點(diǎn)附近就會(huì)觸發(fā)訪問沖突。節(jié)區(qū)復(fù)制時(shí)用 PointerToRawData 去文件里取數(shù)據(jù)寫入 VirtualAddress 對(duì)應(yīng)的位置。這里特意用了 PAGE_EXECUTE_READWRITE是為了避免節(jié)區(qū)權(quán)限不同導(dǎo)致后續(xù)寫入時(shí)崩潰正常做法是后面按節(jié)區(qū)屬性重新設(shè)置保護(hù)屬性。4.3 修復(fù)重定位表// FixReloc.cpp DWORD delta (DWORD)((BYTE*)pImageBase - pOpt-ImageBase); if (delta ! 0) { DWORD relocRVA pOpt-DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress; DWORD relocSize pOpt-DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size; if (relocRVA ! 0) { DWORD offset 0; while (offset relocSize) { IMAGE_BASE_RELOCATION* pReloc (IMAGE_BASE_RELOCATION*)(pImageBase relocRVA offset); DWORD count (pReloc-SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION)) / sizeof(WORD); WORD* entries (WORD*)((BYTE*)pReloc sizeof(IMAGE_BASE_RELOCATION)); for (DWORD j 0; j count; j) { if ((entries[j] 0x3000) IMAGE_REL_BASED_HIGHLOW) { DWORD* pAddr (DWORD*)(pImageBase pReloc-VirtualAddress (entries[j] 0x0FFF)); *pAddr delta; } } offset pReloc-SizeOfBlock; } } }delta 是實(shí)際加載地址和 PE 頭里聲明的首選基址之間的差。重定位表里的每一項(xiàng)都是一個(gè)塊結(jié)構(gòu)VirtualAddress 指明這個(gè)塊作用于哪個(gè)頁(yè)面SizeOfBlock 是這個(gè)塊的總字節(jié)數(shù)后面的 WORD 數(shù)組每一項(xiàng)的高 4 位表示重定位類型低 12 位是頁(yè)面內(nèi)的偏移。HIGHLOW 類型表示這是一個(gè) 32 位地址需要加上 delta。如果 EXE 沒有重定位表也就是 Base Relocation Directory 的 Size 為 0那這個(gè) EXE 就只能加載到它的 ImageBase 上否則一定會(huì)崩。這種情況在 VC6 編譯的 Release EXE 里比較常見遇到時(shí)不要硬加載要么用 LoadLibrary 走正常路要么給工程加上 /DYNAMICBASE 重新編譯。4.4 修復(fù)導(dǎo)入表// FixImport.cpp DWORD importRVA pOpt-DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress; if (importRVA ! 0) { IMAGE_IMPORT_DESCRIPTOR* pImp (IMAGE_IMPORT_DESCRIPTOR*)(pImageBase importRVA); for (; pImp-Name ! 0; pImp) { char* dllName (char*)(pImageBase pImp-Name); HMODULE hDll LoadLibraryA(dllName); if (hDll NULL) { continue; // 依賴的 DLL 不在系統(tǒng)路徑或當(dāng)前目錄 } IMAGE_THUNK_DATA* pThunk (IMAGE_THUNK_DATA*)(pImageBase pImp-FirstThunk); IMAGE_THUNK_DATA* pOrig (IMAGE_THUNK_DATA*)(pImageBase pImp-OriginalFirstThunk); for (; pThunk-u1.AddressOfData ! 0; pThunk, pOrig) { if (pOrig-u1.AddressOfData 0x80000000) { // 按序號(hào)導(dǎo)入的函數(shù) DWORD ordinal pOrig-u1.AddressOfData 0x7FFFFFFF; pThunk-u1.Function (DWORD)GetProcAddress(hDll, (char*)ordinal); } else { // 按名稱導(dǎo)入的函數(shù) IMAGE_IMPORT_BY_NAME* pName (IMAGE_IMPORT_BY_NAME*)(pImageBase pOrig-u1.AddressOfData); pThunk-u1.Function (DWORD)GetProcAddress(hDll, pName-Name); } } } }導(dǎo)入表修復(fù)的邏輯是把 EXE 里聲明的導(dǎo)入函數(shù)從“函數(shù)名稱”替換為實(shí)際加載到進(jìn)程空間的函數(shù)地址。OriginalFirstThunk 指向原始導(dǎo)入名稱表FirstThunk 是 IAT兩者在編譯時(shí)可能指向同一塊數(shù)據(jù)但修復(fù)時(shí)只能改 IAT不能動(dòng) OriginalFirstThunk 指向的內(nèi)容。按序號(hào)導(dǎo)入時(shí)AddressOfData 的最高位為 1低位就是函數(shù)序號(hào)GetProcAddress 可以直接用序號(hào)查找。按名稱導(dǎo)入則要解析 IMAGE_IMPORT_BY_NAME里面是 Hint 加函數(shù)名字符串。如果 LoadLibrary 返回 NULL說(shuō)明目標(biāo) EXE 依賴的這個(gè) DLL 不在系統(tǒng)的搜索路徑里這時(shí)候要自己先 LoadLibrary 一個(gè)絕對(duì)路徑或者把 DLL 目錄加到當(dāng)前進(jìn)程的搜索路徑中。4.5 執(zhí)行入口點(diǎn)并管理線程生命周期// RunEntry.cpp BYTE* entryPoint pImageBase pOpt-AddressOfEntryPoint; HANDLE hThread CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)entryPoint, (LPVOID)pInterface, // 傳給入口點(diǎn)的參數(shù) 0, NULL); if (hThread NULL) { VirtualFree(pImageBase, 0, MEM_RELEASE); delete[] pBuffer; return FALSE; } WaitForSingleObject(hThread, INFINITE); CloseHandle(hThread); // 線程結(jié)束后再釋放鏡像 VirtualFree(pImageBase, 0, MEM_RELEASE); delete[] pBuffer;入口點(diǎn)地址是 AddressOfEntryPoint 相對(duì)于鏡像基址的偏移。對(duì)于 EXE 來(lái)說(shuō)這個(gè)入口點(diǎn)一般會(huì)經(jīng)過 C 運(yùn)行時(shí)初始化最終調(diào)用 WinMain。用 CreateThread 而不是直接函數(shù)調(diào)用的好處是線程有自己的??臻g入口點(diǎn)里即使對(duì)棧做了大量操作也不會(huì)污染加載器所在線程的棧。另一個(gè)好處是可以在外部等待線程結(jié)束便于管理生命周期。這里我傳入了 pInterface 結(jié)構(gòu)體指針也就是上一章定義的接口結(jié)構(gòu)目標(biāo) EXE 在入口點(diǎn)階段往里面填充函數(shù)指針。注意VirtualFree 釋放鏡像內(nèi)存必須在所有相關(guān)線程退出之后否則就是在代碼還沒有停止執(zhí)行的時(shí)候先把代碼卸載了。4.6 參數(shù)怎么傳、返回值怎么拿傳參數(shù)給內(nèi)存加載的 EXE 是一個(gè)容易忽略的問題。CreateProcess 可以通過命令行傳參數(shù)而內(nèi)存加載的入口點(diǎn)函數(shù)簽名理論上只有一個(gè)參數(shù)也就是我們常說(shuō)的 lpParameter。這個(gè)自由度其實(shí)很大——你可以傳一個(gè)整數(shù)可以傳一個(gè)字符串指針也可以傳一個(gè)結(jié)構(gòu)體指針。我一般把所有參數(shù)包成一個(gè)結(jié)構(gòu)體里面放業(yè)務(wù)需要的 URL、保存路徑、超時(shí)時(shí)間、回調(diào)函數(shù)等。返回值通過結(jié)構(gòu)體里的指針帶回來(lái)比如結(jié)構(gòu)體里放一個(gè) int* pResult目標(biāo)程序執(zhí)行完把結(jié)果寫到這個(gè)地址。如果目標(biāo) EXE 的入口點(diǎn)是標(biāo)準(zhǔn) WinMain那它的返回值要通過 ExitProcess 或者 return 返回。在線程場(chǎng)景下入口點(diǎn) return 的值會(huì)變成線程退出碼可以通過 GetExitCodeThread 拿到。注意拿返回值要在 WaitForSingleObject 之后調(diào)用線程沒結(jié)束就拿退出碼結(jié)果是不確定的。5. 常見問題與排錯(cuò)加載器翻車的五條血淚經(jīng)驗(yàn)5.1 加載后進(jìn)程活著但主窗口沒出現(xiàn)現(xiàn)象加載返回成功線程也創(chuàng)建了但目標(biāo) EXE 的主窗口沒彈出來(lái)進(jìn)程卻在后臺(tái)跑著任務(wù)管理器里能看到進(jìn)程存在。原因最常見的是入口點(diǎn)用的不是正常的 WinMain 入口流程。很多 EXE 在 WinMain 被調(diào)用前有一大段 CRT 初始化邏輯包括解析命令行、初始化全局變量、設(shè)置錯(cuò)誤模式。如果直接跳到 AddressOfEntryPoint這些初始化步驟就被跳過了導(dǎo)致窗口創(chuàng)建失敗或者窗口類沒有注冊(cè)。解決確認(rèn)目標(biāo) EXE 是否使用動(dòng)態(tài)鏈接 CRT。如果是它的入口點(diǎn)通常是 mainCRTStartup 或 wWinMainCRTStartup這類入口點(diǎn)會(huì)調(diào)用 _cexit 清理邏輯。在調(diào)試器里設(shè)斷點(diǎn)看第一次異常發(fā)生在哪一步如果停在 CRT 源碼里就說(shuō)明初始化路徑不對(duì)。另一個(gè)排查方向是檢查目標(biāo) EXE 是否依賴當(dāng)前目錄下的 DLL如果 DLL 沒找到入口點(diǎn)可能在 LoadLibrary 階段就失敗返回了。5.2 一執(zhí)行就報(bào) 0xC0000005 崩潰定位到重定位段現(xiàn)象加載成功但入口點(diǎn)執(zhí)行不到三行就崩潰調(diào)試器停在一條 mov 指令上崩潰地址指向一個(gè)明顯不屬于任何模塊的地址。原因大概率是重定位被跳過了。如果 EXE 的 ImageBase 是 0x400000而 VirtualAlloc 返回的是 0x1A0000那么所有絕對(duì)地址都指向了錯(cuò)誤的位置。還有一種情況是重定位表解析循環(huán)寫錯(cuò)了比如 SizeOfBlock 計(jì)算錯(cuò)誤導(dǎo)致跳過了某些塊修復(fù)了錯(cuò)誤地址。解決打印 delta 值確認(rèn)它不為 0。同時(shí)在重定位修復(fù)后把導(dǎo)入表地址隨機(jī)抽幾個(gè)打印出來(lái)和 GetProcAddress 的結(jié)果比對(duì)。如果發(fā)現(xiàn) AddressOfData 指向的地址不在 pImageBase 到 pImageBase SizeOfImage 的范圍內(nèi)基本就是重定位沒修對(duì)。還有一種玄學(xué)情況目標(biāo) EXE 是 x64 的你用了 32 位重定位邏輯去解析類型值根本匹配不上。遇到這種就先確認(rèn)目標(biāo)架構(gòu)和加載器架構(gòu)一致。5.3 頁(yè)面權(quán)限導(dǎo)致的訪問沖突RWX 段被 DEP 攔截現(xiàn)象重定位和導(dǎo)入表都修了運(yùn)行時(shí)依然會(huì)偶發(fā)崩潰尤其是調(diào)用一些全局變量或者回調(diào)函數(shù)的時(shí)候。有時(shí)候加載器自己沒問題換了臺(tái)機(jī)器就崩。原因有的 EXE 代碼段和數(shù)據(jù)段對(duì)權(quán)限要求不同。全部用 PAGE_EXECUTE_READWRITE 雖然能跑但某些 API 比如 VirtualProtect 或 DEP 策略會(huì)對(duì) RWX 段做特殊處理導(dǎo)致執(zhí)行到代碼段時(shí)被強(qiáng)制攔截。尤其是開啟了 CFG控制流保護(hù)的系統(tǒng)對(duì)間接調(diào)用目標(biāo)有校驗(yàn)RWX 內(nèi)存塊不在白名單里就會(huì)被拒絕。解決按節(jié)區(qū)屬性分別設(shè)置內(nèi)存權(quán)限。節(jié)區(qū)表里每個(gè) Section 有 Characteristics 字段IMAGE_SCN_MEM_EXECUTE 表示可執(zhí)行IMAGE_SCN_MEM_READ 表示可讀IMAGE_SCN_MEM_WRITE 表示可寫。分配內(nèi)存時(shí)先用 MEM_RESERVE 保留整個(gè) SizeOfImage 地址空間再按節(jié)區(qū)用 MEM_COMMIT 逐段提交然后根據(jù) Characteristics 用 VirtualProtect 設(shè)置對(duì)應(yīng)權(quán)限。這樣代碼段是 PAGE_EXECUTE_READ數(shù)據(jù)段是 PAGE_READWRITE更接近系統(tǒng)正常加載的行為。5.4 殺毒軟件隔離 Bin 目錄下的 DLL 和 EXE現(xiàn)象編譯好的 Bin 目錄里HWSignature.dll 和 SGDownload.exe 偶爾會(huì)神秘消失或者被隔離到病毒隔離區(qū)。重新編譯后過一陣子又出現(xiàn)同樣情況。原因手動(dòng)映射是一種高級(jí)監(jiān)控技術(shù)很多殺毒軟件會(huì)把“在內(nèi)存中分配 RWX 內(nèi)存 寫入代碼 跳轉(zhuǎn)到入口”識(shí)別為后門行為。工程里的 HWSignature.dll 如果做了簽名校驗(yàn)邏輯也容易被靜態(tài)特征誤判。這不算加載器的邏輯錯(cuò)誤但會(huì)直接影響復(fù)現(xiàn)。解決本地做加載器研發(fā)時(shí)把整個(gè)工程目錄加入殺毒軟件白名單或者干脆在虛擬機(jī)里做測(cè)試。不要在裝有重要資料的機(jī)器上反復(fù)編譯這類工程。如果你的目標(biāo)是做正常的功能封裝建議優(yōu)先考慮標(biāo)準(zhǔn) LoadLibrary GetProcAddress只有確實(shí)需要內(nèi)存加載時(shí)才動(dòng)用這套方案。5.5 刪除臨時(shí)文件.bat 把正在運(yùn)行的目標(biāo) EXE 刪了現(xiàn)象加載器運(yùn)行過程中執(zhí)行一次批處理之后目標(biāo)程序突然閃退或者下次運(yùn)行提示找不到 SGDownload.exe。原因批處理清理的是 Bin\temp 目錄。如果加載器把 EXE 寫進(jìn) temp 后還沒來(lái)得及讀入批處理就先把它刪了加載自然就失敗。如果加載器運(yùn)行完后批處理立刻清理又可能刪掉一個(gè)還在被映射到內(nèi)存的文件。更隱蔽的問題是第一次加載沒有釋放文件句柄批處理刪不掉文件但把它標(biāo)記為“待刪除”進(jìn)程退出后文件就消失了第二次運(yùn)行就找不到。解決延遲清理時(shí)機(jī)。批處理里加一段 timeout 等待加載器完全退出或者讓加載器自己負(fù)責(zé)刪除臨時(shí)文件而不是依賴外部腳本。我現(xiàn)在的習(xí)慣是凡是需要落盤再讀入的場(chǎng)景文件刪除統(tǒng)一放在加載函數(shù)返回之后用 try-finally 的結(jié)構(gòu)保證任何分支退出時(shí)都會(huì)執(zhí)行清理同時(shí)清理前校驗(yàn)句柄已關(guān)閉。6. 進(jìn)階用法把加載器封裝成帶接口的 DLL到這一步手動(dòng)加載已經(jīng)能跑通了。但實(shí)際項(xiàng)目里不會(huì)把加載邏輯寫死在 EXE 里而是封裝成 DLL對(duì)外暴露接口讓宿主程序通過普通 LoadLibrary 調(diào)用。這樣既方便復(fù)用也讓內(nèi)存加載的黑匣子只對(duì)調(diào)用方開一個(gè)小口。接口設(shè)計(jì)大概是這樣// MemLoader.h typedef struct _MEMLOADER_PARAMS { const char* lpFilePath; // 目標(biāo) EXE 路徑 void* lpReserved; // 保留參數(shù) HANDLE hThread; // 返回的主線程句柄 DWORD dwLoadFlags; // 0 表示只用內(nèi)存加載1 表示加載后落盤清理 } MEMLOADER_PARAMS; BOOL __stdcall MemLoadExe(MEMLOADER_PARAMS* pParams); BOOL __stdcall MemUnloadExe(HANDLE hThread);MemLoadExe 內(nèi)部完成整條加載鏈路成功返回 TRUE同時(shí)把主線程句柄存到參數(shù)里。MemUnloadExe 負(fù)責(zé)通知目標(biāo) EXE 退出并等待線程結(jié)束。如果需要更復(fù)雜的狀態(tài)反饋可以再加一個(gè)回調(diào)函數(shù)指針讓宿主主動(dòng)感知加載進(jìn)度。調(diào)用方只需要HMODULE hLoader LoadLibraryA(MemLoader.dll); typedef BOOL(__stdcall *PFN_Load)(MEMLOADER_PARAMS*); PFN_Load pfnLoad (PFN_Load)GetProcAddress(hLoader, MemLoadExe); MEMLOADER_PARAMS params {0}; params.lpFilePath SGDownload.exe; params.dwLoadFlags 0; BOOL bOK pfnLoad(params);封裝之后還有一個(gè)好處可以把接口結(jié)構(gòu)體版本化。如果目標(biāo) EXE 升級(jí)了函數(shù)指針數(shù)量變化了通過 nStructSize 判斷兩邊版本是否匹配不匹配直接返回錯(cuò)誤而不是等到調(diào)用時(shí)崩潰。這些話聽起來(lái)簡(jiǎn)單但真去封裝的時(shí)候你會(huì)發(fā)現(xiàn)內(nèi)存加載和 DLL 生命周期管理糾纏在一起。比如卸載時(shí)不能在目標(biāo) EXE 的線程內(nèi)部調(diào)用 VirtualFree 釋放鏡像否則會(huì)先把自己正在執(zhí)行的代碼釋放掉。正確做法是從外部線程釋放而且要先讓目標(biāo) EXE 的所有子線程退出。從那以后我每次封裝加載器都會(huì)強(qiáng)制走一遍“加載 → 運(yùn)行 → 卸載 → 再次加載”的回歸測(cè)試特別是卸載后馬上再加載同一份鏡像的場(chǎng)景。這個(gè)流程能暴露絕大多數(shù)內(nèi)存管理問題希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月天婷婷在线看 | 欧美性色综合网| 欧美性爱十八禁| 久久透逼视频| JIZZJIZZ国产精品喷水| 六月丁香婷| 六九九九| 夜夜骑日日| 97综合在线| 最新av中文字幕高清| 91看黄片| 精品妇女一区二区三区| 亚洲熟女乱综合一区二区三区| 久久综合18p| 女生91网站| 亚洲国产天堂| 日韩欧美国产高清视频| 91日产欧美| 天堂男人网| 少妇人妻好深太紧了vr91| 免费一级视频特黄色大片| 精品乱子一区二区三区99| 超碰这里有精品| 国产精品久久久久久亚洲色欲| 蜜乳av一区二区| 狠狠五月天| 大香蕉92| 97人人干人人操| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 97国产色综合| 久久久四区| 黄片在线免费在线观看| 囯产精品强| 伊人网青青| 五月婷丁香| 欧美激情黑人| 睡产熟女乱伦| 精品国产乱码久久久久久久久久毛片| 国语精品内射在线观看| 9 9无尺码天堂网| 岛国1区2区3区在线观看| 五月综合色| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 大香蕉黄色一区| 曰韩少妇无码| 影音先锋每日最新资源在线观看| 亚州综合AⅤ| 午夜无遮挡男女啪啪视频| 国产AV毛片| 色一区二区三区综合| 日本护士高潮| 狠狠爱大香蕉| 国产精彩女在线观看视频| 麻豆视频一区二区| 国产精品女同| 日本性爱欧美性爱| 欧美激情精品| 成人一级二级| 东北女人操比视频| 91婷婷伊人狠人| 国内亚洲高清无码| 夜夜骑日日| 开心激情站| 少妇一级无码精品| 精品在线蜜臀| 国语精品对白| 一摸二插三插| 伊人四虎综合| 麻豆精品A片免费观看| 亚洲欧美精品福利在线| 亚欧国产无码精品在线| 久久亚洲AV无码专区首页| 日韩精品人妻中文字幕不卡乱码| 久草久日| 免费精品AB| 9 7超碰在线免费观看| 91色人妻| 青青久久手机线视频| 一级二级在线观看| 东京热男人的天堂| 5252色欧美在线男人的天堂| 日本黄色XXX| 日本精品国产视频| 国产美女口爆吞精| 性交一区二区在线播放| 伊人精品视频| 一区二三区四区视频大全套| 亚洲免费97免费| 亚洲熟妇乱女区二区三区| 五月婷在线| 婷婷99| 成人小说视频在线精品欧美| 亚洲啪AⅤ永久无码| 亚洲 暴爽 AV人人爽日日碰| 日韩人妻一区二区| 综合第一页| 乱伦熟女专区| 久久欧美性爱视频| www色色色com| 欧美一二在线| 91 综合网| 啊啊啊轻点在线观看| 中文字幕欧美日本乱码一线二线| 另类老少妇| 亚洲性网| 天天影视色香色欲| 成人日韩中文字幕| 日韩在线观看AV| 91狠狠| 欧美亚洲色图另类国产| 天天干一干| 亚洲综合影视| 亚洲天天自拍| 秋霞影音一区二区三区| 久久久18| 国产噜噜噜噜噜久久久久久久久| 五月亭亭六月丁香| 成片免费观看视频大全| 99re6国产精品99re| 中文字幕在线免费观看| 无码精品久久| 久久夜色一区二区| 久久天堂网| 久啪| 亚洲密乳AV| 男人的天堂啪啪| 啊啊啊轻点在线观看| 男女激烈网站最新| 99国产天美| 久草毛片| 屌妞视频久久久久久久| 亚洲色图A| 亚洲熟伦熟妇AV无码春色| 亚洲欧洲无码bt精品合集| 十八禁成人网站在线观看| 亚洲欧美国产成人综合不卡| 国产青一二三| 国产白丝网站| 天天干天天操天天干天天操| 青青草视频这里只有精品| 97在线欧| 亚洲男人天堂2| 国产毛片片精品天天看视频| 99国产在线绯色一区| 亚洲熟女乱色一区二区三区久久久 | ai欧美亚洲小说| 插入逼91| 午夜天堂精品久久| 国产乱人伦AVA麻豆软件.| 嗯嗯,好大,好爽,好骚| 久久av一级av少妇av高潮| 国产天天看| 熟女这里只有精品6| 97超碰久久色| 老鸭窝亚洲毛片| 在线观看中文字幕| 狠狠干2020| 亚州操逼网| 国产aⅴ无码片毛片一级网站| 中国小夫妻勾搭露脸淫荡对白| 国产精品无码久久久久2028| 热久久无毒不卡| 久久一二三四五六七八九区区区 | 亚洲 另类 丝袜 自拍 动漫| 亚洲丝袜天堂| 午夜婷婷| 日韩免费在线视频观看| 久久性生大片免费观看性| 国产精品午夜成人福利| 日韩美女久久一区二区三区| av天天在线观看| 秋霞久久亚洲精品成人| 搡老熟女免费视频| 国产强奸无码乱伦| 97国产精品一区二区传媒公司| 色眯眯射| 操b网站亚洲无码| 国产激情av女片自拍| 强奸乱伦大香蕉| 欧美Aⅴ| 操屄日韩| 2019天天干天天操| 新版天堂中文资源8在线| 狠狠久久手机视频精品| 亚洲天天综合| 久久亚州高清| 大香蕉综合| 久久久久久久久久久久欧美日| 超碰97欧美日韩| 婷婷九月丁香| 免费观看性欧美一级| 欧美亚洲一级在线观看| 婷婷六月色| 综合 青草 伊久久 影院 综合| 九一性生活免费视频| 加勒比色99999| 一个色导综合| 亚州色图第三区| 青女在线| 操一操摸一摸| 97九色人妻| 97爱b| se..亚洲欧美| 久久婷色| 青青草在线视频美女| 亚洲色人阁| 日韩熟女操逼| 熟妇熟女亚洲天堂网| 天天干天天日天天射黄色片| 亚州高清AV| 国产91福利小视频在线观看| 91粉芽高清在线一区二区 | 国产欧美一区二区| 日曰骚久久精品| 色五天伊人| 97国产亚洲中文在线| 可乐操亚洲蜜911| 在线观看免费视频国产| 欧美国产有色电影| 3d成人精品一区二区| 久久草视频污视频| 国产性久久久| 校园春色宗合网| 国产成人超碰在线| 十八禁一区二区无码观看| 91精品国久久久久久无码| 1禁看欧美黄片免费看| 骚逼高潮久久精品| 伊人超碰97| 天天流夜夜操| 午夜美女福利视频| 人妻在线臀日韩| 亚洲女人91| 婷婷99狠狠| 91夜色| 日本天堂网| 亚洲欧美不卡线| 亚洲午夜免费狠狠干| 好吊色综合| 人妻日日夜夜精品| 日本三级R| 亚洲精品国产拍免费91在线| 日韩传媒在线| 九九人人操| 无码精品久久久天天影视| 亚洲AV色图一区| 夜夜草网站| 精品人妻视频入口| 清纯唯美综合亚洲| 精品亚洲俞拍视频一区| 国产三级日产三级韩国三级| 亚洲性爱成人| 欧美色干| 9 1果冻精品视频| 香蕉色网| 一本色道人妻久久| 麻豆区久久久久亚| 欧美一区二区情色| 亚洲日韩AV视色| 中文字幕精品一区二区精| 另类小说欧美激情校园春色| 97超色| 性猛交| 亚洲综合色图欧美| 欧美精品系列| 色臀AV| 天天拍夜夜| 理论久久婷婷网8| 青青草影视蜜久久| 蜜臀久久久99久久久久| 好涩综合| 91精品亚洲内射孕妇| 高清国产精品福利网站| 欧美日韩中文字幕人妻| 在线观看不卡一区二区三区| 人人么人人操| 国产精品自拍欧美在线| 亚洲第一黄色av网站| 成人精品一区二区91毛片不卡| 日韩精品在线放| 欧美的性爱网站免费| 日小BB小视频| 丁香五月社区| 日韩欧美成人综合在线| 色婷婷电影网| 欧美久久婷| 伊人四虎综合| 久久精品国产亚洲AV高清演员表| 成人黑料社久久| 成人网欧美风情| 熟女露脸激情自拍视频| 国产乱伦性爱区| 99婷婷| 中文字幕乱碼在线| 青青草色AV| 日本成人A片网站| 中文字幕一区二区三区人妻少妇在线| 97超碰超欧美。| 亚洲天堂2020| 婷婷久草| 久久久久久久久国产| 在线岛| 99只有精品| 九九九九九九九九九九九蜜桃 | 美女让帅哥通她小鸡鸡| 久久夜黄色无码A级大片| 欧美啪啪啪91| 天天视频黄网站| 久久草视频污视频| 国产欧美岛国精品一区| 日本啊啊啊啊啊视频| 超碰97亚洲| 久9热| 欧美亚州综合网图片| 中文字幕乱在线伦视频中文字幕乱码在线| 中文字暮97| 最新AV在线| 99久久综合网| 夜夜欢天天干| 久热最新在线杭州| 七月婷婷综合| 黄色网址在线免费观看| 啪啪91| 高清不卡 中文 人妻| 午夜a成v人电影| 美女诱惑在线一区| 色欲日韩欧美在线一区| 精品一区二区人妖| 人妻激情视频| 熟妇女人妻呻吟久久AV| 欧美黄片欧美黄片xxx| 久久久久ab| 国产三级电影免费观看| 亚州一区二区| 爱丝福利| 第四色亚洲色图| www…国产操逼| 成年人网站在线免费观看| 精品一久久久| 久久婷婷伊人| 中文字幕国产| 国产精品欧美在线观看| 97国产精品久久久久 | 手机在线视频国内精品| 蜜臀久久99精品久久久久久酒店 | 麻豆AV一区二区| 1024人妻熟女一区二区三区| 蜜臀久久99精品久久久| 99国产精品久久久久久久成人热| 激情五月丁香五月| 日本三级一区二区 在线| 女人喷水视频在线观看| 黄色成年| 亚洲色图欧美一区二区不卡| 欧洲亚洲人妻无码高清久久三区四区| 搡老熟女国产1000部| 日韩 欧美 国产 麻豆| 98福利在线视频| 天堂网 主播 亚洲| 欧美性夜| 亚洲成人精品在线一区| 国产精品久久久久久久黄无码 | 内射夫妻三片| 肉嘟嘟www视频在线观看高清| 欧美顶级黄片AAAAA在线免费看| 日韩av在线播放不卡| 久久久久免费少妇| 精品人妻一区二区三区夜夜| 蜜臀99久久国产| 人妻色偷色噜| AAA久久| 老女人日韩美91| 欧美黑人168页欧美黑人167| 1000部熟女视频在线观看| 亚洲AV无码黄色强奸| 婷婷五月天激情四射| 超碰人妻中文在线| 蜜臀久久99精品久久久久久无删减 | 亚洲天堂人人妻| 一二三区视频在线观看| 国产熟女乱论| 亭亭丁香激情| 十八禁啪啪视频| 麻豆国产96在线| 欧美影音在线| 天天草夜夜草高潮片| 麻豆亚洲Av成人无码一区精品| A男人的天堂| 亚洲国产无码精品首页久久久| 久久久9品一区二区三区| 中文字幕国产| 久久九九国产精品| 思思热免费在线视频| 男女激烈网站最新| 丁香六月综合激情| 亚洲天堂人妻一区二区| 91成人社区| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 久久久四区| 翔田千里A片一区二区| 女性91网站| 性综合网| 精品人妻伦一二三区久久| 91粉嫩萝控精品福利网站_精品影音先锋国 | 久久妇| 大逼色网站| 伊人五月天| www色日本| 厕所偷拍在线| 是还免费视频1727我| 西西美女视频网| 久久久久久中文版| 一区在线精品中文字幕| 色情五月丁香| 婷婷九月丁香| 尤物国产一区在线观看| 伊人国产视频| 午夜视频黄| 嗯嗯啊啊操死我| 日韩BBN| 色综合色色| 91国产丝袜美女| 成人激情无码在线视频| 久草资源欧美在线视频| 上特色A在线| 丁香六月综合激情| 亚洲精品 欧美97色色| 黄色高清无码无码破解免费暗网 | 丁香六月激情综合| 国产天天噜一噜久久久| 欧美亚洲中文字幕| 日日操夜夜操天天操免费观看麻豆| 精品超碰国产| 九九九不卡| 99在线精品视频| 91操熟女| 亚洲伊人久久精品影院| 亚洲高清无码在线桃色| 亚洲色图伊人网| 久久五月婷| 超碰97亚洲| 伊人玖玖网| 久久久97| 欧美区亚洲区偷拍区| 欧美色图亚州激情| 国产精品三级视频网站| 欧美一区二区福利在线| 9999久久久久| 77777亚洲蜜臀精品久久综合蜜臀| 一起草日韩| 久久久久久久| 欧美亚洲se91| 日韩AV色图| 婷婷亚洲色| 丁香激情网| 免费视频一二三区| 丝袜高跟澳门91视频| 97亚洲综合在线| 国产精品盗摄 偷窥盗摄| 久久东京国产精品视频| 九九av| 夜夜躁狠狠躁日日躁av| 久久久久国产精品喷潮免费观看臀 | 激情欧美97| 丁香五月综合| 国产午夜视频| 国产狂喷潮在线精品| 柠檬AV导航| 精品中文一区二区| 狠狠操官网| 99国产精品在线观看| 99操逼| 无码聚合| 玖玖综合网| www成人啪啪18秘 免费| 嗯嗯啊好大| 人妻干天天| 东北老女人的激情视频| 99无码狠狠久久| 嗯嗯啊在线视频| 日本 情色 1区2区3区| 国内亚洲高清无码| 精品网站9999| 无遮挡男女激烈动态图| 女一区二区| 69国产对白刺激| 懂色AV一区二区三区| 男人的天堂99| 亚洲欧美综合区自拍另类| 国产精品国产自产拍高清AV| 级做a爱无码性色永久免费| 18一区二区三区| 日本国产欧美一区三区二区| http://qxhbdz.com| 色吧5亚洲| 欧美色图天堂网m| 极品欧美一区二区三区| 九九九精品色乱九九九| 亚洲AV成人无码久久精品播放| 嗯嗯啊啊的视频| 在线视频日韩欧美国产| 精精品人妻一区二区三区| 国产九九九九九九九九| 一卡二卡三卡| 超碰公开久久网| 涩涩涩综合| 亚洲干B| 男人兔费天堂| 无码免费在线观看黄色片| 日本一久是| 国产99 中文字幕日韩小视频| 色妺妺AⅤ| 熟女欧美日韩综合婷婷| 综合免费无码中文| www九九热| 欧美加勒比| 人人澡综合涩| 欧美人人AAA| 97亚洲中文| 国产精品久久久999| 亚洲操逼视频网站| 色欲久久久久综合网| 果冻传媒A片一二三区| 免费久久精品麻豆一区二区av| 亚欧美色| 91高清日| 9 7超碰在线免费观看| 日韩激情中文字幕有码| 久久精品一区二区三区四区五区| 亚洲欧美91√| 成人网欧美风情| 九九黄色视频在线观看| 中文字幕精品免费一区二区| 性感美女91影视| 国产肏屁眼视频| 丁香五月社区| 久久久精品视频免费观看| 欧美在线播放| 人妻蜜桃臀| 五月开心久久AV官网| 国产一区96在线| 日韩av一级黄片| 国产一级不卡在线观看| 九九九九热| 色香天天| 蜜汁欧美| 四虎精品一区| 欧美亚洲宗合色性图| 日韩亚洲美州欧洲综三区一品在线| 日韩 国产 欧美自拍| 天天92av| 日日夜夜骑| 人人妻天天做天天爽| 天天色怡春院| 97国产亚洲中文在线| 激激五月| 无码国产精品96久久久久孕妇| 久9久9久9久9久9久9| 青娱乐手机日韩在线视频| 亚洲av总站| 青青网三级视频| 五月丁香影院| 麻豆精品久久久久久久| 五月丁香久久| 亚洲天堂,男人| 欧洲色色| 日本熟妇熟色97一本在线观看| 热九九精品| 亚洲人妻av| 美女自卫慰黄网站免费| 99超级碰免费视频| 99自拍视频在线| 日本色婷婷| 日韩精品99999| 99无码| 伊人成人中文字幕久久网| 欧美毛片在线网| 天天操女人| 99视频自拍| 九九热精品免费视频| 狠狠中文字幕| 久草资源在线视频官方总站日韩丝袜美腿| 日韩9999| 操死我了啊啊啊| 久久久专区| 日本精品一区二区三| 久久熟女精品不卡一区| 91欧美丝袜| 91岛国动作片| 国产h小视频在线观看免费| 精品人妻一区二区三区在线视频不卡| 亚洲一二三四区| 日本操逼视频免费| 国产黄色影片在线观看| 色乱二区| 中文字幕黑人大片| 日韩电影天堂视频一区二区| 伊人在线大香蕉视频久久| 综合情欲网| 国产激情视频一区区三区| 2025年A片视频精品| 日韩激情啪啪啪| 人妻久久久| 日本一片一区| 高清无码学生妹高潮| 日韩成人私密一级精品av| 九区国产| 亚洲成成熟女人综合一区二区| 福利五区| 老熟女乱伦一区| 亚洲第一成人影院色播| 美女露胸露奶头| 国产精品乱码久久久久久| 丰满人妻一区| 91性高朝久久久久久久久| 国产精品蜜乳AV| 国产婷婷一区| 久久久亚洲熟妇资源| aaa亚无码专区| 日本3级一区二区免费| 夜夜操91744565| 婷婷激情五月综合| 奇米四色网| 天天日少妇逼AV| 乱子伦一区二区三区国产精品| 亚洲一区二区AV| 97国产高清视频在线观看| 99精品网| 91男人天堂网| 激情 欧美 亚洲 小说| 久久香蕉国产传媒一区剧情天美| 亚av顶级裸体一区二区三区四区五区| 丁香九月婷婷| 丁香久久| 天操天操夜操夜月操月年年操操| 久久在线观看免费视频| 国产av白丝| 日日夜夜骑| 男啪女色黄无遮挡免费观看| 久久综合五月天| 国产精品大屁股999| 东京热男人的天堂精品| 青青操在线亚洲视频观看欧美在线| 亚洲精品 欧美97色色| 日韩激情啪啪| 蜜桃臀一区二区aV| 狠狠操夜夜| 最新中文字幕av| 国产家庭乱伦表演| 亚洲日本男人天堂网| 91东北熟女| 99久热| 男人天堂资源| 中国特猛少妇色xxx| 人妻熟女av国产网站| 亚洲综合大片| 秋霞免费AV| 超碰在线综合97| 国产色呦呦| 国产风韵犹存熟妇三区| 中文字幕性感少妇av| 97综合久第一页| 色综合天天| 欧美在线第五页| 免费中文在线| 色老大| 超碰久热| 91 丝袜在线播放| 精爱久久| 国产精品自拍xxxx| 九九热午夜欧亚国产视频| 亚洲精品a人片在线观看视| 欧美国产操逼| 九九九九久久久| 天天看天天日| 欧美白嫩在线放| 97欧美性爱| 中文字幕免费在线观看| 丁香五月成人| 丁香五六月啪啪| 东北女人| 91碰碰碰| 88xx成人精品视频| 天天综合麻豆视频| 九九99久久| 日韩三级伊人| 综合激情一一91| 久久久久9999| 国产精品久久久久久久AV大片 | 国产精品电影推荐| 亚欧高清v| 国产白丝av| 97大色网| 亚洲黄网在哪免费看| 欲香欲色综合天天伊人| 福利风月五月天影院| 亚洲伊人a线观看视频| 亚洲国产剧情少妇激情| 蜜乳AV一区| 日本三级精品| 中文字幕78| 风韵犹存大大大大香蕉| 懂色AV中文| 无码国产精品久久久久| 97AV在线观看| 2020中文字幕在线| 嗯嗯嗯不要不要免费视频| 不卡av在线中文字幕| 青青在线视频免费| 亚洲精品一卡二卡三卡福利视频网站| 色婷五月天| 日韩黄片视频试看| 美女91AV| 日韩色图 一区二区| 中文字幕二区日韩天堂| 婷婷五月天激情网| 麻豆国产97在线| 91在线丝袜| 白 大 人妻 区 在线| 丁香六月激情综合| 人人射人人操人人摸| 欧美成人一级麻豆| 国产丝袜一区二区三区| 婷婷五月天无码 | 以及麻豆国产入口在线观看免费| 91女日逼| 青青草中出视频| 美女诱惑在线一区| 九九热免费国产视频婷婷伊人五月 | 大香蕉中文在线| 婷婷九月国产| 超碰97最新人妻| 第二页中文字幕| 超碰人人妻| 91婷婷| 国产精品久久久三级无码| ji熟女.com| 国模私拍一区二区三区神乳| 丁香七月婷婷| 啪啪视频免费在线观看| 中文字幕视频二区| 97精品第3页| 欧美色图下一页| 久久精品一区| 91熟女综合| 麻豆天美传媒在线视频天堂| 亚洲精品天天影视综合网 | 日本免费二区三区| 日本亚欧爱爱| 呻吟 欧美 日本 中出| 久热久操| 亚欧美综合| 中文字幕精品亚洲熟女| 999熟女精品| 国产97/欧美| 精品人妻一区二区蜜桃视频| 久久久精品,3| 91成人精品| 91爱| 性综合网| 97超碰人人操人人操| 91P0RNY大屁股人妻| 欧美成人性爱视频在线播放| 国产一区免费午夜视频| 国产在线强奸视频| 日亚韩精品视频二区三| 国产精品熟女丝袜一区二区| 婷婷五月综合在线| 久久国产精品一级二级三级| 99久久无色码| 色在线69堂| 亚洲色天堂九9| 久久久久久中文| 易易A毛视频| 亚洲图片欧美色| 国内精品a| 综合久久六月久久婷婷| 狠狠综合网| 色综合中文字幕不卡| 亚洲欧美日韩电影网站一区 | 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 人人操人人摸avav| 日本熟女免费視颖| 久久99视频| 99re6国产精品99re在线| 91欧美另类| 国产视频97| 欧美精品三区| 免费中文在线| 在线观看AV不卡| 性九九九九九九| 99999亚洲| 金莲网址| 亚洲色图激情小说| 国产美女口爆吞精| 女人高潮大叫一级毛片| 亚洲天堂中文字幕无码男同| 伊人网在线视频| 天堂网亚洲区手机版| 狠狠色噜噜狠狠狠狠2018| 国产精品自拍欧美在线| 夜夜操av亚洲一区二区| 久久精品一区二区三区蜜桃臀| 亚洲熟女综合一区二区| 粉嫩粉嫩一区性色AV片| 天天综合,91综合永久| 中亚黄色三级大片| 精品视频一区二区| 人人透人人操| 欧美亚洲美少妇一区二区| 91色香| 人人人人插| 精精夜夜| 国产91 丝袜在线播放00-百度| 在线欧美69V免费观看视频| 校园春色综合| yazhouzaixian| 在线观看成人性爱免费小视频| 久久久久免费少妇| 9美女超碰在线免费观看| 五月丁香六月综合缴清无码| 久久激情视频| 青青草五月份天| 第四色奇米影视777| 欧美黑人猛交春色影视大全| 中文字幕午夜精品久久久| 2018天天干在线视频| 欧美日韩夜夜| 欲香欲色| 嗯嗯啊啊视频在线看| 中文字幕第95页| 亚洲av综合色区无码一| 久超超碰| ,成人免费啪啪视频| 国产av白丝| 久久久精品网站| 日韩精品区二区三区不卡| 色狠狠一区二区三区香蕉| 久久久久成人亚洲国产| 欧美超碰人妻97| 国产精品人人爽人人做可爱福利| 少妇同性| 啪啪性爱免费视频| 综合网色| 99999亚洲| 九九这里只有精品| 天天影视亚洲| 日韩人妻资源在线看| 九九九九九精品视频| 久9热| 亚洲黄色| 天天色悠悠激情| 国产午夜精品理论片一二三区区| 天天狠| 深夜福利黄片| 综合日韩激情另类图片| 最新精品久久蜜桃| 国产真乱mangent| 小少妇| 夜草网站| 99re只有精品| 久久久无码av精| 97 国产精品| 亚洲国产精品久久久久久久久久| 综合第一页| 97在线欧洲| 日韩亚洲国产视频| 色欧美在线| 91无码中出人妻视频| 亚洲欧美综合| 啊啊啊97视频| 国产91久久九九免费精品无码| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 国产熟女| 97人人操人人摸人人爱| 亚洲图片小说欧洲| 伊人影院在线理论播放| 神马久久久久久伦理片| 2003天天干夜夜操| 玖玖视频在线资源一区二区三区| 成人五月天丁香激情综合| 在线天堂999| 多毛小伙内射老太婆| 国产美女口爆吞精| 99色天堂| 日韩三级在线观看网站| 色香综合天天影视综合 | 夜夜欧美| 天天天天天天天天综合| 国产乱伦性爱AV| 国产福利一区二| 天欧美在线| 18精品一区| 99热99在线播放激情| 成人性生活高清视频在线播放| 乱日视频| 99视频自拍| 乱操乱伦AV| 国产91美女视频| 欧美少妇第一页| 日韩在线观看中文字幕视频| 在线视频 亚洲精品| 安微少妇操BBB| 久久久久久性爱视频| 亚洲AV成人无码一区二区三区在线观看| 校园春色五月天| 91欧美少妇| 91国产大片| 亚洲av性爱电影| AV中文字幕剧情1区2区3| 亚洲AV无码天美传媒一区| 韩国午夜理伦三级好看| 视频一区二区三区精品| 大香蕉人妻久久| 久久精品高清无码一区| 狼人综合婷婷激情四射 | 欧美三四五区| 日日嗨AV一区二区夜夜| 亚洲欧洲美腿丝袜| av天堂影视中文在字幕在线中文| 欧亚乱色熟女一区二区| 一本色道综合久久欧美| 久久男人的天堂| 水滴偷拍| 日本不卡中文| 亚洲少妇自拍中文字幕懂色| 天堂伊人久久| 国产五码丝袜屁眼| 内射日韩大臀美女| 亚洲有薄码区日本系列中文字幕| 午夜黄色免费在线观看| 日日操丁香五月天| 欧美极品美女aaaaaa级黄片| 久久久久国产精品久久久| 日本三级精品| 蜜臀Av一区二区三区| 啊啊啊啊好疼视频| 欧美在线|亚洲| ...日韩成人一区二区三区字幕| 色九九九综合| 99啪啪| 人人澡人人弄| 东京成人一区| 日韩少妇无吗| 免费看污网址| 日日干夜夜欢| 久久精品99| 欧美淫乱视频| 中文字幕成人乱码熟女精品国50 | 91色人妻| 精品一区二区三区国产| 天天射天天操天天干天天吃2018 | av网站在线观看了| 久久一区二区高清免费| 亚瑟国产精品久久无码| 日韩在线一区二区| 精品中文字幕第一页| 欧美人妻久久精品二区三区| av无码av无码专区| 亚洲成?V人片在线观看福利| 大香蕉乱伦视频网| 亚洲国产第一页综合视频| 99久久久99久久91熟女| 日本91白丝| 久久9精品视频| 国产一区二区三区,在线观看观看| 久日综合网| 久热这里只有精品9| 精品国产乱码久久久| 91久久久亚洲| 国产精品白丝| 欧美老妇曰批的视频| 成人精品一区二区91毛片不卡| 国产h片在线观看视频| www久久99| 久操精品| 1人人看人人摸人人操| 一级特级aaaa毛片免费观看| 亚洲精品色| 97超碰色屌| 欧美专区17页| 97操| 强奸乱伦大香蕉网| 色色亚洲| 97操在线| 色综合91好| 天天色黄色影院天天操| www.zbzhongsen.com| 视频在线观看一二三区| 2017超碰| 亚洲色图欧美| 亚洲成a人在线观看久| 激情五月婷婷综合| oumeizonghese,www| 丝袜美腿91| 国产综合在线视频网站| 亚洲免费看片| 一区二区精品更新提醒| 亚洲天堂一二| a片 xxxx受爽视频| 日韩操人| 91爰爱欧美| 天天综合中文字幕 91| 熟妇的味道HD中文字幕| 十八禁av无码免费网站APP| 激情五月婷婷| 爱爱久久| 91视频综合网| 国产美女mm131爽爽爽爽| 日韩在线76| 校园春色 亚洲| 99久久久无码精品国产人| 啊…啊…操我用力操我| 亚洲欧美在线综合| 26uuu最新| 色噜噜婷婷| 青青草原成人| 在免费jIzzjIzz在线视频| 成人熟女视频一区二区三区| 久久久久国色αv免费观看| 密乳无码| 免费久久9999| 国产日本一区二区三区蜜臀在线观看| 成人av动漫在线观看| 搞中出视频在线观看| 96精品久久久久久久久| 91精品久久久久久综合五月天| 伊人 俄罗斯 a v| 一本色道久久天天射天天干| 蜜桃臀av在线观看| 97中文字幕九区| 精品在线观看视频在线| 操淫穴亚洲五月丁香 | 黑人无码一区二区| 久久草视频污视频| 亚洲一卡二卡在线免费| 日本天堂网| 欧州一区二区三区四区| 亚洲夜色在线| 国产日本一区二区三区蜜臀在线观看| 精品性爱无码在线播放| 97欧美色| 国产日本久久免费精品| 99久在线精品99re8| 立川理惠无码一区二区| 99福利社| 五月丁香综合激情| 97久久精品不卡| 亚洲第一在线视频| 欧美激情 亚洲色图| 国产精品久久久三级无码| 色综合1991| 破苞ⅩXXX性无码动漫无码| 91热色| 日韩A优精品在线观看| 蜜桃视频啊啊啊啊| 色欲日韩欧美在线一区| 日人妻视频91| 亚洲天天自拍| 99热精品在线在线| 男人的天堂2019| 综合网~91综合网| 最新av中文字幕高清| #NAME?| 留下AⅤ黄色片| 亚洲Av诱惑| 性色高清在线| 五十路六十路七十路熟婆| 欧美综合 站| 自拍大香蕉乱插| 欧美色视| 欧美熟妇人体| 亚洲精品影视老司机| 亚洲图片 欧美电影| 婷婷尹人大香蕉免费| 精品久久无码午夜福利| 精彩国产视频播放1区2区| 色天使亚洲综合在线观看| 美女上床网站| 精品久久久久久亚洲| 成人av影院在线观看| 人妻素股| 九九热精品| 一级二级三级黑人无码| 91劲爆| 禁止观看美女黄| 日本性爱不卡视频| 亚洲色婷婷综合久久一区二区三区| 花野真衣| 国产免费操逼| 精品国产乱码久久久久久蜜臀| 精品97久久综合| 夜夜欧美| 女人被男人桶爽视频网站| 97在线资源| 久久99综合| 亚洲欧洲无码bt精品合集| 超碰在线97国产| 婷婷五月天在线观看| 亚洲精品国产无码高清| 色97国产69香蕉| 天天香香欲综合| 日韩成人在线性爱视频| 久久久久久久久久久久97 | 久久国产三区| 欧美性生活免费网| 婷婷久月| 丝袜美腿丝袜| 日日黄色三级网站| 无码9区| 最新日产中文在线麻豆| 黄色无码高清黄色无码网站| 色哟哟AV| 男人的天堂欧美| 国产探花精品在线| 国产国产亚洲一二三久久| 欧美色图私拍91| 91neishe| 日本污ww视频网站| 无码av永久免费专区网站| 岛国黄片网站| 亚洲毛片久久| 久久禁| 国产熟女高潮一区二区三区| 一区二区三区日韩欧美| 亚洲男人天堂2019| 精品国产一级久久| 狠狠中文字幕| av一区二区三区四区| 精品91| 校园春色五月天| 色九久| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 99精品无码| 亚洲天堂日本| 91爱做| 亚洲第一二区另类图| 激情五月天中文字幕色| 蜜区区视频79 | 午夜九九| 国产AV天美传媒一区二区三区 | 欧美成人A√在线一区二区| 啊啊啊好舒服视频| 超碰美国| 中文字幕熟女人妻丝袜| 天天欧美| 婷婷午夜清品久久久久久久性色视频观| 久久日韩肥臀| 四虎免费在线播放| 天天久久久久久| 久久亚洲熟妇在线视频| 欧美亚洲se91| 久草精品一区 | 色小视频蜜乳| 五月天黄色激情视频| 亚洲激情视频| 九九九久久久久| 97超碰亚洲| 久久久久人| 日本精品一区二区三|