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
返回資訊列表
99爱免费在线观看| 日日日影院| 欧美色婷婷| 国产精品久久在线观看技巧| 日韩在线观看亚洲| 五月丁香色欲| 亚洲V国产V欧美V久久久久久| 极品五月天| 五月天开心色情网| 丁香五月欧美色综合| 女人高潮内射99精品| 色五月激情网| 丁香六月无码| 五月天婷婷开心| 波多野结衣AV无码Porn| 五月婷婷色播| 亚洲色久| 五月天丁香| 综合色五月天| 精品婷婷五月视| 日本人人草草| 国产精品岛国片在线观看免费| 五月天成人免费视频| 婷婷综合色五月天| 九九热在这里只有精品| 婷婷五月丁香五月天| 色五月91| 久久久这里都是精品| 大香蕉久久久久久久久| 97午夜一区二区| 五月色婷婷影院| 天天射天天射一道本日本社区 | 色婷婷综合网站| 天天情天天狠天天透| 久久九⑨| 国产综合婷婷| 日韩五月婷婷| 激情五月天99色| 国产精品99久久久久久久女警| 成人五月丁香社区| 婷婷伊人綜合中文字幕小说| 人妻啪啪啪| 超碰免费99| 亚洲激情综合| AV九九| 五月激情小说| 啪啪91| 97人人看| 99热这里只有精品3| 亚洲无码yw| 天天爽天天做| AV色婷婷| 九九色影院| 久操福利| 99精品偷自拍| 99热爆在线| 亚洲精品V天堂中文字幕| 91热在线| 一级黄色影片| 爆乳熟妇一区二区三区四区| 日本情色一区二区| 六月激情婷婷| 国熟女视频| 五月色情婷婷开心五月色情| 五月婷导航| 激情五月丁香综合网站| 五月天丁香久久| 狠狠狠狠狠狠色| 欧美 日韩 成人 在线| 天天摸天天肏| 人妻激情久久| 亚洲AV人人操| 天天干天天爽天天爽| 丁香五月六月婷婷殴美综合| 亭亭五月色男人| 操91| 色九月国产| av激情在线| 久久婷婷啪啪视频| 激情网婷婷婷| 五月丁香五月综合欧美| 五月色亭丁香| 性爱网久久| 五月天婷婷综合久久| 色视五月天婷婷| 99精色| 99九九热在线观看| 性爱网五月婷婷| 99热很操老逼| 婷婷五月天激情综合| 婷婷狠狠五月综合| 五月天婷婷基地| 丁香久久| 婷婷色丁香五月| 色婷婷五月丁香在线观看| 99热这里只有精品一区| 狠狠色综合网| 激情五月天的婷婷| 丁香五月天精品| 情久久综合五月天| 嫩草极品| 99热成人永久免费| 丁香五月婷婷激情尤物| 天天干天天av天天射| 久久婷婷五月综合激情国产| 日日操日日爽| 99久久国产宗和精品1上映| 婷婷在线五月综合| 色五月涩涩婷婷蜜桃| 精品,99| 综合大香蕉| 中文字幕人成乱码在线观看| 99久久婷婷国产综合| 婷婷操逼网| 激情综合色图| 无码一级片| 婷婷五月天伦理| 五月婷婷五月丁香| 九九综合88| 五月婷婷丁香深深爱| 精品五月天| 久久九九免费视频| 国产 亚洲 在线| 五月丁香花婷婷玉莉AV| 99在线视频操999| 天堂资源欧日浪女在线播放| 婷婷在线播放| 婷婷丁香五月天影院 | 葵花AV在线| 亚洲综合网区| 色情五月丁香| 久久五月天激情美女| www.婷婷五月天.com| 人妻熟女一区二区AV| 五月天婷婷綜合院| 内射综合网| 五月丁香 狠狠爱| 五月丁香亚洲五月| 无码激情AAAAA片-区区| 亚洲激情五月丁香久久久久| 天天日中文| 天天天操天天天爰| 野战J办公桌椅H| 嫩草AV久久伊人妇女超级A| 亚洲免费婷婷| www.97碰碰com| 五月丁香六月激情欧美综合| 成人在线观看一区| 丁香九月综合激情| www色婷婷| 久久九色| 婷婷丁香五| 五月丁香啪啪啪| 丁香五月停停基地| 久操人妻| 亚洲精品乱码久久久久99| 国产激情久久久| 五月停停999| 色五月婷婷丁香五月| 五月婷婷 婷婷五月 一区二区 久久久| A√天堂网在线| 丁香五月色| www.久久99| 日韩一级片| 9l视频自拍九色9l视频自拍九色9l社区| 九九热精品视频在线观看| 丁香婷婷五月人体| 色情五月婷婷| 六月丁香婷婷在线波多| 91xxxx九色| 五月丁香六月婷婷啪啪| 激情五月综合色| 深爱综合网| 91热er| 国精产品一区一区三区免费视频| 婷婷综合网站| 色碰干| 91久久婷婷| 九九热超碰| 亚洲色啪| WWW,婷婷,COM| 99热9| 97人人干人人操| 新99思思视频| 色综合色婷色基地| 五月天婷婷综合网| 91热网址| 国产丁香五月天婷婷| 色综合99无码| 色五月婷婷综合| 婷婷五月丁香基| 色天使久久综合| 亚洲综合另类| 婷婷五月天激情亚洲小说| 三日本无码| 丁香六月激情| 久久人妻情侣| 九九操操| 亚洲婷婷综合视频| 五月天婷婷色| 色99自拍| 人人草人| 呦呦v线| 色婷婷影视99| 欧洲色| 人人人人人人人草| 丁香六月婷婷综合| 欧美一线视频| 色和综合网| 99精品在线观看视频| 色五月激情五月丁香五月婷婷啪啪综合 | 婷婷永久在线| 日本色婷婷| 華人性愛AV在線| 五月丁香婷婷色播无码| 婷婷在线网| 亚洲性视频| 日韩AAA| 婷婷99中文字幕| 亚洲乱码日产精品BD| 婷婷久久丁香五月| 五月天网站免费欧美| 久久欧洲久久| 99久久精彩视频。| 丁香六月婷婷综合激情欧美| 黄色一级影片| 91综合在线视频| 欧美三级巜人妻互换| 午夜爱爱网站| 日韩精品一区二区亚洲AV观看| 五月天堂在线| 九九九九九九九热| 内射丰满人妻| 婷婷中文字幕版| 色六月婷婷| 香蕉色色网| 少妇做爰免费视看片| 97人人干人人操| 九九热最新视频| 99成人无码| 丁香五月激情六月欧亚激情综合导航| 九九综合伊人| 亚洲国产成人综合| 色五月成人| 五月叮香啪| 丁香五月综合网| 亚洲中文字幕网| 97碰在线| www.五月.com| 亚洲人人操| 99操碰| 日本三级大片| 久热九九| 五月婷视频| 丁香五月社区| 日韩丰满少妇无码内射| 婷婷婷婷婷婷婷婷婷婷丁香| 五月婷婷久久网| 国产精品色色| 国产午夜伦鲁鲁| 丁香五月影院| 天天日色情| 中文字幕操比影片| 欧美亚洲成人在线| 中文精品在| 99久久久久久www| 久久丁香社| 婷婷五月天首页激情| 亚洲久艹| 丁香五月婷婷啪啪啪| 日本啪啪天堂| 五月天婷婷青青| 亚洲人妻一区二区| 亭亭玉月丁香| 五月丁香啪啪网| 99精品视频在线观看| 青青草青青草五月天| 色色色九九九五月婷婷| 激情丁香久久久久久| 开心五月婷婷婷美女| 亚洲旡码| 人妻久久久久久久久妻久久久久| 这里只有精品1| 九九视屏| 色呦精品| 97碰人人操| 另类在线| 天天做天天爱天天做| 日韩啊啊啊| 六月丁香综合| 四川女人毛多水多A片| 精品久9| 亚洲视频无| 99玖玖在线视频| 深爱激情中文五月天av| 最新丁香六月婷婷| 婷婷五月丁香五月| 丁香婷婷性久久| 人妻爽爽爽久久久久久久久| 色婷婷激情五月天| 午夜一区| 日韩美女羞羞网站在线观看| 婷婷色播综合五月| www.五月婷婷久久.com| www天堂99| 五月丁香六月婷婷久久肏| 人妻射精AV| av操一操| 日日躁夜夜躁狠狠久久AV| 久久婷婷五月综合一| 激情AV| 激情九九综合网| 极品另类| 九九久久久综合| 激情综合久久| 激情综合五| 狠狠综合网| 色久一| www.夜夜操.con| 熟女激情五月天| 欧洲亚洲精品| 中文精品在| 色五月婷婷DVD| 欧美婷婷日本| 九九精品热播| 国产精品VA在线| 青草视频在线观看视频| 中文字幕黄色片| 曰日爽日日操| 激情综合网婷婷五夜| 黄网网站在线播放| 玖玖爱综合网| 精典久久| 五夜丁香| 天天综合91入口| 激情二色月| 久久这里有精品| 综合99久久天天综合| 色五月成人在线| 日日夜夜干| 狠狠色色综合| 欧美丁香五月| 欧美色图天堂网色| 99国产精品久久久久久久久久久 | 色婷婷免费观看| 涩涩激情五月婷婷| 亚洲热久久| 影音 五月 婷婷 久久| 丁香五月天在线视频| 五月丁香啪啪啪综合网| 丁香五月婷婷黑人妻黄色电影院| 婷婷色九月| 婷婷五月激情综合啪啪| 噜噜视频| 91人操人人人操人| 99热66| 久久九九经典| 丁香婷婷六月男男| 热99精品视频| 五月丁香色| 色综合区| 久久五月天婷婷| 九九99在线免费在线观看视频| 久热亚洲| 五月天社区| 婷婷五月免费视频| 人人摸人人| 五月天第四色开心色播| 在线色五月婷婷| www.婷婷五月天| 五月婷俺去也| 亚洲欧洲中文日韩久久AV乱码| 日日操夜夜爽白洁| 性爱激情综合网| 五月天堂在线| 91热视频色网站| 激情啪啪五月| 琪琪理论片| 裸体做A爰片毛片A片免费| caobi四区| 人妻丰满精品一区二区A片| 欧美性丁香色色五月天综合爱爱| 婷婷色色综合| 五月婷婷六月激情| 久热这里只有精品性色AV| 大香蕉久久| 五月丁香网中文字幕| 日本色色影片| 五月天丁香| www.五月婷婷| 亚洲乱码日产精品BD| 婷婷五月天男人影院色色网| 国产操B视频| 79精品视频在线观看,| 久久久久亚洲A∨成人乱码电影| 四LLL少妇BBBB槡BBBB| 九九热精品视频九九| 91婷婷五月丁香碰| 嫩BBB槡BBBB搡BBBB| 色婷婷激情视频| 久久婷婷激情四射五月天| 91色色色18| 蜜臀av无码久久久久久久久| 欧美婷婷精品激| 婷婷综合在线| 97丁香五月| 色月九九| 欧在线一区| 噜噜干日本| 狠狠干2007| 青青操日本摸摸看看| 超碰在线国产| 亚洲天天| 色高清无码视频| 殴美日韩成人| 丁香婷婷天堂| 在线播放成人网站| 操操国产| 久久婷婷综合五月趴| 五月天社区| 色天使色综合| 日韩成人无码| 思思精品视频| 操操国产| 婷婷五月天伊人| 天干天天干天天天天天| AA丁香综合激情| 婷婷丁香婷婷97| 涩五月婷婷| 欧美黄色AA片哗啦啦啦| 人人射av| 草美女在线观看视频在线播放 | 丁香五月情色| 九九干视频| 亚洲色就是色色色| 婷婷综合在线| 婷婷六月丁香五月| 久久人人超| 激情综合丁香五月| 五月婷婷综合在线视频小说| 激情五月色综合国产精品| 丁香六月久久| 色综合久久天天综合网| 成人一级片| 五月丁香日逼| 久久综合9| 最近免费中文字幕大全高清大全1| 五月天婷婷网站888| 五月丁香无码| 五月婷六月婷婷| 成人婷婷五月天| 大香蕉AV在线| 欧美日本VA| 综合大香蕉| 操人久久| aaa久久| 激情五月瑟瑟| 一级七香蕉| 国产亚洲99久久精品熟| 成人小说色图婷婷五月| 十二区无码| 欧美三级视频| WWW·色色色·COM| 日韩 中文 欧美| 成人中文字幕在线| 超碰在线观看99| 大香蕉五月天婷婷| 日韩无码专区| 天天操天天日天天爱| 99开心五月五月丁香激情| 日本三级中国三级99人妇网站| 亚洲另类婷婷综合| sS丁香五月婷婷| 色VA| 色小说五月婷婷| 五月永久激情| 天天视频亚洲| 任你搞网站| 大香蕉婷婷久久| 欧美va视频| 99ri精品视频在线观看| 99视频这里有精品| 99热热热99精品丁香| 五月丁香综合精品欧美| 五月婷婷六月丁香首页| 久久多色| 亚洲一色色色色色色色色| 另类图片激情五月天| 激情综合网,婷婷五月天| www.激情五月天com| 六月丁AV| 99日本精品视频热| 少妇人妻人伦A片| 影音先锋一区二区资源站| 激情国产五月| 99riAv1国产在线观看| 五月天综合网| 日日舔夜夜操| 这里只有精品视频99| 日本少妇裸体做爰高潮片| 91制片厂久久久国产电影| 国产亚洲色婷婷久久99精品9j| 五月天综合激情网| 婷婷五月永远18免费久久久| 思思99热| 超碰在线免费观看日韩| 久久婷中文字幕| 最新色色五月天| 久热这里这里有精品| 亚州精品久久久久AV无码| 久9视频免费播放| 六月激情网| 五月丁香六月综合图| 4399在线观看免费毛片| 伊人干练久| 成功精品影院| 少妇搡BBBB搡BBB搡毛茸茸| 久久色午夜在线导航| 日韩操人| 亚洲视色| 99riav 亚洲| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 97干在线看| 另类综合激情| 久久9视频| 天天日P天天射P| 九九色热| 丁香五月天视频| 免费视频WWW在线观看网站| 久久婷婷东京热| 五月丁香啪啪激情| 久热这里只有精品99re | 久久五月激情综合| 天天综合社区| 国产精品激情AV久久久青桔| 日本色色图| 中文AV网站| 97在线观视频免费观看| 色VA| 99爱在线免费视频| 丁香九九九九| 综合网啪| 99色免费| 色色色色色色色色综合网| 激情五月天网站| 7超碰自拍| 久久开心五月天激情| 丁香五月婷婷综合啪啪| 五月天成人在线视频丁香| 婷婷伊人综合中文字幕| 日本三级网址| 婷婷丁香五月在线播放| 性爱激情久久| 久久婷婷五月综合啪| 欧美S码亚洲码精品M码| 精品无码色欲AV| 99精品在线观看视频| 色婷婷88| 婷婷99中文字幕| 亚洲精品中文字幕成人片| 久久性爰视频这里只有精品| 色青青电影色五月| www狠狠| 色色色色欧美| 色五月色综合| 久久九久久| 色婷婷五月网| 97色 五月天丁香| 婷婷五月天伦理| 亚洲亚洲人成综合网络| 五月天婷婷自拍图片在线观看| 午夜丁香婷婷| 凹凸7777操操操| 色吧综合网| 九热在线这里有精品6| 久热大香蕉| 色网站99| 婷婷狠狠综合网入口| AV国产有码| 丁香花大香蕉婷婷综合| 综合五月婷婷| 色色五月天网站| 8区视频在线| 日本99视频| 精品婷婷| 天天色天天舔天天爱天天爽| 国产原创视频91九色| 欧美中文五月天| 七七色色综合| 久久xxxx| 第六色在线| 啪啪日热| 欧美色色色色色色| 人妻射精AV| 六月成人网| 天天摸色吧天天摸色吧| 9久热在线视频精品| 日日夜夜狠狠| 五月天激情av| 久久久18| 久综合4| 日本成人噜噜噜| 高清视频一区| 婷婷五月天免费99| 99久久婷| 亚洲第一视频 久久| 国产综合丁香五月天| 丁香五月区| 日韩成人五月天| 丁香五月婷婷婷桃花影院| 色色色色五月天| 天天干天天干天天干天天干天天干天天| 五月激情综合婷婷| 97色色色色色| 综合久久人妻| 天天搞夜夜叫| 婷婷久久婷婷| 98国产精品综合一区二区三区| 婷婷五月天激情诱惑| 思思热天天看| 狠狠干狠狠操狠狠爱| 91久久婷婷| 亚州性爱99| 色综合色综合网| 99se丁香| 天天做天天爱| 操操操Av| 亚洲六月婷| 久久精品视频99| 色九月综合| 丁香五月婷婷基地| 欧洲一区二区| www.亭亭五月天| 凹凸7777操操操| 色五月偷偷| 伊人久久丁香五月91| 91丨九色丨国产打屁股| 久久这里只有精品8| 久久五月人人摸| 欧美日韩国产伦精品日韩人妻一| 色欲色欲久久宗合网| 久久国产色| 婷婷五月精品中文字幕| 五月婷婷网五月在线| 亚洲视频色色| 丁香六月婷婷综合| 五月婷六月| 99久久五月婷婷| 99国产精品久久久久久久久久久| 久久XX| 婷婷丁香五月综合| 色五月婷婷影院| 日日操,日日爽| www色色com| 欧美色色色色色色色色色色| 激情五月天情色| 婷婷色影音天| 99国产精品久久久久久久久久久| 99无码| 综合啪啪| 色色色色五月天| 色综合五月| 99热无码首页| 99热只有这里有精品| 色综合色综合网| 人人综合五月人人婷婷| 天天操,天天插| 色。 婷婷婷| 色婷婷影视| 91综合在线| 色五月婷婷丁香五月| 成人av中文字幕| 99ri国产在线| 色吧五月婷婷| 狠狠操狠狠| 99久视频| 国产成人精品一区二三区熟女在线| 婷婷五月天综合网| 乱岳熟女50岁| 九九热9| 久久免费少妇高潮99精品| 国产精产国品一二三在观看| 99re欧美精品| 五月激情婷婷四射| 99ri精品在线| 91热在线| 色黑鬼导航| 久久五月天黄色五月天色网址| 天天日人人爽| 久久只有18视频| 蜜臀99精品| 97色在线观看视频| 色99网| 中文字幕按摩做爰| 69热91天堂| 婷婷五月乱交换| 婷婷综合色网| 超碰人人在线| 99色热视频| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 桃色激情网| 99久久婷婷国产综合| 天天综合色| 大香焦A∨| 东北黄色一级| 久久网站免费亚洲| 天天夜天天色天天| 亚洲熟女色| 久久性爱视频| 青青草Avb在线| 99精品激情| 天天爽夜夜爽天天爽夜夜爽| 五月天堂色| 精品一二三区久久AAA片| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 性一交一乱一交A片久| 亚洲殴洲精品Av在线| 婷婷五月香蕉| 丁香五月婷婷俺也要去| 97香蕉碰碰人妻国产欧美| 亚洲欧洲中文日韩久久AV乱码| 婷婷五月天丁香久久| 亚洲小视频免费观看| 99操逼| 超碰在线成人| 婷色视频| 人人干AV| 色情综合| 六月综合婷婷开心伊人| 性爱在线播放av| 亚洲综合五月天婷婷| 五月丁香综合网| CAOBIBI| 日本在线免费中文com.| 操操自拍| 五月丁香另类网| WWW,激情五月天,COM| Www.激情| 亚洲国产精品VA在线看黑人| 成人婷99最新| 99综合视频| 九九综合影音先锋 | 五月丁香色婷婷色| 色五月丁香91| 婷婷色五月天第7色| 五月丁香婷婷综合视频| 丝袜熟女一区二区三区| 青青热久精品视频在线观看| 人妻久久婷婷| 久久中国毛毛片爱久久| 国产精品蜜臀99| 99re久久| 日韩欧洲亚洲| 色五月成人| 亚洲视频另类| 婷婷激情五月综合丁| 噜噜噜久久| 97干欧美| 五月天天综合| 绿色小导航AV| 天天精品视频免费观看| 99久久超级| 五月婷婷久久激情| 91超碰人人操| 久草五月| 亚洲天堂久久| 91在线日| 色热久| 操比激情五月综合| 婷婷五月在线视频| 99热九九在线| 久久久27操| 亚洲有码在线视频| 丁香婷婷激情| www.色九月| 五月天色区| 麻豆精品| 激情综合五月| 亚韩在线视频| 99操碰| 97碰在线| 久热这里| 电影《战争与艾拉》免费观看| 狠狠色狠狠操| Av狠狠色丁香婷| 成片免费播放| 色欲丁香久久| 丰滿爆乳一区二区三区| 人妻无码精品一区| 99热这里有精品首页10| 大香蕉伊人99| 伊人影音无码一区二区三区| 色婷婷小说| 天天婷婷天天| 在线五月婷| 99视频精品在线| 影视av久久久噜噜噜噜噜三级| 99热在线精品播放| 这里只有精品偷拍| 久久久99精品免费观看| 狠狠色婷婷六月激情网| 亚洲欧美国产A片免费观看| 丁香五月婷婷六月丁香| 激情丁香婷婷| 亚洲亚洲人成综合网络| 欧美色爱五月天| 国产精品色婷婷99久久精品| 亚洲综合色色色| 亚洲婷婷五月草久| 丁香社92视频| 色婷五月天| 情欲综合网| 伊人热婷婷| 五月丁香六月婷婷网| 九九九午夜影院成人| 欧美人人超级碰| 日本五月婷婷| 99热99干| 五月天激情四射| 国产AV一区二区三区最新精品| 天天情色综合网| 91成人看片| 激情五月天色播| 婷婷丁香五月激情| 久鲁鲁色网| 99操网站| 五月婷婷性爱| 色五月激情五月天| 婷婷欧美偷拍综合| 日韩成人无码片| 天天日综合| 丁香五月欧美激情| 99热99成人| 久久国产AV| www.丁香五月| 九九色热| 啪啪婷婷五月天激情| 丁香五月黄色| 国产亚洲精品久久久久苍井松 | 色综合婷婷| 色婷婷中文| 婷婷久久五月天| 色女伊人| 欧美日韩AAAAA| 97色色综合| 男人操女人高潮91视频| 在线婷婷| 色五月婷婷久久| 国产激情综合五月| 日本乱论99| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 五月天亭亭俺也| 六月丁香激情最新更新| 开心五月婷婷激情| 91久草五月天婷婷| 成人无码精品1区2区3区免费看| 2017狠狠干| 五月婷婷开心综合| 另类丁香五月天区图| 啪啪啪综合网| 国产成人在线不卡AV| 婷婷五月综合丁香久久| 国产成人精品一区二三区熟女在线| 日日夜夜天天| 日日夜夜爽| 五月丁香色狠狠干大屄| 二人电影免费版在线观看| 人人操插| 五月婷婷丁香六月| 日本偷拍九九九| 国产毛片精品一区二区色欲黄A片| 综合啪啪| 中文资源在线a| 99热精品在这里| 婷婷色av| 人人草人人爱手机视频看看| 激情综合激情五月| 99热在这里只有免费精品| 91精品久久久久| 亚州操操| 色噜噜五月天| 91久久电影| 亚洲精品网址| 九九九九中文字幕| 五月综合激情图片| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 亚洲亚洲人成综合网络| 日韩久久视频| 激情九月婷婷| 婷婷五月电影| 六月婷婷激情| 色噜噜狠狠一区二区三区| 99久久婷婷国产综合精品草原| 欧美天堂久久| www.超碰在线| 五月天婷婷在线播放| 色婷婷狠狠| 天天狠天天叉| 啪啪一区| 香蕉久久av一区二区三区| 少妇熟女视频一区二区三区| 色噜噜狠狠色综无码久久合欧美| 天天色粽合合合合合合合| 激情五月天婷婷| 丁香六月婷| 少妇性按摩无码中文A片| 黑人巨粗进入警花疼哭A片| 色色欧美色色色| 高清免费在线视频| 国产永久一黄| 任你操精品免费| 超碰精品在线| 婷婷五月丁香高清无码| 亚洲色小说在线综合| 可以免费看的av网站| 精品久久久人妻| 任你操精品免费| 538在线精品| 免费无码毛片一区二区A片 | 99超级碰免费视频| 这里只有精品视频在线| 少妇人妻人伦A片| 色婷狠狠| 91精品无码| 有码人妻久久| 狠狠干综合网| 97碰碰人人| 亚洲欧洲中文日韩久久AV乱码| 超碰人人插| 91凹凸在线| 亭亭丁香久久五月| 国产日韩亚洲欧美在线观看| 久久婷婷五月综合啪| 俺去也婷婷| 亚洲综合碰| 欧美99热| www.俺去也com| 亚洲天堂大香蕉| 欧洲色| 热久免费视频9| 91五月天| 直接看的AV网站| 成人av在线网站| 精品久久穴| 亚洲天堂啪啪| 五月丁香综合精品| 五月婷婷激情网| 97天堂| 操人精品| 玖玖在线资源视频| 人人摸人人| 精品一二三区久久AAA片| 日韩AV中文字幕在线| 丁香婷婷六月激情文学| 婷婷成年人免费视频| 天天天天操| 99热第一页| 视频这里只有精品16| AV在线观看网站| 亚洲无码影音| ay2区| 九九热婷婷| 日本视频久久| 激情欧美婷婷| 天天干,夜夜爽| www.seqingwuyuetian| 中文无码婷婷| 99热这里只有精品2| 日本精品久久久久中文字幕| 久久色五月| 五月久久丁香| 国产精品人成A片一区二区| 婷婷99中文字幕| 91婷婷五月天嫩女| 疯狂做受XXXX高潮A片| 99视频内射三四| 天天插天天射| 91久久九| 九月婷婷丁香| 丁香五月婷婷啪啪| 亚洲AV网址| 亚洲va在线∨a天堂va欧美va| 人妻熟女一区二区AV| 国产1区2区3区在线观| 国产综合色婷婷精品久久| 区啪精品| 色婷婷六月天在线| 亚洲最大成人综合网720P| wWwCom夜操wwW| 97人人操在线| 9l视频自拍9l视频自拍九色学生| 婷婷五月综合激情免费视频| 风流少妇A片一区二区蜜桃| 掩去也综合五月视频| 97人人做| 久青操| 亚洲婷婷五月| 久热精品在看| 激情五月,激情综合网| 国产99久| A色色| 99热在线观看| www.伊人天堂偷偷婷婷| 激情六月天| 久久丁香五月婷婷激情综合网| 色丁香五月婷婷| YJLZZJLZZ亚洲乱熟无码| 青青草轻轻操| 欧洲综合视频| 婷婷香五月天| 6月丁香婷婷| 99热自拍| 国产日日夜夜操| 日本精品人妻无码77777| 五月丁香婷婷五月色| 无码激情AAAAA片-区区| 色情激情五月| 日本丰满久久| 五月亭亭开心网| 婷婷综合网性| 色婷婷超碰| 亚洲精品99| 六月激情婷婷| 五月亭亭六月激情| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 超碰93在线观看| 99久在线精品| 无码地址| 国产精品99久久久久久久女警| 丁香婷婷射| 丁香婷婷浪潮AV久久综合| 噜噜网免费视频| 性爱人人网| 国产成人av在线| 狠狠干天天内射| 日韩中文字幕| 丁香六月激情网C0W| 97久操视频| 色五月六月| 狠狠操天天操综合| 婷婷五月天综合久久日美女| 丁香六月婷婷| 九九热这里只有精品23| www久久久久久久久久久| 亚洲成人黄色网| 久天综合| 内射爽无广熟女亚洲| 天天爽天天做| 五月丁香精品| 99热热热99精品丁香| 丁香婷婷六月| 丁香五月在线伊人| 丁香八月综合激情| 99热这里都是精品| 777.色色| 欧美精品久| 色播五月天激情| 大陆肏屄视频| 久热中文字幕| 男同91| 五月丁香啪啪啪| 激情深爱综合| 黄色aa观看aaguochan| 色综合色五月| 人妻尝试久久久久久久久久久久| 天堂综合久| 亚洲亚洲人成综合网络| 色香欲综合| 九九这里只这里只有精品| avv在线| 五月综合久久| A久久| 国产欧美婷婷五月| 九九色播五月丁香| 欧美成人AAA片一区国产精品| 亚洲精品永久久久久久| XXXX岛国| 婷婷久久综| 狠狠色 综合色区| 大香蕉啪啪网| 久久色情综合免费网站| 天天日夜夜B久久| jiujiujiuwuyuetian| 99精品偷自拍| 婷婷综合在线| 亚洲精品婷婷| 另类小说五月天激情| 97综合在线| 性爱七区| 超碰人人在线观看| 色综合久久888| 日本久久精品18| 人人草人人视| 狠狠狠人妻| www.激情| 婷婷终合色图| 99久久国产综合精品五月天喷水\| 俺去也综合| 婷婷狠狠18禁久久| 亚洲99热| 99色看| 五月丁香婷婷福利| 五月丁香啪综合| 潮汕成人AV片在线| 九九在线热九九在线热99热| 久久五月天综合| 丁香六月狠狠干| 丁香五月六月综合激情| 快色t v在线入口| 色青青五月| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 欧美精品啪啪| 久久免费试看120秒| 亚洲AV日韩在线观看| 国产欧美日韩综合精品一区二区| 99这里只有精品|v| 99热这里只有精品1025| 26uuu国产| 亚洲成人人人操| 999影院成人在线影院| 五月天成人手机在线视频| 另类综合激情| 五月激情六月| eeuus五月婷| 婷婷激情肏屄网| 丁香五月综合高清在线| 99熟女| 婷婷五月天色色| 欧洲亚洲免费视频9| 棕合影院色色| 久久作爱| 91精品无码| 99在线热| 五月天婷婷综合久久| 婷婷五月天最新综合你懂的 | 五月婷婷丁香综合网| 五月综合影院| 五月丁香婷婷激情澎湃四射| 丁香五月亚洲综合| Va另类视频| 色色综合视频| 91精品综合久久久久久五月丁香 | 婷婷丁香成人五月天| 色五月婷婷激情基地| 99久精品视频| 黄网免费看| 婷婷免费精品视频| 人妻内射麻豆视频| 色婷婷狠狠色| 天天摸色吧天天摸色吧| 久久久久久综合88| 99re在线免费视频| 老师把我爽高潮了免费A片| 女人天堂久久| 91丁香五月| 久久亚洲婷婷| 色色色视频免费无码 | 中文网AV| 丁香久色| 欧美日韩AAA| 久久精彩视频| 新97人人上人人| 9l视频自拍9l九色成人| 国产午夜成人免费看片无遮挡| 久久九网| 丁香五月色网| 欧美在线骚货| 五月丁香激情欧洲啪啪| 五月丁香婷婷视频| 91九色在线| 激情五月综合| 超级碰碰碰久久网站视频| 色9月| 91美女被操| 黄色99网| 丁香五月香蕉| 伦乱天堂| 六月成人网| 91嫩草久久| 精品九九在线观看视频| 97韩国久久电影院| www.99日本| 亚洲精品99| 丁香五月www| 亚洲中文丁香| 这里只有精品网站| 99超级碰免费视频| 综合色五月亭亭| 婷婷玖玖五月天| 99热在线免费观看精品| 丁香五月婷婷视频| 国产人妻人伦精品一区二区| 69人人操人人爽| 思思99热这里只有精品| 五月天成人在线播放丁香| 日韩人妻在线观看| 国产精品美女久久久久AV超清| 九九亚洲无码| 五月的丁香六月的婷婷| 婷婷五月在线视频| 最新高清无码专区| 碰97久久| 丁香五月激情性色郤| 亚洲激情av| 99久热视频在线| 99热九九这里只有精品| 天天做天天爱天天要| 中文字幕在线日亚州9| 亚洲色图日韩网址| 九九视频热| 操一操干一干| 人人操操| 久久这里只有精品网| 九九碰九九爱97| 久久99免费视屏| 欧美99热| Av九九| 俺去婷婷 丁香| 狠狠色丁香婷婷基地| 激情色播| 97久久久免费福利网址| 99re思思热这里| 五月婷婷,六月丁香| 久久九九re热| 五月婷婷免费视频| 99热91| 99视频久久| 成年人最刺激的综合网| 狠狠五月婷婷| 青青热久久综合| 九九99免费视频| 国产美女主播vip| 秋霞三及片| 怎么样可以看免费的一级av| www.激情在线| 色综合婷婷| 久久伦乱| 天堂网啪啪| 美女xx不卡| 夜夜做夜夜愛| 国产精产国品一二三在观看| 美女va| 婷婷开心激情| 九九九日本熟女| 超碰免费大香蕉| 色色色地址| 久久亚洲无码| 亚洲精品永久久久久久| 国产女人十八水真多1| 99色爱| 九九精品丁香花| 婷婷五月色丁香在线看| 久久久天堂国产精品女人| 一區四區歐美日韓| 大香蕉九九| 99re热| 国产亚洲精品AAAAAAA片| 婷婷美女精品视频| 最近中文字幕大全免费版在线| 婷婷五月天伊人在线| 色色五月天激情| 99热99热在线观看| 精品国产乱码久久久久夜深人妻 | 日本久久久97| 夜夜操,天天撸| 色婷婷五月天无码视频|