免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

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

Android APK 加固原理(三):方法級(jí)代碼抽取——PVM1 虛擬化打包到底是什么? Android APK 加固原理三方法級(jí)代碼抽取——PVM1 虛擬化打包到底是什么系列文章?第一篇《Android APK 加固原理一Native Shell 如何隱藏和恢復(fù) DEX》第二篇《Android APK 加固原理二從 DEX 解密到 ART 加載如何縮短代碼明文暴露窗口》第三篇《Android APK 加固原理三方法級(jí)代碼抽取——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ù)——如何檢測(cè) 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)心的問題會(huì)逐漸從“APK 里面有沒有完整 DEX”轉(zhuǎn)變?yōu)椤斑\(yùn)行時(shí)能不能把 DEX 恢復(fù)出來”進(jìn)一步又會(huì)變成“能不能只針對(duì)關(guān)鍵方法進(jìn)行分析”這也是方法級(jí)保護(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這種理解對(duì)于 XopProtector 的PVM2才成立。對(duì)于 ?PVM1?并不是這樣。XopProtector 的VmCodec.java對(duì) 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方法級(jí)虛擬化打包而不是True Code Virtualization真正的代碼虛擬化。這兩個(gè)概念一定要區(qū)分。三、PVM1 和 PVM2 到底有什么區(qū)別這是整個(gè)系列最容易混淆的地方??梢灾苯佑孟旅孢@張表理解特性PVM1PVM2保護(hù)粒度方法級(jí)方法級(jí)是否抽取原始指令是是是否生成虛擬化數(shù)據(jù)是是是否存在 Interpreter否是是否恢復(fù) Dalvik是否是否寫回 DEX是否最終執(zhí)行者ARTNative Interpreter核心目的提高靜態(tài)逆向成本改變代碼執(zhí)行模型對(duì)運(yùn)行時(shí) Hook 的抵抗能力中等更強(qiáng)性能開銷相對(duì)較小更高實(shí)現(xiàn)復(fù)雜度較低很高XopProtector README 對(duì)兩者的定義非常明確--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 的核心從“類級(jí)保護(hù)”下降到“方法級(jí)保護(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í)”進(jìn)一步下降到了“Method 級(jí)”。五、第一步找到需要保護(hù)的方法XopProtector 的 Packer 是在構(gòu)建階段工作的。源碼中的PackerMain會(huì)讀取 DEX并遍歷其中的 ClassDef、ClassData 以及 DirectMethods / VirtualMethods。核心流程可以抽象為APK ↓ 解包 ↓ classes.dex ↓ 解析 DEX ↓ 遍歷 ClassDef ↓ 定位目標(biāo) Class ↓ 遍歷 DirectMethod ↓ 遍歷 VirtualMethod ↓ 提取 code_item源碼中的walkDexMethods()就承擔(dān)了這一職責(zé)。它會(huì)遍歷dex.classDefs()然后讀取classData.getDirectMethods() classData.getVirtualMethods()再逐個(gè)調(diào)用extractOne(...)處理方法。六、PVM1 并不是所有方法都保護(hù)這是一個(gè)非常重要的設(shè)計(jì)。XopProtector 并不是無腦把所有方法都轉(zhuǎn)換成 PVM1。源碼中存在vmpPrefixes對(duì)應(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因此可以針對(duì)不同代碼價(jià)值選擇不同保護(hù)等級(jí)。七、第二步讀取方法真正的 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它會(huì)根據(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é)果就不會(huì)完全相同。十、PVM1 的第二層Nibble Swap除了 XORPVM1 還做了一層非常輕量的字節(jié)變換。源碼中if((i1)0){b((b4)0xf0)|((b4)0x0f);}也就是對(duì)偶數(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你會(huì)發(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 在提取完方法指令以后會(huì)直接修改原來的 DEX。流程原始 Method Code ↓ 讀取 ↓ 保存到 PVM1 ↓ 原位置寫入 Stub源碼中writeReturnStub(...)會(huì)把原始 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í)行過程中會(huì)檢查 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()會(huì)將不同 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è)方法級(jí)保護(hù)體系的“索引核心”。DEX 中的方法是通過method_ids進(jìn)行編號(hào)的。例如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 的“方法級(jí)映射關(guān)系”。十七、PVM1 運(yùn)行時(shí)到底發(fā)生了什么這部分是整個(gè)機(jī)制最值得分析的地方。很多人會(huì)誤以為啟動(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)以后會(huì)先定位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í)候自然只會(huì)執(zhí)行return 0它不知道真正代碼在哪里。所以必須在ART 加載 / 定義 Class / Method的關(guān)鍵路徑上進(jìn)行干預(yù)。XopProtector 在初始化階段會(huì)protector::hook::install_hooks();然后再解析和應(yīng)用code.bin源碼明確說明在解析 / 應(yīng)用 code.bin 前安裝 ART hooks以便 DefineClass 時(shí)進(jìn)行 patch。因此整個(gè)體系實(shí)際上形成DEX ↓ ART ↓ Hook ↓ 識(shí)別被保護(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 到底算不算虛擬化答案是算但屬于非常輕量級(jí)的“虛擬化打包”而不是完整 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)成本相對(duì)較低。二十二、真正的 PVM2 為什么會(huì)復(fù)雜得多假設(shè) PVM2 也拿到add-int mul-int return它不會(huì)把這些指令恢復(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 方法不會(huì)恢復(fù)到 Dalvik而是通過 JNI trampoline 進(jìn)入 Native Interpreter讀取code.bin中的 PVM2 image。這就是下一篇文章真正需要討論的內(nèi)容。二十三、PVM1 對(duì)靜態(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)用絕對(duì)不可破解。二十五、PVM1 最大的價(jià)值其實(shí)是“方法級(jí)明文控制”如果把保護(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ù)對(duì)象從“整個(gè)代碼包”變成“一個(gè)個(gè)關(guān)鍵方法”。這就是方法級(jí)加固最重要的工程價(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所以完整體系是代碼抽取 代碼變形 加密存儲(chǔ) 原位置空洞化 運(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ù)解決不同攻擊面。這比單純依賴一種“超級(jí)加密算法”更加符合商業(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è)則對(duì)應(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é)同完成的方法級(jí)保護(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而會(huì)變成原始 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 還會(huì)為每個(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 ↓ 寄存器 / 對(duì)象 / Field / Method ↓ 最終執(zhí)行并重點(diǎn)解釋為什么 PVM2 和 PVM1 已經(jīng)不是同一個(gè)層級(jí)的加固技術(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
返回資訊列表
色吧五月婷婷六月丁香| www.99热最新视频8| 亚洲五月停停| wwxx日本| 婷婷午夜精品久久久| 色色网站| 天天爽天天日| 五区毛片七区毛片| 日韩99色| 色婷婷99| 亚洲成人AV在线播放| 激情五月天视频| 婷婷丁香五月天欧美| 色九月丁香婷婷蜜桃在线观看| www.色婷婷| 激情纯色婷婷五月天在线不卡视频| 日本一区二区三区精品视频| 色色色五月天婷婷| 蜜桃五月天| 色综合五月| 亚洲丁香五月综合| 欧亚色色| 五月激情啪啪啪| 免费在线观看AV网站| 九九色欲网| 9这里只有精品| 五月综合丁| 99精品偷自拍| 俺也去色| 欧美婷婷| 99热精品在线在线| 六月天婷婷| 香焦网五月天| 亚洲人妻电影| 99热在线精品播放| 操操人人| 狠狠狠狠狠狠狠狠| 中文av网| 丁香五月激情综合| 99久久综合网| 久久久天堂国产精品女人| 色婷婷六月天| 97色女人在线| 激情丁香五月天| 99色在线| 综合色播| 婷婷色播婷婷| 色日本颜射| 五月天婷婷视频| 五月激情影院| 日韩啪啪视频| 噼里啪啦在线观看免费完整版视频| 亚洲精品成人| 久碰婷婷视频| 六月丁香五月天| 丁香五月婷婷综合精品素人| AV在线观看网站| 婷婷色五天| 天天干天天射色综合| 丁香成人综合| 五月婷婷丁香社区| 99干视频| 超碰在线国产| yw国产AV| 色综合中文| www.yw色| 五月丁香久人妻中文| 日韩人妻无码专区| 天天日狠狠| 99er国产| 婷婷五月天成人小说| 噜噜噜久久亚洲精品国产品91| 先锋av性爱成人电影| 99视频在线观看视频| www.五月激情红色| 天天日日夜夜| 五月亭亭网成人在线视频| 久草热视频在线观看| 色情五月停停丁香| 91蜜桃婷婷狠狠久久综合9色| 亚洲丁香花色| 极品人妻VIDEOSSS人妻 | 久久久18| 51精品国自产在线| 色在线免费观看| www.91AV.com| 色优久久| 丁香五月天中文字幕| 终合激情网| 婷婷五月丁香六月综合网| 人人干人人看| 人妻丰满精品一区二区A片| 嫩草AV久久伊人妇女超级A| 国产人妻777人伦精品HD| AV色色天堂中文| 成人网页在线观看| 日韩亚洲视频| 开心婷婷五月天激情网| 五月婷婷视频| 欧美特大片黄| 成人视频在线免费播放| 精品福利911| www.色色色色| 色综合久久久久| 久久全意婷婷| 六月99天天婷婷激情综合| 五月丁香婷婷激情在线视频| 五月婷婷综合久久| 噼里啪啦完整版中文在线观看| 婷婷狠狠综合网入口| 午夜九九九九九九| 久久99色色| 天天插天天爽| 激情五月丁香五月色| 色婷婷色综合激情91| 热99这里只是精品| 色五月成人| 久色视频| 亚韩在线视频| 182TV大香蕉| 色婷婷电影网| 区区久久妻| 丁香五月av在线| 人人操AV| 九九热99熟女| 天天天操天天天日| 色五月亚洲| 久草视频大香蕉99| 人人视频色| 五月丁香婷婷色| 美女被操一区二区| sewuyuejiqingwang| 华人在线免费| 色婷青青| 26UUU精品一区二区c〇m| 99国产精品久久久久久久久久久| 996黄色片| 婷婷久久国产视频| 日本一级一级一级一级| 最新久久网址| 97人人操在线| 久热 91| 婷婷五月天亚洲图片| 天天精品视频免费观看| 婷婷天堂站| 久久99热这里只有精品| 人妻丰满精品一区二区A片| 九九色综合网| 天天肏视频| 婷婷色色欧美| 9精品在线| 丁香花狠狠婷婷亚洲中文字幕| 激情五月图| 99re久久| 大香蕉综合网| 97色婷婷| 天天摸日日舔狠狠添婷婷婷 | 亚洲综合色色色| www激情网站| 五月婷亚洲精品| 伊人婷婷大香蕉在线| 色婷婷9| 国产美女视频久| 中文字幕亚洲-区久久99婷婷| 天天模,夜夜模夜夜爽| 丁香五月偷拍| 狠狠色官网| 九九Av| 五月亭亭六月色| 97碰碰视频在线观看| 色欲久久久久久综合网综合网| 亚洲夜夜操| 色婷婷8| 五月婷婷免费在线观看| 婷婷中文字暮| 99热这里只有精品4| 久久免费高| 五月天成人在线| www.色五月| 手机激情网| 亚洲国产精品VA在线看黑人| 天天色综合网吨吧| 碰97久久| 以及AA大片看看| 激情五月六月婷婷| 99热精品网| 丁香五月婷婷啪啪视频| 九月丁香| 米奇影视资源婷婷狠狠色激情欧美五月丁香| 国产真人做爰视频免费| 久 久9 9 热 视 频| 超碰人人妻| 超碰人人91| 国产成人网址| 久久久全国免费视频| 天天色域综合网| 丁香五月婷婷色偷偷| 91色操| 超碰a女人的天堂| 99日本在线| 热99这里只是精品| 久操热| 激情综合网激情五月欧美| 热久91| 六月丁香色色| 婷婷亚洲欧美丁香五月| 丁香六月高清视频| 日韩色色网| 久久免费干| 婷婷丁香人妻天天爽| 午夜国产精品AV在线播放| 日本一级一片免费视频| 97亚洲精品| 婷婷五月丁香基地| 日日干天天射| 丁香激情五月| www.婷婷五月| 99色色色色| 亚洲综合网区| av九九| 婷婷五月综合社区在线| 性做爰A片免费视频A片直播 | 日韩在线视频网站| 超碰精品国产首页| 9在线9在线婷婷在线国产| 99在线免费观看| 97超碰在线免费观看| 日韩五月天婷婷| 91精品在线看| 久久婷婷成人| 曰曰久久| 九热...av| 91九色成人原创视频| 精品一二三区久久AAA片| 色婷婷大香蕉| 色色色五月婷婷| 五月天婷婷在线播放| 久久久久久草黄色片AV在线观看| 婷婷 久综合| …亚洲黄色在线播放日韩、av中文a…| 性欧美大战久久久久久久83| 色吧婷婷五月亚洲| 91狼友视频网页更新| 国产亚洲精品久久久久久郑州| 国产97色在线| 99久久综合网| 天天色视频| 玖玖爱综合网| 思思热在线视频精品| 91无码视频| 色久丁香五| 丁香 婷婷 亚洲 熟女| 爱草视频在线| 这里只有精品免费观看网占| 久色视频| 五月天激情小说| 激情综合久久| 少妇高潮呻吟A片免费看软件| 99视频| 激情深爱五月天| www.婷婷.com| 亚洲精品V天堂中文字幕| 色婷婷影院| 欧美激情性做爰免费视频| 日本三级韩三级99久久| 亚洲V国产V欧美V久久久久久| 中字幕视频在线永久在线观看免费| 久久精品人妻| 69热91天堂| 激情综合另类| www.久久久.com| 99视频超级精品| 香蕉婷婷色五月| 亚洲视频丁香网va| 狠狠五月激情丁香六月| 亚洲在线综合| 国产69久久久欧美黑人A片| Av狠狠色丁香婷| 久久久91精品| 7777激情基地| 欧美婷婷色五月| 五月色色激情网| 激情六月天| 综合激情婷婷| 久久五月天影院| 91丨九色丨国产在线| 九九色之九九色88| 99色热视频| 99热99热在线| 五月丁香啪啪网| AV片一区在线观看| 九九热欧美| 免费试看小视频 99| 深爱婷婷丁香五月激情| 性爱综合网| 97在线观视频免费观看| 热久久91| 色婷婷六月丁香综合欲精品| 色999五月色| 色五月婷婷丁香凹凸| 欧美在线看| 六月综和久久| 五月婷婷AV| 日操夜操天天操不卡| www,色婷婷| 激情五月婷婷啪啪| 深爱激情五月婷婷| 99色在线观看视频| 久久亚洲婷婷| 熟女少妇内射日韩亚洲| 99啪| 五月天天天天天天天天天天天天天天天婷婷婷 | 亚洲狠狠爱婷婷| 性高潮久久久久久-九九九九九九九九九九热-成人AV | 九九热精品| 午夜九九九九九九| 99re这里有精品手机在线| 色五月丁香婷婷久草| 伊人久久婷婷| 九九热精品| 欧美VA在线| 国产精品美女久久久久AV超清| 成人在线日韩欧美| 天天做天天爱天天玩| 五月婷婷开心综合| 丁香婷婷婷五月| 久久99久久99精品免视看婷婷| 久久九九思思| 五月婷婷欲色| 久久R激情| 看黄的网站18禁| 丁香五月激情五月| 五月天久久激情| 极品人妻videosss人妻| 精品无码久久久久久久久| 九色91视频| 99在线精品免费视频| 99精品热| 久久99最新| 六月色色| 激情综合婷婷五月| 91操操| 99操碰| 五月天激情婷婷| 丁香五月天堂亚洲社区| 婷婷丁香色情| 婷婷综合另类| 26uuu欧美| 4399在线观看免费高清毛片| 亚洲视频伍月婷婷| 免费操超碰| 欧美婷婷五月| 香蕉五月婷婷| 婷婷五月免费视频| 精品99在线| 日日爽夜夜爽| 久九色| 色综合婷婷| 婷婷久久丁香五月| 久久97| 九九色影院| 丁香五月综合婷婷| 大香蕉久久伊人婷婷五月丁香| 精品久久99| 91色色色| 丁香网站| 五月天狠狠网| 五月婷婷丁香综合| 能看的av| 丁香五月婷综合网| 99日逼视频| 婷婷无码视频| 六月丁香婷婷亚洲中文玖玖| 人人综合色| 九九成人视频| 成人操呦av| 成人无码精品1区2区3区免费看| 亚洲开心激情网| 日本色啪| 丁香六月啪啪| 久热最新视频| 五月婷婷七月丁香| 久久久久久久人妻| 都市激情小说婷婷| 色色色婷婷五月天| 超碰在线免费观看日韩| 大天天伊人| VA五月激情在线| 亚洲中字AV电影在线网站| 婷婷五月色亚洲| 婷婷趴趴| 国精产品一区一区三区免费视频| 色五月天婷婷| 天天干狠狠操| 日本操碰碰| 丁香五月天堂| 丁香 亚洲 久久| 99久久精彩视频。| 日韩 mm 不卡| 欧美成人精品A片免费一区99| 婷婷综合五月色播| 色婷婷视频| 九九色情网站| 婷婷综合| 人人摸人人| 性色播| 伊人超碰在线| 九九热视频在线观看| 婷婷色爱| 开心深爱五月天| 亚洲在线成人| 九九热123| 综合激情在线| 色五月婷婷丁香五月| 综合激情五月天| 91夫妻视频| 亚洲啪啪啪啪| 国产精品久久久海的味道| 综合欧美五月婷婷| 激情六月天婷婷| 99欧美精品99日本精品| www色色com| 综合网五月| 色天天综合色| 青草性爱视频| 五月天丁香六月综合| 伊人大香久久| 伊人婷婷福利网| 狠狠干婷婷| 色色射| 久久99热精品a片在线观看| 另类激情五月| 日本色99| 干一干xxxx| 97碰碰叉| 丁香五月亚洲综合| 五月丁香色停停啪啪啪| 高清资源站日A美A欧亚…| 狠狠色综合网| 亚洲中文字幕av| 久热这里只有精品6| 激情黄色五月天| 综合天天综合| 九九这里只有精品在线视频| 婷婷的久久网站| 九伊人网| 99久精品视频| 欧美大香蕉视频| 丁香五月婷婷激情中文| 国产女人十八水真多1| 91在线就要啪| 久久婷婷五月天大香蕉| 久久99人人| AV片一区在线观看| 2050人人操免费工开爱| 久久丁香婷| 影音先锋秋秋五月婷婷| 综合另类激情| 丁香六月青青草| 色欲色香,www,com| 色婷久| 99热狠狠操| 人人妻人人澡人人爽| 久热9热| 婷婷五月欧美| 超碰资源在线| 久久丁香五月综合六月激情红杏视频| AV色五月婷婷| 五月丁香六月婷婷综合网| 狠狠狠狠免费| 九九爱激情| 五月天婷婷视频| 成年人丁香五月| 99成人在线观看| 久久99精品久久久久久三级| 五月婷亚洲精品AV天堂| 91精品久久久久久77777| 欧美人与性动交CCOO| 99精品国产在热久久| 51精品国自产在线| 五月天丁香看婷婷| 超碰九色| 色99综合视频| 99热这里只有精品55| 伊人狠狠丁香婷婷综合尤物| 夜夜操狠狠操| 人妻免费网站| 婷婷99热| 思思热性操 | 五月婷精品| 婷婷丁香18| 五月丁香人妻| 激情小说色五月| 伊人大香蕉在线视频| 9 1超碰九色| 五月六月丁香婷婷在线观看| 天天爽天天摸天天爱| 99ri精品视频在线观看| 日韩黄在免| 色色五月激情| 综合五月草| 99er久久| 丁香五月综合| 色婷婷女优有码五月亭| 丁香五月婷婷性爱| 天天日天天干天天操| 色色丁香| 97久久超视频| 婷婷亚洲丁香五月| 综合99综合久久久久久久| av九九| 亚洲婷婷丁香五月| 五月丁香WWW| 五月婷婷九九热| 亚洲亚洲人成综合网络| 五月婷精品| 日本五月视频| 超碰91在线| 婷婷伊人视婷婷婷| 色色aⅤ網| 亚洲不卡| 日韩精品99久久| 婷婷激情五月天网站| 欧美黄色AA片哗啦啦啦| 天天干天天干天天干| 97日在线视频| 夜丁香综合| 超碰99在线| 综合99久久天天综合| 夜夜夜叫天天天做| 99热综合| 激情婷婷五月久久| 日本色天堂| 亚洲永远av在线播放| 综合激情啪啪| 99色婷婷| 日本三级中国三级99| 99视频一区| 91啪啪| 色综合综合色| 情色婷婷五月天| 色九九九综合| 婷婷五月深爱五月| 岛国AAAV| 色99欧洲色19| 大香蕉丁香婷婷| 六月婷婷私欲| 在线视频区| 国产裸舞福利资源在线视频| 亚洲综合九九| 天堂AV三级| 亚洲成人免费电影| 91综合在线| 99热老司机| wWW九九在线播放| 99无码黄色视频| 99在线看视频| 婷婷丁香成人五月天| 婷婷丁香91综合| 婷婷五月天深爱| 天天干,夜夜爽| 六月丁香成人| 午夜天堂一区人妻| 五月婷综合性中心| 久久加勤综合| 久久机热/这里只有精品| 婷婷性爱五月天丁香网| 日本VA视频| 婷婷激情五月天激情小说| 五月开心深深爱激情综合| 超碰成人黄色网| 婷婷色五月色妇| 欧美日韩成卜| 五月丁香婷婷成人综合网| 婷婷综合国产| 99久精品视频| 午夜丁香丁香婷婷| 丰满少妇乱A片无码| 综合色五月天| www网站在线观看| 久久久性爱视频| 日亚二欧美| 久久停停超碰| 婷婷五月天,影院| 丁香五月婷婷激情四射深爱激情| 99乱视频| 五月天婷婷色| 综合久久激情久久| 天天插天天插| 激情美女五月天| 久久AAAA片一区二区| 久久久精品人妻录| 婷婷五月电影| 五月丁香啪啪啪| 天天夜夜六月丁香五月婷婷老师| 丁香五月婷婷综合精品素人| 五月天婷婷成人网| 夜夜撸日日骑| 中文无码婷婷| av网站不卡在线| 婷婷五月天美女21p| 成人在线视频网| 国产av一区二区三区| 久久婷婷五月免费视频| 91chinese在线| 99免费超碰在线| 99国产精品久久久久久久久久久| 深爱激情网五月| 天堂呦 呦百度搜索-百度搜索| 成人短视频在线免费观看| 亚洲va日| 七七色色综合| av大片在线| 伊人婷婷色| 激情伍月 欧美| 五月天婷婷色情| 激情又色又爽又黄的A片| 色99网| 国产五月丁香在线| 亚洲AV第二区国产精品| 亚洲网综合在线| 色停停香蕉视频| 久久久久久综合五月婷婷| 婷婷激情九月| 五月天大香蕉AV| 成人精品一区日本无码网| 日本成人噜噜噜| 99这里只有精品视频在线| 视频久久9| 亚洲无码 图片区| 天天狠天天叉| 99热丁香| 色婷婷久久综合中文久久一本| 天天 青草 制服丝袜 在线| 国产精品岛国片在线观看免费| 思思热在线| 色情五月综合婷婷| 狠狠操狠狠插| 久久色五月天激情小说| 色狠狠六月| 伊人91| 五月丁香花激情综合网| 一本狠婷婷综合| 午夜精品久久久久久久爽| 五月丁香六月激情欧美综合| 超碰在线免费9| 色婷婷丁香香香蕉视频| 欧美色小说婷婷| 天天 青草 制服丝袜 在线| 香蕉久久六月| 99热网址| 91碰超| 婷婷五月中文字幕| 久久网址99热| 99在线综合视频| 伊人久久丁香狠狠婷婷综合香蕉 | 欧美99视频| 99综合成人视频在线观看| 成人免费120分钟啪啪| 99这里只有精品| 一级性爱视频| 久久xx| 久久婷婷视频| 天天色视频| 91精品久久久久久| 亚洲中文字幕av| 色婷婷九月| 色碰碰视频| 日韩啪啪视频| 国产这里只有精品| 年轻的妺妺伦理HD中文| 九八Av| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 狠狠色婷婷777| 婷婷五月天日本无码| 婷婷丁香色五月久久88| 五月婷婷天| 久久99热这里只有精品 | 大香蕉av在线| 亚洲精99| 天天色综合综合| 五月丁香婷婷成人综合网| www,99热| 99狠狠| 丁香啪啪| 99精品国产在热久久| 综合久久狠狠| 色一情一乱一乱一区9| 激情图片婷婷| 快乐婷婷五月天| xxx综合在线| 婷婷综合五月天亚洲综合| 五月婷婷六月丁香综合在线| 日韩在线视频网站| 婷婷五月天激情小说| 激情AV网| 色一情一乱一乱91Av| 97久久人人| 丁香五月婷婷丫| 26uuu另类亚洲欧美日本一| 99精品在线观看视频| 成人av中文字幕| 天天插天天插| 色欧美日| 九九热再线九九视频免费在线观看| 人人综合五月人人婷婷| 综合五月天| 伊人婷婷五月天| 丁香六月天婷婷| 日韩无码专区| 激情五月婷婷色播网| www.99热在线观看| 青青久在线视频免费观看| WWW.久久99| 久久久思思热| 狠狠高潮精品亚洲1| 日日色综合| 色99xx| 天搞天天天天天| 婷婷丁香综合| 欧美激情综合色综合啪啪五月| 国产亚洲AV人片在线| 97操视频| 久久久久er热| 另类少妇人与禽zOZZ0性伦| 七月激情六月婷婷综合在线播放| 狠狠88综合久久久久噜噜噜| 狠狠色五月天| 色欧美色色色| 九九热这里只有精品23| 婷婷五月六| 国产欧美精品AAAAAA片| 色色色干| 激情第四色| 九月婷婷在线视频| 婷婷5月色| 久99久热| 五月天丁香啪啪啪啪| 成人精品一区二区三区四区五区 | 欧美久热| 色吧婷婷| 六月综合婷婷开心伊人| www,五月天激情| 婷婷午夜| 五月丁香| 亚洲综合99| 丁香五月黄色| 丁香五月综合在线观看| 亚洲精品又粗又大又爽A片| 日本婷久久| 99热97| 色婷婷影视99| 天天影视色综合网| 日韩免费视频| 五月天婷婷三级黄| 婷婷五月色天| 99久久久99久久91熟女| 欧日韩成人| 激情五月婷黄版| 婷婷五月天免费视频| www99精品日韩| 99性爱无码| 日韩成人无码| 亚洲狠狠狠色婷婷综合激情久久久| 九九热在线精品视频| 亚洲愉拍99热成人精品| 黄色成人网站在线播放| 婷婷情色五月天| 91狠狠色色丁香婷婷综合久久| 9在线9在线婷婷在线国产| 色色cOm| 大香蕉婷婷婷| 丁香婷婷视频| 色玖玖玖| 97资源碰碰| 婷婷在线精品| 五月婷婷六月激情| 在线VA视频| 做爰丰满少妇1313| 国产精品久久久60086| 色五月,com| 日本va欧美va欧美va| 中文字幕操比影片| 国产精品VA在线| 午夜丁香 婷婷| 9月色婷婷| 超碰成人在线观看| 丁香五月婷婷基地| 中国AV性爱观看| 久久44| 五月婷婷天天| 欧美熟女99| 婷色五月| 天天操天天草天天草天天| 婷婷亚州综合| 丁香五月情| 思恩热国产视频右线观看| 五月天激情小说| 色婷婷丁香五月色综合网| 操操操91| 91丨九色丨熟女高潮| 婷婷五月丁香综合激情小说| 97超美国视频在线观看| 久热免费| 色婷婷婷av| 337久久| 亚州操操| 国产寻花在线| 婷婷五月精品中文| 99久久激情视频| 色宗合久久五月婷婷| 开心五月婷婷综合在线精品素人| 大香蕉婷婷色| 开心日韩丁香婷婷五月| 久操人| www.91久久| 日日夜夜小色哥| 9热视频在线观看| 色偷偷AV亚洲男人的天堂| 丁香五月播播| 欧美狠狠草| 婷婷五月天性爱视频| 99热热这里只精品996小说| 婷婷成人视频| 丁香五月欧美色综合| 久久sp免费视频| 99热最新| 精品久久人妻| 国产成人av在线播放| 九九久久99| 九九久久色| 日日肏天天操| 国外亚洲成AV人片在线观看| 色婷婷久久| 五月婷婷色播| 亚洲无码成人| 久/久精品99看9| 九九婷婷网五月天| 丁香五月天天| 色99在线看| 七月丁香五月婷婷在线| 337p大胆噜噜噜噜噜91Av| 丁香六月激情综合网| 操操自拍| 97久久精品视频| 激情丁香五月| 欧美日朝成人| 亚洲婷婷欧美婷婷| 特级片神马电影| 五月天婷婷日日爱| 9久国产精品| 99啪啪骑| 婷婷综合九色伊人| www.99在线| 五月色色网| 婷婷五月六月丁香| 丁香五月婷婷成人网| 五月婷婷激情四季| 丁香九月激情| www.色综合.com| 99热一本久道| 99精品手机在线视频| 欧美槡BBBB槡BBB少妇| 狠狠干综合| 中文字幕AV网址| 99热在这里只有精品| 色婷婷香蕉丁丁网| 丁香五月婷婷成人色区| 18av天堂| 婷婷激情肏屄网| 亚洲综合视频在线| 亚洲综合无码| 伊人www22综合色| 九月色婷婷综合| 综合精品啪啪| 一区=区操屄高清大全av| 国产免费性爱| 超碰在线观看三级片| 午夜天堂一区人妻| 蜜桃人妻无码AV天堂三区| 久久狠狠干| 五月婷av| 五月亭亭开心网| 天天爽天天日| 九九色热| 粉嫩AV久久一区二区三区| 亚洲综合色婷婷| 五月婷婷五月天| 婷婷五月天成人| 五月婷婷综合在线| 日日爽夜夜爽| 日本黄色一级| 亚洲va久久久噜噜噜久久天堂| 超碰av在| 丁香五月天堂亚洲社区| 丁香六月欧美| 99九九视频| 久久久久8888| www.狠狠| 99成人网站| www.五月激情红色| 日本社区五月天激情| 亚洲久久激情| 538任你爽| 五月天激情小说网| 亚洲字幕AV一区二区三区四区 | 九九九九这里只有精品| 日日操夜夜爽| 亚洲亚洲人成综合网络| 精品99*| 色99超碰| 一起草Av| 天天摸天天爽| 天天干天天射色综合| 久久金品黃色| 九九综合九九| 粉嫩AV久久一区二区三区| 丁香五月婷婷天激情| 九九久久精品國產| 欧美精品999| 婷婷色五月亚洲| 色色哒五月婷婷六月丁香| 婷婷五月激情中文字幕| 思思热精品在线| 欧美槡BBBB槡BBB少妇| 99啪啪骑| 99热99成人| 丁香五月色五月婷婷宗合| 免费亚洲婷婷| 综合久久婷婷| 97sese婷婷| 久久久婷| 激情五月少妇| 婷婷六月丁| 成人AV播放| 五月丁香久久网| 亚洲99视频| 久久艹99| 色色色色色色综合网| 天天操天天曰天天射| 九热在线这里有精品6| 五月天婷婷影院影院观看| 五月婷婷色| www.99操| 99色综合网| 很很干夜夜干| 五月天婷婷色色| 99色.com| 先锋男人99资源| 狼人婷婷久久| 亚洲无AV在线中文字幕| 久久久.COM| 伊人午夜综合色啪| 天天爽天天日| 久久玖玖综合| 久久网思思| 婷婷综合| 日本欧特黄色刺激一区影视久精品无码| 99综合色色色| 欧美性猛交99久久久99| 婷婷狠狠综合网入口| 超碰激情网| 丁香五月天啪啪a日本| 嫩草AV久久伊人妇女超级A | 欧美日本综合网| 婷婷五月天成人| 五月综合激情啪啪啪啪啪| 亚洲综合婷婷| 天天人人人人人人人人人人人| 中文字幕无码人妻少妇免费视频| 丁香婷婷五月天激情四射| 操人妻视频91| 欧美A级成人婬片免费看理论| 五月丁香激情综合网| 五月激情影院| 五月天大香蕉视频| 五月丁香婷婷人体| 久久五月天婷婷| 久久作爱| 激情久久丁香| 丁香五月成人自拍| 操丝袜视频影院导航| 婷婷丁香在线| 欧美性二区| 色五月综合激情| 欧美人人女女精品综合五月天| 色爱终和网| 久久久av久av久片一区二区| 成人精品一区二区三区四区五区 | 5月丁香婷婷| 色五月综合网| 五月丁香综合啪啪| 另类天堂| 先锋五月婷婷丁香草草| 亚洲综合视频网| 九九综合网色全集| 激情五月天小说网| 婷婷五月天丁香激情| 99热精品中文字幕| 日本情色一区二区| 伊人五月综合网| 免费操超碰| 99re这里| 婷婷 丁香 久久| 丁香五月天电影| 哇嘎成人久久| 久久最新色| 在线观看中文字幕亚洲| 色啪影院| 婷婷五月激情网站| 天天干,夜夜爽| 91免费在线视频6| 亚洲乱码日产精品BD| 五月婷无码| 99热热热99精品婷婷| 天天成人综合视频| 日本久碰| 五月婷婷在线视频观看| 六月激情婷婷综合| 乱码操操| 丁香五月婷婷啪| 99久久国产宗和精品1上映| 开心五月婷婷激情网| 999热在线观看视频| 婷婷六月丁香欧美视频在线| 亚洲狠狠婷婷| 9久久精品| 性爱在线播放av| 人妻第九页| 色婷婷丁香五月天在线观看| www.射伊蕉婷婷| 亚洲综合激情五月久久| 丁香五月激情综合在线观看| 岛国AAAV| 五月婷婷|欧美| 天天玩夜夜操天天爽| 无码免费人妻A片AAA毛片西瓜| www,五月天激情| 91日日日| 国产精品色色| 精品A√| 青青草原亚洲天堂| 天天拍天天操| 99热这里只有精品免费观看| 99ri久久| 中文幕无线码中文字蜜桃| 欧美精品熟女一区二区| 精品牛仔裤超碰| 夜精品无码A片一区二区蜜桃| 精品免费99| 色综合久久99色| 国产看真人毛片爱做A片| 国产无套精品一区二区| 狼人久草| 97干在线视频精品店| 亚洲综合视频网| 丁香五月激情六月| 91porn一起草| 色婷婷成人做爰A片免费看网站| 国产综合网在线| 亚洲精品色色| 丁香五月婷婷激情中文| 性爱视频久久| 九九热视| 性爱在线播放av| 丁香五月天婷婷91| 99热精品在线观看| 夜色综合网| 伊人五月人妻精品| 综激情网| 婷婷激情六月中文| 日本色婷婷| 99视频只有精品| 日日日日做夜夜夜夜无码| 欧美毛卡| 丰满少妇猛烈A片免费看观看 | 99乱视频| 中文字幕日韩无码制服诱或| 婷婷丁香亚洲色综合91| 人妻激情久久| 婷婷五月天社区| 婷婷五月色激情欧美激情| 婷婷五月永远18免费久久久| 五月婷婷|欧美| 97碰碰久久| 天天色播| 婷婷黄色| 色五月天成人| www激情网| 日日操夜夜操狠狠操| 色v综合网| www99xxxx五月丁| 国产AV影片| 狠狠干综合| 色婷婷婷婷| 特级西西4444www无码| 国产一区男女| 婷婷五月花免费视频在线| 91色综合网| 97久久久免费福利网址| 1024欧美看片| 免费无码毛片一区二区A片| 人人操av| 99久久激情视频| 色五月天堂| 99.N在线视频| 这里只有精彩视频| 色久五月天| 操射国产日本| 综合六月激情婷婷| 五月丁香六月婷婷中文版| 五月色婷婷亚洲| 色婷婷视频| 婷婷五月香蕉| 青青草色在线视频观看| 午夜丁香综合婷婷| 青青日韩| 五月亭亭欧美女人| 99热官网精品在线| 日本97在线看片| 欧美一级a| 超碰操日| 久久99草五月婷婷| 亚洲传媒在线观看| 99热草草| 亚洲天堂AV综合网| 久久天堂女人| 大香伊人婷婷| 激情综合在线播放| 91九色超碰正在播放| 伊人五月天97| 久久精品五月天| 在线视频另类| 五月天婷婷色在线视频免费观看| 97人人操人人爽| 激情五月,色五月| 人人操Av| 天天日夜夜操五月| 五月天影院| 婷婷天天婷婷天天澡| 99在线观看精品视频| 婷婷五月天av| 九久9精品| 五月丁香六月婷综合成人综合| 97人人射| 色色色色丁香| 色婷婷狠狠久久综合五月| 婷婷五月丁香综合桃花色网| 色婷婷狠狠久久YY| 91美女被操| 可以免费看av网站| 日韩久久这里只有精品| 亚洲另类视频| 中文字幕操比影片| 婷婷丁香五月基地| 台湾无码A片一区二区| 色啪综合| 狠狠久久婷五月综合色| 精品久久久久久久久久久久人妻| 99热久久这里只有精品2010| 欧美成人va| 五月天成人综合| 亚洲精品第一色色色色色色| 超碰人人妻| 国产日韩av片| 99亚洲综合| 午夜婷婷五月天| 99九九热在线观看| 天天干天天拍| 超碰在线资源| 色九九综合| 五月婷婷影视| 99国产精品久久久久久久久久久| 欧美日韩一区二区三区四区| 99精品视频在线观看| 五月婷婷丁香综合,亚洲天堂| 97色热| 色国产五月| 91精品久久久久、久五月天| 另类激情综合| 九九99偷拍视频| 9久久精品| 激情综合六月| 91操熟女| 超碰cap| 午夜色婷婷| 99热这里只有精品最新| 狠狠色综合网| www.玖玖九| 久操大香蕉| 99九九精品视频| 色色性爱视频| 色 噜噜 九月 婷婷| wWwCom夜操wwW| 精品亚洲VA网站| 久热免费| 综合网色综合| www.日日日.com| 婷婷的色色五月天| 亚洲熟妇AV乱码在线观看| 日本97在线视频| 日日日影院| 五月激情在线| 激情五月天色婷婷综合| 丁香五月天殴美激情| 激情综合九月| 成人va在线| ji'qing'luan'ren'lun| 97碰| 欧美男女婷婷| 激情丁香五月激情婷婷| 色五月婷婷色| 色色色色色五月| 激情五月天婷婷视频| 26uuu在线观看| 色婷婷影| 丁香婷婷激情网站| 亚洲精品又粗又大又爽A片| 99激情网| 久久久天天啊| 久久国产成人9999久久久久| 婷婷色五月综合丁香| 九九九九国产| 9精品视频在线| 综合婷婷五月丁香在线观看| 少妇AB又爽又紧无码网站| 狠狠干婷婷| 色色五月天丁香婷婷| 曰本aaaaaa丈片| 婷婷五月中文字幕国产| 色婷婷丁香五月| 久久草大香蕉| 色五月天丁香婷婷| 69人妻人人澡人人爽久久| 婷婷丁香五月天中文字幕| 国产成人网| 99色在线视频观看| www狠狠| 日本在线视频播放91| 亚洲操B| 久草网大香视频| 激情五月天激情综合网| 人妻激情久久| 99热精这里只有精品| 中字幕视频在线永久在线观看免费| 69热在线| 色色网站在线| 婷婷丁香色五月亚洲| 成人精品在线观看| 婷婷性爱影院| 九九黄色网| 超碰成人电影| 91丨九色丨东北熟女| 91一起操| 99热在线只有精品| 欧美天天草人人草| 免费亚洲婷婷| 69堂午夜视频最新地址| 五月激情天| 丁香香五月激情免费视频| 色色五月天激情| 丁香五月婷婷动漫| 国产午夜精品一区二区三区四区| 97久久香草精品视频| http://www.com久久久精品一区| 久热这里只有精品66|