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
返回資訊列表
久久爱婷婷| 激情五月婷婷视频一区二区三区| 三年高清大片免费观看国语| AⅤ网站在线看| 色色色欧美| 五月丁香激情综合| 婷婷激情综合无月| 久久综合9| 婷婷五月天干干| 久婷婷视平| 婷婷五月天熟妇| 色www久视频| 五月婷婷黄色视频| 国产视频福利| 国产精品99久久久久久久女警| 国产亚洲色婷婷99精品| 婷婷狠狠青青| 亚洲中文字幕网| 99热九九这里只有精品10| EEUSS鲁片一区二区三区| 天天色综合色| 狠狠综合久久综合| 激情五月天社区| 色。 日日日| 六月丁香停| 三十熟女| 免看黄大片AA | 五月婷亚洲精品| 九九色色网| 丁香五月天婷婷激情| 色婷婷激情小说网| 丁香九九九九| 丁香婷婷老司机久操| 丁香六月激情| 六月天无码网址| 六月丁香天堂| 九九在线精品| 亚洲九区| 大香蕉婷婷五月天| 婷婷六月激情| 五月综合婷婷久久在线| 日本久久精品| 久久jiuwww| 九热网站| 5月丁香美女影院| 色婷婷成人| 99久久免费性爱视频`| 2023天天日夜夜爽| 国产性爱色| www激情| 欧美另类五月激情| 欧美人人操| 亚洲第一成人无码A片| 婷婷成人视频| 国产做A爰片毛片A片美国| 另类综合激情| 日韩AAAAA| www色婷婷| 色色五月婷婷久久| 播五月,色五月,开心五月播放器| 色九亚洲| 精品香蕉99久久久久网站| 亚洲激情久久| 日韩啪图| 香蕉久久国产AV一区二区| 久久综合丁香| 狠狠色大香蕉| 狠狠爱激情网| 五五月五月| 婷婷五月丁香久久| 欧美天天性| 天天 青草 丝袜制服 在线| 九九热在线观看视频网站| 五月天婷婷成人资源站| 欧美天天干天天草| 在线观看免费狠狠色丁香香综合| 99热这里只有精品55| 国产精品在线视频| 精品久久久人妻| 久热这里只有精品66| 六月婷婷色色网| 精品一二三区久久AAA片| 狠狠CAO日日穞夜夜穞AV| 色五月婷婷在线观看第一页舔| 9 7总站超级碰免费视频| 色情成人五月天| 国外亚洲成AV人片在线观看| 狠狠草网| 99热大香蕉| 五月开心婷婷网| 99riAv1国产在线观看| 一区二区无码视频| 丁香 亚洲 久久| yellow视频在线观看91| va亚洲中文在线| 夜夜爽日日躁| 丁香六月婷婷综合| 久久综合香蕉国产国产蜜臀AV| 六月五月天婷婷涩播在线| 色婷婷AV在线观看| 色丁香综合影院| 五月丁香六月婷婷综合免| 99热只有这里才是精品| 色五婷婷在线视频| 国产真人做爰视频免费| 日美三级| 新激情五月天色播| 丁香五月影院| 永久天堂日本| 69激情小说| 99成人| 成人av在线网站| 99热在线观看精品| 99视频| 五月婷婷七月丁香| 久久9久| 极品少妇XXXX精品少妇偷拍| 亚洲成人av在线观看| 久99久视频| 开心五月天私房婷婷| 六月丁香VA| 久操婷婷| 九九精品少妇| 五月天婷网| 天天日天天色| 久久婷婷大香蕉| 久久五月婷综合网| 一本色综合色| 五月色俺婷婷| 丁香五月天激情综合| 伊人影院久久网| 午夜理论片最新午夜理论剧| 丁香六月色婷婷| 第九色区av天堂| 日韩一级A片黄色| 日日夜夜狠狠干| 免费观看全黄做爰的视频| 日本三级日本三级三级人妇四虎| 五月天婷婷伊人| 色色999三级片| 亚洲 精品 综合 精品| 色欲天天综合| 色噜噜狠狠色综合无码久久欧美| 六月激情网| 久久婷婷啪啪视频| 无码激情| 婷婷五月天激情四射| 天天色天天日| 婷婷激情综合无月| 综合色图婷婷| 噜噜噜色噜噜| 亚洲成人综合网在线免费观看| 天堂五月婷婷| 免费V片在线| 久久九九在线视频| 五月丁香888| 欧美α√| 99啪啪视频| 色五月超碰| 色五月婷婷影视| 99ri在线视频| 色情成人五月天| 日本三级日本黄色| 久久五月天网| 激情五月婷婷她| 丁香婷婷色六月| 久久精品日| 十月丁香九月婷婷综合| 五月丁香婷婷色| 久久在线大香蕉| 99热这里只有精品66| 欧美色97| 欧日韩成人| 99视频极品在线香蕉| 国产精品人人妻人人爽| 色综合久久888| 狠狠搞狠狠操| 激情小说 五月天| www91色网站| 狠狠色综合网站久久久久| 五月色丁香婷婷综合| 噜噜色噜噜网| 国产精品 的国产| 色综合色五月| 夜夜骑日日夜夜| 色播jjjj| 五月婷婷丁香六月| 韩国19 主播内部福利vip免费播放| 操操操Av| 久色视频首页| 97色婷婷在线观看| 丁香五月天啪啪| 五月激情开心婷婷| 日韩一级A片黄色| 大香蕉人妻| 开心五月综合| www.久久99| 天天揷综合网| 婷婷视频网| 2023天天日夜夜爽| 99综合视频一体| 欧洲毛片基地c区| 激情综合五月丁香| 自拍盗摄 另类| 免费超碰在线观看| 激情色色| 天天日天天草| 先锋资源 996| 五月丁香六月婷婷啪啪综合| 伊人香大香蕉视频| 丁香桃色网| 五月丁香| 91丨九色|PRNY熟妇| 久久婷婷综合五月天| 五月丁香九九九综合| 丁香五月最新网址| 啪啪啪丁香五月| 婷婷五月激情综合| 久色中文| 色五月之第四色| 国产av一区二区三区| www.91在线观看| 婷婷五月综合激情| 97欧美在线| 亚洲精品久久久久AV无码| 婷婷无码五月天| 深爱五月婷婷开心中文字幕| 91丨九色丨43老版熟女| www.9797国产| 人操人| 亚洲中文字幕在线观看| 五月婷婷av| 久久久久人妻精品| 狠狠干夜夜干| 九九激情视频| 99操| 激情综合五月天| 五月丁香婷色| 大香蕉七区| 久久97| 99热官网精品在线| 激情婷婷色五月| 五月婷丁香在线视频在线| 婷婷五月天成人| 人人干人人操人人摸人人做| 5月婷婷6月丁香aV| 天天色伊人| 色色五月天激情| 日本操片| 婷婷成人综合| 色丁香五月婷婷| 蜜乳人妻一区二区三区| 99热 在线播放| 婷婷六月啪啪| 任你艹| 啪啪婷婷五月天激情| 婷婷久久亚洲| 99ri视频在线播放| 综合色图区| 久久综合五月天| 久久狼人天堂| 色色色热| 国产毛片精品一区二区色欲黄A片| 激情综合一| 九九热在线99| 成人精品视频99在线观看免费| 婷婷五月天精品| 啪啪小说五月天| WWW.婷婷| 四虎成人精品永久免费AV九九| 91九色欧美| 婷婷色片| 国产肥白大熟妇BBBB视频| 激情五月天色播| 国产午夜精品一区二区三区嫩草| 色135综合网| 亚洲精品国产A久久久久久| BBWCUCKOLD精品熟妇| 亚洲精品久久久无码| 久久AAAA片一区二区| 人妻丰满精品一区二区A片| 国产亚洲精品久久久久久郑州| 日本狠狠干| 无码人妻丰满熟妇奶水区码| 日本A片一区| 丁乡久久| Av性爱网| 丁香五月天啪啪a日本| 精品爆操| 性做爰A片免费视频A片直播| 狠狠久久婷| 久久人操| 台湾佬天天日丁香婷婷五月天| 狠狠色婷婷777| 色五月 五月婷婷| 99热自拍| 亚洲AV成人一区二区在线观看| 婷婷五月天激情在线| 婷婷深爱五月丁香| 色五月婷婷久久| 成人精品视频99在线观看免费| 久99久视频精品| 色婷婷综合影院| 啪啪啪综合网| 五月天桃色深爱网| 日韩成人电影在线播放| 中文字幕在线免费看线人| 婷婷99狠| tingting五月天亚洲| 国产色99| 熟女人妻一区二区三区免费看| 五月婷婷亚洲综合在线| 日本精品。999| 天天操婷婷| 色情五月丁香| 天堂二区| 欧美色播综合在线观看| 婷婷五月AV| 丰满少妇猛烈A片免费看观看 | 婷婷五月丁香综合桃花色网| 亚洲五月六丁香激情| 五月花激情| 色婷婷综合网| 骚五月婷婷| 五月丁香在线婷婷蜜桃| 激情五月婷婷视频一区二区三区| 在线99色| 婷婷五月丁香手机在线视频| 色婷婷色综合久久精品V| 五月丁香激情怕怕| 亚洲欧洲99| 99热热九九| 日本五月天网站| 六月婷五月丁香| 天天操天天插| 丁香六月婷婷色XXXXX| 日本熟女三区| 五月婷色| 人人干人人干骚美女| 久久精彩免费视频| 婷婷玖玖五月天| 亚洲aV写真天天综合网久久| 久久九网| 日日爱699| 五月丁香av在线| 久久精彩免费视频| 色色综合成人网| 九热免费视频| 伊人久久大香网| 婷婷久久综合| 99热免费精品| PORNY九色9l自拍视频成人| 五月丁香久久婷| 99愛国产| 婷婷94s| 久狠日av| 麻豆精品| 91精品国产99久久久久久天美| 色婷大香蕉| 欧美成人五月天| 亚洲精品a成人在线播放| 国产操肏网站| 日韩精品一品二区三区的使用体验| 久久综合55| 丁香五月激情无码视频| 色九九一二| 99色色色色| 欧美久久久久久久久中文字幕| 久狠日av| 色丁香五月| 亚洲色无码| 一本到不卡高清DVD| 日韩AV色色色| 热久久色| 亚洲色婷婷| 狠狠舔| xx久久| 99热9| 九九黄色网| 丁香婷五月天| 久久婷婷六月综合综合| 中文字幕综合网| www.色五月| 色丁香五月婷婷| 能看的AV网站| 天堂久久性| 91碰碰视频| 丁香六月色婷婷| 婷婷5月色| 国产亚洲成AV人片在线观黄桃| 深爱婷婷色| 久久婷婷丁香花综合网| 99爽视频| 热久久66| 婷婷丁香五月91| 伊人五月天在线| 五月婷丁香在线视频在线| 久久免费高| 婷婷五月婷婷| 婷婷五月天激情综合| 日韩AC在线免费观看| 精品无吗va视频免费观看| 丁香婷婷六月天| 影音先锋女人AA鲁色资源| 久色国产| 丁香五月婷婷五月天在线 | 亚洲成人网址在线观看| 激情五月天网站| av在线观看网站| 日本女天天爽| 五月婷婷婷综合网| 五月精品99综合| 亚洲色图五月丁香| 五月之婷婷| 色色狼人综合| 六月综合婷婷开心伊人| 亚洲欧洲中文日韩久久AV乱码| 婷婷五月天六点丁香五月| 热久久91| www.97干视频| 丁香五月婷婷啪啪视频| 人妻狠狠操| 91无码一起草| 五月综合激情婷婷六月色窝| 玖玖资源在线视频| 久久伦乱| 婷婷六月亚洲综合| 天天爽天天摸| 6月丁香婷婷激情| 伊人玖玖精品| 亚洲欧洲一二| 婷婷碰碰| 亚洲无AV在线中文字幕| 色色色图| 欧美婷婷丁香五月社区| 精品色色| 亚洲色99| 天天草比天天爽| 亚洲色色图片| 思思99热热热99| 9l视频自拍九色9l视频在线观看| 欧美三级大片AA在线看| 五月天激情美女久久| 五月激情在线| 久色视频| 久久婷婷亚洲| 天天干天天日天天操| 欧洲一区二区| 99九无网码| 婷婷五月天激情诱惑| 狠狠狠五月婷婷六月丁香| www.主妇. com| 99热这里都是精品| 五月婷婷久久综合| 九色婷婷| 天天综合网、天天综合色 | 伦乱人妻| 婷婷操无码| 天天插天天干| 日日噜噜夜夜狠狠久久丁香五月| 少妇AB又爽又紧无码网站| 色优久久| 大香蕉av在线| 亚洲爆乳无码精品AAA片蜜桃| 日本丁香五月| 欧美成人猛片AAAAAAA| 五月丁香在线| 大战熟女丰满人妻AV| 熟妇人妻中文字幕无码老熟妇 | 丁香香五月激情免费视频| 五月丁香六月综合情在线观看 | 久久久久久97| 黄色片区子| 婷婷六月啪啪| www色色色com| 丁香五月天大香蕉啪啪| 丁香天堂夜| 99ri国产精品| 亚洲综合五月天婷婷丁香| 97人人搞| 99热在线免费观看精品| 五月天激情社区| 婷婷五月激情视频在线| 亚洲天堂大香蕉| 五月天婷婷激情在线色图| 五月婷婷婷| 九九亚洲| 91大神在线免费看视频全集男男一起操| 久久综合综合综合| 五月婷婷影院| 99热在线中文字幕| 五月天婷婷无码| 亚洲综合视频网| 久草热在线视频| 情情五月天色| 99久久五月婷婷| 九九色色网| 久久久久久久人妻| 国产综合丁香五月天| 9久久婷婷国产综合精品性色| 亚洲精品网站色视频| 偷拍视频五月天| 婷婷五月天天天| 91综合在线| 超碰婷婷色| 丁香激情五月少妇| 丁香五月综合久久八| site:feetmall.com| 99视频这里有精品| 亚洲国产精品VA在线看黑人| 激情熟女网| 开心婷婷五月激情网小说| 丁香五月第四色88| 91精品综合久久久久久五月丁香| 五月天久久婷| AV伊人青草丁香六月| 五月天婷婷黄色| 亚洲婷婷久久综合| 婷婷五月综合社区在线| 日本妈妈乱| 激情五月视频在线婷婷| 久热婷婷| 丁香五月天黄色片| 五月天久久91| 这里只有精品96| 69久久99精品久久久久婷婷| 天天射综合网夜夜操| 六月丁香啪啪| 91精品人妻少妇无码影院| 婷婷色香六月综合激情| 日韩无码色色| 精品爆操| 久久少妇视频| 人操综合| 激情五月婷婷啪啪| 99热这里只有精品9| 97超级操操| 婷婷五月天第四色| 九九AV| 五月婷婷六月天| 欧美人妻一区二区| 六月婷欧美丁香综合| 亚洲 精品 综合 精品| 色五月超碰| 精品五月花| 男人综合网| www,天天干| 激情图片婷婷丁香五月| 91久久人人操| 欧美婷婷五月| 人妻无码视频网| 少妇丁香婷婷| 婷婷综合网| 久热69| 日本VA视频| 中文字幕在线视频播放| 婷婷丁香激情| 亚洲春色奇米影视| 色综合久久天天综合网 | AA片在线观看视频在线播放| 五月丁香综合激情在线观看| 色五月av| 激情五月天婷婷久久久久久久久久久| 六月激情网| 婷婷香蕉| 啪啪综合网| 丁香五月婷婷狠狠色| 色五月综合网| 亚洲综合字幕色色| 九九亚洲| 丁香五月婷婷成人综合| 99在线精品免费视频| 99热这里精| 亚洲黄网AV| 天天爽综合| 久草免费福利视频| 青草五月天| 熟女91九色| 五月天操逼网| 久久只有这里精品免费| 三男玩一女三A片| 日日干日日s| 丁香五月之久操视频| 爱婷婷五月| 91人无码久久久久久| 婷婷色五月在线视频| 色99www.| 五月丁香黄色视频| 六月色狠狠色| 色九九一二| 中文字幕综合| 婷婷丁香成人在线视频| 9九九久久精品无码专区| 久久五月天色| 综合啪啪| 久久人妻精品| 天天日天天舔天天摸| 无码AV免费精品一区二区三区| 热99re| 卡视频1区2区| 色五月婷婷五月| 开心五月丁香啪| 色欧美日| 中文字幕成人| 国产无套精品一区二区| aaaaa不卡| 亚洲偷| 可以免费观看的AV| 天天做天天爰天天爽天天无遮挡| 在线超碰精品| 精品人妻一区二区| 天天色宗合| 91狠狠色丁香婷婷综合久久| 九久九精品| 超碰操网| 久久五月天激情| 中文字幕成人| 伊人热婷婷| 激情综合五月天| 成人性爱无码| 亚洲婷婷丁香五月在线| 五月丁香网站| 日日干日日s| 久9无码视频| 国产AV一区二区三区日韩| 色婷婷六月| 五月婷综合性中心| 亚洲天堂热| 色综合女人99| 99国产精品白浆在线观看免费| 色色com| 五月天婷婷在看| 七七九色| 色婷婷亚洲综合av| 国产肥白大熟妇BBBB视频| 国产avapp 网| 亚洲综合色色色| va中文资源在线观看| 日本精品干| 超碰在线日夜| 中文字幕欧美日韩VA免费视频| 色婷婷激情四射视频| 激情美女五月天激情在线| 夜夜夜天天操| 丁香五月91| 色99免费视频中文| 亚洲视频在线网| 51精品国自产在线| 亚洲精品视频在线播放| 伊人超碰| 丁香婷婷五月六月久久| 五月婷婷色| 26uuu另类亚洲欧美日本一| 九九爱这里只有精品| 在线中文字幕av| 香蕉网久久| 久草五月婷| 97涩婷婷婷婷基地| 婷婷丁香五月综合久久| 97人碰人操| 丁香婷婷综合激情五月色| 六月婷婷五月天| 色播六月| 婷婷久久久| 五月丁香激情婷婷| 啪啪婷婷五月天激情| 色5月丁香婷婷| 久久国产色| 欧美成人网99网| 成人性爱精品视频| 五月丁香六月婷婷的女人| 激情都市另类| 精品国产一区二区三区四区阿崩| 天天射影院| 成人做爰黄A片免费看直播室男男| 五月综合视频| 日韩免费视频| 婷婷久综合| 任你弄在线视频免费| 五月停视频天堂| 伊人九九68| 人操综合| 91久久色| 亚洲永久免费| 2020久久婷婷五月| 在热视频精品| 免费看欧美成人A片无码| 九九热99免费视频| 天天干电影| 无码人妻少妇色欲AV一区二区| 日本人妻伦在线中文字幕| 狠狠久久婷五月综合色| 欧美三级视频下载| 超碰在线国产| 深爱激情四射| 亚洲aV写真天天综合网久久| 久久综合婷婷五月| 久99热| 老师的粉嫩小又紧水又多A片视频| 丁香五月婷婷国产av| 色五月色五天色情网址| 99热在线观看精品| 五月情婷婷五月| 亚洲五月天婷婷在线| 丁香五月在线| 婷婷六月丁香五月| 91在线精品一区二区| 日本99在线| 另类五月婷婷| 这里有精品2| 玖玖爱综合网| 中文字幕婷婷9月天| www.久久爱.c n| 婷婷色女| 婷婷va| 激情六月婷婷| 97日日碰碰| 大功率国产在线| 这里只有久久精99| 久久九九国产精品怡红院| 99超碰欧美| 欧美三级欧美一级| 伊人久久五月天| 玖玖综合网| 性爱激情五月| 深爱婷婷基地| 色五婷婷在线视频| 超碰97在线操| 五夜婷婷| 狠狠操狠狠插| 万月丁香狠狠爱| 久久久18| 思思热精品在线| 婷色五月天| www.婷婷.com| 五月丁香在线婷婷美女| 97精品综合| 色婷婷精品视频| 五月天sesese| 五月伊人综合| 久久99精品久久久久久噜噜| 日韩av免费版| 99热久久最新地址| 囯产精品久久欠久久久久久九大| 中文在线成人| 欧美激情凹凸丁香网| 激情深爱五月天| 婷婷少妇激情| 婷婷婷婷色| 亚洲中字AV电影在线网站| 99色在线观看| 欧美精产国品一二三区| 久久码久久无清| 亚洲噜色| 五月日韩中文字幕| 五月六月丁香激情视频| 久久色情| 久操综合| 五月天婷婷操逼视频| 人妻中文av| 五月激情五月婷婷五月天在线| 乱精品一区字幕二区| 五月天婷婷激情网| 无码任你操| 91色九| 五月婷婷综合在线| 77777亚洲午夜久久| 丁香5月婷婷| 中文字幕有多少字| 婷婷五月天AV激情| 欧洲电影在线观看免费版英语版 | 99热国产精品| 二色AV| 怡红院视频| 99九九在线| 激情婷婷丁香五月天| 丁香五月网| 久久99热这里只频精品6学生| 九九久久玖玖爱| 人妻VideOssS人妻| 丁香婷婷五月天成人| 婷婷五月天激情在线| 色开心五月婷婷丁香HD| 99精品大片| 九九热在线视频观看免费10| 99久久五月婷婷| 中文字幕丰满人妻无码专区| 丁香婷婷五月色成人网站| 91激情五月开心| 五月天激情久久| 久婷| 综合婷婷六月| 亚洲在线免费成人| 国产精品热搜丁香五月婷婷| 日韩有码一区| 97操碰在线视频| 五月玖玖| 久久婷婷五月天| 69午夜成人影片| 久久性都花花世界成人免费视频| 日本VA视频| 色久影院| 狠狠干综合| 777精品成人a v久久| 啪啪视频99| 激情中文在线| 五月天婷婷日日爱| 99热热热99精品婷婷| 可以观看的AV| 亚洲、欧美、国产另类笫二区| 婷婷丁香五月激情| 婷婷丁香五月天亚洲| 欧美久人人| 久热91| 日本成人噜噜噜噜噜| 亚洲成Av人片乱码色第1集| 丁香五月色色| wwccc久久久| 婷婷成人在线| 激情五月天婷婷| 九九99一区| 99综合免费视频| 日韩国产在线精品| 亚洲国产精品VA在线看黑人| 99激情网| 7777久久亚洲中文字幕| 婷婷五月激情网| 欧美va| 婷婷五月天奸女| 亚洲精品又粗又大又爽A片| 欧美va在线| 亚洲婷婷丁香五月在线| 色九月综合网| 丁香五月影院| 色婷婷先锋| 五月天激情婷婷丁香| 五月天综合久久| 99婷五月| 天天做天天爽| 天天插天天射| 亭亭五月天黑人2014| 99热偷拍| 亚洲天堂碰碰婷婷| 久色| 色情丁香五月婷婷精品| 99免费视频精品| 性一交一乱一交A片久久四色| 六月婷婷综合网2| 丁香五月成人社区| 99re6久热只有精品6在线直播| 色色色视频免费无码 | 99热99免费| 激情五月丁香五月| 日本三级网址| 亚洲激情四谢| 亚洲另类电影| 亚洲在线综合| 这里只有精彩视频| 嘿嘿视频免费看9| 99视频只有精品| 伊人玖玖网| 丁香成人视频| 米奇影视资源777狠狠色婷婷五月天激情网 | 亚洲成人在线播放| 五月丁香婷婷啪啪综合| 久久婷综| 亚洲日本韩国| 色五月激情五月开心五月| 国产三级片91| 婷婷成人五月天成人文学| 青草激情在线| 婷婷激情区| 婷婷基地成人五月天| 五月婷久久| 1024婷婷综合久久五月天| www.玖玖婷婷在线| 综合久久婷婷99| 精品少妇人妻AV无码专区偷人| 五月激情婷婷在线| 九九精品热播| 色婷婷精品视频| 婷婷六月激情| 久久久这里有精品| 99这里只有精品|v| 五月综合婷婷五月| 久久久久丁香婷婷五月天| 欧美色色色色色色色| 婷婷四色成人综合色视| 伊人国产婷婷五月天| 97激情五月天| 婷婷丁香五月精品| 天天操天天操天天操| 五月天激情在线视频| 天天AV导航网| 天天操九九插| 亚洲行行色色| 五月婷婷综合潮喷| 自拍盗摄 另类| 色99网| 色色五月天婷婷丁香| 丁香五月欧美色综合| 在线中文字幕av| 综合久| 五月天综合| 亚洲中文字幕在线观看| 香蕉AV777XXX色综合一区| 最近中文字幕2019视频1| 欧美色一级色| 99艹精品在线观看| 欧美成人日韩| 色综合九九| 激情五月第四色| 婷婷六月网| 五月天另类图片| 日本高清综合网五月丁香| 久久最新色| 99热这里只有精品66| 婷婷综合激情| 欧美综合五月天婷婷tin| 激情五月婷婷她| 在线网黄| 丁香五月婷婷丫| 午夜婷婷六月天| 成人在线高清| 97干免费视频| 婷婷丁香五月天综合网| 深爱五月婷| 五月天堂婷婷| 国产精品扒开腿做爽爽爽A片唱戏| 五月精品99综合| 99玖玖在线视频| 久久精彩综合视频| 中文不卡一二区| 日本女人久久| 精品夜夜澡人妻无码AV| 九一九九黄色| 婷婷色导航| 日日夜夜综合| 久久婷婷五月综合| 亚洲mm免费| 99热碰碰热| 先锋资源996| 播五月开心婷婷欧美综合| 五月天婷婷丁香| 激情五月天.色网| 色五月成人| 这里只有精品视频在线看| 在线观看亚洲AV| 香蕉久久国产AV一区二区| 99热精品网| 成人必爱视| 色天五月天在线观看视频| 色综合五月| 丁香香蕉婷婷| 狠狠五月丁香色婷| 婷婷成人视频| 亚洲精品又粗又大又爽A片 | 黄久久久| 狠狠干青青草| 九九色综合九九色| 91seAV| 六月伊人婷婷| 免费黄色视频网址| 99热亚洲综合| 内射激情在线| 欧美精品99久久久| 密视AV综合在线| 99热欧| 久久国产色| 国产AV影片| 91avse| 色色色免费视频| 激情第四色| WWW色色色COm| 开心婷婷五月天激情网| 免费精品99| 丁香五月色色| 国产成人AV在线播放| 婷婷伊人综合| 婷婷五月天影视网址| 操一区| 海外网站专业操老外| 三十路磁力链接| 五月丁香啪啪网| 色色五月天丁香婷婷| 日韩在线婷婷五月天综合| 色婷婷丁香A片区毛片区女人区| 婷婷五月天奸女| 久婷五月| 久久国产高潮白浆免费观看99| 色婷婷六月综合| 91欧美| 成片免费观看视频大全| 婷婷五月天色播| 亚洲电影中文字幕| 香港九九六区八区99| 人人爽在线视频综合网| 色色网站在线| 色欲久久综合| 九九综合九九| 久久婷婷五月综合精品蜜芽| 玖玖热视频| 丁香婷婷久久综合在线| 五月婷婷狠狠干| 99视频这里有精品| 26uuuu精品一区二区| 91丨九色丨东北熟女| 只有精品视频在线观看| www久久久| 亚洲精久久| 五月花免费视频| 久久婷婷色| 五月婷婷大香蕉| 天天情天天狠天天透| 99热亚洲精品| www.99久| 色情五月综合婷婷| 激情99。| 强壮公让我夜夜高潮A片视频| 综合色天天| 亚洲第一成人无码A片| 天天做综合网色综合| 婷婷五月丁香第四色超碰在线 | 婷婷玉月丁香五月在线视频| 国产欧美日韩综合精品一区二区| 五月丁香少妇A| 成人草榴视频| 五月婷婷开心丁香| 久久久精品99| 99riAV国产精品视频| 色~性~乱~伦~噜| 狠狠做深爱婷婷久久综合一区| 欧美内射AA| 丁香五月激情婷婷| 六月婷婷影院| 九九热99久久99| 久久激情五月天| 人人色人人摸人人看| 欧美成人精品A片免费一区99| 激情黄色五月天| 国av网| 女人天堂久久| 淫荡家庭AV| 六月五月天婷婷涩播在线| 99热这里只有精彩| 人人妻人人澡| 熟妇内谢69XXXXXA片| 亚洲第79页| 色综合久久88色综合天天99| 色婷婷成人| 欧美婷婷色五月| 99热国内精品| 免费无码毛片一区二区A片 | 婷婷五月天伊人网| 天天干天天干天天干天天干天天| 婷婷五月欧美| 99久久九九| 婷婷五月久久| 久久久欧美精品sm网站| 99久re热视频精品98| 婷婷五月色网| 欧美超级视频97| 99色| 婷婷五月天综合网| 婷婷五月丁香影院| 天堂二区| 色婷婷影视| 人人爽亚洲| 一本久道综合色婷婷五月| se色婷婷视频| 淫视馆AV在线| www,五月天激情| www久久99| 九九草草逼| 亚洲天天操| 六月丁香VA| 五月天激情在线视频| 亚州操操| 婷婷五月丁香基| 婷婷五月综激情| 91精选国| 亚洲综合婷婷| 免费AV在线| 色狠狠色噜噜噜a天堂一区| 久久9精品| 亚洲啪啪精品| 八戒青柠影视剧在线观看| www.日本91| 涩涩网五月天| 99re熱| 日本欧美国产| 日本一区二区三区精品视频| 色婷婷基地| 五月丁香无码| 很很干夜夜干| 天天干天天 亚洲| 亚洲丁香花色| 色色色97| 日韩久久日| av国产精品| 天天看A片| 欧美色色色色色色| 丁香五月婷婷手机| 很很操很很操| 五月婷婷激情四季| 激情六月丁香| 九九99男女视频在线观看| 亚洲六月综合激情久久下卡| 能看的AV| 激情AV| 五月天婷婷操逼视频| 99热免| 天天操天天爱天天玩| 插插插色综合网| 五月丁香亚洲校园欧美| 久综合| 香蕉大综综综合久久| 日韩性爱无码| 丁香婷婷六月| 大香蕉婷婷婷| 人五月天婷婷喷水| 婷婷五月丁香综合网| 成人国产欧美大片一区| 99久久综合网| 婷婷欧美| 天天爱天天操| 涩涩五月天| 天天爱天天做天天操| 久久丁香五月天| 欧美熟女99| 9色在线| 夜夜骑夜夜撸| 九九精品热| 色婷婷九月| 亚洲五月婷婷| 丁香五月天视频| 亚洲国产精品二二三三区| 五月婷婷综合网| 亚洲亚洲人成综合网络| 激情内射人妻1区2区3区| 亚洲妇女熟BBW| www久视频com| 玖玖99婷婷| 九月婷婷人人操人人舔人人爱| 婷婷五月综合中文字幕| 噜噜五月天综合| 中文字幕性爱视频| 天天综合久久| 综合婷婷久久| 99精品视频免费在线播放| 99视频精品视频| 国产精品色一哟哟| 五月草视频| 生活片五区| 综合99视频| 91婷婷色五月| 怕怕視頻| 婷婷激情五月天色| 天天干天天射综合网| 另类综合婷婷五月天欧美视频| 五月综合无码| 六月婷婷激情| 五月天激情国产综合婷婷婷| 天天日天天肏天天奸| av五月丁香婷婷网| 五月婷婷亚洲| www.天天干.com| 综合六月激情婷婷| 天天色天天操天天射| 91AV婷婷| 成熟妇人A片免费看网站| 免費观看aV在线网址| 五月天色色婷婷| 丁香婷婷五月激情综合| 色小说五月婷婷| 激情开心五月天| 五月天激情婷婷| AV色色天堂中文| 天堂在线9| 国产夫妻操逼内射视频| 色综合色综合网| 人人操99| 777精品成人a v久久| 深爱激情六月天| 日本人妻A片成人免费看片| 国产又爽又猛又粗的视频A片| 9 9热这里有精品| www.久久99| 丁香色综合| 色色五月婷| 99热97美女| 天天久久66xxx| 五月婷婷之美女图片| 色播五月| 久热伊人在91| 新99色色色色色色| 思思热在线观看| 日本视频不卡123区| 插逼综合网| 都市激情小说婷婷| 婷婷基地爱| 日韩激情网站| www.狠狠操.con| 九九这里是免费的视频5| 国产精产国品一二三在观看| 婷婷丁香花五月天| 色永久| 婷婷丁香六月| 九九综合网色全集| 婷婷五月天六月| 狠狠色色| 日本久热| 五月婷婷免费在线观看视频| 日本高清久久| 色婷婷丁香综合中文字幕| 激情综合色五月丁香六月亚洲| 久久激情五月婷婷| 婷婷综合影院| 狠狠干五月丁香综合网| 精品久久99| 久9久9久9久9久9久9| 99热这里只有精品2| 777精品久无码人妻蜜桃| 综合色五月| 欧美黄色韩日网| 中文字幕在线视频播放| 丁香五月成人论坛| 婷婷丁香人妻天天爽| 九九热re99re6在线精品| 人人草人人视| 激情五月丁香五月色| 人妻性爱| 久久99久久99精品免视看婷婷| 五月婷婷六月丁香玖玖玫瑰91| 日日夜夜综合| 婷婷色色网站| 日本在线免费中文com.| 婷婷五月天视频| PORNY九色9l自拍视频成人| 人人播| 激情五月瑟瑟| 5月丁香六月婷婷| 99re欧美精品| 丁香五月综合福利视频导航| 六月丁丁香| 无码四色色色| 五月开心久久| 色五月婷婷中文字幕在线观看 | 中日韩狠狠色| www.国产色| 中文字幕高清av| 五月婷婷我| 色9999综合久久| 五月激情婷婷六月| 91碰操| 五月丁香六月婷婷亚洲综合| 日日夜夜亚洲一区| 99er久久| 婷婷五月综合免费在线| 永久地址 色| 3DAV亚洲香蕉久久 一区二区| 婷婷色丁香六月| 31色区视频免费看| 六月丁香五月天| 久久五月婷婷丁香| www.97碰碰com|