久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码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
返回資訊列表
91国产丝袜美女| 精品亚洲国产成人av网站| 伊人久久婷婷| 精品人妻一区二区三区四区石在线| 五月色网| 第四色奇米影视777| 综合视频91| 秋霞一级视频在线观看免费| 天美麻花大全视频| 亚洲欧洲综合成人av一区| 91无码精品| 精品久久人妻成人网| 久操免费观看| 欧美男人亚洲天堂| 亚洲激情色片 | 欧美天堂亚洲电影院一区在线播放| 国产自偷自拍一区| 日本综合久久| 国产精品秘 福利姬在线观看| 男人天堂网址| 日韩精品午夜操呦呦不卡影院| 欧色综合| 大香蕉一区二区在线观看.| 欧美影院一区二区三区| 加勒比色99999| 国产懂色精品国产av| AV九九| 精品国产无码中文| 亚洲欧美首页| 99re超碰| 天天日少妇逼AV| 综合欧美日韩在线观看| 天天操夜夜嗨| 久久男人精品| 久久双插| 日韩本不卡视频在线观看 | 国产综合操逼高清| 热久久国产| 98久久| 性欧美91| 人人操人人肉久久精品| 97超碰精品图片| 啊啊啊啊啊啊在线| 日韩无码第3页| 久操操| 伊人五月天青青草婷婷| 亚洲三区视频| 亚洲天堂男人的天堂| 亚洲激情深爱文学小说网站| 情侣操 逼视频99| 亚洲欧美天堂在线| 偷窥自拍亚洲色图| 小草精彩毛片| 亚洲中文制服诱惑| 五月丁香亭亭| 67914亚洲精品| 久久黄黄| 熟女自慰久久久| 国产13区| 亚洲色图 图片| 亚洲91大片| 亚洲偷91色| 91 丝袜在线| 中文字幕综合人妻| 天天综合网合集91| 国产一区二区精品久久久不卡蜜臀| 亚洲日韩久久精品一区| 综合少妇网| 99热这里都是精品| 青青草无码视频| 久久人妻四季| 色超碰综合| 久久久久人| 风月影院男女十八禁| 在线看片国产精品每日更新| 91一区二匹| 色综合一本| av网站免费看| 欧美一区二区三区日韩| 欧美日韩色图片| 中文字幕在线免费观看视频| 亚洲熟女乱色一区二区三区久久久 | 狠狠操夜夜| 亚洲欧洲av影音| 九月激情婷婷| 国内自拍 日韩激情 99| 中文字幕日产av人| 青青操视频在线| 91天美免费| 夜草网站| 免费看日产一区二区三区| 激情六月天| 久久e6只有精品| 欧美性视频二区三区| 欧美日韩第一页| 中文久久一区| 久草看看看| 国产综合色精品在线观看| 一级特黄aaa大片在线观看成人一级片在线观看 | 91艹| 白丝av| 天天操夜夜操狠很操| 99热啪啪| 国产欧美后入| 3d成人精品一区二区| 国产欧美日韩在线观看麻豆传媒公司 | 丁香六月激情| 国产精品九9| 日本最新1区2区3区| 人妻91少妇| se吧提供国产乱老熟视频胖女人| 91美女丝袜诱惑视频| 97频视在线| 91丨国产丨白浆秘 洗澡动漫| 天堂中文资源在线bt| 99久久com免费视频′| 91网站在线播放| 精品久久无码午夜福利| 人妻日日夜夜精品| 蜜臀久久久99久久久久 | 人妻少妇一区二区| 蜜臀在线网站| HEYZO高无码国产精品227| 中文字幕精品人妻丝袜| 国产亚洲色婷婷久久99精品91葵花宝典| 成年女人18级毛片毛片免费观看| 蜜桃久久精品一区二区三区| 久久在线观看免费视频| 丁香六月激情| 老熟乱一区二区三区四区| 欧美,日韩,亚洲视频| 情色五月天久久久| 大香蕉免费3| 禁片 高清 在线观看视频网站| 天天搞欧美| 丰满岳乱妇一区二区三区| 午夜呻吟欧美| 强奸乱伦av电影| 婷婷99狠狠躁天天躁| 免费成人在线熟妇网| 97在线免费观看视频| 欧美亚洲丝袜人妻制服99| 9久9久9久9久视频网站| 五月婷婷综合网| 久久久999国产| 操逼逼无码| 密臀在线视频| 久久国产视频专区一二三| 亚洲超碰97| 天美传媒av 在线| 日韩综合成人免费视频| 亚洲精品国产AV天美传媒| 国产无吗在线播放| 99re免费视频精品全部| 2019AV天堂| 久久久久免费看少妇A片特黄| 中美日韩毛片| 在线可观看的黄色网址| 国产精品内射婷婷一级二| 肉丝网站91| 欧美视频一区二区在线| 中文字幕欧美丝袜07资源| 欧美三级一级| 手机在线人成免费视频| 青青在线视频日韩欧美| 色九九九| 殴美大黄片| 欧美91网| 96精品久久久久中文字幕| 丁香九月 婷婷| 天天日美女的B| 精品精品精品| 青草草免费网站av| 久久伊人东京热| 大香蕉宗合网在线| 欧美强奸乱能| 亚洲国产另类在线中文| 狠狠爱大香蕉| 色悠久久久av| 艳美熟妇先锋一二三区| 久久精品亚洲成a人天堂| 天天躁日日躁狠狠躁| www欧美91| 射丝袜高跟鞋99| 曰韩操B| 免费男人的天堂| 日韩另类色图| 色狠狠色| 日操粉逼逼| 思思热国产高清| 青青草久久| 六月丁香久久| 日本高清_区二区三区| 亚洲成人在线乱码色午夜| 美腿丝袜高跟网免费视频免费视频| 国产日韩欧美亚洲精品95 | 婷婷激情五月天小说网| 国产无码精品无码| 人人爽夜夜玩视频| 青青草乱入乱欲视频在线观看| 久久婷婷精品| 国产亚洲精品玖玖玖在线观看| www.av家庭乱伦| 97在线视频免费看| 久久伊人东京热| 亚洲精品蜜桃久久久久久久| 日本女厕偷拍| 伊人国产av| 少妇 综合| 亚洲久热| 怡红院亚洲怡春院av| 亚洲操逼网| 无码免费精品高清| 婷婷丁香成人| 日本精品第一视频在'| 无码免费在线观看黄色片| 久久男人的天堂| 91美女视频。| 亚洲高清自拍| 亚洲欧美黄| 欧美 亚洲精品首页| 日韩有码回春沙龙第一页| 蜜臀久久久国产| 另类av天堂| 99自拍B亚洲| 九九无码久久精品视频| 久久伊人在线五区| 色鬼在线综合| 热热热热日日漂亮永久永久国产日| 久久综合18p| 国产在线76页| J?P?NESEHD熟女熟妇伦| 性色AV蜜色av色欲av| 99无码狠狠久久| 三男一女不戴套的A片| 在线免费观看高清无码视频| 欧美日韩另类激情图片| 另类成人首页一区| 丰满少妇一区二区三区免费看| 综合亚洲欧美| 国产色图乱伦| 国产黄色影片在线观看| 九九无码视频| 密臀在线免费观看| 色阁阁AV综合网| 少妇久久久免费| 久久日韩肥臀| 久艾草在线精品视频在线观看| 黄色AV免费| xxx0国产在线播放| 青娱乐导航AV| 久久九九精品一区二区| 97色亚洲| 约操熟妇| 美女露胸露屁股| 国产精品久久久久久久久久久久久久久| 婷婷美人网| 亚洲诱惑天堂 | 国产在线播放成人免费| 操逼天美3区| 熟女色综合久久| 五月丁香啪啪| 日本天天干天天日一区| 国产精品分类在线观看| 乱伦熟女区| 天综合中文| 欧美爆操91| 九九九只有精品| 久久精品一区二区| 十八禁视频网站| 黄色乱论网站| 丝袜美腿91| 中文字幕黄片在线| 天天日天天爽| 色九九九综合| 亚洲人妻在线精品| 五月天婷精品激情| 欧美性,色九九| 91日产桃蜜| 中文字幕在线观看永久| 欧美黑人猛交春色影视大全| 91久| 中字乱伦AV| 美骚妇av高清在线| 国产精品国产亚洲区艳妇糸列| 91精品人妻电影| 国产精品熟女AV中文字幕在线播放| 亚洲综合草草| 国产色精品午夜大片| 少妇毛片久久| 人妻另类 专区 欧美 制服| 高清国产av无码| 欧美老妇女内射网址| 久久熟女精品不卡一区| 日韩欧美aⅴ综合网站发布| 欧美另类色图片| 97日韩欧美亚洲| 国产高清精品一区二区三区毛片| 天天操女人| 国产精品久久久亚洲第一牛牛_在线观看 | 97国产高清视频在线观看| 亚洲视频一二区| w w w.久久精品| 欧美一级三级| 国产精品久久久 | 九九九九九九综合| 国产无码一二三区| 激情婷婷丁香网| 久久精品国产亚洲AV高级北京| 亚洲日韩AV视色| #NAME?| 日本理论在线| 操一对老熟妇爽上天视频| 人人做人人妻人人夜视频| 97视频新免费| 久久美女福利是上海美女| 免费看国产大AB| 欧美丰满少妇xx高潮| 国产盗摄美女如厕大神作品在线观看| 偷拍 欧美 日韩| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 东京热一区二区中文字幕| 成人在线日韩| 97操| 天天影视网综合少妇| 精久久久| 浪人综合网| 97精品97久久| 中文字幕 人妻不满 在线视频| 中文字幕激情小说| 亚洲 欧美 小说| 天天舔天天| 99蜜桃臀亚洲成人在线观看| 看免费一级在线播放毛片| 欧美亚洲第1页| 午夜国产成人精品视频| 插入综合网| 青青青青青手机视频| 丁香五月性| 91美女视频| 日本午夜久久电影| 91熟女视频| 天天干人妻| 国产伦精品一区二区三区在线观| 久久精品—区二区三区内射| 日欧毛片久久| 91操人| yaouchengrenav| 精品一国2| 五月天婷婷基地| 中文字幕av亚洲精品| 大乔未久88一区| 五月丁香激情啪啪| 在线岛| 97精品久久久久中文字幕| 激情综合五月| 天天操天天射天天日| 久久久免费高清中文视频| 中文字幕精品人妻丝袜| 天天操狠狠日夜夜干超碰撸com视频在线观看| 久久伊人最新网址视频| 精品一区二区2| 水野优香在线观看| 亚洲成人久久一区二区| 色就色综合| 激情综合 婷婷五月 红杏| 日本精品国产视频| 玖玖爱综合| 久久婷五月天| 亚洲中文字幕精品久久久久久直播| 97色碰| 亚洲图片 欧美电影| 97天天做| 亚洲不卡不卡中文字幕不卡 | 欧美97视频| 啊啊啊啊啊啊在线看| 91久久免费视频互動交流| 亚洲成人AB| 中文幕97| 久草新免费| 91蜜臀在线久久久久| 柠檬AV导航| 综合操逼| 国产精品干干干| 日韩黄色片子| 亚洲性爱成人| av三级电影在线播放| 风间由美日韩欧美久久| 日日夜夜国产综合| 1024亚洲中文字幕久在线看片你懂的 | 久99久视频精选| 乱伦Av网| 日本高清_区二区三区 | 亚洲中文字幕精品一区| 日日夜夜免费| 97欧美日韩| 日韩大香蕉| 精品天堂| 国产一级内射高清视频 | 夜夜爽夜夜爽| 日本中文熟女视频| 国产成人超碰在线| 免费1级a做爰片观看| 国产一区二区成人av在线播放| 青草精品视频-日本久久久久网站| 国产一区二区精品久久久不卡蜜臀| 99999这里都精品| 久久中文色图| 91超碰在线播放| 97一本大道亚洲一区| 成人十八禁日韩欧美一二三| 亚州九九九精品视频| 色五月AV在线| 一区二区影视| 无码直播久久久| 婷婷丁香人妻 | 日本3级一区二区免费| 在线无码操| 99超级碰免费视频| 校园春色亚洲欧洲| 欧美青青草视频| 日日骚av| 麻豆三极片| 一本久道在线综合视频| 欧美性爱视频免费一区一A| 探花激情视频| 9久久9综合| 亚洲色图国产另类| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 99精品久久| 大香蕉九九| 淫荡网址| 97人妻色| 日本孕妇一区二区视频操逼免费看| 亚洲在线a| 色欲色香天天天综合网www-亚洲综合国| 精品中文一区二区| 久久久9999| 极品白嫩美女白浆成人福利在线看| a v网站在线播放| 一级@啪啪视频| 亚洲熟妇AV日韩熟妇在线| 色综合色欲色综合色综合色综合| 起碰97| 久久综合久色欧美综合狠狠| 二色av| 婷婷丁香九月| 亚洲无992tv| 大香蕉强奸乱伦| 亚洲黄片免费在线播放| 国产粉嫩出水在线播放| 欧美另类色| 日韩精品一区,二区 九九...老司机| 国产精品香蕉| 99热欧美| 欧美在线大香999| 操逼视频亚洲| 久久视频少妇美女| A V视频日本| 亚洲另类色图片| 97干97色| 91久热这里只有精品| 天天摸天天操视频| 激情五月综合网| 日韩BBN| 波多野结衣被操50分钟免费视频 | 天天综合网~91入口| 欧美成人一级麻豆| 麻豆久久久久久久久丝袜 | 香蕉99秘 精品一区丁香| 日日A∨| 久久草视频污视频| 韩国手机不卡无码三级视频| 亚欧美天堂在线| 欧美人与动性人交a| 亚洲欧洲偷拍一区| 欧美色图91| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 蜜色网色哟哟| 黄片qw| 夜夜骑天天燥| 中文字幕123| 综合色久欲| 欧美日韩第一页| 果冻传媒A片麻豆熟妇人妻| 五月天激情婷婷| 国语少妇精| 97干日韩| 素人一区二区三区日韩| 日本五区不卡| 夜夜一区二区| 日本一区二区三区午夜观看| 任我爽在线视频免费观看| 自拍偷拍2025在线观看| 一区二区视频在看| 久久av网| 综合久久欧美| 人妻丝袜美腿中文字幕| 足交视频老司机| 人人色人人操在线| 搡老熟女免费视频| 日本免费二区三区| 国产精品国产自产拍高清AV| 欧美经典一区二区三区| 久久久久久久久一区二区三区| 中文字幕精品专区搜索结果91| 日本色色色视频| 天天久久| 亚洲色图第四色| 又黄又爽在线观看视频| 四虎影视永久在线免费| 狠狠爱夜夜| 神马午夜久久久| 国产超碰| 91第一页| 91oumei| 中文字幕一区二区日韩网| 91黄射| 人妻人人澡人人爽人人| 欧美男人一区| 尤物国产一区在线观看| 成人一二| 亚洲在线91| 久久久久久少妇| 欧洲中文字幕| 92福利社视频| 免费人成?大片在线播放| 性爱视频免费网址| 久久久久久久久一区二区三区| 日韩美女高潮喷水视频| 欧美日韩理论一区| 精品一区二区啪啪啪| 福利在线观看一区二区| 国产精品蜜臀久久久久无码AV| 四虎精品永久在线观看| 内射中国少妇高清视频免费视频| 人妻久热在线| 国模限制级电影| 五月激情在线| 欧美很很操视频| 中文字幕一区二区韩| 美日韩男女操屄视频| 俞拍久久国应视频| 少妇三p| 尤物视频偷拍免费| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 日本熟妇一区二区三区| 国产农村一一级特黄毛片| 久久首页| 一区二区三区黄色片a| 久久黄黄黄| 欧亚韩国999| 在线色资源| 黄色av播放免不| 久湿久久| 久久久久久99999国产精品| 欧美精品久久| 蜜桃视频啊啊啊啊| 91激情国产| 色综合1991| 欧美桃色网| 青草精品视频一日本久久久久网站| 91劲爆| 青青青草原| 风间由美日韩欧美久久| 久久久久白虎| 99re9| 国产品精品自在在线午夜免费| 好爽视频在线观看视频 | 亚洲成人在线高清| 一级做受视频免费是看美女| 日韩欧美操逼xxx| 日韩操逼HD| 久久国产热视频97电影| 91精品丝袜在线观看| 欧美色色色| 超碰超碰欧美| 亚洲精品国产av天美传媒| 91在线/欧洲| 天天性射网| 啊啊啊啊啊好多水| 国产精品一区av在线| 约操熟妇| 人人色97| 一区,二区,三区视频| 蜜臀无码一区二区| 九七色图| 日韩国产不卡在线视频| 久操精品网| 天天干一区二区| 色哟哟1区2区| 天天射日日干| 天天摸夜夜添无码小视频| 国产一区在线免费播放| 欧美精品成人亚洲| 激情四射熟女丝袜| 国产色产精品在线观看| 国产高清在线观看欧美| 美女黄页| 无码九九九九| 91欧洲国产成人久久精品网站| 亚洲精品毛片在线观看| 大奶啊啊好爽| 久久九操在线观看| 中文字幕欧美丝袜07资源| 东北丰满熟女国产一区| 久久免费精彩视频| 伊人久久蜜月| 美女裸体无遮挡永久免费观看网站| 中文字幕亚韩| 曰本熟女视频| 成人怡红院| 无码视频黄色网战| 97频视在线| 亚洲高潮少妇| 日韩综合97P| 精品国产一区探花在线观看| 人妻娇喘 激情视频| 99爱精品| 日本免费不卡二区| 久久是精品| A级国产欧美激情在线| 黄色av一区二区在线| 欧美在线大香蕉| 亚洲天天操| 亚洲中文一区二区三区视频| 97碰碰日本乱偷人妻中文的| 国产在线观看一区二区三区| 色婷婷成人| 九9热伊人| 免费一级黄色录像影片| 97人亚洲综合字幕| 欧美激情激情xxxx欧美专区| 国产又粗又又黄又猛| 一二三卡欧美日韩人妻免费精品| 2020中文在线一区二区三区| 日本丝袜美腿人妻九九| 狠狠操狠狠操操| 25国产精品免费观看| 97K超碰在线| 国产乱伦一二三区| 国产少妇内射| 最近的最新的中文字幕视频| 超碰在线综合97| 欧洲一级性爱视频在线观看| 美女网站黄页| 中国探花熟女| 精品一级| 午夜精品久久久久久久男人的天堂 | 伊人伊人LD| 亚洲阿v天堂无码z2018| 欧日韩在线观看| 精品国产丝袜一区二区三区乱码| 99精品高潮| 凹凸视频在线观看伊人| 老色鬼成人精品视频下载大在线观看| 综合久久六月久久婷婷| 色97国产69香蕉| 日韩精品一区二区三区色欲| 国产精品久久泡妞网站| 欧美亚洲综合色| 免费精品无码一级毛片牛牛影视 | 国产AB视频| 精品久久久亚洲AV成人网站| 久久这里只| 色噜噜国产在线| 黄色大片免费在线| 欧美顶级黄片AAAAA在线免费看| m欧洲一级午老| 激情小说成人日本无码一| 2019亚洲男人天堂| 日韩三级一区| Sekablack无码一区| 亚洲国产丝袜在线观看| 亚洲aV无码成人在线观看| 日本欧美不卡| 天天天乱色综合全| 国产无码一二三区| 久久六六| 熟妇国产免费一区| 精品精品精品| 黄色av网站在线播放| 欧美97se| 爱欲AV| 黄片不用下载在线观看| 人人操人人色网| 情侣操 逼视频99| 狠狠操狠狠插| 黄色激情电影在线观看| 91国产丝袜白虎| 一区 欧美 日韩 麻豆| 国产精品一区二区 尿失禁| 麻豆成人影音在线| 久9久精品视频| 蜜桃久久综合视频| 亚洲AV无线| 精品91| 91在线丝袜| 婷婷色香| 欧美综合自拍成人自拍第二十页| 激情五月天插| 天天色播| 波多野42部无码喷潮在线观看 | 国产亚洲精品A在线观看下载| 久久r精品| 国产精品网站www| 加勒比大香蕉视频在线| 岛国艾薇凹凸视频天堂| 国产AAAAAABBBBB| 男人精品区| 四虎免费视频| 精品一久久久| 成人精品电影| 99精品在线播放| 国产白嫩漂亮KTV在线| 东北少妇高潮zzzz| 亚洲se91| 亚洲男人天堂网站| 亚洲se电影| 国产亚洲精品美女| 久久国产对白激情浪潮 | 色五月av| 殴美色网| 亚洲精品xxx| 人妻内射一区二区在线视频| 999在线电影香蕉| 人人操人人大香蕉| 九月丁香婷婷色| 久久亚洲国产成人| 综合久久97| 久久东京热久久| 欧美大的香蕉有线电视视频 | 国产精品久久久无码aV去| 欧美色图综合网| 91精品久久久久| 天天久久久久久| 一本色道久久综合亚洲二区三区| 亚欧美综合网。| 成人十八禁日韩欧美一二三| 欧美曰韩国产精品| 精品人妻一区二区乱码一区二区| 熟妇艹鸡八| 最近2019中文字幕国语免费版| 蜜桃色色网站视频三区| 爱做久久久久久| 成年人性爱日韩| 睡产熟女乱伦| 久久久久9| 任你草| 五月丁香婷婷色| 丁香六月婷婷久久综合| 97精品国产97久久久久久免费| 玖玖视频在线资源一区二区三区| 婷婷四五区| 日本精品88888888| 极品后入免费视频| 9999久久久久| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 97在线无精品| 大香蕉乱伦视频网| 99re9| 91中出| 亚洲日韩在线a不卡99精品| 性天堂| 免费日韩黄片| 中国女人内射6XXXXX| 国产精品老师| 99人人干| 无码99| 秋霞网无码| 人妻偷拍一区二区三区| 51一区二区三区| 91久久久久久久| 熟妇高潮一区二区免费视频| 日欧毛片久久| 超碰吊日色| 亚洲av性爱电影| 中文字幕一区电影在线观看| 久热91| 图色综合网| 尤物视频偷拍免费| 永久免费观看的毛片的网站| 日本操逼视频导航| 国产剧情一区在线观看| 亚州色图欧美| 色图四区| 精品久久久久久中文字幕三区| 国语av最新自产拍在线观看| 防屏蔽在线视频| 97在线观视频免费观看| 青草地一本线一区二区三区| 成人一道本免费视频| 91精品大奶人妻| 久久999久| 大香蕉草草| 日韩欧美成人午夜福利| 91 刺激在线| 九九九草| 久久综合九色综合欧洲98| 蜜桃av综合网发布| 人人摸人人干| 精品人妻一区二区三区视频在线| 亚洲成人日韩小说| 97网址www| 亚洲美女高潮喷水视频| 日韩国产欧美伦理在线| 欧美大香蕉在线观看| 2020中文字幕在线| 亚洲国产精品9999在线观看| 95精品在线| 国内成人圈中文字幕无码视频| 极品欧美一区二区三区| 天天色香欲综合网| 久久精品国产97欧美精品亚洲| 欧美日韩另类在线播放| 好淫网一二三视区| 91亚洲综合在线| 一区三区啪啪| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 天天日B狠狠操| 久久久久国产| 欧美Aⅴ| 亚洲 欧美 中文 日韩超碰| 99草精| 亚洲诱惑| 日韩字幕一区| 国产按摩一区二区三区| 99热在线只有精品| www.国产高潮精品| 欧美伦乱| 一区三区啪啪| 国产超碰欧美| 99久久久久久久久| 东北操逼| 亚洲欧美日韩精品久| 亚洲素人网| 熟女五十路一区二区三| 亚州综合AⅤ| 性暴力欧美猛交在线直播| 青青色综合| 国产福利电影| 97在线视频免费观看| 精品久久久久av影院| 久久99草| 免费在线观看国内色片网站网址| 亚洲国产丝袜在线观看| 欧美日韩激情无码专区| 2019亚洲男人天堂| 人人透人人操| 啊啊啊啊好疼| 欧美黑人猛交春色影视大全| 91肉片| 久久久久七视频| 人妻少妇被猛烈进入中| wuyechaopeng| 色五月亚洲| 超碰97久久| 神马久久中文字幕| 一区二区三区免费岛国片| 超碰9 7女人| 久久精品小视频| 欧美性爱精品七区| a人片中文字幕一区二区| 国产视频不卡在线观看| 欧美性暴力| 校园春色综合色| 大香网站| 亚洲精品97久久| 欧美性爱一区| hd成人一区二区在线| 欧美性性性| 精品久久久久瑟瑟| 无码WWW免费视频网站| 亚洲一区二区av| 久久一区,青青青青草视频在线播放| 国产又黄又粗的视频| 黄站在线免费观看| 97精品一二区| 国产黄色 A 片免费看| 91美女在线| 少妇三P| 六月丁香五月婷婷| 6080YYY午夜理论片在线观看| 国产精品一区二区麻豆| 无码人妻一区二区一牛影视| 人妻精品一区二区三区| 开心五月天激情网| 亚洲综合另类小说色区亚洲成av人片在www | 日本操嫩b网| 97天天日| 欧美熟女逼久久久久久| 亚洲人精品久久久喷水| 很很热性爱视频| 色色毛片| 抽插亚洲无码| 少妇第一页| 最新一二三区视频| 狼人久草| 一区二区影院| 乱伦一二三| 亚洲 欧美 第一页| 校园春色宗合网| 午夜久久一区二区无码中出| 国产情侣自拍在线播放| 91人妻精华帖| 免费成人自拍视频在线| 国产精品夜夜夜| 骚熟女吞| 中文字幕55555| 东京热男人的天堂网| 亚洲最大的综合性av| 日韩操逼性鲍| 九九碰九九爱97超| 96久久久久久久| 中文字幕二区| 九九九精品一区二区无码| 亚洲不卡不卡中文字幕不卡 | 少妇激情AV| 夜夜骑天天燥| 熟女一区二区| 91原创在线观看| 色婷婷激情| 偷窥自拍亚洲天堂网爆| 欧亚乱色熟女一区二区| 国产Aα| av大香蕉网站| 无码99| 久碰视频| 五月丁香色色网| 亚洲熟女av日韩熟女| 色色色欧美| 五月婷网站| 国产精品美女在线一区| 双插性欧美一二三区| 在线观看无码三级少妇| 亚洲国产精品无码AV久久久| 肉动漫无遮挡h在线观看| 青娱乐休闲视频在线观看| 欧美+日产+中文| 人人妻人人爽| 亚洲欧美另类图片| 久操免费在线| 老熟妇乱轮| 天天看天天干| 1769国内精品视频| 在线综合 亚洲 欧美中文字幕| 九九视频黄色片| 欧美的性爱网站免费| 色操逼网| 日韩在线观看字幕精品| 青娱乐久久艹| 久久性视频| www.婷婷五月天| 久久免费老司机精品| 亚洲精品欧美专业| 麻豆 亚洲 97| 91热色| 男人天堂东京热| 肉动漫无遮挡h在线观看| 亚洲日韩视频二区| 青娱乐国产精品| 色婷婷五月综合激情中文字幕| 国产欧美一区激情交| 久久久久久九九九| 超碰人人干| 91久久久久久久| 97人人中文网| 福利一级版子| 一级AAA片一区二区三区| 久久一区二区蜜桃| 日韩免费a级毛片无码a∨| 免费a级毛片av无码久久精品中文字幕| 懂色av色欲av蜜臀av| www99热| 国产婷婷一区| 神马久久免费电影观看| 亚洲se91| 99久久综合| 欧美|91色综合| 中文字幕伊人| 人人操 欧美| 国产激情久久久| 最新9久久久9免费视频| 欧美天天综合网| 大香蕉久| 伊人久久大香线综合无码| 欧美色图亚洲色| av天堂5| SS久久| 色欲久久久久综合网| 五月激情在线| 成人夜夜| 日韩欧美操逼xxx| 少妇精品久久| 久久色情| 91亚洲最新在线| 亚洲第一在线视频| 大但人体久久久久| 国产成人精品无码久久| 久久久久久久久久久久黄色 | 日本免费不卡二区| 亚洲精品久久久久毛片A片拉屎 | 久久美女福利是上海美女| 亚洲精品视频二区| 久久久久久免费电影| 亚洲最大AV网| 亚洲丝袜99| 18禁精品网站在线看| 性性欧美| 高清无码一区二区三区| 久久婷婷在线观看视频| 日韩成人性日韩成人性爱视频在线免费观看 | 99久久久| 欧美色图亚洲色| 婷婷国产精品九区| 日韩熟女无码| 亚州 综合 色图| 睡产熟女乱伦| 0755午夜福利视频| 99精品久久久久久久婷婷蜜桃| 97爱啪| 日本日逼视频网| 狠狠操狠狠操操| 97超碰免费人人性爱| 91午夜无码| 色97欧美| 天天爽夜夜欢视| 在线观看精品国产免费| 大香蕉久久| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 人妻天天爽天天爽三区| 日日骚 av| 久久极品伊人| 日韩一级成人毛片免费观看 | 蜜臀久久久99久久久久| 国产激情在线| 精品少妇高潮久久| 蜜乳av一区二区三区| 91亚洲黑人| 日韩精品9区| 欧美在线综合| 超碰97极品9| 亚洲日韩美女丝袜美腿人妻视频| 久久久九九| 抽插亚洲无码| 欧在线一二区| 1769一区| 26uuu国产日韩综合在线观看| 国产成年免费大片黄在线观看| 亚洲无 码A片在线观看麻豆| 中文字幕国产| 久久婷婷苹果| 久久香蕉国产线看观看亚洲女人 | 国语av狠狠色丁香婷婷综合激情| 超碰97最新人妻| 亚洲毛片一级带毛片基地| 在线有码中文字幕| 99久久精品无码一区二区毛片免费 | 亚洲 欧美 另类 日韩 人妻一区| 综合国产97| 绑缚麻绳人妻寝取完整版| 久草毛片电影怡| 乱子伦一区二区三区国产精品| 狠狠婷婷亚洲中文综合久久| 少妇天堂| wwwxxx日本爽| 干婷婷综合网| 伊人五月天| SS久久| 亚洲,欧美,综合网| 好色综合| 欧美成人A天堂片在线观看| 中文色综合| 天天躁日日躁XXXXYY| 成人夜夜爽| 日本精品国产视频| 亚洲 中文 欧美 日韩 在线| 人妻少妇精品无码专区二区密桃| 欧美 亚洲 第一页 | 久久精品视频久久久| 天天摸夜夜操视频| 熟妇一区,二区,三区。| 欧美性xxxxx狂欢| 日本高清_区二区三区| 亚殴在线| 色官网在线| 欧洲精品在线播放| 大逼色网站| 天堂资源欧美| av中文在线| 欧美疯狂做爰xxxx| 人人爱夜夜爱| 欧州一区二区三区四区| 天天看少妇| 日本东京热久久久电影| 国产无遮挡| 岛国免费黄色网址| 国产一| 欧美人妻精品一区二区| 91欧美性| 五月丁香啪啪网| 好属操| 丁香啪啪| 色欲色香天天天综合网www-亚洲综合国| 亚州男人天堂| www.91色综合| 91天堂| 老女人日韩美91| 久久久久少妇| 国产精品久久久蜜臀| 亚洲婷婷丁香在线| 色一射色一射| 人人操 欧美| 91精品国久久久久久无码| 国产隔壁老王影院在线| 97在线观看免费视频l| 91足交| 色爱天堂| 欧美 亚洲 大香| 免费观看国产不卡av| 另类图片五月天| 欧亚综合一卡二卡中文字幕| 成人线上超碰| 综合网97| 五月激情影院| 日韩国产精品人妻无码久久久| 91肏屄网| 91模特在线观看| 色嗨嗨在线| 亚洲色婷婷久久91| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 久久女婷| 人妻二区| 屁股久久久久久久| 久久9久久| 操老熟女AV| 长久操视频| 不卡一区视频| 熟女欧美日韩综合婷婷| 91色艳| 少妇超碰在线| www.99视频| 色色婷| 欧美午夜精品久久久久久3D| 天天肏夜夜肏| 日韩性爱网址| 在线不卡视频| 激情综合亚洲| 嗯啊不要啊在线| http://qxhbdz.com| 美女露胸露屁股| 黑人天8A∨高清网站| 99re69| 欧美亚洲国产日本在线,久久精品国产| 自拍视频大全亚洲专媒视频/一区二区三区 | 97欧美综合网| 97超碰碰| 天天狠操| 91成人精品在线播放| 天天做天天爽|