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

ARTICLE DETAIL

資訊詳情

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

Android APK 加固原理(三):方法級代碼抽取——PVM1 虛擬化打包到底是什么?

Android APK 加固原理(三):方法級代碼抽取——PVM1 虛擬化打包到底是什么? Android APK 加固原理三方法級代碼抽取——PVM1 虛擬化打包到底是什么系列文章?第一篇《Android APK 加固原理一Native Shell 如何隱藏和恢復(fù) DEX》第二篇《Android APK 加固原理二從 DEX 解密到 ART 加載如何縮短代碼明文暴露窗口》第三篇《Android APK 加固原理三方法級代碼抽取——PVM1 虛擬化打包到底是什么》第四篇《Android APK 加固原理四真正的代碼虛擬化——PVM2 Native Interpreter 技術(shù)解析》第五篇《Android APK 加固原理五SO.text段加密、ELF 加載與運(yùn)行時(shí)動(dòng)態(tài)解密》第六篇《Android APK 加固原理六RASP 運(yùn)行時(shí)安全防護(hù)——如何檢測 Frida、Hook 與運(yùn)行時(shí)攻擊》第七篇《從 APK 加密到代碼虛擬化XopProtector 多層 Android 應(yīng)用保護(hù)體系解析》項(xiàng)目地址https://github.com/xopJack/XopProtector一、前言為什么有了 DEX 加密還需要 PVM1在前兩篇文章中我們已經(jīng)分析了 Android APK 加固最基礎(chǔ)的一層防護(hù)第一層是把原始 DEX 從 APK 中拿走。第二層是把 DEX 加密讓逆向工具無法直接從 APK 中得到完整的 classes.dex。但是僅僅做到 DEX 加密并不能解決所有問題。因?yàn)?Android 應(yīng)用最終還是需要運(yùn)行。無論 DEX 在 APK 中如何加密應(yīng)用啟動(dòng)以后代碼最終還是需要進(jìn)入 Android Runtime也就是 ART 的執(zhí)行體系。因此攻擊者真正關(guān)心的問題會逐漸從“APK 里面有沒有完整 DEX”轉(zhuǎn)變?yōu)椤斑\(yùn)行時(shí)能不能把 DEX 恢復(fù)出來”進(jìn)一步又會變成“能不能只針對關(guān)鍵方法進(jìn)行分析”這也是方法級保護(hù)存在的意義。XopProtector 在整體保護(hù)體系中增加了 PVM1原始 DEX ↓ 定位目標(biāo)方法 ↓ 抽取方法 Dalvik 指令 ↓ PVM1 編碼 ↓ AES-GCM 加密 ↓ 原方法體替換成安全占位 Stub ↓ 生成 code.bin ↓ 運(yùn)行時(shí) Native Shell 解密 ↓ 恢復(fù) Dalvik 指令 ↓ 寫回 DEX ↓ ART 執(zhí)行因此PVM1 的核心思想并不是“讓代碼永遠(yuǎn)不出現(xiàn)”。而是把關(guān)鍵方法從正常 DEX 的 code_item 中抽離出來讓靜態(tài) DEX 分析工具看到的只是一個(gè)占位方法真正的方法實(shí)現(xiàn)被移動(dòng)到獨(dú)立的加固數(shù)據(jù)區(qū)中并在運(yùn)行時(shí)恢復(fù)。XopProtector 源碼明確將--vmp-prefix定義為 PVM1并特別說明它是 ?**“decode → write Dalvik”**?而不是 Interpreter。二、先搞清楚PVM1 到底是什么很多人看到“VMP”“Virtual Machine”“虛擬化”這些詞第一反應(yīng)就是原始代碼 ↓ 虛擬指令 ↓ Virtual Machine ↓ Interpreter這種理解對于 XopProtector 的PVM2才成立。對于 ?PVM1?并不是這樣。XopProtector 的VmCodec.java對 PVM1 的注釋非常直接Lightweight method-level VM packing (PVM1) Dalvik → non-Dalvik image Runtime unpacks inside .bitcode before writing DEX. This is virtualized packing, not a full bytecode interpreter.也就是說PVM1 更準(zhǔn)確的技術(shù)定義應(yīng)該是Method-Level Virtualized Packing方法級虛擬化打包而不是True Code Virtualization真正的代碼虛擬化。這兩個(gè)概念一定要區(qū)分。三、PVM1 和 PVM2 到底有什么區(qū)別這是整個(gè)系列最容易混淆的地方??梢灾苯佑孟旅孢@張表理解特性PVM1PVM2保護(hù)粒度方法級方法級是否抽取原始指令是是是否生成虛擬化數(shù)據(jù)是是是否存在 Interpreter否是是否恢復(fù) Dalvik是否是否寫回 DEX是否最終執(zhí)行者ARTNative Interpreter核心目的提高靜態(tài)逆向成本改變代碼執(zhí)行模型對運(yùn)行時(shí) Hook 的抵抗能力中等更強(qiáng)性能開銷相對較小更高實(shí)現(xiàn)復(fù)雜度較低很高XopProtector README 對兩者的定義非常明確--vmp-prefix PVM1 unpack → write Dalvik not an interpreter --true-vmp-prefix PVM2 JNI trampoline native interpret因此PVM1 是“代碼搬家 編碼保護(hù) 運(yùn)行時(shí)恢復(fù)”。而PVM2 是“代碼翻譯 自定義指令集 Native Interpreter”。這也是為什么 XopProtector 把 PVM1 和 PVM2 設(shè)計(jì)成兩個(gè)不同階段。四、PVM1 的核心從“類級保護(hù)”下降到“方法級保護(hù)”傳統(tǒng) DEX 加密往往是classes.dex ↓ 整體加密運(yùn)行時(shí)整個(gè) DEX ↓ 整體解密 ↓ 交給 ART這種方式的缺點(diǎn)很明顯一旦整個(gè) DEX 被恢復(fù)攻擊者就獲得了大量可分析代碼。而 PVM1 改變了保護(hù)粒度。它不再簡單地把整個(gè) DEX 看成一個(gè)整體而是進(jìn)一步進(jìn)入DEX ├── Class A │ ├── method A() │ ├── method B() │ └── method C() │ ├── Class B │ ├── method D() │ └── method E() │ └── Class C └── method F()然后選擇其中關(guān)鍵方法method B() method D() method F()進(jìn)行抽取。最終形成DEX ├── 普通方法 → 正常保留 │ ├── PVM1 方法 → 抽空 │ ↓ │ code.bin │ └── PVM2 方法 → 后續(xù)真正虛擬化因此PVM1 的第一個(gè)重要思想就是保護(hù)從“DEX 級”進(jìn)一步下降到了“Method 級”。五、第一步找到需要保護(hù)的方法XopProtector 的 Packer 是在構(gòu)建階段工作的。源碼中的PackerMain會讀取 DEX并遍歷其中的 ClassDef、ClassData 以及 DirectMethods / VirtualMethods。核心流程可以抽象為APK ↓ 解包 ↓ classes.dex ↓ 解析 DEX ↓ 遍歷 ClassDef ↓ 定位目標(biāo) Class ↓ 遍歷 DirectMethod ↓ 遍歷 VirtualMethod ↓ 提取 code_item源碼中的walkDexMethods()就承擔(dān)了這一職責(zé)。它會遍歷dex.classDefs()然后讀取classData.getDirectMethods() classData.getVirtualMethods()再逐個(gè)調(diào)用extractOne(...)處理方法。六、PVM1 并不是所有方法都保護(hù)這是一個(gè)非常重要的設(shè)計(jì)。XopProtector 并不是無腦把所有方法都轉(zhuǎn)換成 PVM1。源碼中存在vmpPrefixes對應(yīng)--vmp-prefix也就是說可以按照類描述符前綴選擇需要進(jìn)行 PVM1 處理的代碼。例如--vmp-prefix Lcom/example/security/那么Lcom/example/security/Foo; Lcom/example/security/Pay; Lcom/example/security/License;等類中的方法就可能進(jìn)入 PVM1 流程。源碼中明確維護(hù)了vmpPrefixes trueVmpPrefixes hollowPrefixes三個(gè)不同維度。這實(shí)際上構(gòu)成了普通代碼 ↓ Hollow PVM1 代碼 ↓ PVM1 Packing PVM2 代碼 ↓ True VMP因此可以針對不同代碼價(jià)值選擇不同保護(hù)等級。七、第二步讀取方法真正的 Dalvik 指令找到目標(biāo)方法以后PVM1 并不是簡單地復(fù)制整個(gè) MethodId。它真正需要保護(hù)的是方法的 code_item 中的 Dalvik instruction stream。源碼中com.android.dex.Codecodedex.readCode(method);然后short[]unitscode.getInstructions();再根據(jù)units.length * 2計(jì)算實(shí)際指令區(qū)域大小。之后通過method.getCodeOffset()16定位到 code_item 中真正的 instructions 區(qū)域。然后raf.seek(insnsOffset);raf.readFully(original);把原始 Dalvik 指令讀取出來。所以這里可以把 PVM1 的第一核心動(dòng)作總結(jié)成Method ↓ CodeItem ↓ instructions ↓ byte[]也就是把原方法的 Dalvik 指令從 DEX 中物理抽取出來。八、第三步PVM1 編碼到底做了什么現(xiàn)在進(jìn)入 PVM1 最核心的VmCodec。XopProtector 的 PVM1 數(shù)據(jù)擁有一個(gè)非常明顯的 MagicPVM1源碼privatestaticfinalbyte[]MAGIC{P,V,M,1};編碼后的數(shù)據(jù)結(jié)構(gòu)可以簡單理解成---------------- | PVM1 | ---------------- | encoded byte 0 | ---------------- | encoded byte 1 | ---------------- | encoded byte 2 | ---------------- | ... | ----------------值得注意的是PVM1 編碼后的數(shù)據(jù)長度基本等于原始 Dalvik 指令長度 4 字節(jié) Magic。它并沒有像真正的虛擬機(jī)那樣把一條 Dalvik 指令重新編譯成復(fù)雜的 VM 指令流。這也是為什么稱它為Virtualized Packing而不是True Virtualization源碼明確說明 PVM1 編碼結(jié)果是same length 4即原始長度加上PVM1四字節(jié)頭。九、PVM1 的第一層編碼基于 Method Index 的 Key StreamPVM1 的編碼并不是簡單byte ^ 0x55它會根據(jù)methodIdx以及byte offset生成一個(gè)簡單的動(dòng)態(tài)字節(jié)流。源碼keystream(methodIdx, i)其核心計(jì)算為(methodIdx * 131 i * 17 0xA5) 0xff因此Key f(methodIndex, byteOffset)然后encodedByte originalByte ^ key這樣不同 Method Index 的編碼結(jié)果就不會完全相同。十、PVM1 的第二層Nibble Swap除了 XORPVM1 還做了一層非常輕量的字節(jié)變換。源碼中if((i1)0){b((b4)0xf0)|((b4)0x0f);}也就是對偶數(shù)位置的字節(jié)進(jìn)行高低 4 bit 交換。例如原始 1010 0011經(jīng)過 Nibble Swap0011 1010所以 PVM1 的實(shí)際編碼邏輯可以抽象為Dalvik Byte ↓ XOR KeyStream ↓ 偶數(shù)位置 Nibble Swap ↓ PVM1 Blob解碼時(shí)反過來PVM1 Blob ↓ Nibble Swap ↓ XOR KeyStream ↓ 原始 Dalvik Byte因此這個(gè)過程本質(zhì)上是為了破壞原始 Dalvik 指令的線性特征讓靜態(tài)掃描器無法直接把這一段數(shù)據(jù)當(dāng)作正常 DEX 指令流解析。十一、但是 PVM1 真正的安全邊界并不在這個(gè) XOR這一點(diǎn)非常重要。如果只看methodIdx i 131 17 0xA5 XOR你會發(fā)現(xiàn)這并不是現(xiàn)代密碼學(xué)意義上的強(qiáng)加密。實(shí)際上 XopProtector 的真正安全邊界來自后面那一層AES-GCMPVM1 編碼只是Dalvik ↓ PVM1 Transform ↓ AES-GCM源碼中extractOne()的流程非常清楚original Dalvik instructions ↓ VmCodec.encode() ↓ PVM1 blob ↓ CryptoUtils.aesGcmEncrypt() ↓ stored也就是說PVM1 負(fù)責(zé)改變數(shù)據(jù)形態(tài)AES-GCM 負(fù)責(zé)真正的數(shù)據(jù)機(jī)密性。十二、第四步原始方法代碼被真正“抹掉”這是 PVM1 最關(guān)鍵的一步。如果只是復(fù)制一份代碼那么原 DEX 里面仍然存在原始代碼。保護(hù)就沒有意義。所以 XopProtector 在提取完方法指令以后會直接修改原來的 DEX。流程原始 Method Code ↓ 讀取 ↓ 保存到 PVM1 ↓ 原位置寫入 Stub源碼中writeReturnStub(...)會把原始 instructions 替換成一個(gè)與返回類型匹配的占位代碼。例如void → return-void int → const/4 v0, 0 → return v0 object → const/4 v0, 0 → return-object v0剩余空間則用nop類指令填充。十三、為什么不能直接把方法體全部清零這是 Android ART 加載過程中的一個(gè)關(guān)鍵問題。DEX 并不是Class Method Code隨便寫什么都可以。ART 在加載、驗(yàn)證以及后續(xù)執(zhí)行過程中會檢查 Method 的結(jié)構(gòu)和 code_item。如果直接code_item 0或者破壞整個(gè) CodeItem很容易造成DEX 驗(yàn)證失敗 VerifyError Class loading failure Crash所以加固系統(tǒng)常見的思路是不破壞方法結(jié)構(gòu)只替換真正的業(yè)務(wù)指令。XopProtector 也是這樣做的。例如原方法intadd(inta,intb){returnab;}原來的 Dalvik 指令可能類似add-int returnPVM1 后變成const/4 v0, 0 return v0 nop nop ...真正的add-int已經(jīng)被拿走。這就是所謂Hollow / Method Hollowing也就是方法空洞化。十四、因此 PVM1 最重要的結(jié)構(gòu)變化是這樣的加固之前classes.dex Method A ↓ CodeItem ↓ 真正業(yè)務(wù) Dalvik 指令加固之后classes.dex Method A ↓ CodeItem ↓ 安全 Stub與此同時(shí)assets/protector/code.bin ↓ PVM1 ↓ AES-GCM ↓ 真正的 Dalvik 指令形成┌─────────────────────┐ │ classes.dex │ │ │ │ Method A │ │ ↓ │ │ Stub / Hollow │ └──────────┬──────────┘ │ │ runtime restore ↓ ┌─────────────────────┐ │ code.bin │ │ │ │ Method Index │ │ Plain Size │ │ Flags │ │ AES-GCM Blob │ └─────────────────────┘十五、PVM1 的第五步生成 code.bin方法被抽取以后需要一個(gè)地方保存這些方法。XopProtector 使用code.bin作為運(yùn)行時(shí)方法代碼倉庫。源碼中的writeCodeBin()會將不同 DEX 中的保護(hù)方法進(jìn)行組織。當(dāng)前代碼使用的是code.bin v4。其結(jié)構(gòu)可以抽象為Header ↓ version ↓ dex count ↓ dex offsets ↓ Dex Blob每個(gè)方法記錄大致包含methodIndex plainInsnsSize storedInsnsSize flags insns也就是Method Index ↓ 告訴 Runtime “這個(gè)代碼屬于哪個(gè)方法” Plain Size ↓ 解密以后需要恢復(fù)多少字節(jié) Stored Size ↓ 當(dāng)前加密數(shù)據(jù)長度 Flags ↓ 告訴 Runtime PVM1 / PVM2 / 其他類型 Insns ↓ AES-GCM 加密后的方法數(shù)據(jù)源碼中writeCodeBin()明確寫入了methodIndex plainInsnsSize insns.length flags insns并且支持多 DEX。十六、為什么必須保存 Method Index這是整個(gè)方法級保護(hù)體系的“索引核心”。DEX 中的方法是通過method_ids進(jìn)行編號的。例如method_id #100 method_id #101 method_id #102PVM1 不需要在code.bin中保存一套完整的 Java/Kotlin 方法名。它可以直接利用methodIndex關(guān)聯(lián)DEX Method ? code.bin Record因此 Runtime 可以實(shí)現(xiàn)methodIndex 102 ↓ 找到 code.bin 中 #102 ↓ AES-GCM decrypt ↓ PVM1 decode ↓ 得到真實(shí) Dalvik instructions ↓ 恢復(fù) Method #102這就是 PVM1 的“方法級映射關(guān)系”。十七、PVM1 運(yùn)行時(shí)到底發(fā)生了什么這部分是整個(gè)機(jī)制最值得分析的地方。很多人會誤以為啟動(dòng) APP ↓ 整個(gè) code.bin 解密 ↓ 整個(gè) DEX 恢復(fù)實(shí)際上從源碼結(jié)構(gòu)來看XopProtector 的 Runtime 是圍繞code.bin code_map Method ART Hook組織起來的。Native Shell 啟動(dòng)以后會先定位dexes.zip code.bin config.json然后加載相關(guān) Key。之后code.bin ↓ read_file() ↓ codeitem::parse() ↓ state.code_mapRuntime 將保護(hù)方法建立成內(nèi)部映射。源碼protector::codeitem::parse(...)解析完成以后state.code_map就成為運(yùn)行時(shí)的方法保護(hù)索引。十八、Runtime 為什么要 Hook ART這里就涉及 Android 加固真正困難的地方。如果Method A在 DEX 中已經(jīng)被替換成return 0那么 ART 自己執(zhí)行的時(shí)候自然只會執(zhí)行return 0它不知道真正代碼在哪里。所以必須在ART 加載 / 定義 Class / Method的關(guān)鍵路徑上進(jìn)行干預(yù)。XopProtector 在初始化階段會protector::hook::install_hooks();然后再解析和應(yīng)用code.bin源碼明確說明在解析 / 應(yīng)用 code.bin 前安裝 ART hooks以便 DefineClass 時(shí)進(jìn)行 patch。因此整個(gè)體系實(shí)際上形成DEX ↓ ART ↓ Hook ↓ 識別被保護(hù) Method ↓ 查 code_map ↓ 恢復(fù)真實(shí) Dalvik ↓ 交給 ART十九、PVM1 的運(yùn)行時(shí)恢復(fù)流程可以把它完整畫成App 啟動(dòng) │ ▼ Native Shell 初始化 │ ▼ 讀取 code.bin │ ▼ codeitem::parse │ ▼ 建立 code_map │ ▼ 安裝 ART Hook │ ▼ ART 加載目標(biāo) Class │ ▼ 檢查 Method 是否受保護(hù) │ ┌──────┴──────┐ │ │ 否 是 │ │ ▼ ▼ 正常執(zhí)行 查詢 code_map │ ▼ AES-GCM 解密 │ ▼ PVM1 Decode │ ▼ 得到真實(shí) Dalvik 指令 │ ▼ Patch CodeItem │ ▼ ART 執(zhí)行這就是 PVM1 最核心的運(yùn)行時(shí)機(jī)制。二十、PVM1 的“虛擬化”到底體現(xiàn)在哪里現(xiàn)在回到最開始的問題PVM1 到底算不算虛擬化答案是算但屬于非常輕量級的“虛擬化打包”而不是完整 VM 虛擬化。因?yàn)樗_實(shí)把原始代碼Dalvik instructions轉(zhuǎn)換成了PVM1 image原始代碼不再直接位于原 Method CodeItem 中。但是它沒有Dalvik opcode ↓ PVM opcode ↓ VM Register ↓ VM Stack ↓ Dispatcher ↓ Handler這一整套機(jī)制。因此PVM1 Dalvik → protected image → Dalvik而PVM2 Dalvik → custom VM bytecode → Native Interpreter這才是真正意義上的Code Virtualization二十一、為什么 PVM1 比真正虛擬化簡單很多假設(shè)原始代碼intcalc(inta,intb){intxab;returnx*10;}PVM1 的目標(biāo)只是隱藏 add-int mul-int return然后運(yùn)行時(shí)恢復(fù) add-int mul-int returnART 繼續(xù)執(zhí)行。所以 PVM1 并不需要理解add-int mul-int if goto invoke new-instance monitor try/catch的語義。它只需要保存 ↓ 解碼 ↓ 恢復(fù)因此實(shí)現(xiàn)成本相對較低。二十二、真正的 PVM2 為什么會復(fù)雜得多假設(shè) PVM2 也拿到add-int mul-int return它不會把這些指令恢復(fù)到 DEX。而是轉(zhuǎn)換成自己的VM_ADD VM_MUL VM_RETURN然后Native Interpreter switch(opcode) { case VM_ADD: ... case VM_MUL: ... case VM_RETURN: ... }于是ART ↓ JNI Trampoline ↓ Native Interpreter ↓ VM Opcode ↓ Handler整個(gè)執(zhí)行模型都發(fā)生改變。XopProtector 當(dāng)前 PVM2 文檔也明確說明PVM2 方法不會恢復(fù)到 Dalvik而是通過 JNI trampoline 進(jìn)入 Native Interpreter讀取code.bin中的 PVM2 image。這就是下一篇文章真正需要討論的內(nèi)容。二十三、PVM1 對靜態(tài)逆向的意義假設(shè)沒有 PVM1classes.dex ↓ jadx ↓ Java/Kotlin-like code攻擊者可以直接看到calculateToken()validateLicense()checkSignature()generateKey()而加入 PVM1 后classes.dex ↓ 目標(biāo)方法 ↓ Stub靜態(tài)分析工具看到的可能只是return0;或者returnnull;真實(shí)邏輯已經(jīng)不在 Method CodeItem 中。所以靜態(tài)反編譯結(jié)果 ≠ 真實(shí)業(yè)務(wù)邏輯這就是 PVM1 最直接的價(jià)值。二十四、但是 PVM1 并不是“不可逆”這一點(diǎn)在技術(shù)文章中必須客觀說明。PVM1 的最終執(zhí)行路徑仍然是PVM1 ↓ Decode ↓ Dalvik ↓ ART所以從攻擊者角度靜態(tài)分析 ↓ 難度增加 運(yùn)行時(shí)動(dòng)態(tài)分析 ↓ 仍然可以觀察 最終恢復(fù)后的 Dalvik ↓ 仍然存在因此PVM1 的目標(biāo)不是讓代碼永遠(yuǎn)無法獲得而是增加靜態(tài)分析和自動(dòng)化脫殼的成本。這也符合 XopProtector 項(xiàng)目本身的定位加固的作用是提高逆向成本而不是保證應(yīng)用絕對不可破解。二十五、PVM1 最大的價(jià)值其實(shí)是“方法級明文控制”如果把保護(hù)過程畫成時(shí)間軸APK │ │ 加密狀態(tài) ▼ App 啟動(dòng) │ ▼ Runtime 解密 │ ▼ PVM1 Method Decode │ ▼ Dalvik Method 明文 │ ▼ ART 執(zhí)行關(guān)鍵區(qū)別是以前整個(gè) DEX ↓ 大量代碼同時(shí)明文PVM1Method A ↓ 需要時(shí)恢復(fù) Method B ↓ 需要時(shí)恢復(fù) Method C ↓ 需要時(shí)恢復(fù)因此保護(hù)對象從“整個(gè)代碼包”變成“一個(gè)個(gè)關(guān)鍵方法”。這就是方法級加固最重要的工程價(jià)值。二十六、從源碼看PVM1 實(shí)際上是“三層保護(hù)疊加”如果把 XopProtector 的 PVM1 單獨(dú)拆開可以得到第一層 Method Hollowing ↓ 從 DEX 中移除真實(shí)實(shí)現(xiàn) 第二層 PVM1 Transform ↓ XOR Nibble Swap ↓ 破壞原始 Dalvik 數(shù)據(jù)特征 第三層 AES-GCM ↓ 真正的數(shù)據(jù)機(jī)密性所以它并不是PVM1 XOR也不是PVM1 AES而是Method │ ▼ ┌───────────────┐ │ Method Extract│ └───────┬───────┘ ▼ ┌───────────────┐ │ PVM1 Transform │ │ XOR Nibble │ └───────┬───────┘ ▼ ┌───────────────┐ │ AES-GCM │ └───────┬───────┘ ▼ code.bin而 DEX 中只留下Stub二十七、PVM1 和傳統(tǒng)“代碼抽取”有什么區(qū)別如果只說“PVM1 就是把代碼抽出來?!逼鋵?shí)不夠準(zhǔn)確。因?yàn)槠胀ùa抽取可能只是DEX ↓ 抽取 Method ↓ 保存到其他文件但是 PVM1 還增加了Method Index PVM1 Encoding AES-GCM Method Hollowing ART Runtime Restore所以完整體系是代碼抽取 代碼變形 加密存儲 原位置空洞化 運(yùn)行時(shí)恢復(fù)這才構(gòu)成完整的 PVM1。二十八、PVM1 的完整生命周期把整個(gè)源碼實(shí)現(xiàn)濃縮成一條鏈【構(gòu)建階段】 APK │ ▼ 解包 DEX │ ▼ 遍歷 ClassDef │ ▼ 找到目標(biāo) Method │ ▼ 讀取 CodeItem │ ▼ 提取 Dalvik Instructions │ ▼ VmCodec.encode │ ▼ PVM1 Blob 生成 │ ▼ AES-GCM 加密 │ ▼ code.bin │ ├───────────────┐ │ │ ▼ ▼ 原 Method 被抹掉 Stub │ ▼ DEX 重寫 │ ▼ APK 重新打包 【運(yùn)行階段】 App 啟動(dòng) │ ▼ Native Shell │ ▼ 讀取 code.bin │ ▼ codeitem::parse │ ▼ 建立 code_map │ ▼ 安裝 ART Hook │ ▼ ART 加載 Class │ ▼ 找到受保護(hù) Method │ ▼ 查詢 code_map │ ▼ AES-GCM 解密 │ ▼ PVM1 Decode │ ▼ 得到真實(shí) Dalvik │ ▼ Patch Method │ ▼ ART │ ▼ 正常執(zhí)行這條鏈基本就是 XopProtector PVM1 的核心原理。二十九、PVM1 真正解決了什么問題可以總結(jié)成四個(gè)字靜態(tài)不可見。更準(zhǔn)確地說1. 靜態(tài) DEX 中不再存在完整方法實(shí)現(xiàn)攻擊者拿到 DEX 后目標(biāo)方法已經(jīng)被替換成 Stub。2. 方法實(shí)現(xiàn)被移動(dòng)到獨(dú)立數(shù)據(jù)區(qū)真實(shí)代碼進(jìn)入code.bin而不是繼續(xù)留在原來的 CodeItem 中。3. PVM1 破壞原始 Dalvik 數(shù)據(jù)形態(tài)通過XOR KeyStream Nibble Swap讓數(shù)據(jù)不再表現(xiàn)為正常 Dalvik instruction stream。4. AES-GCM 提供真正的機(jī)密性即使攻擊者找到code.bin也不能簡單通過strings dexdump jadx直接獲得原始代碼。三十、但 PVM1 還有一個(gè)天然弱點(diǎn)這也是為什么 XopProtector 后面還需要 PVM2。PVM1加密 ↓ 恢復(fù) ↓ Dalvik ↓ ART所以最終真實(shí) Dalvik還是要出現(xiàn)。因此攻擊者如果把分析重點(diǎn)從APK 靜態(tài)分析轉(zhuǎn)向Runtime ↓ ART Hook ↓ Method Restore ↓ Memory Dump就可能重新獲取真實(shí)方法。所以 PVM1 的安全模型是提高靜態(tài)分析成本 增加脫殼復(fù)雜度 縮短攻擊者直接獲得代碼的路徑 但是 最終仍然回到 ART Dalvik 執(zhí)行體系這也是 PVM1 與 PVM2 最根本的安全邊界。三十一、PVM1 → PVM2是 Android 加固的一次質(zhì)變可以把整個(gè)演進(jìn)過程理解為第一階段 DEX 加密 攻擊者 APK ↓ 找到解密點(diǎn) ↓ 得到 DEX 第二階段 PVM1 攻擊者 APK ↓ 找到 code.bin ↓ 找到 Runtime Restore ↓ 獲取 Dalvik 第三階段 PVM2 攻擊者 APK ↓ 找到 JNI Trampoline ↓ 找到 Native Interpreter ↓ 理解自定義 VM ↓ 分析 VM Opcode ↓ 恢復(fù)原始語義所以難度是逐層提升的。三十二、PVM1 最值得學(xué)習(xí)的工程設(shè)計(jì)從工程實(shí)現(xiàn)角度看PVM1 并沒有試圖一步做到極端復(fù)雜。它采取的是一種非常實(shí)用的思路DEX 加密 ↓ 解決“APK 靜態(tài)暴露” PVM1 ↓ 解決“關(guān)鍵方法暴露” PVM2 ↓ 解決“恢復(fù)后仍然是 Dalvik” SO 加密 ↓ 解決 Native 代碼暴露 RASP ↓ 解決運(yùn)行時(shí)攻擊也就是說不同保護(hù)技術(shù)解決不同攻擊面。這比單純依賴一種“超級加密算法”更加符合商業(yè) APK 加固系統(tǒng)的工程思路。三十三、源碼層面的關(guān)鍵文件如果你準(zhǔn)備繼續(xù)深入研究 XopProtector那么 PVM1 最值得看的幾個(gè)源碼位置是packer/ └── src/main/java/com/yqsh/protector/packer/ │ ├── PackerMain.java │ ├── walkDexMethods() │ ├── extractOne() │ ├── writeReturnStub() │ └── writeCodeBin() │ └── VmCodec.java ├── encode() └── decode()其中PackerMain.java負(fù)責(zé)掃描 DEX ↓ 定位 Method ↓ 抽取指令 ↓ 替換 Stub ↓ 生成 code.binVmCodec.java負(fù)責(zé)PVM1 Encode PVM1 DecodeNative 側(cè)則對應(yīng)native/src/main/cpp/vm/ └── vm_codec.cpp負(fù)責(zé)運(yùn)行時(shí)PVM1 DecodeNative Runtimenative/src/main/cpp/runtime/ └── engine.cpp負(fù)責(zé)初始化 ↓ 加載 code.bin ↓ 建立 code_map ↓ 安裝 Hook ↓ 進(jìn)入運(yùn)行時(shí)保護(hù)流程這些源碼結(jié)構(gòu)可以非常清晰地證明PVM1 并不是一個(gè)獨(dú)立的 VM而是 Packer Native Runtime ART Hook 三者協(xié)同完成的方法級保護(hù)機(jī)制。三十四、最終總結(jié)一句話理解 XopProtector PVM1如果只用一句話解釋PVM1 就是在構(gòu)建階段把關(guān)鍵方法的 Dalvik 指令從 DEX 中抽出來經(jīng)過 PVM1 變換和 AES-GCM 加密后保存到code.bin原 Method 只留下與返回類型匹配的安全 Stub應(yīng)用運(yùn)行時(shí)由 Native Shell 解析code.bin通過 ART Hook 找到目標(biāo) Method解密并恢復(fù)真實(shí) Dalvik 指令再交給 ART 執(zhí)行。整個(gè)過程可以最終濃縮成PVM1 ┌───────────────────┐ │ 原始 Method │ └─────────┬─────────┘ │ ▼ 提取 Dalvik Code │ ▼ PVM1 Encode XOR NibbleSwap │ ▼ AES-GCM │ ▼ code.bin │ │ ┌─────────▼─────────┐ │ 原 DEX Method │ │ │ │ 真實(shí) Code 被移除 │ │ ↓ │ │ Stub │ └───────────────────┘ Runtime Native Shell │ ▼ code.bin │ ▼ code_map │ ▼ ART Hook │ ▼ 找到目標(biāo) Method │ ▼ AES-GCM Decode │ ▼ PVM1 Decode │ ▼ 恢復(fù) Dalvik │ ▼ Patch Method │ ▼ ART │ ▼ 執(zhí)行代碼所以PVM1 不是“讓代碼不再執(zhí)行”而是讓代碼不再以正常 DEX Method 的形式存在。這就是它和傳統(tǒng) DEX 加密最大的區(qū)別。而下一階段真正值得研究的問題就是如果連“恢復(fù) Dalvik”這一步都不要了能不能讓被保護(hù)方法從始至終都不回到 DEX而是直接由 Native 自己解釋執(zhí)行答案就是PVM2。PVM2 不再是加密 → 解密 → 恢復(fù) Dalvik → ART而會變成原始 Dalvik ↓ PVM2 Compiler ↓ 自定義 VM Image ↓ JNI Trampoline ↓ Native Interpreter ↓ VM Opcode ↓ 執(zhí)行XopProtector 當(dāng)前源碼中的 PVM2 已經(jīng)進(jìn)一步加入了多 ISA、Opcode Morphing、RASP Gate、解釋執(zhí)行以及 PVM2 Image等機(jī)制。PVM2 v3 還會為每個(gè) APK 生成 opcode 映射并根據(jù)isa_id選擇不同 Native dispatch 入口。這才是真正意義上的 Android 代碼虛擬化。下一篇《Android APK 加固原理四真正的代碼虛擬化——PVM2 Native Interpreter 技術(shù)解析》將重點(diǎn)拆解Dalvik ↓ PVM2 Compiler ↓ VM Opcode ↓ PVM2 Image ↓ JNI Trampoline ↓ Native Interpreter ↓ Dispatcher ↓ Opcode Handler ↓ 寄存器 / 對象 / Field / Method ↓ 最終執(zhí)行并重點(diǎn)解釋為什么 PVM2 和 PVM1 已經(jīng)不是同一個(gè)層級的加固技術(shù)。參考源碼本文分析以 XopProtector 當(dāng)前公開源碼為基礎(chǔ)重點(diǎn)涉及packer/PackerMain.javapacker/VmCodec.javanative/vm/vm_codec.cppnative/runtime/engine.cppPVM2 設(shè)計(jì)文檔項(xiàng)目公開 README 明確將--vmp-prefix定義為 PVM1將--true-vmp-prefix定義為 PVM2。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
淫乱图区 | 在线播放免费av福利片| 天堂av最新电影网| 日韩在线人妻网站| 农村妇女一级二级三级视频| 日韩人妻 中文字幕| 日本不卡二区| 风间由美日韩欧美久久| 97国产精品久久久久| 少妇蜜汁| 97se综合网| 亚洲中文字幕97久久精品少妇| 自怕偷自怕亚洲精品| 88xx成人精品视频| 色香天天| 加勒比海人人操超碰在线| 欧美色图下一页| AV色天香在线| 男人天堂一区二区| 厕所偷拍在线| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 51久久夜色精品国产麻豆| 97在线观看免费| 九九热在线精品视频| 精品国产网站| 亚洲图片 91| 亚洲av乱伦色图网站| 一级啊性爱在线视频| 日韩无码精品综合久久| 日本黄色精品专区网站| 99这里只有精品国产| 熟女人妻一区二区三区免费看 | 亚洲囯产精品女人久久久| 三及片网站| 啊啊啊啊免费视频| 欧美热图99| 久久熟女精品不卡一区| 亚洲男人天堂2| 日日夜夜模| 久久久久久少妇| 日本最新1区2区3区| 破处bbq| 久久久啊啊啊| 可以在线观看AV的网站| 人人插人人搞人人操| 亚洲精品毛片在线观看| 探花熟女,姿勢到位,體驗感也到位| 超碰色男人操熟女| 多毛小伙内射老太婆| 超碰国产精品无码| 99在线免费视频| 丁香五月婷婷色| av中文在线| 韩国轻伦国内自拍一区| 欧美在线视频播放| julia国产在线| 欧美se综合| 久久久久久精| 婷婷激情五月天小说网| 色色五月天婷婷| 欧美日韩黄色片一区二区三区四区人与兽做爱 | 久久免费精品96| 中文欧丝袜诱惑| 欧美第五页| 极品肉射| 久操网视频| 色呦呦呦在线观看视频| 九九在线视频| 男人的天堂三级| 91肉丝| 亚洲av综合伊人久久| 国产第25页在线观看| 99色色网| 中文字幕97色| 日本 情色 1区| 国产偷人伦激情在线观看| 高清无码一区二区三区| 五月综合色| 人妻内射一区二区在线视频| 麻豆尤物视频网| 国产一区自拍欧美日韩| AV九九| 加勒比色综合| 久久av无码| 爱做久久久久久| 黄呦呦在线| 校园春色第一页| 中日亚韩免费视频| 九九九九88| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 97欧美色综合| 亚洲 小说 欧美 激情 另类| 啊啊啊不要好疼视频| 九九九久千久久激情蜜桃在线看 | 一区二区三区精品视频| 精品九九九九九九九九九| 激情婷婷丁香网| 国产极品美女高潮无套在线观看| 熟妇艹鸡八| 乱伦日本色图AⅤ| 红杏大香蕉| 97伦乱| 乱伦一区二区三区‘| 91精品电影18| 青娱乐国产剧情av一区| 亚州少妇| 翔田千里A片一区二区| 极品极品色影院| 亚洲色图国产另类| 久久久亚洲Av| 久热精品色情| 思思热一热婷婷热一热| 八人操人人摸人人看| 国产女同性恋视频| 亚洲国产奇米影视久久| 欧美视频第二页| J?P?NESEHD熟女熟妇伦| 日韩钢筋无码高清啾啾啾| 懂色Av| 久久久久久大| 蜜乳成人AV| 无码人妻一区二区一牛影视| 欧美裸体美女日麻屄| 丁香激情网| 91日韩网站| 国产精品99久久久www| 超碰日韩美妻| 色乱二区| 春色综合免费| 99热这里只有精| 久久亚洲一区二区色婷婷| 97任你吞精| 久久久96精品| 97人肏| 男人天堂网址| 青青操在线亚洲视频观看欧美在线| 日本久久女同性恋视频| 日韩精品资源专区二区| 乱码人妻一区二区三区| 亚洲小说视频| 999精品久久久久久久| 亚洲情色视频| 亚洲色图美腿丝袜| 亚洲aV性爱| 手机在线中文字幕国产| 天天日老熟妇| 国产精品人妻无码久久久老鸭窝| 国产丝袜欧美在线视频| 日韩999| 欧美色乱| 日本成熟少妇A∨网站| 中国黄色特级精品一区二区三区片| 亚洲熟女综合一区二区| 亚洲综合小说另类图欧美视频激情小说色五月天| 裸体女人草逼视频播放一区,二区,三区,四区,五区| 99超碰网| 狠狠操狠狠| 夜夜躁狠狠躁日日躁av| 920日本午夜免费| 日韩大香蕉AV影片| 电影69乱码96| 国产美女在线精品免费看| 蜜色网色哟哟| 日本操大逼| 免费97视频| 色5月婷婷| 91综合网站| 午夜成人福利影视| 欧美午夜一区二区三区| 超碰美国| 日韩图区| 成人影 天天操 亚洲| 色在线综合| 九九热午夜欧亚国产视频| 欧美专区第一页| 亚洲天堂男人| 秋霞一集毛片观看| 人人么人人操| 五月丁香黄色网| 青青草大香蕉在线视频| 久久超碰国产一区二区三区| 麻豆成人av| 亚州欧美综合| ,国产乱人伦精品一区二区三区| 久久久一区二区三区三州| 亚洲加勒比色图| 色情亚洲日本成人| 精品精品精品| 国产AV高清AV无码| 91九色蝌蚪在线观看| 伊香蕉综合久久久久久久噜噜噜| 最新精品久久蜜桃 | 97干在线视频| 美女网站黄页| 欧美在线 亚洲| 中文字幕女同在线| 国产精品久久久777| 国产大片精久久久久久| 亚洲一区深夜| 操人妻丝袜高跟| 无码9区| 亚洲丝袜二区| 国产精品一二三免费网站| 婷婷丁香六月天| 日本中文字幕不卡视频| 粘花网06av视频| 国产无码一二三区| 国产强奸乱伦无码视频| 8x福利精品第一福利视频导航| 亚洲综合中文字幕有码| 欧美 亚洲 偷拍自拍| 天天拍夜夜| 99精品久久久久久| 免费A V在线播放| 亚乱色| 成人性爱电影网| 极品粉嫩一区二区| 亚洲免费97免费| 免看60秒涩涩视频| 久久精品国产亚洲av水密被窝| 天美传媒婬乱在| 偷拍三区| 婷婷丁香六月| 操逼999| 91啪啪| 国产尤物AV尤物在线观看不卡| 操99| 久草精品一区 | 青青草日逼视频| 北京美女一区二区| 超碰诱惑| 最近2019中文字幕国语免费版| 日韩人妻一区二区精品| 欧美永久激情一区二区| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | av操操不卡| 欧美激情五月天| 91操熟妇| 丝袜性亚洲| 99精品人妻| 超碰色男人操熟女| 偷拍亚洲情色| 超碰在线人妻| 偷窥自拍亚洲色图| 九九热三级片| 凹凸视频特色日本特黄| 久久久111| 国产精品露脸在线观看| 国产免费一区二区三区最新不卡| 丝袜美女诱惑 91 视频| 亚洲欧洲日本精品中文a∨| 亚洲超碰在线| 久久久久女教师免费一区| 18禁网站在线播放| 韩日精品福利视频一区不卡在线免| 日夜伊人网| 中文字幕精品一区二区精品| 亚洲美女高潮喷水视频| 超碰在线看| 国产精选视频| 91久操| 97超级久久| 国产伊人自拍| 日韩免费三级黄片电影| www.高清无码诱惑一区.com | 啊啊啊啊免费视频| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 成人26uuu| 国内毛片无码一级毛片| 亚洲欧美一区二区三区一猛片| 中日韓欧美高清| 翘臀vidoes| 免费久久一级毛片大黄| x97av| 国产成人在线观看综合| 欧美激情区| 97视频在| 日产狠狠干| 男人高清无码一区二区| 亚洲欧美校园| 日本99一区二区| 激情第四色| 欧美日韩插逼视频| 骚鸭AV| 天操老女人| 99热综合| Blackedraw视频一区二区| 亚洲高清欧美总合| 亚洲国内精品成人不卡| 91 刺激在线| 欧美精品1区2区3区| 免费观看成人www精品视频| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | www.AV有限公司一区| 天天天肏屄肏屄肏屄欧美欧美| 国产99999| 日韩天天综合| 尤物网站91| 小骚逼被操的爽不爽| 怡春院久久| 乱操9999| 久久黄黄| 丁香五月大香蕉| 91强奸乱轮| 天天干夜夜一操| 小日子操bb在线看| 黄片qw| 久操91视频| 中文字幕精品探花视频| 中文一区二区三区影院| 香蕉欧美| 韩日色费| 精品国产乱码久久久久久口爆网站 | 国产东北女人在线视频| 亚洲一区二区三区不卡国产欧美| 91处女在线观看| 亚洲色图欧美一区二区不卡| 久9精品| 国产熟女无套内射| 午夜αv| 欧美日韩免费性爱| 国产福利小视频高清在线观看| 岛国激情视频软件| 大香蕉黄色一区| 天天综合AV| 麻豆精品A片免费观看| 色狠狠 - 百度| 国产日韩欧美中文在线播放| 亚熟在线| 久久国产成人精品国产成人亚洲| www99热| 亚洲中文字幕97久久精品少妇| 十八禁视频一区二区| 极品肉射| 91暧暧| 亚洲天天影视综合网| 日韩精彩视频| 热热色中文无码| 国产欧美成人第一页在线观看| 成人性爱电影一区二区| 亚洲精品久| 噜噜瑟| 欧美伊人久久综合网| 99综合免费视频| 蜜臀久久99精品| 骚女天天综合网| 久久久国产三级黄色片| 自拍欧美| 人人弄人人摸| 天天影视网综合少妇| 中文字幕精品久久久久人妻红杏ⅰ| 蜜臀99久久精品久久久久久| 人妻干天天| 97精品国产97久久久久久免费| 久久精品高清无码一区| 国产精品毛片?v一区二区三区| 天天狠| 酒色综合网| 国产又猛又粗又爽又黄| 日韩 欧美 国产 麻豆| 色色综合97| 色爽——AV| 久久久天美| www色婷婷| 99国产精品自在自在| 亚洲天堂7777| 日日玩天天干| 情趣丝袜无码操逼视频| 性爱乱伦一区| 欧美性,亚州色| 国产精品久久久无码AV网站| 激情六月婷婷| 中文字幕中文字幕一区二区| 九九九九久久久| 欧美亚洲激情小说| 九久9精品| 亚洲成a人在线观看久| 蜜桃久久久久久久| 十八禁黄色| 国产精品久久久久久久毛片1| 国产 丝袜 欧美中文 另类| 97超久碰| 强被迫伦姧在线观看无码网站| 日韩亚洲中文字幕在线| 国产原创精品| 亚洲色天堂九9| 人人操肉肉| 亚洲国产一区二区三区在线| 日本孕妇孕交| 天天插夜夜操| 职场同事知名国产国产精品久久欧美日韩 | 青青操综合网| 久久这里精品国产99丫e6| 亚洲国产中文字幕| 国内毛片无遮挡国产| 五月天婷婷小说| 午夜国产成人精品视频| 久草草一二三四区久久| 亚洲天堂中文字| 日韩美女,国产传媒,视频一区| 国产日韩久久| 男人天堂2012| 国产a片操逼| 欧美激情视频一区二区三区不卡| 97精品在线视频| 中文字幕一区二区三区人妻少妇在线| 一本色道久久综合精品婷婷| 99熟女| 亚洲图片日本AⅤ欧美在线| 色踪合AV| 天天综合香 ld视频| 中文操嬖片。| 91网九色蝌蚪操熟女| 日韩三级在线观看mp4| 精品亚洲黄色片 国产精品导航一区二区| 久久这里精品国产99丫e6| 人人搞人人插人人操| 久久色一区二区| 综合影院永久入口国产| 伊人91| 2020中文字幕在线观看| 后入人妻无码| 又黑又大又粗| 高清国产性猛交xxxx乱大交| 熟女露脸激情自拍视频| 嗯啊抽插大香蕉网页| 亚洲 欧美 日韩 国产一区二区 | 五月天色电影| 久久xxxx| 欧美视频在线视频免费va| 欧美色综合网| 亚洲精品久久一区二区三区蜜桃臀| www.婷婷五月天| 久久九九网| 国产福利一区二| 野狼福利社区| 欧美日韩亚洲少妇寂寞影院正在播放 | 天天综合网站| 丁香五月激情五月| 亚洲 图片 综合91| 日韩中文字幕熟妇人妻| 成人色女网| 97视频在线观看播放与子乱对白在线……| 欧洲熟妇xxXx欧美老妇裸体 | 欧美经典一区二区三区| 91快色色色色色| 国产97视频免费观看| 99自拍视频在线| www.婷婷| 冬京热男人的天堂| 国产1727欧美| 天美传媒AV在线播放| 91在线免费精品视频| 麻豆美女丝袜人妻中文| 亚卅熟女乱色| 亚洲城人男人的天堂| 精产品久久| 密乳视频在线| 国产v片在线免费观看| 97综合激情| 999九九精品| 狠操91,com| 中文字幕后石码四区五区| 乱伦强奸区日韩| JIZZJIZZ国产精品喷水| 国产伊人自拍| 欧美性Fer办公室秘书| 999999精品| 欧美日韩精品一区二区三区高清| 亚洲最大无码中文字幕网站| 91大神电影天堂| 好爽免费视频,| 一二三区操逼国产91| 日韩一区二区三区四区五区| 夜夜爽妓女| 天美传媒精品久久视频| 强奸乱伦大香蕉| 97色冈| 亚洲欧美黄| 日本午夜久久电影| 久久国产精品视频| 天天看天天在线精品| 日本一区二区电影网站| 欧美人体性爱互联网第一页婷婷日本| 99热精品在线观看| 午夜福利 成人 91| 久久婷婷亚洲| 9久9久| 日欧操屄视频| 超碰色97| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 久久夜黄色无码A级大片| 蜜色网色哟哟| 色综合一本| 在线观看一卡二卡| 青草伊人网| 欧美日产国产在线成人第一区| 性性久久| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 精品人妻一区二区三区四区不卡在| 1024亚洲中文字幕久在线看片你懂的 | 亚洲欧美在线观看免费| 男人的天堂久久| 久久久久久久78| 9久综合网| 亚洲欧美一区二区三区一猛片| 久久午夜色播影院免费高清| 91美女色视频亚洲| 嗯嗯啊啊用力视频免费| 中文激情网| 操逼网站视频漫画国产| 青青伊人这里只有精品| 亚洲高清视频在线免费观看| 国产精品69久久久久久久| 欧亚成人在线视频| 欧美久久婷| 一品道视频一区二区三区| 操屄不卡视频| 婷婷激情五月天小说网| 欧美日韩日产免费网站看| 免费家庭乱伦视频| 欧美18老人禁| 成人av在线播放| 久久精品国产亚洲妲己影视| 91精品在线播放| 91免费看一区二区三区 | 青娱乐福利99| 大香蕉伊在线久草麻豆天堂故事| 色悠久久久av| 国内伊人久久久久久网站视频| 久久久久久久亚洲Av无码| 免费的黄片有限公司| 麻豆a'v电影| 亚春色色| 99性爱在线观看| 欧美日韩国产电影| 亚洲第一页色| 综合av社区| 国产污视频麻豆传媒一区二区| 素人伊尹大香蕉免费下载视频| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 干B| 国产suv精品一区二六| 91艹| 9久9久| 97干在线看| 大香蕉手机在线视频| 97天天做| 九热超碰| 色综合1991| 果冻传媒一区二区三区| 91精品操美女| 欧美精品成人亚洲| 首页亚洲国产高跟丝袜诱惑视频| 东北老女人的激情视频| 丰满搜索结果 -第18页- 久久高清无码| 亚洲影院小综合| 亚洲人综合| 欧美熟妇精品黑人巨大91| 天天搞欧美| 粉嫩AV一区二区夜夜| 亚州欧美另类| 精品久久无码午夜福利| 天堂中文资源在线bt| 色优久久| 色哟哟1区2区| 精品78| 亚洲欧美一区二区三区一猛片| 新久久AV| 大香蕉碰碰| 欧洲精品网| 屁股久久久久久久| 伊人网av| 综合网亚洲1| 日韩视频中文字幕| 91久操| 2003天天干夜夜操| 极品尤物自安慰| 久久综合18p| 欧美色网络| 强免费黄色网址| 亚洲精品人伦一区二区| 一本色道久久天天射天天干| 精品免费一区二区三区在线亚洲人成| 久久精品人妻一区二区三区| 久久国产免费激情视频| 欧美一二在线| 亚欧成人综合影院| 欧美人人天天网| 午夜福利av电影在线| 丝袜天堂| 欧美操逼熟女| 欧美色图97| 张柏芝国产一区在线观看| 日韩无码专区| 91色香| 精品国产一区二区三区av在线资源| 日日AAvv| 大香网伊人久久综合| 久久久96| 大香蕉99热| 可以在线观看的黄色网址| 91成人久久| 岛国片国产成人亚洲播放| 99re在线精品78| 日韩 欧美 另类 人妻| 欧美色图片欧美色图| 人妻22p| 色综合99| 欧美黄色片在线播放| 中文字幕人乱码中文字的预防方法| 啪啪啪东京| 亚洲有薄码区久久在线一区| 色99色| 亚洲 小说 欧美 激情 另类| 蜜臀久久在线视频| 97在线精品观看视频| 90后后入| 操死我了啊啊啊| 青青草色插素人| 91 国产丝袜在线放观看 | 成人精品在线| 一级性爱视频免费观看| 久草男人天堂| 亚洲图片欧美色| 午夜婷婷| 不卡在线一区,精品一区二区三区中| 97 色综合| 99视频自拍区| 一区二区三区色综合| 婷色五月| 日本理论在线| 日韩欧美午夜视频在线| 综合网 欧美| 亚洲大色鬼| 91美女视频在线观看| 国产超碰欧美| 97欧美久久久久久久| 91色噜噜狠狠| 少妇毛片久久| 啊啊啊在线观看免费视频| 色色色热| 亚州国产精品乱| 亚洲天堂区| 噜噜噜狠狠色综合| 五月天激情小说网| **一级毛片国产| 色五月首页| 久久婷五月| 久久色人体 | 麻豆AV96熟妇人妻| 91总综合网| 青青草大香蕉在线视频| 屌妞视频久久久久久久久久久久| 精品国产污一区二区三区| 亚洲天天艹| 大香蕉免| 久久9999| 日韩欧视频| 日本性感人妻91| 无码久久国产| 亚洲91在线播放影院| av午夜影院在线播放| 操99| 欧亚乱色熟一区二区三四区| 欧美一二在线| 色波多| 国产精品久久久吖| 不卡免费av在线播放| 97这里都是精品| 亚洲无码一区成人免费午夜| 亚洲 日韩 丝袜 熟女 变态| 日韩99神马视频播放片在线播放| 日本二区不卡| 色婷婷九月天天综合| 大乔未久88一区| 欧美性爽xyxOOOO| 国产精品天美传媒| 999热这里只有精品| 久久大香蕉| 91精品久久久久| 亚洲精品成人| 国产精品久久泡妞网站| 色婷婷综合网| 九九九九精品精| 开心五月天激情网| 欧美91精品国产自产| 欧美亚洲国内自拍| 老女人综合网| 男人 天堂 日 亚洲| 日韩欧美大力操| 日韩综合97P| 静品嫩模一区二区| 亚洲熟女人妻中文字幕一区二区 | 色老牛| 日本操逼视频导航| 激情婷婷丁香网| 久久天天摸| 一级做a爰片性色毛片久久| 欧美熟女妇同| 九月丁香| 乱伦一二三区| 97操97干| 欧美少妇高潮久久91| 欧美人黑A片无码免视费| 岛国爱情动作片在国产AV无码专区亚洲AV漫画| 五月丁香网站| 精品人妻1区| 日本一级不卡一二区| 日本中文字幕在线视频| 好吊色青靑草| 99只有精品| 国产精品亚洲免费| 88xx成人精品视频| 国产热av| 麻豆久久久久久久久丝袜| 日韩综合无码色欲vv| 人妻无码后入| 欧美变态激情网| 日韩性爱长视频免费| 青青青青草av在线观看| JULIA一区二区三区在线播放| 极品销魂美女一区二区| 亚洲 欧美综合| 一二视频神马久久传媒| 96AV久久久| 天美传媒国产原创中文字幕亚洲欧美另类 | 欧美强奸乱能| 日韩性爱一级片| 国产久久久久久| 十八禁黄色| 一本色道久久综合精品婷婷| 天堂综合| 91精品国产91久久久久久久久久久久| 男人天堂综合| 亚洲综合夜色| 9 1超碰九色| 2019亚洲男人天堂| 国产精品一二三| 五十路成人在线视频二区三区| 国产成人主播| 天操天操夜操夜月月年年操操| 熟女久久久| 日韩电影中文字幕| 亚洲综合20p| 午夜操逼不卡| 午夜影美女日鸡鸡天天视频国产| 日va操| 天天日天天舔天天喷天天射| 农村妇女一级二级三级视频| 国产精品久久久视频| 97bbn| 台湾佬大香蕉| 国产a片操逼| av国产无码| 酒色综合网| 在线岛国新天堂8| 后入福利视频| 亚洲性综合9| 欧美性生活免费网| 亚洲图片视频小说| 激情小说图片亚洲首页| 国产v片在线免费观看| 蜜臀操逼黄色视频操的好爽| 国产天美欧美| 青青久久久| 欧洲亚洲人妻无码高清久久三区四区| 欧洲久久一二线| 成人精品久久久午夜福利| 国产女乱淫真高清免费视频| 爱爱动态试试看6 0秒| 人妻丝袜二区| 囯产精品久久久久久久久久梁医生 | 欧美一二三| 久久超碰av在线| 日本五十路熟女一区二区| 国产亚洲精品玖玖玖在线观看| 啪啪资源网| 日日噜噜夜夜狠狠视频无| 99精品欧美一区二区三区桃色| 91在线视频免费播放| 大香蕉淫人| 日韩人妻丝袜美腿中文| 国产亚洲欧洲在线观看| 碰超人人在线一区二区三区| 97欧美日韩综合| 亚洲清纯唯美| 天天看天天日天天操| 蜜桃久久一区| 亚欧美综合| 日韩无码服务区| 精品中文一区二区| 日韩肏逼视频| 二区熟妇韩日| 国产精品久久久久久久电影渣男| 欧美|91色综合| w w w.久久精品| 久久精品人体| 国产欧美日本亚洲精品 | 精品丝袜无码一区二区三APP| 口爆综合网| 欧美性爱第1 页| 综合国产97| 国产欧美成人第一页在线观看| 欧美色日本| 欧美日韩性爱视屏免费看了| 男人的天堂Va| 中文字幕少妇色| 亚洲少妇综合在线播放| 欧美图片校园春色| 97舔舔| 国产毛片久久久久久久| 国产AV人人夜夜澡人人爽麻豆| 国产一区二区啪啪视频| 亚州性色| 97超碰免费生活| 久久怡红院| 国产亚洲精品av一区| 国产精品另类| 目产99999久久999| 五月丁香婷婷色| 久久久久久久亚洲Av无码| 美女91网| 91N综合网在线| 在现视频女上位好爽| 国产一级做a爰大片免费久久| 啊啊啊好舒服视频| 人妻天天爽夜夜爽2| 91天天日| 亚洲五月丁香花狠狠干一区二区三区 | av2014 日韩在线中文字幕| 91搞逼视频| 色牛aV| 午夜久久无码1000合集| 天美一二三在线观看Av| 在线午夜成人无码视频| 亚洲美乱| 亚洲色图美腿丝袜| 色男人色天堂东京热| 97在线欧洲| 成人在线午夜视频一区| 91精品国产91熟女| 手机在线中文字幕国产 | 亚洲第一页色| 亚洲欧美碰碰| 欧美日韩大黄片| 久久9免费视频| 超碰在线1234区| 激情情色五月天| 大逼色网站| 久久超碰com| 亚洲乱码精品一区二区| 男人的天堂久久久| 97超碰人人模人人拍人人| 无码不卡亚洲成?人片| 国产日韩手机视频在线| japan日本高清乱xxxx| 在线可观看的黄色网址| 免费一级毛片在线视频观看| 97色干| 97天天爽| 亚洲污一污二| 少妇的嫩逼图片| 亚洲色人| 久久久免费的精品| 人夜夜精品网站香蕉嫩草| 96AV久久久| 夜夜嗨一区二区三区直播内容| 葡萄牙性视频一二区| 亚欧视频在线| 特污免视频| 国产后入清纯| 久久免费99精品久久久久久| 亚洲砖码砖专无区2023| 嗯嗯啊啊用力视频免费| 精品美女少妇一区二区| 日本一级婬片试看三分钟| 国产少妇与亚洲av| 91激情综合| A片大香蕉在线| 久久精品一区二区三区不卡| 亚洲美女 晚间男人天堂 | 天天添天天干电影| 伊人久久亚洲色欲综合网站 | ′ !γ}丶。。久久精品欧美一区二区三区| 91美女视频在线| 少妇久久久久久| 91麻豆天美国产欧美| 亚洲欧美天| 国产精品成人蜜臀AV在线| 中 文字幕一区二区三四 五 区日 日 骚| 亚洲强奸乱伦影视网| 有码色中文字幕在线观看| 国产欧美日韩在线观看麻豆传媒公司| 国产日本久久免费精品| 国产一区二区a毛片| 强奸乱伦 亚洲一区| 97资源亚洲| 看日韩美女二区三区免费操逼视频| 欧美少妇高潮视频| 国产亚洲一黄| 98人妻精品一区二区色欲| 亚洲丝袜色图| 久久精品亚洲成a人天堂| 嗯嗯嗯啊啊在线观看| 91快色色色色色| 性色高清..……| 久久久久久亚洲Av无码精| 大香蕉综合网| 精品国产人成在线| 九一国产精品| 婷婷六月色开| 亚洲欧美黄| 国产精品久久发布| 中文乱码字幕观看视频| 色噜噜狠狠色综无码久久合欧美| 成人小电影网站tex| 99国产人成精品| 黄色电影在线播放综合网站| 99最新日韩偷拍视频| 久久色情| 六月激情婷婷| 成人毛片免费| 色婷网| 日本A级视频| 玖玖久久久| 欧美三级免费伊人| 国产三级中文有码在线视频| 久久久96精品| 日韩人妻少妇 一区二区三区| 中文字幕人妻丝袜乱一区三区| 婷婷在线精品| 久久男人的天堂| 亚洲AV不卡在线观看尤物| 亚洲综合色男人网| 激情综合久久| 色综合天天| 国产人伦a片信息免费片| 91久热| 韩日精品四区| 欧美偷拍区| 在线a亚洲视频播放在线| 少妇激情AV| 亭亭在线资源| 精国久久一区二区三区98| 久久久∴| 精品一二三区女同| 日韩中文字幕宗合在线| 无码男人天堂| 劲爆欧美人妖三区91| 九热超碰| 啊啊啊骚| 中文一区二区三区影院| 操逼A∨| 中国少妇XXXX做受| 91爆操视频| 久草五月| 久久蜜桃综合网| 亚洲图片 激情小说| 色香网| 亚洲综合首页| 人妻干天天| av资源在线播放天堂| 人妻少妇久久久| 日本午夜福利视频| 精品一国2| 久久尹人大香焦视| 天天激情综合站| 福利在线黄片| 殴美,日韩国产伦精品| 色欲色香天天天综合网www-亚洲综合国| 久操在97| 亚洲情色欧美| 91精品人妻电影| 顶级少妇BT天堂| 激情婷婷黑人91| 强奸乱伦AV一天堂网| 多乙久久久久久| 熟女一区二区| 九t超碰| 欧美亚洲日本视频久久久| 激情开心五月天| 天天操熟妇| 中文字幕一二区二三区人妻专区| 99热国产| 中文字幕熟女人妻丝袜丝| 亚洲成人在线高清| 日本三级久| 中国少妇啪啪视频| 日韩欧美国产一区二区三区四区| 女色视频社区| 伊人网高清| 99在线精品观看99| 91天天爽| 五月丁香激情啪啪| 狠狠色五月亚洲91| www.超碰在线| 久久黄黄黄| 天天弄天天操| 暖暖精品二区三区观看| 手机在线A片| 天天干人人看综合| 野狼福利社区| 国产青青综合伊人| 日韩不卡码| 亚洲中文电影| 亚洲精品美女久久久久久久久| 亚洲少妇在线影音| 亚洲天堂中文字| 少妇精品久久久八区九区| 五月大香蕉| 欧美爱爱97| 久久內射| 久久久久久AⅤ无码免费肉站| 狠狠97| 久久极品伊人| 日日夜夜模| 亚洲97成人在线观看| 五月婷婷六月色| 天天搞欧美| 久干9操| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 久草草一二三四区久久| 免费国产电影一区二区| 蜜桃久久综合视频| 91精品导航| 激情看片网站| 九九九九精品在线| 精品一区二区亚洲国产| 日韩人妻精品| 成人性爱美曰韩| 日韩不卡一二三四| 成人aⅴ一区二区三区| 亚洲青色欧美| 精品日韩中文在线| 超碰97最新人妻| 欧美亚洲色图另类国产| 淫骚熟女一区二区三区| 三级AV入口| 91激情综合| 五月天玖玖资源站| 天美av在线| 国产天美欧美| www.成人无码| 色五月婷婷中文字幕| 亚洲高潮少妇| 91痴汉| 大香蕉免费乱伦视频| 欧美久久久| 嫩草影院性色| 精品无码一区二区三区| 午夜黄色免费在线观看| 久久久久久免费电影| 亚洲啪啪性视频| 久久久久久久久9| 红杏大香蕉| 日韩无码极品| 美日韩一卡二卡三卡免费人妻精品| av网站免费看| 日韩啪啪啪视频| 国产69精品久久久久99尤物| 台湾佬中文娱乐网久久久久久久久久com | www.色综合| 少妇精品久久| 超碰国产情侣自拍网| 日本精品网站在线中文| 91国内外在线| 五月婷婷色| 一区二区三区免费视频入口| 日韩久久艹| 国产精品青草综合久久| 青青色在线观看| 欧美中字二区| 国内三级自拍小视频在线观看| 加勒比海人人操超碰在线| 超碰国产情侣自拍网| 凹凸视频在线观看伊人| 一区二区三区麻豆| AV老汉| 蜜乳AV色欲AVAV无码| 夜夜爽夜夜| 久久久久9| 亚洲色鬼| 国产精品一级毛片不卡视| 99国产女人| 色网在线| 很很干很很操| 一级片在线观看高清无码| 91美女精品| 欧美72网页| 99精品视频在线观看| 国产乱伦性爱区| 粉嫩av一区二区三区天美传媒| 人妻出轨一区二区三区| 亚洲强奸乱伦影视网| 久久性爱视频免费看| 丰满熟女人妻一区二区三五十一路| 久热色情精品| www欧美性爱| 操B视频日韩无码| 超碰在线91| 91美女視頻| 九九成人精品| 欧美日韩丝袜| 在线观看av区| 欧美日韩电影成人在线| 97超碰超| 伊人久大| 天天舔天天日天天射| 搡老女人老妇女老妇老熟女怎么读| 久久久免费一级黄片| 嫩草美女久久| 国产强奸乱伦第1页| 91操熟女视频| 日韩 女同 综合| 免费久久9999| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 日韩av色图| 一区中文字幕二区日韩| 小少妇| 91久久久久久久久18| 美女一区二区国产精品| 久久久久亚洲av综合波多野制衣| av无码精品久久久久| 国产成人+综合亚洲+天堂| 日本免费中文字幕在线| 内射小黄片| 一二三区操逼国产91| 综合色欧美| 日韩91网| 另类图片五月天| 天天日骚逼熟女| 99re在线视频国产| 国产精品久久久九九九| 久久亚洲天天做| 天堂资源欧美| 麻豆国产原创AV色哟哟 | 亚洲男人天堂2017| 亚洲天在线| 一本色道久久综合亚洲二区三区| 九九九九欧美| 色阁阁AV综合网| 毛片麻豆91糖心精品毛情片| 91/欧美| 日韩美女高潮喷水视频| 中文字幕神马久久| av72网| 天天情欲宗合网| 国产97综合| 中文字幕国产| 日本精品一区二区不卡| 欧美 亚洲精品首页| 欧美性性性| 亚欧色图在线激情| 97无码视频在线播放| 精品日韩人妻精品一二三区| 天天色黄色影院天天操| 精品亚洲国产成人精品| 亚洲欧美一区二区三区一猛片| 免费a在线播放v|