99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

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、色色色| 婷婷综合亚洲| 91操碰| 国产精品国产成人国产三级| 五月综合丁香婷婷| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 99偷拍视频在线日本| 丁香五月婷久久| 欧美色五月天| 婷婷五月天激情视频| 深爱激情网五月天| 久久黄色免费视频| 欧美婷婷六月丁香综合色连续高潮抽搐| 九色综合网| 99综合在线| 丁香六月无码| 六月色色婷婷| 天天操天天操天天操| 97碰碰在线观看视频| 无码免费人妻A片AAA毛片西瓜| www激情| 色色操| 丁香六月成人网| 婷婷五月花| 少妇性按摩无码中文A片| 色人五月婷婷| 欧美综合激情五月丁香| sS丁香五月婷婷| 97色色综合| 色色五月婷婷狠狠| 久久5 9视频免费观看| 超碰99在线观看| 五月天精品| 五月丁香婷婷伊人| 热成人网| 五月丁香婷婷成人网| 亚洲天天免费| 丁香五月综合在线| 久久这里只有精品16| 极品少妇XXXX精品少妇偷拍| 曰曰久久| 99婷婷| 激情五月丁香亭亭 | 91亚洲免费片| 超碰国产AV| 九九色中文| 国产99久| 婷婷伊人五月丁香天堂网| 99久热视频在线| 成人无码精品1区2区3区免费看 | 五月婷婷性| 五月丁香婷婷久久| 亚洲中文乱字字幕线在永久| 玖玖色资源站| 五月婷六月丁| 99热这里只有精品18| 久久精彩视频99| 丁香六月婷婷综合激情欧美| 天堂婷婷五月在线| www.五月天。com| 美女100%露全身无挡网站| 99精品久久| 中文无码婷婷| 久久丝丝热| 99精品自拍视频| 色婷婷五月综合色婷婷| 久久超视频| 99在线观看精品视频| 日本久久爱| 久久五月天婷婷视频| 亚洲欧美婷婷五月色综合| 日本97在线视频| 丁香五月手机在线| 日本人妻A片成人免费看片| 8区视频在线| 丁香五月婷婷啪| 97在线碰| 欧美一区二区三区不卡影视| 超碰操网| 欧美婷婷丁香五月社区| 伊人综合网站| 色色色色色色色色色色色色色97| 六月丁香啪| 亚洲性爱日韩无码| 欧美色图天堂网| 高清无码网址| 欧美婷婷色五月网| 人妻射精AV| 久久最新色色色| 久久五月丁香婷婷| 99 这里只有精品| 插插干干干色| 激情99| 色婷婷电影网| 97色啪| 蜜臀AV在线成人| 五月婷婷中字在线| 婷婷六月激情| 日韩精品在线观看9| 大香蕉狼人久久| 欧美色婷婷| 久久激情五月天| 色情性爱视频网址| 少妇性按摩无码中文A片| 色五月天电影| 五月婷在线观看| 婷婷天堂综合| 99久久五月丁香野外| 婷婷五月天AV| 亚洲激情综合| 婷婷D区| 天天插操| 激情婷婷五六月天| 五月激情综合网| 亚洲欧洲中文日韩久久AV乱码| 新男人天堂人妻| www激情| 天天高潮夜夜爽| 久久女婷| 国产免费AV网站| 色色 9| 综合色五月天| 欧美色色干| www.婷婷,com| 国产成人AV| 久操干| 色婷婷AV五月天| 老司机伊人| 丁香五夜激情四射夜夜夜| 婷婷国产成人| 大香蕉AV在线| 久热伊人| 五月婷婷啪啪啪| 婷婷五月天视频| 婷婷狠狠久久| 丁香五月区| 婷婷影院A成人| 超碰在线精品| 丁香花操逼| 天天网站天天爽| 久久婷婷婷| 涩丁香91| 精品久久久人妻| 天堂伊人干| 亚洲精品电影| 日本九婷婷| www.婷婷五月天| 日本一級黃色一級片| 九九激情综合| 九九99精品| 九九综合伊人| 五月丁香啪啪啪| 激情五月最新网址| 激情视频网址| 97色啪| 亚洲色色图片| 午夜不卡久久精品无码免费| 久久在这里有精品| AV九九| 午夜成人综合| 9精品在线| 久色大香蕉| 久久网思思| 五月婷婷基地| 大香蕉五月天| 99在线精品免费视频| www.婷婷六月天| 色婷婷狠狠干| 五月天久久小说| 五月丁香六月香综合激情| 99无码视频| 一起操最新网址| 手机AVAV天堂看网| 思思久久精品视频| 99在线视频资源| 久超超碰| 亚洲乱码日产精品BD在线观看| 五月婷婷激情四季| 亚洲成人日韩无码精品| 超碰色色综合| 日本美女五月天| 丁香六月色婷婷| 五月丁香婷婷色色色| 天天色视频| 国产亚洲成人综合| 欧美经典片免费观看大全| 激情综合五| 狠狠操狠狠插| 久久久久久久久久91| 久久五月丁香伊人青草| 五月情婷婷| 99亚洲无码| 婷丁香五月天| 开心五月深爱五月| 激情涩涩网| 亚洲色图五月丁香| 人人九色| 亚洲性爱干干| 国产SUV精品一区二区883| 五月婷婷啪啪啪| 色婷婷av在线| 国产一区二区三区影院| 激情综合五月| 九色视频这里只有精品| 玖玖爱综合网| 九九热99精品| 92久久精品一区二区| 丁香五月天在线观看| 五月丁香色| 精品国产乱码久久久久久免费| 激情婷婷综合五月少妇| 五月天激情小说婷婷| 九九精品免费视频99| 99性色| 色在线免费观看| 成年人丁香五月| 粉嫩av蜜桃av蜜臀av| 色五月婷婷五月天| 久久在线人妻| 超碰色女| 日韩av一区二区在线/日产精品久久久 | 夜夜操夜夜姧| 六月婷婷视频| 亚洲综合色婷婷文学| 9l视频自拍9l九色成人| 丁香五月婷婷AV在线| 久久婷婷五月国产色综合激情| 亚洲视频一区| www狠狠| 67194中文字幕| 五月婷婷精品视频| 91|九色|动漫| 欧美熟女视频 色婷婷| 婷婷五月天小说| 99热精品在线观看| 婷婷香五月天| 九九AV| 久久这里只| EEUSS鲁片一区二区三区| 狠狠爱婷婷| 一级黄在线| 色播五月婷婷五月| 日韩黄黄| 日本久久99| 色欲久久99精品久久久久久| 五月天婷婷综合| 婷婷噜噜| 99视频这里只有久久精品| 日本熟妇精品99| 碰99在线| 26uuu另类亚洲欧美日本一| 婷婷影院A成人| 婷婷五月天激情电影| 五月网在线| 另类视频综合| 9久热这里只有精品| 啪啪婷婷五月天激情| 婷婷91| www.99成人视频| 六月婷婷激情图片| 4399人妻无码久久久| 色吊操色妞| 少妇熟女视频一区二区三区| 欧美日本免费一道免费视频 | 天天摸天天日天天舔| 操99| 亚洲色色香蕉| 亚洲综合婷婷五月天| 婷婷丁香五月麻豆| 日韩操逼大片| 99久久婷婷| 久久婷婷五月综合伊人| www激情五月天| 婷婷色五月天综合网| mmm1717.6dbm人人爱人人操| 五月婷婷之六月丁香| 夜夜骑操AV| 婷婷在线播放av| WWW,色五月| 91狠狠色丁香婷婷综合久久| 婷婷丁香五另类网站| VA国产在线综合网站| 亚洲色欲欧美一区二区三区| 终合激情网| 丁香五月婷婷啪| 亚洲成人网站在线播放| 久久激情天堂| www999日韩精品| 国精产品一区二区三区| 色综合色婷色基地| 亚洲无码yw| 97ai婷婷| 玖玖婷婷视频| 99资源在线视频| 天天狠狠插| 欧日美女Va| 久9精品视频| 人人草成人视频| 婷婷五月天,影院| 俺去也在线官网| 激情丁香五月天图片| 超碰不卡在线| 玖玖综合色| 九九精品网| 婷婷激情六月天视频| 丁香六月综合| 激情综合青草| 天天色官网| 色婷婷精品视频在线播放| 婷婷激情五月天小说| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 亚洲男女激情| 99九九在线精品热动漫| 思思热视频在线观看| 最新色色五月天| 日本成人噜噜噜| 天天色天天爱天天爱天天爱y| 九九99一区| 天天操比比| 日本狠狠色| 五月天激情AV| 99年操人人爽| 久热这里只有精品性色AV| 99热这里只是精品| 精品三区影院| 日韩黄色电影| 婷婷五月丁香超碰| 这里只有精品视频在线| 99热传媒| 91大神操美女| 婷婷五月丁香五月| 天天操天天操天天操天天操天天操天天操| 久久婷五月天| 亚洲婷婷视频| 美女激情综合| 九九性爱网| 丁香六月婷婷缴情欧美| 99亚洲大片精品永久在线观看 | 天天影视色综合网| 热99精品视频五月| 国产亚洲成AV人片在线观黄桃| WWW.久久.COM| 五月激情综合网| 色色99色色| 开心五月激情站| 婷婷五月丁香六月| 1010日日无码| 亚洲色视频| 免费视频WWW在线观看网站| 综合另类激情| 九九热这里只有精品7| 伊人超碰| 色五月丁香婷婷综合| 狠狠干天天日| 婷色天堂| 久9热在线视频| 丁香五月天av| 成年人丁香五月| 色播综合| 五月婷婷久久爱| 九九热在线精品视频| 日韩欧洲亚洲| 六月丁香五月亭亭| 亚洲av网站| 久久探花91swag| 91丨九色丨白浆秘| 色人久夂| 久久人人妻| 月丁香久久久| 黄色AAAAA| 丁香五月婷婷操逼| 天天操天天操天天操天天操天天操 | 综合激情五月天六月婷免费视频| 色狠狠狠干| 天天操电影院色狼性av| 极品人妻VIDEOSSS人妻| 五月综合色| 欧美69色| 开心五月激情五月丁香五月婷婷| 丁香婷婷成年| 五月丁香爱婷婷深深| 啪啪91| 黄急一级视频| 亚洲激情四射| 99热在线精品播放| 天堂网色色| 丁香五月婷婷激情视频播放| 激情婷婷六月天| 思思久久99热只有频精品66| 大香蕉久艹| 五月婷婷免费看| 丁香五月激情婷婷| 天天做天天爱天天搞| 激情五月小说婷婷| 色综合婷婷99| 中文av网| 97色欧美| 大香蕉婷婷五月天| 色天天狠狠干| 五月亚洲激情| 丁香五月婷婷啪啪| 人人妻人人澡| 精品久久艹| 婷婷丁香六月| 色玖玖综合| 婷婷色五月天色| 色999;丁香五月| 99热欧| 一区二区你懂的| 超碰九九热| 色啪综合| 久久久9久| 亚洲六月婷婷| 亚洲免费电影2| 久久久久久久人妻| mmm1717.6dbm人人爱人人操| 99综合免费视频| 91成人看片| 日本五月天网站| 亚韩精品视频1区| 桃色激情网| 婷婷四月 成人 狠狠干| 91人人爽狠狠狠| 亚洲 视频 导航 一区| 激情五月天偷拍综合网| 五月婷婷深深爱| 成人网址在线观看| 中文无码婷婷| 国产激情综合五月久久| 这里只有精品视频222| 99亚州综合精品成人网| 婷婷色色狠狠| 91精品激情9| 99热在线观看这里只有精品| 丁香五月天久久| AV性爱在线| 天天狠狠插| 91婷婷色| 91天堂网综合| 国产操B视频| 婷婷狠狠干| 婷婷九月在线| 狠狠做深爱婷婷久久综合一区| 色综合夜夜| 五月综合久久| 99色免费| 激情文学 综合 九月| 五月丁香久久| 99ri精品| 伊人99热| 色五月婷婷网| 色色色图| 丁香婷婷视频一区二区| 久色五月婷婷综合| www.色色com| 色五月丁香总合网| 五月丁香A∨在线| 久久WW| 五月丁香婷婷成人版| 97色女人在线| 五月丁香久久久| 天天天天干| 人人97操| 大香蕉人妻| 欧美激情五月天在线观看| 大香蕉啪啪啪| 丁香婷婷五月天在线视频| 五月丁香色| 欧美丰满熟妇BBB久久久| 六月丁香社区| 丁香六月婷婷激情综合| 天天综合精品| 五月在线| 五月丁香六月婷婷中文版| 岛囯综合激情网| 五月婷婷黄色| 婷婷99视频在线| 九九碰九九爱97| 91色久| 精品婷婷| 欧美99热| 婷婷五月天亚洲图片| 色综合色色色色| 丁香五月激情综合| 夜夜爽天天爽| 另类图片激情五月天| 17.c黄色| 婷婷中文字暮| 99久精品视频| 黄网免费观看| 亚洲成人高清在线| 色日本五月天| 色香蕉精品五夜婷| 精品国产va久久久久久久| 美女婷婷六月色| 亚洲九九九九| 成人午夜免费电影| 在线一起草av| 五月丁香无码| 噜噜久| 激情五月激情综合网一级丸片| 91丨九色丨国产在线| 五月天婷婷综合色| 亚洲中文字幕在线电影| 丁香九月综合激情| 国产avapp 网| 五月天亭亭俺也| 99re热精品在线视频| 九九九九九九热| 色五月激情网| 五月丁香啪啪| 亚城区在线| 91精品熟女| 色玖玖综合网| 色婷婷五月天成人网| 欧美69久成人做爰视频| 久久九九99| 日本在线视频www色| 激情五月天无人视频在线| 五月婷无码| 激情综合网激情五月欧美| 色五月久久成人婷婷| 激情五月www| 99亚洲色| 男女啪啪做爰高潮无遮挡 | 激情丁香五月天| av九九| 久9久9久9久9久9久9| 狠狠色噜噜狠| 亚洲综合一区二区| 丁香 久久| 色色无码日韩| 五月天综合网| 婷婷六月偷拍| 色综合色综合网| 99热网精品| 激情婷婷丁香| 天天做天天视天天谢| 五区毛片七区毛片| 婷婷六月丁香综合| 久久这里面只有精品视频| 九九色婷| 九九色婷婷Av| 人人操人人添人人摸97| 青青久在线视频免费观看| 九九综合色| 超碰二区| 婷婷狠狠五月综合| 99ER热精品视频| 五月婷婷六月丁香| 伊人99热| 国产精产国品一二三在观看| 九月丁香婷婷基地| 婷婷六月丁综合| 成人精品视频99在线观看免费| 九九香蕉网| 亚州色色色| 99热这里只有精品9| 色五月激情网| 七月丁香婷婷 色色| 丁香五月影院| 九色视频九色九色91jiuseshipin| 清纯唯美 激情四射| www五月婷婷88导航| 人人爽欧美婷婷久久久五月丁香| 天天爽天天日人人爱| 一根材五月婷成人| www.五月天| 国产免费av在线| 亚洲天堂色色| 五月天婷婷色| 香蕉久久国产AV一区二区| 超碰精品在线| 噼里啪啦完整版中文在线观看| 色欲一二三| 大香蕉五月婷婷| 色色九九五月天| 墨西哥毛片内射精| 五月天婷婷在线播放免费| seuuu婷婷| 婷婷天天综合| 色婷婷AV在线观看| 亚洲av骚货| 五月丁香六月色| 91porn一起草| 91精品综合久久婷婷九色| 丁香五月伊人| 99热9999| 怡红院99| 99热这里只有精品 搜| 色五月丁香激情视频| 六月天六月婷| 中文av网| 国产又黄又爽又激情不遮挡视频在线观看| 激情丁香五月综合| 五月丁香激情四射综合| 中出内射的人妻视频| 亚洲一区二区无遮挡A片| 色综合久久99色| 久热AⅤ| 26uuu| 五月婷精品| 另类天堂| 亚洲色婷婷激情| 国产精品日日躁夜夜躁| 亚洲操B视频| 五月六月丁香激情视频| 久热中文字幕在线线观看| 欧美这里只有精品| 农村熟妇高潮精品A片| 婷婷激情五月综合丁| 草AV9999| www。五月天激情| 女人天堂AV| 色情婷婷久久五月天| 超碰久热| 久久之人妻| 欧美色五月天| 中文字幕AV在线| 色爱综合网| 337久久| 婷婷激情综合网| 五月婷婷综合潮喷| 亚洲V国产V欧美V久久久久久| 九月婷婷激情| 婷五月天在线草| 亚洲无码成人| 操逼国产91| 五月丁香亭亭天天舔| 深爱五月激情| 性做爰A片免费视频A片直播| 成人五月丁香社区| 色约约视频一区二区三区四区五区| 伍月婷丁香婷| 婷婷午夜精品久久久| 精品亚洲国产成AV人片传媒| 99热超碰在线| 亚洲AV网址| 丁香五月 无码| 色爱综合视频| 深爱综合网| 综合激情五月婷婷| 播五月丁香三月婷婷| 欧美激情综合色综合啪啪五月| 久久婷婷五月综合成人d啪| 欧美VA在线观看| 99国产精品白浆在线观看免费| 五月丁香网视频| 91狠狠色色丁香婷婷综合久久| 国产黄大片在线观看画质优化 | 十二区无码| 综合99视频| AA片在线观看视频在线播放| 潮汕成人AV片在线| 538午夜激情| 九九精品热播| 色婷在线视频| www.99热这里只有精品| 99激情| 人妻aV在线| 婷婷综合六月| 99在线免费观看| 久碰视频| 九久9精品| 丁香五月最新地址| 激情五月天啪啪| 97欧美在线| 亚洲成人网站在线播放| 色色色五月婷| 日本天堂免费99| 亚洲色婷婷五月天| 99热在线免费| 五月婷中文娱乐综合| 五月婷婷婷婷婷婷艺术| 怎么样可以看免费的一级av| anquye五月| 色婷婷五月天av在线| 99久久久国产精品免费蜜乳tv| 久久五月天激情| 热的无码综合视频| 任我肏视频精品| 天天操天天曰| 日本一级一片免费视频| 欧美日朝成人| 久久99jiu9| 99热这里有精品24| 欧美精品中文字幕亚洲专区| 五月综合婷婷久久在线| 天天色综网| 99热这里只有免费精品| 婷婷五月丁香欧洲| 婷婷俺去也| 五月丁香啪| 大香蕉院线| 不卡的AV网站| 五月天激情综合| 大香蕉太香蕉视频97| 99免费热视频在线| 免费黄色视频网址| www.99热国产| 亚洲va国产va天堂va综合va| www,色综合| 99色热| 九九成人精品| 欧美日本高清视频99| 免费观看亚洲AV片| 六月丁香深深爱| 五月色丁香婷婷综合| 丁香五月婷婷五月| 久久99免费视屏| 久热伊人91| se影音资源在线观看| 亚洲激情五月| 天堂A∨在线| 五月天无码视屏播放| 69凹凸成人综合网| 九九热re99re6在线精品| 99热免费精品热久久66| 日本性视频| 国产成人av在线播放| 狠狠色婷婷777| 婷婷丁香五月天综合在线日韩| 天堂综合久| 乱女乱妇熟女熟妇综合网站| WWW.久久99| 婷婷亚洲综合| 色婷丨日丨天丨综合久久| 婷婷综合在线播放| 96自拍视频九色在线观看| 综合网视频| 亚洲99激情| 亚洲色五月婷婷| 九九热视频在线观看| 国产精品VA在线| 99热婷婷| 丁香香蕉婷婷| 中文字幕按摩做爰| 91九色视频| 成人视频婷婷| 婷婷成人综合免费视频| 九九干视频| 五月婷婷激情| 色综合九九色综合88| 99热欧美| 九热视频精品| 嫩草AV久久伊人妇女超级A| 天天操中文字幕| 五月婷婷婷婷婷| 色综合久久99色| 激情五月丁香激情综合网 | 五月开心婷婷中文字幕| 久久婷婷六月综合综合| 丁香五月人妻| 超碰日日操| 色播激情五月天| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 五月婷婷伊人网| 99九九在线观看免费| 亚洲视频另类| 国产乱妇无乱码大黄AA片| 日韩黄黄| 天天摸人人摸| 国产精品久久久丁香五月八戒视频| 久9无码视频| 超碰精品国产首页| 日韩人妻在线播放| 牛色色碰| 国产精品久久久久久久久久| 99ri精品在线| 性综合网| 丁香五月激情视频| 婷婷五月精品在线| 五月天无码视屏播放| 无码色色色色色| 五月丁香六月婷婷啪啪| 九九99香蕉在线视频播放| 九九精品re免费视频| 9色资源在线| 九月丁香八月婷婷加勒比| 欧美日韩欧美| 色婷婷小说| 亚洲综合五月天婷婷丁香| 久热这里只有精品99re| 亚洲av网站| 97色色色色色| 可以看的AV| 色色激情五月天| 日韩成人av在线| 91久久1118| 精品人妻一区| 久色网| 天天日天天爽| 激情五月婷婷综合| 深夜男女福利刺激影院一区| 九九热欧美| 色色婷婷五月天| 久久婷婷六月综合| 五月天伊人| www99热| 一本道在线电影| 中文字幕丰满孑伦无码专区| 日本人妻伦在线中文字幕| 人妻丰满精品一区二区A片| 国产,欧美,学生妹,视频| 亚洲网综合在线| 日本91在线播放| 激情国产五月| 91在线观看www| 久久久久8888| 丁香六月在线| 六月色婷婷| 4438亚洲欧美| 青青草视频免费观看| 亚洲中文字幕AV在线| 人妻体体内射精一区二区 | 操操操av| 五月激情丁香六月狠狠干| 亚洲狠狠狠色婷婷综合激情久久久| 这里只有国产精品在线| 色婷婷狠狠干芒果TV| 五月婷婷福利| 激情综合五月天| 婷婷成人五月天成人文学| 国产午夜精品一区二区三区嫩草| 久久大国产香蕉| 亚洲99在线| 亚洲色五月| 婷婷五月天六月综合| 开心五月深爱五月丁香五月激情五月 | 亚洲婷婷丁香五月在线| 嫩BBB槡BBBB搡BBBB视频| 成人视频婷婷| 婷婷九九| 九九在线热九九在线热99热| 五月天另类小说久久小说网| 91在线日本| 久久精品爱爱| 激情五月天www| 天天操婷婷| 成人无码精品1区2区3区免费看| 天天操天天插天天射| 天堂中文国产| 色婷婷最爱五月| 五月丁香伊人网| 色五月大| 亚洲乱码日产精品BD| 综合亚洲AV| 婷婷的激情五月| 九九热最新| 欧美性做爰大片免费看办公室| 五月色激情综合网| se99高清无码| 激情五月丁香六月综合AVXXXX| 99热综合| 婷婷五月色色| 五月天激情综合在线| 五月天色官网| 婷婷精品在线| 国产精品人人做人人爽人人添| 五月婷婷丁香网| 99rewww| 色五月五月天色婷婷色五月| 一级操逼大片| 丁香五月大香蕉| 九九这里都是精品| 99精品视频在线观看| 婷婷五月色图| 五月婷婷丁香五月婷婷| 99久久精| 欧美五月婷婷| 日日夜夜干| 任你日热视频| 婷婷激情区| 婷婷天堂综合| 丁香五月久久社区| 五月天婷婷在线观看精品男人| 丁香五月成人| 涩丁香| 婷婷,五月天,丁香,第一| 婷婷四色五月| 色色日本| 9久热精品在线视频| 91久久久久久久久18| 99在线精品在线视频| 欧美大片免费播放器| 91尤物九色在线| www天天爽| 国产精品久久久久久久久久免费| 色综合久久天天综合网| www激情| 丁香五月婷婷免费视频| 五月丁香六月色婷| 六月合五月婷| 色婷婷91激情小说| 九九热在线观看视频网站| 激情六月综合| 久久婷婷五月天蜜桃| 婷婷 色 丁香 夜| 狠狠色综合图片| 五月综合亚洲| 天天插天天插| 激情婷婷五月女| 欧美日韩一区二区三区四区| 182TV亚洲| 天天在线XXX| 色吊丝av中文字幕| 99re热免费观看视频精品| 变态 另类 在线| 亚洲激情亚洲激情 | 99爱视频| 久草五月婷| 婷婷五月天99| XX色综合| 色狠狠六月| 国产乱子轮XXX农村| 欧美群妇大交乱婬网| 欧美人妻一区二区| www.99视频| 日本99视频| 五月婷亚洲精品AV天堂| 日日噜噜夜夜狠狠久久丁香六月| 激情五月色婷婷| 91九色中文| 久久久精品99| 五月丁香影院| 中美月韩免费A片| 91视频精品99| 大香蕉婷婷丁香视频在线| AV五月丁香| 久99久视频| 五月成人网站| 五月丁香直播| 五月丁香六月片| 人妻尝试久久久久久久久久久久| 99热只有这里才是精品| 国模狼狼| 婷婷性爱五月天| 久热亚洲| 夜夜夜夜夜骑撸| 国产三级片91| 日本99热| 开心五月丁香综合久久| 在线中文AV| 丁香五月激情五月开心五月| 岛国操B不卡在线| 五月丁香影院| 九九久久综合| 99精品久久| 五月丁香六月合| 免费观看日韩成人av| 思思热精品在线视频| 欧美啪啪9| 五月天婷婷色| 最新精品视频99| 久久九九婷婷| 超碰三级片| 99re在线视频精品,这里只有精品18,| 99热伊人| 婷婷久久综合| 人操人| 五月天播播中文字幕| 九七色色六月丁香| 丁香婷婷情色五月天| 久碰久操| 国产精品久久久久久久久久免费| 精品乱码视频| 精品少妇人妻AV无码专区偷人 | 成人做爰A片免费看视频| 婷婷激情丁五月| www.久久久久久久久久久| 97人人做| 天天婷婷天天| 久久婷婷综合色丁香| 国产26uuu| 久婷婷五月激情| 啪啪视频99| 黄网在线播放| 操操操av| 丁香五月综合无码趴趴| 热99这就是精品视频| 五月丁香六月欧美| 色哟哟www| 亚洲精品字幕| 97色天堂| 天天做天天爱天天爽夜夜揉| 99热精品在线观看| 99热99热在线| 丁香九月综合| 亚洲春色奇米影视| 婷婷五月丁香手机在线视频| 婷婷在线免费| 91人人人人人人人| 激情五月六月婷婷| 舔色婷婷| 干婷婷五月天| 日韩超碰在线| 超碰91在线| 五月婷婷色播| 亚洲人妻一区二区| 亚洲精品电影| www久久久久久| 极品人妻VIDEOSSS人妻| 免费播放片大片| 噜综合| 丁香婷婷婷五月综合色情| 亚洲久久激情| 激情五月综合| 色狠狠色噜噜噜a天堂一区| 亚洲天堂久久| 99日视频在线| 大香蕉手机视频| 欧美色频| 思思99热这里只有精品6| www.久久久久久久| 色婷婷性爱| 色狠狠色噜噜AV天堂五区| 日本婷久久| 五月婷六月丁香| 婷婷五月综合婷婷| 性色av大香综合| 激情五月四色| 免费无码毛片一区二区A片| 免费97碰碰| 另类综合婷婷五月天欧美视频| 色色色综合视频| 婷婷综合精品| 97在线日本| 51精品国内探花| 狠狠狠激情网| 色婷婷五月天中文字幕| 久人操| 99超级超级超级碰| 香蕉久久国产AV一区二区| 女同激情久久av久久| 久久久久er热| site:feetmall.com| 五月天 综合 在线| 丁香六月啪| 国产亚洲99久久| 色综合播放| 一级片操逼视频| 亚洲免费看片| 五月丁香久久| 欧美在线视频99| 怡红院视频| 九九九九国产| 色婷婷五月色| 黄网免费看| 超碰99热精品| 99热碰碰| 99热免费| 色色无码| 色99视频| 五月天激情小说网| 精品久久这里热66| 久久人人妻| 婷婷激情五月天在线| xxx日本东京热| 无码激情精品色婷婷久久久久| 丁香久色| 色婷婷电影| 久久久久9| 五月婷在线观看| 色噜噜婷婷| 五月色综合| 99视频这里只有免费精品| 亚洲精品欧洲精品| eeuus五月婷| 久久激情综合| 人妻尝试久久久久久久久久久久| 99热精品一区| 天天擼久久擼在线| 夜夜夜夜夜操| 日日干日日| 9久热免费视频99| 婷婷午夜丁香| AV九九| 激情网五月| 成人做爰高潮A片免费视频| 免费视频WWW在线观看网站| 久热在线中文字幕色999舞 | 性色视频| 丁香五月婷老师| www.婷婷五月天| 色婷婷导航| 五月婷婷综合在线| 国产99热| 99热在线观看| 国产99久| 五月婷婷偷拍| 日本激情ⅩXX免费视频| 26uuu国产精品| 日韩1区2区| 999热在线视频| 91超级碰碰碰| 色情激情五月婷婷| 手机旧版看人妻1025| 亚洲精品视频在线播放| 日韩成人电影AV| 五月综合激情图片| 色五月综合激情| 婷婷97碰碰| 99热精品在线| 九九99久久精品| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 五月丁香激情片| 亚洲六月婷| 99精品免费| 99精在线| av在线免费播放观看| 日本乱论99| 成人五月天婷婷| 日日噜狠狠色| 天天日夜夜| 欧美性爱五月天| 丁香六月综合| 粉嫩av蜜桃av蜜臀av| 亚洲五月丁| A在线观看| 成人无码髙潮喷水A片| 97精品人人A片免费看| 婷婷综合九月| 激情网五夜婷婷| 久久人妻视步| 天天舔天天爽| 在线一起草av| 婷婷伊人中文字幕| 伊人婷婷五月天av| 婷婷五月电影院| 大香蕉在九| 97人人看| 五月丁香青草综合啪啪| 久综合| 成人无码免费一区二区中文| 91色在线| 国产淫熟妇| 色综合区| 九色婷婷| 婷婷 丁香 久久| 就爱啪啪婷婷| 激情六月天婷婷| 内射爽无广熟女亚洲| av免费在线网站| 五月天婷婷久色| 久久色五月| 九九成人电影婷婷| 五月婷在线| 夜夜爱网站| 99久在线精品99re8热| 婷婷五月天丁香激情| 狠狠擼综合| 五月丁香六月婷婷亚洲综合| 婷婷丁香六月天| 五月丁香六月婷婷成人| 呦呦视频无码播放| 五月天综合婷婷| 亚洲热久| 五月天黄色激情小说| 很很干天天干| av免费在线网站| 蜜乳国产网站| 人人摸人人| 国精产品一区二区三区| 四五月婷婷| 天天综合在线网| 玖玖99免费视频| 五月丁香六月婷婷综合网缴情| 超碰av在线| 伊人狠狠丁香婷婷综合尤物| 这里精品| 色色亚洲五月天| 天天干天天曰天天射| 色区域网站视频| 超碰只有精品在线| 开心婷婷五月激情网小说 | www.五月激情.com| 大香蕉啪啪网| 国产色网站| 色婷婷六月| 99热人人操人人操| 色婷婷88| 精品无吗va视频免费观看| W色综合| 色五月婷婷丁香国产在线| 久久99久久99精品免视看婷婷| 99热久97| 五月天婷婷激情综合| 操操综合网婷婷| 99色激| 亚洲精品大片| 激情综合色网| 国产成人av在线播放| 日本久草福利| 日撸夜撸日操| 高清资源站日A美A欧亚…| 亚洲激情无码久久| 激情五月激情综合网| 国产精品久久久99视频| 99综合网| 99热只有精品在线播放| 俺去也五月| 狠狠操.com| 丁香五月天之婷婷影院| www.韩日视频| 色色 9| 亚洲综合色婷婷文学| 色五月婷婷色五月| 超碰成人在线免费观看| 丁香五月婷婷乱| 丁香五月天天久久综合小说| 九九一综合精品| 亚洲欧洲美女在线观| 久久人妻在线| 另类婷婷五月天啪帕帕| 天天摸天天日天天舔| 激情五月丁香激情综合网 | 综合大香蕉| 色色色色色五月丁香| 日本99在线视频| 99九九在线观看免费| 在线成人网站| 亚洲网站在线鸭子av| Av大香蕉| 色色色在线免费视频| 色偷偷AV亚洲男人的天堂| 中文字幕簧片| 久久人人添人人爽添人人片αV| 久色五月| 婷婷五月天大香蕉| www.97碰碰com| 丁香六月婷婷综合| CHINESE熟女老女人HD视频| www.色窝| 九九久久污| 五月天狠狠色| 婷婷五月激情综合啪啪| 色爱综合网| 色情综合| 超碰人妻公开在线| 五月天婷婷婷| 国产在线黄色| www.99视频| 三区激情四射av| 91嫩草国产线观看亚洲一区二区| ji'qing'luan'ren'lun| 微拍92| 五月丁香婷婷婷激情爱爱| 亚洲VA欧美VA| 色逼综合网| 日本系列_4页_777FP| 丁香九月综合| 丁香激情五月天| 婷婷色五月色| 99操久久| 丁香五月性| 战争与艾拉电影免费观看| 免费啪啪亚州视频| 疯狂做受XXXX高潮A片| 亚洲bt丁香五月天婷婷激情小说| 国产亚洲99久久| 99热思思| 狠狠狠狠狠狠狠狠狠狠狠色宗合图片| 99国产97在线,| 99激情视频| 婷婷综合色播网| 亚洲AV网站|