欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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
返回資訊列表
亚洲色婷婷五月| 六月五月久久丁香| 狠狠88综合久久久久噜噜噜| 久久九九大香蕉电院| 婷婷国产日本欧美| 婷婷丁香五月综合网上| 91精品婷婷国产综合久久| 超碰99热精品| 五月婷婷啪啪| 国产精品岛国片在线观看免费| 色激情五月| 久久女人天堂| 6080av| 性生活久久朋友人妻| www,色色色网站| 丰满人妻一区二区三区| 欧美激情综合| 婷婷五月丁香色综合| 激情久久五月天| 天天婷婷综合| 丁香婷婷六月男男| 亚洲妇女熟BBW| 丁香婷婷五月人体| 妻久久久久| 天天谢天天操| 激情综合五月婷婷| 亚洲电影中文字幕| 99色综合网| 求可以看的AV网址| 色综合久久天天综合网| 91色呦哟| 久久综合婷婷| 俺去也在线www色官网| 婷婷狠狠操| 99精品热| 97碰碰视频| 六月婷婷久久| 久久激情五月网| 日本高清久| 香蕉AV777XXX色综合一区| 精品视频网| 丁香五月激情六月欧亚激情综合导航| 深爱激情六月天| 欧美精品99久久久| 欧美熟妇一区二区三区| 天天艹夜夜爽| 香蕉久久国产AV一区二区| 丁香五月综合狠狠| wWw色五月| 五月丁香六月婷婷手机无线| 另类小说色婷婷| 99国产97在线,| 狠狠干综合| 五月天激情视频网站| 天天综合 99久久婷婷| 欧亚成人A片一区二区| 综合www色| 激情五婷精品网在线观看网址| 五月天,激情四射,婷婷频道| 欧美成人一区二区三区在线视频| 久9视频免费播放| 亚洲婷婷六月天| 欧美精品啪啪| 欧美操我| 综合五月丁香六月婷婷| 激情五月婷婷| 五月丁香激情综合啪| 精品人妻伦一二三区久久| 99re6在线视频精品免费| 26UUU欧美激情一区二区| 婷婷五月天少妇| 久久五月激情| 婷婷五月综合啪| 六月五月丁香五月欧美| 97碰碰在线观看视频| 香蕉AV777XXX色综合一区| 99成人| 精品导航在线x不卡| 丁香六月av| 婷婷激情在线| 青青草99热久久精品国| 五月丁香777| 色五月激情五月| 91蜜桃婷婷狠狠久久综合9色| 亚洲丁香婷婷丁香五月天激情| 欧美顶级少妇做爰HD| 国产亚洲色婷婷久久99精品91| 激情五月天影院| 操人妻AV| 丁香五月天无码| 26uuu成人网| 6 9式性爱视频在线播放| 千人斩操逼| 深爱开心激情| 久久性爱视频| 久久色情| 婷婷六月色| 97碰碰视频| 中文婷婷狠狠| 四色综合网| 韩国三级五月天婷婷。| 丁香狠狠色婷婷久久无码视频| 开心 五月 综合| 91色在线/日韩| 久久人操-久草婷婷-成人AV| 久久久精品色| 伊人久热91网| 天天日天天摸| 亚洲色综久久五月| 婷婷激情性爱| 色婷婷狠狠| 97九色| 大香蕉啪啪| 丁香五月天亚洲视频| www.一起草av| 日日爽夜夜爽| www.99热这里精品| 中文字幕丰满人妻无码专区| 五月激情婷婷综合| 五月天综合网| site:jszngf.com| 91九色在线| 丁香五月香蕉在线| 久久婷婷五月综合| 日本熟妇人妻在线| 婷婷色色网站| 青青福利网| 色色婷婷综合| 天天五月天综合网址| 午夜激情久久| 久草狼人| 99综合| 99热在线精品观看| 啪啪五月天啪啪| 国产av一区二区三区| 丁香五月大片| 超碰五月婷婷五月天| 久色资源网| 丁香婷婷五月天成人| 天天日夜夜帕| 亭亭色网| 五月婷婷丁香六月| 综合久久六月| 婷婷97碰碰| 色色色欧美| 91操人| 99这里都是精品| 丁香香五月激情免费视频| 激情五月天色色| 欧美婷婷五月激情| 91/九色黑人| 五月叮香啪| 中文字幕激情综合| 久久婷婷视频| 拳交大逼| 久久9视频| 99精彩视频| 婷婷五月天亚洲激情戏精品| 综合久久8| 第四色大香蕉| 国内婷婷丁香社区在线播放| 色婷婷狠狠久久综合五月| 怡红院视频| www.99热在线| 亚洲综合在线视频| 天天情色综合网| 婷婷久久精品| 国产亚洲成AV人片在线观黄桃| 五月婷深深爱激情网| 丁香六月天婷婷| 噜噜色com| 六月丁香成人| 九色婷婷| 国产丁香五月天婷婷| 亚洲黄网AV| 天天做天天爱天天爽综合网| 丁香六月色婷婷| 色色射| 中文字幕永久免费| 久爱综合| 九热视频| 色色综合色| 99热播放| 九九精品9| 玖玖资源站中文| 五月天综合网| 99成人免费视频| 色色丁香五月| 亚洲欧洲中文日韩久久AV乱码| 伊人久久丁香婷婷六月五月综合| 久99视频在线观看| 99热这里只有精| 无人精品在线视频| 色亚洲视频| 色婷婷亚洲在线观看| 色色色色色综合| 激情九九这里只有精品| 日韩人妻在线观看| 97碰碰草| 亚洲视频一区| 在线色色| 色偷偷五月天| 五月天激情.com| 丁香蜜臀黄色婷婷五月天| 性无码专区无码| 日本狠狠色| 精品色情一区二区三区四区| 亚洲性视频| 色一情一乱一伦一区二区三区| 久久美女五月天| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 人人视频色| 欧美五月婷婷| 丁香六月婷婷久久亚洲天堂| 婷婷六月丁| 丁香婷婷色五月合集| 天天综合网91| 丁香五月婷婷婷桃花影院| 九月婷婷久久| 67194成I人在线观看线路1| 欧洲高清免费久久| 开心五月天私房婷婷| 9热在线视频精品| 一本大道嫩草AV无码专区| av在线免费网站 | 性做久久久久久久免费看| 看国产探花操逼三级片| 五月激情开心婷婷| 五月网激情| 玖玖婷婷色| 婷婷久综合| 思思热在线播放| 色婷婷综合视频| 五月丁香拍拍激情综合| 婷婷综合欧美| 99色综合网| 午夜福利8055| 婷婷五月天渟渟| 夜夜穞天天穞狠狠穞AV美女按摩| 五月激情影视| 五月丁香狠狠爱| www.五月天| 日日日影院| 国产色婷婷亚洲| 色人久久| 综合五月丁香97| 欧美A片在线视频免费观看| 综合色99| 国产免费一区二区在线A片视频| 人妻aV在线| 久久婷婷成人综合色怡春院| 久久性爱视频这里只有精品| 丁香五月激情性色郤| 天天草婷婷五月| 开心婷婷五月天综合| 99亚洲视频| 激情丁香五月综合| 亚洲AV成人无码电影| 婷婷五月天av小说| AV亚洲在线| 91紱請| 亚洲AV免费在线| 91九色网| 另类小说五月天| 综合大香蕉| 综合久久高清| 日日夜夜干| 五月丁香六月综合激情网| 婷婷激情综合无月| 婷婷五月AA五月在线| 華人性愛AV在線| 午夜天堂啪啪| 涩综合网| 九色91国产| 91色九| 97性视频| 91久久久久久| wuyuedingxiang99| 婷婷色播六月无码| 26uuu欧美亚洲日韩| 五月婷婷香蕉| 牛牛碰免费| 超碰狠狠色| 五月丁香另类网| 亚洲国产精品综合色区| 五月天综合婷婷| 五月丁香黄色视频| 九九色图| 久久婷婷视频| 五月丁香成人网| 日日夜夜天天综合| 另类少妇人与禽zOZZ0性伦| 亚洲乱码精品久久久久..| 五月丁香综合| 亚洲正能量欧美| 大香蕉太香蕉视频97| 五月婷婷色在线| 五月桃花网综合| 影音先锋男人av资源站| 色偷偷色婷婷| 国产精品久久..4399| 激情四射五月天| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 91超碰在线播放| 婷婷五月天色色| 久久99热这里只频精品6学生| 亚洲综合色婷婷| 26uuu欧美| 成人 在线观看国产| 人操综合| 久久最新色| 亚洲中文字幕AV| 香蕉婷婷色五月| 怡红院院久久| 天天人人人人人人人人人人人| 欧日韩成人| 丁香六月婷婷色XXXXX| 激情五月丁香五月| 中国女人内射6XXXXX| 国产肥白大熟妇BBBB视频| 天天综合区| 国产资源在线视频| 99丁香五月婷| 天天狠狠干| 丁香六月狠狠干| 亚洲第一综合| 在线亚洲综合| 99色色热热| 手机激情网| 99A片| 日韩九区| 九日日夜夜69| 五月婷婷AV| 色视五月天婷婷| 激情文学五月丁香六月婷婷| 色五月五月婷婷| 欧美五月停| 大香蕉人在线65| 激情五月,色五月| 精品人妻久久久| 天天操天天操天天操天天操天天操| 色色色99| 五月丁香狠狠爱婷婷综合| 久99久在线观看| 亚洲精品乱码久久久久99| 婷婷五月天狠狠| 黄色片区子| 美国少妇性做爰| 狠狠色97| 狠狠狠狠狠操| www.激情五月| 婷婷综合色色| 无码人妻一区二区一牛影视| 久久这里只精品66| 久久婷婷五月天激情| 五月天伊人| 久久国产高清| 欧美va亚洲va在线播放| 99热最新| 任你搞在线观看视频| 男人的天堂999| 色色色国产| 九九色逼| 99啊精典免费视频| 99热这里只是精品| 色婷婷五月天在线观看| 色九综合| 久久99成人性爱高清视频| 九月婷婷综合| 一区三区视频有限公司| 欧美婷婷五月天综合| 久久综合中文| 色99视| 狠狠999| 久婷| 伊人狠狠色婷婷综合丁香一区| 天天噜天天爱| 天天色宗合| 国产成人亚洲综合亚洲| 先锋av性爱成人电影| 97在线精品| 99在线播放| 色 丁香婷婷| 99超级碰免费视频| 人妻激情视频| 99热这里只有精品22| 性爱久久| 五月色婷婷亚洲| 99这里有精品| 五月婷婷,六月婷婷| 五月天婷婷青青| 九九伊人网| 在线观看亚洲AV| 婷婷五月天色综合| 无码激情AAAAA片-区区| 激情综合网络插| 亚洲不卡| 婷婷综合视频| 99热精品在线| 欧美婷婷丁香五月| 日韩在线五月天婷婷| 精品国产乱码久久久久夜深人妻| 99色这里| 色综合天天综合成人网| 欧美99热| 色色婷婷丁香| 婷婷五月丁香六月| 九九AV在线| 91婷婷五月丁香碰| 色色色色色网| 亚洲操B视频| 久久婷婷五月综合伊人| 日本性视频| 亚洲五月丁| www激情| 97超碰人人操| 久热婷婷| 婷婷五月天国产精品| 日韩久久视频| 免费黄色视频网址| 99啪啪| 久久婷婷五月综合色奶水99啪| 综合五月婷婷| 国产永久一黄| 成人在线综合| 久久人人九九| 九九碰九九爱97超碰| 99干视频| 久久婷婷伊人| 久热在线中文字幕色999舞| 日本99视频| 婷婷丁香色五月| 日本一道久久| 能看的av网站| 狠狠va| 中文字幕欧美日韩VA免费视频| www.天天干.com| 六月婷婷综合| 先锋男人99资源| 免费看成人AA片无码视频吃奶| 五月婷婷视频啪啪美女| 97操操网| 五月婷婷精品视频| 色婷婷91激情小说| 天天爱天天狠天天透| 亚洲狠狠婷婷| 99热99极品观看| 99热精品99| 99久超碰| 26uuu欧美日韩| 激情婷婷| 五月丁香啪啪激情| 少妇性按摩无码中文A片 | 一区操| 婷婷亚洲五月| 99热9999| 免费无码毛片一区二区A片| 日操五月婷| 老师高潮流白浆喷水的A片| 好激情在线综合网| 大香AV| 婷婷五月激情欧美| 亚洲综合激| 久久综合九九| 99精品视频免费观看,| 超碰在线99| 五月婷婷成人w| 五月丁香狠狠爱婷婷综合| 婷婷五月天综合久久| 久久99激情| 五月天国产| ji'qing'luan'ren'lun| 久久综合五月婷婷| 99操逼| 婷婷在线操| 色婷婷av综合网| 久热久色| 天堂在线观看视频| 97超碰在线免费观看| 天天做天天爱高潮片| 亚洲精品又粗又大又爽A片| 婷婷色情五月| 久久久97| 99天天操夜夜操| 无码99| 丁香5月激情网| 人妻第九页| 六月婷婷色| 这里只有精品免费在线视频| 日本WwW色偷偷丁香花久久久京东热| 亚洲99精品欧美一区| 99九九综合久久九九| 日韩一级片| 国产资源91在线| 亚洲操精品| 狠狠精品干练久久久无码中文字幕| 久久精品亚洲热| 一级性感黄色内射视频| www免费在线视频| 婷婷中文字幕| 丁香五月婷婷成人色区| 亚洲婷婷激情综合激情999精品| 婷婷五月天丁香| 五月综合婷婷久久在线| 中文字幕婷婷| 婷婷激情五月天桃花网| 人人干av| 国产密乳av一区二区三区四区| 激情视频婷婷五月花| 在线观看日韩12345区| 久久综合激情| 久色国产| 五月激情日本在线| 激情 婷婷| 国产人妻人伦精品一区二区| 97干在线播放| 五月花婷婷丁香| 欧美99热| 91丨九色丨国产在线| 色综合色| 九九热99视频| 六月丁香VA| 立川无码av| 亚洲色图81p| 深爱婷婷丁香五月激情| 色婷婷婷av| 色婷婷性爱| 国产69久久久欧美黑人A片| 五月综合色| 婷婷五月天视频小说| 激情婷婷在线中文字幕| 综合 蜜月 婷婷| 97色色色| 五月丁香六月情| 激情五月天com| sewuyue第四色| 五月丁香婷婷综合网| 色播色丁香五月| 99精品成人无码A片观看金桔| 精品网站:999WWW| 天天日天天干天天插天天射| 热久久思思热思思| 色色五月婷| 五月婷婷综合影院| 五月激情久久| 激情综合视频| 亚洲国产精品二二三三区| 67194成I人在线观看线路1| 俺也高清无码高清视频| 久久机热这里只有| 天天爽—爽| 午夜天堂啪啪| 婷婷月综合| 91精品丝袜久久久久久久久粉嫩| 琪琪色五月婷婷老师| 丁香五月天堂网| 久久婷婷综合基地| 综合网啪| 99热这里是精品| 五月婷婷综合潮喷| 天天成人丁香美女AV| 丁香婷婷五月天亚洲| www.99热视频| 99热在线观看精品| 99丁香五月婷| 91九色中文| 丁香97综合| 97碰碰叉| 大地9中文在线观看免费高清| 激情九月婷婷| 香蕉综合在线| 色五月婷婷基地| 任你爽精品免费视频6| 综合色五月天| 99热亚洲| 亚洲啪啪啪啪| 色色色干| av在线观看免费| 久久3p| 极品另类| 亚洲啪啪网| 夜色爱爱亚洲| 99久久高清视频| 亚洲中文AV| 色综合99无码| 五月婷婷欧洲| 五月天婷婷激情四射综合| 婷婷六月偷拍| 噜噜五月天综合| 婷婷天天五月天| 99热人人操人人操| 久久婷婷免费| 中文字幕成人网站| 久久91久久精品久久| 9色婷婷| 国产超碰在线| 一本色道久久综合狠狠躁小说| 久久五月天婷婷| 97色婷婷| 久久久GOGO无码啪啪艺术| 天天干天天做| 伊人久久丁香狠狠婷婷综合香蕉 | 日本乱子人伦在线视频| 久久激丁香| 五月天小说激情| 葵花AV在线| 天色综合网| 三级毛片7979| 超碰人人草| 在线观看的av| 99色色热| 丁香五月婷婷亚洲另类| 婷婷五月激情视频| 久久99精品久久久久久噜噜| 99精品免费| 色99热| 色久天| 成人午夜视频精品一区| 国产首页在线| 欧美成人日韩| 99热只有精品综合| 91啪级电影| 国语精品探花| 精品99在线观看| 综合激情网五月激情| 开心综合激情综合| 热99在线精品| 久久婷婷亚洲| 激情五月天婷婷播播久久综合91| 久久99国产综合精品免费| 国产毛片操B| 97久操视频| 亚洲成人网在线观看| 丁香五月天色| 亚洲激情精品| 五月天色综合| 日本婷婷五月天| 日本99视频| 99re6在线视频精品免费| www.久99| 婷婷情色五月天| 开心五月婷婷激情| 天天添天天摸天天天天做| 狠狠做深爱婷婷久久综合一区| 99久热这里只有精品| 狠狠色婷婷| 无码少妇高潮喷水A片免费| 99热色综合| 五月间天堂综合| 五月婷婷干干干| www.26uuu.com亚洲电影| 日熟女| 97人妻碰碰中文无码久热丝袜| 五月婷婷电影院| 91婷婷色| 99精品无码网站| 免费啪啪亚州视频| 久久AV无码精品人妻系列试探| 色五月婷婷五月天激情综合| 日韩99色| 丁香五月婷婷偷拍| 久久久亚洲精品一区二区三区浴池 | 美国不卡视频| 99这里只有免费的小视频在线观看| 五月婷婷丁香瑟瑟视频| 久热免费视频| 无码A片一区二区免费| 思思热思在线精品视频| 激情五月天开心| 四LLL少妇BBBB槡BBBB| 九热视频精品| 99热这里只有精品96| 免费啪啪亚州视频| 激情小说五月天| 久久久五月天网站| 91操色| 色婷婷丁香五月| 五月婷婷我| 亚洲AV免费在线| 99久久婷婷五月| 999热在线视频| 丁香五月激情综合啪啪| 六月婷婷综合| 99re热在线观看| 囯产精品一品二区三区| 永久精品| 伊人网啪啪| 青青草日本亚洲| 在线观看中文字幕| 久xxxx| 色情播放| 激情五月综合婷婷| 国产色网站| 这里只有精彩视| 色播丁香| 五月婷网| 97色色网| 五月丁香 狠狠爱| 狠狠擼综合| 丁香五月婷婷激情尤物| 怡春院天天干| 26uuu亚洲欧美另类| 97干在线视频| 任你操精品免费| 蜜桃五月天| 成人无码髙潮喷水A片| 草草操操| 婷婷六月色开 | 操人视频91| 久热播这里只有精品| 天天日天天爽| 五月丁香手机在线| 婷婷的99视频网站| 97五月婷婷| 丁香五月婷久久| 九七色色六月丁香| 婷婷五月激情丁香激情| www.色婷婷| 久9视频| 狠狠爱婷婷| 99热免费18| 欧美综合在线五月天色婷婷| 婷婷伊人网| 亚洲人妻电影| 五月婷婷六月丁香在线| www.激情五月天.com| 99热这里只有精品热| 极品少妇XXXX精品少妇偷拍| 久久久久久久丁香五月天婷婷| 五月丁香久久网| 日本天堂免费99| 婷婷无码五月天| 久色大香蕉| 九九免费精品| 激情五月天.色网| 思思久日精品视频| 九九艹女| 亚洲人成人五月天| 五月丁香另类网| 人人人舔人人人操人人人摸人人人97| av高清无码| 天天干-天天日| 99精品成人无码A片观看金桔| 色五月婷婷天天干| 色色99| 久久99这里| 亚州美女| 婷婷夜夜夜夜| 1级欧美日韩| 日操夜撸| 日韩黄色AV无码| 五月丁香六月婷婷色日| 精品人妻在线| 婷婷天堂综合| jiujiu热在线视频| 噜噜噜久久| 成人色站,在线视频,看片-SS1AV| 开心五月天激情网| 日在线V视频在线播放| 江苏少妇性BBB搡BBB爽爽爽 | 91综合色噜噜| 久色大| 九九色综合网| 91中文在线| 99热这里只有精品1025| 996热| 久热久色| 无遮挡国产高潮视频免费观看| 天天噪夜夜爽| 婷婷五月精品| 狠狠穞A片一區二區三區| 182TV大香蕉| 99久在线精品99re8热| 一起草无码视频| 情欲禁地| 99热无码| 99碰在线视频| 亚洲最大激情无码| 婷婷五月天堂| 亚洲色婷婷| 五月婷婷婷婷婷婷艺术| 夜精品无码A片一区二区蜜桃| 日日日,com| 中文字幕无码AV| 亚洲狠狠干| 97色欧美| 丰满人妻一区二区三区| 久久机只有这里精品| 亚洲第二AV| 五月丁香啪啪综合| 五月丁香婷成人网| 激情综合九| 亚洲 视频 导航 一区| 亚洲VA欧美VA| 天天肏天天舔AV| 亚洲婷婷丁香| 人妻性爱av网站| 狠狠爱成人综合网| 991精品在线视频| 激情深爱综合| 丁香五月婷婷老师网站| 99re视频在线播放| 六月婷五月丁香| 91久久九九| 久99热| 久色网五月| 91久久综合亚洲噜噜成人在线| 亚洲va综合va国产va中文| 热99热9| 色色狼人综合| 无遮羞AV| 91免费看片| 婷婷五月丁香高清无码| 9热在线视频| 五月花免费视频| www狠狠| 影音先锋一区| 乱精品一区字幕二区| 九九无码| 五丁香激情综合| 欧美精品A片一区在线观看| 久久99视频| 婷婷五月视屏| 久久视频66| 9在线9在线婷婷在线国产| 丁香五月在线观看| 五月天综合激情网| 变态另类9| 夜精品无码A片一区二区蜜桃| 狠狠色精品综合| 五月丁香毛片| 日本人妻伦在线中文字幕 | 久草A片| 9热成人在线视频| 五月婷婷综合激情网| 丁香五月激情性色郤| 影音先锋噜一噜| 国产性爱大片久久| 激情综合网五月婷婷| 99热免| 人妻性操逼中文字幕 国产| 91碰碰碰久久久久| 久久99网站| 无码网站视频| 秋霞午夜理论| 极品色丁香| 久久免费高| 丁香五月天电影| 99激情视频| 五月色欧美| www.99色| 四季AV综合网| 日韩精品一区二区三区,四区,五区视频| 久草五月婷婷| 深爱激情丁香五月| 婷五月天在线草| 五月婷婷中文字幕| 99在线爽| 日韩无码AV电影网站| 久久久久人妻网址| 五月天社区| 欧美啄木乌丝袜人妻系列| 77799热| 综合网啪啪| 男人的天堂99| 国产五月视频| 性爱久久| 色婷婷777狠狠| 综合啪啪| 啪啪激情网站| 久久伊人婷婷| 婷婷日本色| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 婷婷99中文字幕| 九九精品re免费视频| 人妻熟人中文字幕一区二区| 婷色五月| 五月丁香啪啪综合| 天天日,天天干,天天操| 99热这里只有精品69| 婷婷欧美偷拍综合| 日本综合色色| 久热91精品| 欧美熟妇一区二区三区| 9热在线| 日欧一片内射VA在线影院| 天天干天天日天天操| 日本久久婷婷| 日日干日日| 99热在这里只有精品| 久热这里只有精品在线| 五月天婷婷色小说| 插插插色综合网| 狠狠干天天内射| 色六月丁香婷婷啪啪啪| 日韩一级片| 91操片| 久久加勤综合| 色婷婷影院| 丁香六月婷婷开心| 色热久| 伊人狠狠丁香婷婷综合尤物| 五月激情天| 久久精彩免费视频| 五月丁香婷婷综合网| 亚洲欧美一区二区三区四区爱爱动图| 战争与艾拉电影免费观看| 99热这里只有精品23| 69午夜成人影片| 婷婷色播六月无码| 天天狠狠插| 色婷婷深爱五月| 色五月天天| 狠狠999| 色五月婷婷开心| 久久婷婷五月综合色播| 伊人狠狠综合| 五月丁香激情深爱婷婷| 五月天婷婷丁香蜜桃91| 亚洲激情综合色站| 六月色日韩| 久久这里只有国产| 99爱欧美| 色情激情五月| 99热在线观看免费| 五月丁香在线看| 精品人妻久久久久久| 51国精产品自偷自偷综合| 色五月婷婷五月天| 99福利导航| 亚洲不卡| 天天干天天操天天拍| 日本狠狠干| 伊人激情AV一区二区三区| 亚洲中文字幕在线观看| 97碰碰草| 久久人操-久草婷婷-成人AV| www.99热在线| 五月丁香啪啪激情| 久久婷婷六月| 激情五月婷婷在线区| ,99视频久久| 色综合久久88色综合中文字幕| 成人欧美一区二区三区在线观看 | 爆乳熟妇一区二区三区爆乳照片| 丁香五月首页| 99久视频| 激情综合区| 九九视频免费| 色之综合网| 五月天婷婷乱| 思思热视频| 超碰色色综合| 99久久久久| 亚洲狠狠色丁香婷婷综合久久| 啪啪视频99| 欧美日韩国产伦精品日韩人妻一| 色婷久久| 亚洲综合干| 九九精品在线观看视频6| 色婷婷AV在线| 另类小说色婷婷| 久久激丁香| 久久9RE热视频精品98| AV在线中文| 免费日韩99| 狠狠操狠狠做| 日本久久精品18| 激情五月天小说网| 5月丁香综合图区| 青青草99热久久精品国| 婷婷九月色| 五月婷婷免费视频| 婷婷狠狠操| 天天玩夜夜操| 91re色综合视频| 综合狠狠干| 热的国产,热的综合,热的有码 | 国产人人操| 色综合综合色| 色五月视频无码播放| 婷婷丁香五月色| 五月婷婷色五月| AV色色天堂中文| 97碰碰在线看视频免费| 五月深爱婷婷| 五月天成人在线视频网站| 色色色国产| 97久久超碰| 日韩三级视频一区二区| 国产激情综合五月久久| 五月婷综合网| 五月天丁香综合| 日韩黄在免| 五月婷婷日| 1024人妻| 色色色色色综合| 这里只有视频精品| 五月天婷婷激情| 欧美电影在线播放| 黄久久久| 天天拍夜夜爽日日| 香蕉视频91| 99色婷婷| 黄色aa观看aaguochan| 四月婷婷五月色综合| 综合久久人妻| 超碰91在线| 五月天大香蕉AV| 色婷婷视频| 天天综合精品| 搡BBBB搡BBB搡18| 久操干| 另类色网| 精品爆操| 色吧婷婷五月亚洲| 亚洲高清在线| 996日日爱| 日本99热| 亚洲久久天堂| 开心五月天私房婷婷| 色色色色网站| 成人网在线观看视频| 国产67194| 99热这里有精力| 欧洲色色| 色99在线视频| 丁香婷婷色| 性一交一乱一交A片久| 超碰在线9| 天天天天爽爽天干| 成人无码精品1区2区3区免费看| 91色吧网| 丁香婷婷五月基地| 五月天激情小说| 色综合香蕉| 亚洲熟妇AV综合网五月丁香伊人| 五月婷婷色播| 97人人操人人拍| 色小说婷婷五月天天天| 久久性爱视频| 五月婷婷六月丁香玖玖玫瑰91| 亚洲综合视频天天精品| 天天五月丁香五月| 久久婷婷五月综合啪| 五月做爱| 婷婷激情五月天天天开心| 射久久丁香五月| 99国产精品白浆在线观看免费 | 成人Av在线大片| 五月丁香婷婷激情视频| 五月丁香久久| 2015WWW永久免费观看播放| 丁香五月六月激情| 99久久综合| 九月丁香| 97碰久久| 另类亚洲视频| 激情五月丁香六月| www.lchjjc.com| 熟女五月天久久综合| 色99在线| 九九九九成人| 五月婷婷深爱六月| 欧洲第一无人区观看| 热九九精品| 高清无码视频网址| 99年操人人爽| 激情五月婷婷网在线观看| 五月天另类小说| 激情婷婷丁香五月天| 九九热在线视频| 亚洲AV无码成人电影| 三十路磁力链接| 在线观看免费视频| 欧美美女国产日韩一区二区久| 99视频这里有精品| 五月婷婷偷拍| 九九热在线精品| 人妻免费网站| 狠狠五月激情婷婷直播片| 美国少妇性做爰| 啪啪啪啪五月天| 高清一区二区三区日本久| 天天肏屄夜夜爽| 99热8| 九九热这里只有精品556| 五月激情婷婷丁香| 大香蕉啪啪啪| 人妻九九九九| 91免费试看| 婷婷丁香五月高清| 美女被肏网站在线看| 天天综合网网欲色| AV六月丁香| 欧美婷婷成人| 9999热在线观看| 99人妻碰碰碰久久久久视| 《久久综合九色综合97婷婷| 婷婷俺去也| 97超碰在线观看免费| www.99热. com这里只有精品| 婷婷福利影院| 欧美成人A片AAA片在线播放| 91久久九九| 婷婷丁香六月天| 色婷婷综合在线| 色综合久久88色综合天天99| 精品亚洲日韩99欧美片| 日日爱699| 日韩成人综合网| 亚洲AV网站| www.狠狠| 激情五月天综合图片小说网站| 成熟妇人A片免费看网站| 人妻尝试久久久久久久久久久久| 婷婷在线五月综合| www.sezonghe| 久久久久视剧HD| 激情五月天小说| 久久久久98| 99ri视频| 色综合丁香| 91综合在线| 无码天天操| 丁香五月综合网| 十月色综合| 狠狠99| 五月花婷婷| 激情五月com| 色色丁香五月| 9久久久久久久久久久| 综合激情伊人影视在线| 久久久一级AAA| 五月丁香六月婷婷手机无线| 91丨九色熟女丨首页| 五月丁香啪啪啪| 婷婷五月天xxx| 综合色视频| 99热地址| 日夜夜天天| 亚洲黄3级片网站欧美| 夜夜操狠狠操| 操操操操操电影网| 任你操精品免费| 99视频只有精品| 婷婷成人小说综合| 丁香啪啪中文字幕| 欧美日韩123| 五月丁香成人日| 五月做爱| 日韩性视频| 天天草天天舔| 超级97碰碰| 九九碰九九爱97超碰| 狠狠狠狠狠狠狠狠草| 婷婷伊人五月丁香天堂网| 久久五月丁香| 丁香五月天av| 久草五月天| 五月丁香在线| 激情五月天电影| 九九色热| 狠狠久久婷五月综合色| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 丁香六月AV| 这里只有精品视频在线| 狠狠干狠狠色| 中字幕视频在线永久在线观看免费| 五月天婷婷在线播放免费| 婷婷五月天堂| 免费视频WWW在线观看网站| 人妻操在线看| 操人久久| 日本人妻伦在线中文字幕| 激情丁香五月天图片| 深爱五月月天| 丁香五月激情啪啪啪| 五月婷婷性爱| 99热99re6国产在线播放| 91尤物九色在线| 99国产精品久久久久久久久久久 | 五月丁香狠狠爱婷婷综合| 九月丁香婷婷综合| 五月天婷婷导航| 色哟哟精品| 色色色香蕉五月婷| 丁香六月啪| 99热这里只有精品 搜| 日本丁香久在线| 被强行糟蹋的女人A片| 五月丁香激情综合| 五月丁香婷婷成人伊人网| 久操干| 日日影院 | 999激情视频| 五月天成人伊人| www亚洲无码| 激情丁香五月| 国产精品色婷婷99久久精品| 丁香婷婷啪啪啪| 丁香六月婷婷综合欧美| 五月婷婷色五月| 丁香六月久久| 无码激情精品色婷婷久久久久| 亚洲一级AV在线免费播放| 丁香五月影院| 天堂久久性| 欧美性爱5月天天天看| 久超超碰| 雪千夏麻豆| 色综合久久888| 99热这里只有精品3| 色天天久婷婷| 亚洲另类婷婷综合| 久久婷婷大香蕉| 国产69久久久欧美黑人A片| 欧美色色色色色| 开心色五月天久久久久久久| 五月丁香视频在线观看| 伊人色综合影院视频| 国产美女无遮挡裸体毛片A片| 激情五月综合网最新| 无码人妻一区| 热久久66| 天天舔天天插天天爱| 久久婷婷五月综合成人d啪| 婷婷性爱五月天丁香网| 中国丰满熟女A片免费观| 天天爽天天| 免费观看欧美成人AA片爱我多深| 天天综合精品| 午夜色丁香| 高清无码 一区 二区 三区| 综合激情伊人影视在线| 五月天堂婷婷| 色婷婷很很丝袜| 三十熟女| 久久视频在线视频| 激情婷婷| 91碰在线| 色五月女| 五月 丁香 欧美| 国产成人综合在线| 婷婷五月中文字幕| 人人爽欧美婷婷久久久五月丁香| 色综合播放| 九九中文色色| 丁香综合| 婷婷五月色播天| 久久五月婷天天干| 香蕉婷婷五月| 欧美大片| 国产看真人毛片爱做A片| 丁香六月成人| 婷婷五月情天| 五月激情网综合| 五月宗合激情网| 婷婷亚洲色| 激情影院免费视频婷婷五月天| 五月丁香六月日逼| 婷婷综合五月天激情| 色天天综合色| 丁香五月日本| 久热这里只有精品视频6| 天天爽夜夜爽夜爽精品|