色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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
返回資訊列表
免费视频无码| 黄色片A级一区二区三区| 3571色综合一区二区二区| 欧美色自拍| 91在线秘 男同| 97精彩视频网站| 97超碰9| 中文字幕五区| 国产在线强奸视频| 欧美韩国你懂得在线 | 绯色AV粉色AV蜜臀AV| 亚洲色悠悠久久88| 亚洲……91| 黄片www.| 91在线欧美| 亚洲精品欧洲精品| 久久精品国产亚洲AV片多多| 992视频一区| 91是天天| 黄污污污污| 国产精品无码在线| 2025亚洲男人天堂| 91丝袜美腿网站| 性爱视频啪啪啪啪| 欧美成人免费在线观看| 大香交| 69人妻精品一区二区绯色| 可以免费观看的日韩av毛片| 国产精品国产精品国产| 老女人碰碰在线碰碰视频| 亚洲经典啪啪| 国产网站在线播放| 一类无码操逼视频| 国产精品第一页国产大屁股视频免费区| 欧美se亚洲| 久久男女激情视频网站| 97超碰无码网| 区日韩亚洲乱码av电影| 亚洲中文字幕噜噜噜久久久| 精品综合久久久久久五月天| 亚洲综合一| 性爱乱伦视频免费| 国产AV人人 夜夜人人澡| 色淫网站优优视频| 亚洲AV不卡在线观看尤物| 精品久久久久瑟瑟| 大香蕉欧美日韩| caopeng97| 国产熟女少妇一区| 久久xxxx| 99色色网| 99国产精品免费| 污污污8888| 天天情欲宗合网| 日韩三级在线观看mp4| 少妇毛片久久| 人妻无码视频一区二区三区久久| 天天综合网入口~91| 人妻人人澡人人爽人人| 91美女精品| 视频黄站| 日韩免费在线视频观看| 欧美日韩插逼视频| 亚洲欧美大| 成人丁香五月| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 乱人伦 国语对白:视频直接看| 你操综合| 人伦四五区| 美性中文综合网| 97视频在| 亚洲超碰AV| 欧美高清性猛交| 骚女高跟AV在线| 亚洲AV无码乱码| 变态乱伦伪娘灌肠一区二区| 丁香九月激情| 色97综合中文字幕| 操国产高清| 蜜臀视频网站| 日韩黄片影院| 色婷婷狠狠| 青青草日本无码| 桃色人妻在线视频| 精品人妻一区二区三区在| 中国女人内射6XXXXX| 91精品黄在线观看| 影音先锋每日最新资源在线观看 | 欧美一级黄色18片免费看| 色999人与兽| 97精品97久久| 色嗨嗨在线| 久草视频在线视频在线视频在线观看| 天色综合网| 后入人妻无码| 99视频这有这里有精品| 国产精品麻豆成人AV艾秋| 精品一久久久| 国产二区视频在线观看电影| 日韩伦理久 久久 清纯| 亚洲天天影视色综合| 秋霞Av理论一级在线| 制服乱伦| 台湾佬大香蕉| 日本福利二区视频| 大干人妻| 97色伦97色伦国产欧美| 欧美日韩m| 性欧美| 日韩久久.一级黄色片| 国产懂色精品国产av| 欧美日韩国产色图在线| 久久高清无码夜夜操| 亚洲在线a| 欧美天天综| 日本亚洲嫩草影院啪啪| 蜜臀久久99精品久久久久久成人小说| 色色婷婷丁香| 亚洲情色在线| 日韩人人精品| 日韩精品99久久久久久中文字幕| 高清视频一区| 天天射夜夜骑| 日韩免费在线视频观看| 91在线视频免费中出| 特色a在线上| 97精品国产97久久久| 亚洲素人综合| 大香蕉伊人75| 成人性爱电影一区二区| 午夜激情成人在线观看| 国产美女激情| 欧美91视频| 欧美在线视频播放| 日韩AV电影网站| 久夜视频| 九九九久久久久| 欧美性爱1080p| 欧美日韩中国x| 成人在线日韩| 亚洲欧洲中文日韩女优乱码| 97爱b| 日本丝袜人妻内射| 日本二区不卡| 丰满的三级少妇欧美久久久| 亚洲欧美洲综合| 热久久91婷婷| 亚洲第一黄色av网站| 亚洲色图第四色| 五月婷婷六月丁香| 精品视频免费在线一区| 啊啊啊啊免费视频| 天美精品一区二区三区四区在线观看| 亚洲AV无码成人精品久久| 26uuu国产免费观看| 性91| 啊啊啊啊,啊啊好多水| 色噜噜综合在线| 美女午夜福利免费视频| 你懂的在线观看区国产| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 免费作爱一级视频| 蜜臀va69| 奶水 人妻 哺乳 在线| 亚洲麻豆av一区二区| 97色涩| 99热这里只有精品99| 日日干夜夜欢| 白丝AV网站| 91色色色| 午夜福利视频在线一区| 中文字幕日韩精品久久| 成人羞羞视频国产| 亚洲 欧美综合| 欧美精品91| 五月天色综合| 99精品久久久久久久婷婷蜜桃| 偷拍偷窥与盗摄视频专区| WWW4虎| 成人性爱电影一区二区| 黄色视频60分钟| 97国产超碰| 亚洲精品国产熟女| 欧美真人抽搐一进一出gif| 亚洲午夜AV| 人妻天天爽天天爽三区| 天堂岛av| 日韩丝袜高跟制服在线观看| 天天干天天日天天射黄色| 乱伦3P视频| 日韩av免费一级电影| 国产乱婷婷精品二区三区| 全球成人中文在线| 亚洲午夜福利在线影院| 超碰在线香蕉| 啊啊啊好大好深| 中文字幕欧美丝袜07资源| 亚洲天堂久久| 精品久久久久9999| 免费观看国产小粉嫩喷水精品午| 国产精品直播在线观看直播| 毛片17S| 激情综合久久| 97超碰无码网| 国产日韩中文字幕欧美| 国产女人极品高潮毛片| 91碰碰| 丁香五月激情综合| 五月丁香六月婷| 国产高清在线观看欧美| 最新亚洲风情电影| 久久久亚洲精品电影免费看| 久久欧洲| 女生自91网站| 青草伊人网| 有码人妻系列| 91国产美女丝袜足交精品视频| 午夜精品久久久99| 人人操超碰在线| 日韩人妻精品中文字幕| 久久影视二区三区行押| 大逼色网站| 欧美色狠| 看一级特黄a大一片| 操屄不卡视频| av优播| 美女淫穴| 视频在线97| 黑人综合网| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 伊人久久大香大香线蕉中文| 精品久久99| 搡老女人老妇女老妇老熟女怎么读| 狠狠狠一区二区三区| 内射中出日韩在线观看视频| 日本精品性生活久久久| 97中文综合| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 欧洲亚洲人妻无码中字久久三区四区| 97久久天天综合色天天综合色电影| 久久熟女精品不卡一区| 超碰78| 性爱免费视频成人| 肉丝网站91| 精品成人动漫一区二区| 亚洲综合激情五月久久| 97视频620| 人乳av| 成人精品久久久午夜福利| 欧美一区二区三区蜜桃| 久久久蜜桃一区二区三区| 91天美传媒精品| 97精品网站| 日本高清免费一本视频在线观看| 岛国片在线观看视频亚洲| 国产午夜在线观看| 一级毛片电影免费看| 一本久道在线综合视频| 日本 欧美 亚中文字幕| 伊人亚洲综合| 9丨亚洲一区二区在线| 91操操| 色香在线| 中文字幕天堂在线| 久久综合五月天| s片在线观看| 无码高清操逼| 中文字幕丝袜美腿| 国产91 丝袜在线播放00-百度| 亚洲色系另类精品国产| 久久久9品一区二区三区| 色777999综合| 尤物网址| 国产白丝在线| 蜜乳中文字幕a在线| 久久久久久99999国产精品| 秋霞网无码| 日韩久久三区| 96久久久久| 久久伊人影院| 日本欧美成人片AAAA| 台湾佬中文娱乐网久久久久久久久久com | 日本国产高清色www视频在线| 校园春色综合色| 极品丝袜无码| 欧美综合色| 黑人无码一区二区| 乱操9999| 超碰人人色| 丝袜美腿丝袜| 清纯唯美综合亚洲| 欧美激情区| 国产成人无码网站在线视频| 国产精品另类| 九九碰九九爱97超碰| 中文字幕av片| 亚洲欧美国产日本一区二区三区| 色色青青久久| 999岛国大片| 中文字幕AV中出| 婷婷色色五月天| 久久αⅴ| 欧美18禁91| 久久精品午夜国产亚洲AV无码| 啪啪91| 中文字幕欧美丝袜07资源| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 99久久久久久久久| 亚州色图欧美色图| 91亚洲精品青草| 日本熟女不卡视频| 色综合20p| 亚洲精品aa久久伊人| 亚洲资源吧| 欧美黄页在线| 无码国产Av| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 蜜乳成人AV| 欧美熟女丝袜| 青青草日韩无码| 国产又猛又粗又爽又黄| 国产2.3.4区| 艹我哪美一区无码| www.av在线视频| 青青草在线视频播放器| 天天摸夜夜摸| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲丝袜二区在线| 抽查国产福利主播| 岛国片在线观看视频亚洲| 亚洲天堂男人网| 色综合99999| 久久婷婷五月综合| 午夜影美女日鸡鸡天天视频国产| 亚洲色图图片| 色噜噜人妻av中文字幕| 岛国人妻少妇av在线观看| av凤凰久久久| 性久久久| 亚州性色| 国产九九九九九九| 殴洲老熟女| 久久婷色| 欧美少妇性爱网站| 91人人看| 嗯啊不要在线| 国产高清在线观看欧美| 日本精品中文字幕视频| 久久久天堂| 青青草日本中文字幕| 99色热| 亚洲成人免费中文字幕| 97欧美视频| 男人天堂站| 青娱乐亚洲自拍| 一级AAA片一区二区三区| 国产精品对白内射| 99无码精品| 蜜桃视频成a人v在线| 97欧美在线| 亚州,欧美在线| 欧美少妇高潮久久91| 丝袜六区| 大香蕉色十月| 亚洲 图片 综合91| www.91色综合| 日韩精品区二区三区不卡| 亚欧韩av| 激情小说五月天| 亚洲一本大道中文字幕无码在线| 人妻少妇被猛烈进入中| 日韩国产乱子伦App| 秋霞一级A片黄色视频| 在线免费观看高清无码视频| 黄页av| 好湿好紧视频| 97在线免费视频观看| 久久精品成人| av2014 日韩在线中文字幕| 超碰在线1234区| 大屁股熟女一区二区三区| 久久m| 欧美在线55555| 婷婷美人网| 国模不卡一本二本三电影| 好看的91视频| 超碰欧美在线欧美| 一卡二卡三卡| 91人妻少妇| 3PAV乱伦视频| 天堂а√在线最新版在线 | 亚洲午夜福利在线影院 | 久久综合久色欧美综合狠狠| 91精品免费| 久草成人影片| 干少妇视频| 操国产逼| 无码操逼网| 欧美刺激色黄片免费看| 91精品综合久久久久久五月丁香| 人人色97| 老汉网| 中文字幕免费看| 91在线观看,天天综合| 欧美天天射| 爱妃国产亚洲视频中文字幕| 久操网视频| 91在线无码精品秘 软件| 丁香五月天堂网| 91xingse| 日韩一级二级三级免费看完整版国语版| 亚州中文字幕超碰97| 国产精品高朝久久久久久久| 亚洲 在线| 久久男人精品| 东京热激情视频一二三区| 97久久精品国产| 97久久国产精品| 伊人操| 在线无码视频| 艹我哪美一区无码| 国产视频第2页| 天天拍夜夜| 做爱A级亚欧| 欧美日不卡| 91色伦综合| 蜜臀网 一区| 在线国产福利网址导航| 美女露胸露屁股| 日韩中文字幕精品一二三事国产精品 | 久久精品亚洲东京热色播| www.欧精品| 久久视频少妇美女| 懂色aV一区二区天美传媒| 色色香蕉| 亚洲情色一区三区| 中国特猛少妇色xxx| 国产中文字幕在线点播| 日本特黄f c2| 欧美97se| 亚洲AV无码成人精品久久| 亚洲综合影片| 欧美大片91| 丁香五月婷婷色| 97在线资源| 久久久精品电影| 亚洲欧美大香蕉| 精品无人区麻豆乱码1区2区图片| 在线一道啪| 欧美最婬乱婬爆婬性视频| 无码粉嫩白虎一线天b区| 成年人黄色小视频网站| 五月天伊人| 男人天堂网站| 91N欧美| 色综合天天爱去电影网| 强奸乱亚洲| 蜜桃狠狠色伊人亚洲综合 | 青青五月天| 视频分类 国内精品| 亚洲综合校园春色| 亚洲精品国产专区在线观看| 精品亚洲俞拍视频一区| 欧美大香蕉久| 久插综合| 久久男人精品| 午夜福利在线合集| 人人操人人大香蕉| 97伊人超碰| 国产精品老师| 夜夜嗨视频| 国产女上位好爽在线| 亚洲自拍97| 亚洲18禁| 天天做日日做| 97jingpin| 777奇米影视777四色| 九9精品| 1769精品一区二区三区| 色色97爱| 91蜜臀在线久久久久| 尤物av网站免费在线播放| 久久久久国产亚洲一区欧美色图日韩| 超碰午夜| 是还免费视频1727我| 强奸乱伦日韩AV| 四虎免费在线播放| 少妇高潮99p| 大屁股人妻女教师撅着屁股| 操91| 亚洲天堂电影精品一区| 极品欧美一区二区三区| 91无码人妻| 97人人干| 午夜.DJ高清在线观看免费7| 操少妞在线视频| 亚洲人妻av| 亚洲在线网站| 九九这里只有精品| 日韩熟女精品无码专区一区二区| 香蕉久久AⅤ...| 夜夜无码| 国产熟女| 艹我哪美一区无码| 国产熟女完整版中字| 久久精品无码熟妇一区二区三区视频导航 | 黄色大片视频在线免费看| 亚洲 另类 丝袜 自拍 动漫| 日日日日日| 亚洲?V无码专区在线电影| 欧美精品亚洲精品日韩传电影| 91oumei| 精品一区二区综合熟妇| 亚洲av青草久久一区二区| 极品久久久久久久久久久久久久| 婷婷五月天AV| 蜜乳AV一区| 97超碰欧美中文字幕| 性爱欧美五月| 国产欧美美女免费观看视频| 久久久久国产精品片区无码直播| 日韩成人私密一级精品av| 后入式999| 美女主播色欲91抠b在线播放| 99久re热视频精品98| 人人摸.人人色| 97精| 亚洲天堂资源网| 亚洲图片欧美另类综合免费视频大大香| 美女黄页| 懂色综合久久久| 99热99在线| 美中日韩无码| 操逼天美3区| 亚洲色图欧美一区二区不卡| 少妇三p| 无码九九| 久久久久久久久国产| 有码色中文字幕在线观看| 七久久久| 欧美性特| 一品道视频一区二区三区| 再深点灬舒服灬太大了好硬好爽| 加勒比久久综合网高清| 天堂无码精品国产久| se吧提供国产乱老熟视频胖女人| 2017av无码免费无线播| 国产一级高清免费观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 久久精品老司| 青青草吊丝| 大稥蕉免费视频这里只有精品| 色色五月婷婷| 天天日天天色| 伊人成人中文字幕久久网| 操操碰| 国产欧美一区激情交| 99久久久无码国产精品性男| 久久亚洲精品成人av| 免费亚洲黄色视频在线观看| 乳欲人妻办公室奶水| 北约熟女超碰| 亚洲成人福利电影免费| 91人妻Pr| 色色色综合网| 精品久久久久9999| 国产男女无套97| 日韩99神马视频播放| 久久av网| 亚洲色资源| 日本欧美m v精品网站加| 精品中文日韩字幕视频| 一区二区三区四区久久视1| 秋霞一集毛片观看| 久久久久亚洲| 三级AV入口| 欧美日韩在线国产在线| 午夜丁香婷婷| 国产白领连续中出在线观看| 欧美人妻中出| 色狠狠一区二区三区香蕉| 人人妻人人澡人人爽久久av| 日韩欧美亚洲自拍偷拍| 视频黄色国产一级| 五月色综合| 天天日天天看| 一区在线精品中文字幕| 天天草夜夜草高潮片| 久久久国产亚洲精品系列| 岛国成人av在线播放网址| 五月婷婷六月色| AV高清一区| 亚洲自拍青操视频| 曰韩中文人妻视频| 欧美久久伊人| 国产天天骚| 欧美在线综合| 夜草网站| 美日韩一二三区| 综合五月天| 97干天天| 国产欧美黑人丰满在线| 欧美在线中M| 少妇久久久久久久久| 国产成人午夜视频网址| 一品道视频一区二区三区| 超碰综合色| 亚洲熟女综合一区二区| 青青久久手机线视频| www.夜夜操| 日韩精品电影| 91精品国产91久久青草| 性色av婷婷久久一区二区点复制| 欧美久久毛片基地| 蜜桃久久久久久久久久久久| 欧美日韩色| 日本精品无码三级网站| 青青草伊人久久| 少妇天堂| 亚洲日本韩国在线| 欧美天堂亚洲电影院一区在线播放| 色欧洲| 久久99午夜精品一区人妻| 性色avv| 竹菊一区二区三区AV线| 顶级丝袜熟女一区二区三区 | 一二三四区电影| 人人操人人操人人操人人操人人操人人人11.CM | 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 大干人妻| 嫩草影院在线观看精品| 精品97久久综合| 看日韩黄片| 91neishe| 91搡老女人老妇女老熟女歌词翻译| 久久精品色欧美aⅴ一区二区| 久久岛国| 99色婷婷| 亚洲无码日韩电影| www超碰| 欧美色亚洲色| 看一级黄色视频| 玖玖无码超碰| 97色在线| 久操97| 欧美亚洲综合色| 亚洲男人天堂av| 欧美日韩色图片| 3PAV乱伦视频| 台湾佬中文娱乐自偷自拍| 久久精品国产亚洲5555| 啊啊啊啊啊操我视频| 欧美精品精品一区二区| 黑丝日韩av丝袜av| 91在线视频免费播放| x97av| 亚洲国产一区二区三区四区国产| 成人AV在线网站| 五月丁香| 欧差乱伦二三| 高潮综合网| 日韩精品永久在线观看| 欧美在线电影| 青青操97| 污污汅18禁网站在线永久免费观看| 性爱AV天堂| 成人网站 免费观看| 亚州黄站| 小情侣高清国产在线视频| 欧美日韩亚洲五月天婷婷| 亚洲永久永久永久永久一级一级一级精品| 久干网| 日韩中文字幕视频| 欧美日韩亚洲五月天婷婷| 免费中文在线| 97亚洲欧美| 日日黄色三级网站| 岛国精品视频在线观看| 曰韩中文人妻视频| 2017天天透天天通天天擦| 狼人久草| 国产精品99精品视频网站| 亚洲日韩少妇一道本视频| 超碰人人色| 91精品国产91久久福利| 四虎免费视频| 欧美精品丝袜久久久中文字幕| 强奸国产在线| 91久久| 日韩专区久久久| 小草精彩毛片| 狠狠激情综合狠狠操中文字幕| 熟妇乱伦一区二区| 色婷婷A V一二三四区麻豆综合| 99超碰色| 青草青草久热| 日本韩国国产精品一区| 日本高清视频在线观看黄已三辽| 欧亚乱色熟一区二区三四区| 国产精品岛国片在线观看| 成人精品无码| 超碰在线成人电影| 色香在线| 嗯~啊~快点 死我视频| 操逼网站地址| 91九色蝌蚪在线观看| 91视频综合网| 啊啊啊好大好深| 亚州男人的天堂| 国产老熟女| 性爱久久| 六月激情婷婷| 日本欧美亚洲高清在线看| 免费视频在线一区二区不卡| 亚洲熟妇A V黑人| 97chaopenrihan| 欧美日韩亚洲五月天婷婷| 99自拍B亚洲 | 精品无码一区二区| 一起草AV| 伊人婷婷五月天| www.国产高潮精品| 九九探花视频在线观看| 中文字幕奈奈美被公侵犯| 26uuu久久| 国产品精品自在在线午夜免费| 外国免费性情大片| 中韩中文字幕在线观看| 精品二区三四区五电影 | 91综合色噜噜| 99国产精品| 国产97在线 | 亚洲| 亚洲男人在线观看天堂| 骚鸭AV| 欧美激情精品久久久久久| 亚洲人人夜夜澡人人爽| 91女优在线观看 | 天天网综合| 97免费在线观看| 91在线视频国产网站| 久操精品| 黑人精品XXX一区一二区| 欧美夜夜草视频| 八戒午夜福利理论片| 欧美的性爱网站免费| 国产久久成人| 国产三级日产三级韩国三级| 日韩精品亚洲专区在线影视| 国产91久久九九免费精品无码| 激情接吻视频久久久久久| 国产日本久久免费精品| 这里只有精品久久| 禁止观看美女黄| 欧美97在线观看| 激情五月天校园春色网| 97国产中文| 成人国产二区三区在线,男女精品。| 亚洲女人91| WWW.操逼.COM| 午夜视频好爽啊| 久操不卡视频| 青青草日本无码| 日韩美女高潮喷水视频| WWW美腿丝袜香蕉中文| 亚洲丝袜二区在线| 日韩中文字墓| 久久人人舔人人爽舔人人av片| 国产版a级片直播在线| 性欧美另类高清| 淫乱图区 | 国产传媒日韩| 在线免费观看日韩一区| 中文字幕 国产区| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | av资源在线播放天堂| 先锋色眉乱伦资源| 久久精品99| 欧美久久草熟女| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 国产怡红院| 亚洲999综合| 操人妻视频| 国产日韩区| 六月激情网| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV| 97超级色碰碰| 亚洲一区日韩精品中文字幕 | 免看60秒涩涩视频| 亚洲中文字幕精品一区| 亚洲最大无码中文字幕网站| 久久色激情一区二区三区| 破处bbq| 国产无马在线| 99操| 久久久神马影院| 欧洲黄色网| 欧美日综合| 亚洲宗合网| 国产在线综合网| 超碰在线成人| 欧美综合传媒| 色欲久久综合| 99www.bibizy香蕉资源国产一区二区三区高清 | 成人夜夜| 懂色天天爱天天日天天射天天澡| 嗯嗯啊啊视频在线看| 亚洲欧美日韩中文久久自慰| 操屄日韩| 天天综合~91入口| 精品国产乱码久久久影院| 中文字幕AV乱伦| 四虎永久在线精品免费网址| 日本幼女18+| 91小视频| 亚州综合色| 国产白丝网站| 福利色色| 97精品97久久| 无码国产Av| 熟妇艹鸡八| 日本孕妇一区二区视频操逼免费看| 大香蕉久操| 少妇熟女视频一二三区| 国产91精品福利在线| 亚洲97超碰| 国产超碰| 老熟女天天操| 熟女乱伦二区| 久操视频在线| 欧美性爱精品一区二区| 看看日B真人视频| 国产精品激情久久久久久久| 麻豆成人av| 色天使亚洲综合在线观看| 97视频7| 国产精品蜜臀久久久久无码AV| 哈哈操电影AV| 欧美gv在线观看| 操逼精品视频| 九九干| 亚洲日韩黑丝| 天天躁日日躁AAAXX| 我要色综合网站| 九九av| 91操熟女| 1二区9| 另类 日韩 熟女| 东北女人性交| 日韩欧美视频青青| 精品人妻一区二区三区在| 中文字幕一区二区三区人妻少妇在线 | 欧美成年人性爱视频免费观看| 午夜久久一区二区无码中出| www.99色| 欧美大干日韩| 激情综合五月| 精品免费视频国产一区| 大香蕉伊人在线成人AV在线观看 | 婷婷五月天无码| 操逼视频免费日韩无码| 青青草综合在线| 九九毛片这里只有精品| 国产精品盗摄 偷窥盗摄| 97超碰总站| 能看的av| 日韩中文字幕精品一区在线| 日本97久久| 中文字暮97| 懂色av色欲av蜜臀av| 人伦四五区| 亚洲另类久操网| 93人人操人人| 亚洲人天堂| 情色五月天网| 日日夜夜干| 操逼片国产| 亚欧美综合网| 67194无码不卡| 日韩免费看黄片| 天天看天天日天天操| 色天堂在线观看| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 亚洲无992tv| 亚洲日韩欧美一区二区| 久久久久久久一级黄色打同平台| 成人av影院在线观看| 高清视频一区| 男人的天堂久久狠| 日韩伦理久 久久 清纯 | 天天干人人乐| 色网1| 麻豆国产av网| 国产丁香精品露脸视频| 久久手机视直播| 91狼人| 亚洲欧洲综合成人av一区| 欧美 亚洲 在线| 精吧天堂| 精久久久91| 亚洲91少妇| 国产做?爰片久久毛片?片美国| 精品无码一区二区三区| 亚洲女人91| 福利天天都操| 少妇内射www在线观看视频| 偷拍 精品 另类 四区| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 国产美女口爆吞精视频| 欧姜老司机| 丰满少妇精品一区二区| 日韩无码AB| 欧洲射精91| 人人妻人人操人人乐| 东京热免费视频| 亚洲免费人妻在| 久久伊人在线五区| 福利社区午夜一区二区| 伊人国产成人av网站| 午夜传煤十二区精品| 少妇人妻在线| 少妇高潮喷水无套久久久久久| 日韩精品99久久久久久中文字幕| 久久久久国产亚洲一区欧美色图日韩 | 日本123区操B视频| 亚洲一区二区三区AV无码| 日本三级A片网站com| 天天看天天日| 欧美亚洲中文| 激情色图| 久久久久少妇| 凹凸视频在线一区二区| 国产传媒日韩| 免费a v| 国产1024在线播放| 国产乱伦视频污| 成人免费性爱视视| 亚洲影院无码在线| 国产精品国产亚洲区艳妇糸列| 欧美色综合| 久久久久亚洲熟妇熟女| 亚洲精品一二牛牛| 91人妻最真实刺激绿帽| 黄片国产精品一区二区| 午夜男人av| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 亚洲乱码国产乱码精网站| 色呦呦呦在线观看视频| 一级久久久久久久久久久| 色综合久久88色综合久久天天| 国产一区二区三区导航| 欧美日韩岛国大片在线观看| 丁香五月婷婷基地| 夜夜爽33333| 精品97久久| 日本一区二区亚洲综合| 成人av福利在线观看| 色网在线视频观看免费| 在线观看黄色电话| 五月婷婷五月天| 亚洲有薄码区日本系列中文字幕| 欧中日成人免费影视| 97精品国产手机| 夫妻AV网站| 欧美色图20p| 尤物网址| 久久草大香蕉| 一区二区三区日韩欧美| 日韩精品电影| 自拍六区| 乱伦一区二区三区‘| 黄网色一区二区三区四区精品| 天天日少妇逼AV| 加勒比综合九九99视频在线播放| 国产精品一级二级在线| 性色综合网| 国产强奸乱伦xd| 色爱综合网| 日日干夜夜操视频h| 91欧美巨乳| 久久精品中文字幕女同| 久久久久久久国产| 久久精品国产97欧美精品亚洲| 国产深喉视频一区二区| 久操网无码在线| 蜜臀国产AV中文字幕| 精品一区二区三区四区外站| 欧美 色 亚洲| 免费超碰97在线观看| 日本三级中国三级99人妇网站| 青青草色情网站视频| 亚洲成人ab| 免费伦费视频在线观看| 超碰久久性爱| 久久久久幕乱码| 欧美一区二区三区互相| 久久草大香蕉| 日本熟妇色熟妇在线视频播放| 老熟女91| 久操精品网| 97超碰资源网| 麻豆三极片| 9久热| 91女优在线观看 | 日韩中文欧美| 亚州高清av| 欧美福利视频啊啊啊啊| 天天干少妇| 无码精品啪啪啪一区二区三区三州| 搡老熟女免费视频| 天天插天天干| 91精品婷婷国产综合久久| 日韩操逼性鲍| 日本免费不卡二区| 欧美亚洲丝袜人妻制服中文99| 成人免费在线网站| 先锋音影AV| 国产精品嫩草影院午夜两性| 日韩精品国产精品五码一区二区| 中文字幕欧美日本乱码一线二线| 91av一区二区在线观看| 精品视频123区小说区| 狠狠爱夜夜| 91精品丝袜在线观看| 日韩精品影视| 日本天天操| 97一本大道亚洲一区| 亚洲一区二区三区麻豆传媒| 高清无码人妻久久久一区二区三区aⅴ| 国产 丝袜 欧美中文 另类| 91成人久久| 91成人久久| 啊啊啊啊啊好舒服视频| 芊芊操逼视频无码| 精品国产国产AV| 亚川综合视频| 久久大陆| 思思热er精品视频| 久艹99| 最新日韩黄片| 91中出视频| 97中文超碰| 欧洲特黄毛片免费看欧洲毛片| 中文字幕一区 二区三四五 区日 日骚| juliaann丝袜| 女人天堂AV五区在线| 亚洲精品国产精品成人| 欧美欲色| 中文字幕人成乱码熟女香港| 人妻少妇三级| 日本五十路熟女一区二区| 精吧天堂| 亚洲中文一区二区三区视频| 性感美女91影视| 日本精品一区三区| 日韩欧美性吧婷婷乱伦大香蕉| 九九十八精品| 欧美aaaaaaa| 91色射| 玖玖97综合 | 99无码视频| 亚洲欧美不卡线| 久久精品一区| 综合操逼| 在线色导航| 欧美淫乱视频| 99热思思| 日韩操啪| 夜夜操中文字幕| 99热最新| 日韩电影在线观看网址| 少妇极品熟妇人妻无码| 色婷婷九月天天综合| 91精品导航| 五月天伊人| 天天看,天天做| 97日韩| 亚洲在高跟鞋自慰久久在色线| 国产乱码精品一区二区三区四川| 中韩中文字幕在线观看| 中日无幕一二三四区| 在线欧美69V免费观看视频| 精品国产乱码久久久久久免费| 日本美女性生活久久久久久久| 亚洲成人免费中文字幕| 中文字幕AV中出| 成人热久久精品| 91色久| 久久天天艹| 中文字幕人妻丝袜乱一区三区| 亚洲AV资源| 亚洲欧美国产日本一区二区三区| 国产高清自拍视频| 久久精品高清无码一区| 色999人与兽| 手机看片1024你懂的国产| 久久久97| 午夜亚洲| 欧美久久久| 人妻天天爽夜夜爽爽| 竹菊影视国产一区二区| 91免费看一区二区三区| 欧美淫乱视频| 91性生活久久久| 69人妻精品一区二区绯色| 金莲网址| 一本色道无码DVD中文字幕| 蜜臀va69| 狠狠躁日日躁夜夜躁A| 中日无幕一二三四区| 丁香五月激情综合国产| 成人无码电影在线观看网| 亚洲男人天堂av| 香港久久久| 亚洲诱惑天堂 | 熟女人妻一区二区三区| 成人97人人超碰人人| 亚洲国产熟妇综合色专区| 性欧美| 香蕉色网| 国产精品久久久久久久久久久久久久久久 | 91在线视频免费中出| 99视频内射三四| 黄片直播三级黄片两女一男| 逼操网站| 亚洲好看强奸乱伦| 青青操网| 大学生美女口爆| 91视频在线观看18| 中文字幕乱妇免费视频| 国产青青综合伊人| 超碰综合97在线| 果冻传媒A片一二三区| 97资源免费视频| 久久久久亚洲一区女同性恋中文字幕| 久久久久久久久久久久久久久性生活视频| 色情五月丁香| 五月丁香影院| 婷婷亚洲天堂| 婷婷五月综合激情| 日本久久网| 综合网欧美在线| 成人五月香网在线| 翘臀vidoes| 99r九九| 内射黑人| 91欧美另类| 久久精品电影| 日韩欧美~中文字| 青青草综合在线| 91少妇人妻| 国产后入| 亚洲日韩视频二区| 亚洲精品三区在线观看| 午夜一区二区三区国产| 国产中文日韩欧美一区二区三区人妻丝袜美腿| 欧美日韩在线国产在线| 亚洲啪啪视频一区二区| 国产69精品久久久久99尤物| 欧美黄片欧美黄片xxx| 日韩性爱高清免费视频|