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
返回資訊列表
五月婷婷色丁香| 激情av| 欧美亚洲成人在线| 天天艹夜夜艹| 97操碰碰无码视频| CHINESE熟女老女人HD视频| 亚洲啪视频| 五月激情婷婷综合| 国产激情综合五月久久| 538在线精品| 久久只有精品| 久久99网| 色婷婷丁香| 丁香 婷婷 激情 综合 五月| www.婷婷激情网.com| 蜜臀嫩草| 狠狠搞五月天| 日本黄色精品| 99精品在线播放| 中文字幕日韩无码制服诱或| 九九十99视频| 超碰在线观看三级片| 五月婷婷在线网站| 五月丁香婷婷综合久久| 日曰躁夜夜躁2026| 欧美婷婷五月丁香| 99操逼| 操操熟女| 国产在线激情视频| 五月婷婷色欲| 99热热热99精品丁香| 色XX综合网| 涩综合网| 久久爱综合| 久热久| 五月丁香成人| www,色中色| 久碰综合| 丁香五月玖玖| 激情网色五月| 大香蕉九九操| 97干网站| 91久久久久久| 色天天狠狠干| 国产激情久久久| 日韩在线观看亚洲| 综合久久伊人| 青青草99re| 亚洲欧洲中文日韩久久AV乱码| 婷婷综合网| 丁香六月视频| 九九热99热| 五月 婷婷 成人| 五月丁香婷中文| 五月久久丁香| 色网五月婷婷| 97碰在线免费观看| 亚洲视99| VA五月激情在线| 日本理论久久| 色婷婷黄色网络| 国产99久久久| 五月婷婷我| 婷婷五月天在线看| av网站中文| 就爱射中文字幕资源网| 久久婷婷丁香| 国产激情在线| 九九青草热| 97韩国久久电影院| 国产婷婷综合在线免费视频| 日日爽夜夜爽| 99热久久这里只有精品| 天天操天天插天天射| 五月久久| 91九色欧美| www.久久久久久| 婷婷五月天AV| 99视频在线精品免费观看2| 成人婷婷深爱综合网| 五月婷婷六月激情网| 六月婷婷五月丁香首页| 日本美女天天日天天爽| 99久久激情视频| 综合色影院| 99色精品| av亚洲国产小电影| 99碰网站| 亚洲国产精品成人免费一区久久久在线观看AAAA| 欧美久人人| 婷婷久久五月天丁香| site:xmssd.com| 99热精品少| 日本色婷婷综合| 婷婷激情五月天激情在线| 熟女婷婷网站一婷婷五月一丁香婷婷一婷婷激情网 | 婷婷操逼网| 久久久久这里只有精品| 99ree6| 婷婷综合九月| 婷婷五月中文字幕国产| 人妻久久久久久久久久| 69色婷婷| 亚洲色另类| 91chinese在线| 伊人干综合| 天天插天天插天天插天天插| 色色丁香婷婷五月天| 9精品在线| 色婷婷六月开心中文字| 囯产精品久久欠久久久久久九大| 碰人人97| 五月丁香在线偷拍视频| 狠狠的日| 色五月婷婷影视| 婷婷五月色惰| 五月婷婷天天色| 无码激情精品色婷婷久久久久| 天天插天天插| 色婷婷小说| 久久免费高| 色综合色色色色| 天天插综合在线| 五月天婷婷操逼视频| 激情图片五月天| 激情婷| 五月天三级| Www99热| 99热情这里只有精品在线播放| 情久久综合五月天| 色9999综合久久| 91碰| 99在线小视频| 成人片在线播放| 五月丁香六月婷婷综合伊人| 色综合色色| 综合色婷婷| 国产高清精品色| 婷婷在线视频| 五月婷婷性爱| 26uuu成人网| 99热超碰在线| 国产精品美女久久久久AV超清| 婷婷综合五月| 久久99久久99精品免观看粉嫩| 99久久9| www.婷婷六月天| 婷婷五月婷婷| 久久99草五月婷婷| 天天舔天天操| 成人做爰A片免费看视频| 超碰人人艹| 丁香激情五月天| 久婷自拍视频| 9久精品视频| 香蕉网久久| 激情文学五月丁香六月婷婷| 五月丁香六月激情综合| www.五月丁香| 天天cha成人综合网| 丁香五月婷婷五月| 我要看激情五月天| 蜜桃婷婷狠狠久久| 中文在线成人| 97色色色色色色色| 色婷婷色综合久久精品V| 色伊人啪| 欧美一级色| 青青热久精品视频在线观看| 美女被肏网站在线看| 五月天伊人av| 涩婷婷视频快播人妻| 婷婷五月天天天| 日韩高清久久| 九色91国产| 国产成人精品一区二三区熟女在线 | 激情综合网之激情五月| 亚洲综合色成丁香五月色| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 丁香五月另类小说在线阅读| 丁香六月欧美| 日日日日日| 天天干天天 亚洲| ou洲色吧| 欧洲第一无人区观看| 日本 欧美在线| 99九九视频| 2020久久婷婷五月| 91免费看片| 五月天丁香| 成人性爱精品视频| 色5在线| 日本操B视频| 玖玖热视频| www色色com| 免费无码毛片一区二区A片 | www.九九婷婷| 色屌丝中文字幕| 色五月成人网| 婷婷五月天播| 五月丁香婷草| 成人片在线免费看| 免费看欧美成人A片无码| 99综合网| 丁香五月婷婷深爱综合激情| 五月花激情网| 国产成人综合亚洲| 色色婷婷五月天| 久久婷婷五月天激情唯美| AV网站免费在线| 色婷婷呢狠禁久禁| 婷婷色综合| 婷婷五月天综合在线 | 五月婷婷手机在线| 久久网站免费亚洲| 91精品婷婷国产综合久久| 搡BBBB搡BBB搡18| 狠狠干在线| 操丝袜视频影院导航| 色婷婷综合久久久久| 亚洲AV成人片无码网站| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 亚洲AV人人操| 激情五月激情综合网| 色婷婷成人影片| 成人av观看| 丁香五月花影院| 久久色五月天综合网| 成人av免费观看| 99干在线| 色婷婷啪啪| 欧美肉大捧一进一出免费视频| 国产.亚洲.欧洲视频在线| 丁香五月天欧美在线| 五月天社区| 色综合av超碰| 1024成人在线观看| 9999热在线免费观看| 99五丁香月| 成人午夜天| 狠狠综合| 狠狠综合网| 久久五月激情| 综合色色网| 狠狠干在线| 婷五月天| 97婷婷丁香| 99精品热| 日本三级黄色大片| 五月天啪啪啪| 这里只有精品久久| 激情丁香六月| 丁香婷婷色五月| 欧美六月| 久久精品99久久久久久| 色情综合| 国产亚洲在线| 在线视频区| 北京熟妇搡BBBB搡BBBB| 激情婷婷激情在线不卡| 九九九九九九综合| 五月丁香啪综合| 九九99热| 婷婷国产综合| 玖玖综合色| 丁香五月开心亚洲| 天天综合亚洲综合网天天αⅴ| 六月色婷婷色| 人妻肉射免费观看| 亚洲操操操| 狠狠久综合| 五月天成人在线| 五月综合影院| 99热天堂| 婷婷成人五月天| 人妻AV中文系列| 五月丁香本色在线观看| 99热超碰人| 性爱激情久久| 婷婷五月天性爱视频| 色丁香五月婷婷综合久久| 婷婷综合九月| 久久在这里有精品| 久久婷婷综合五月趴| 欧美成人va| 九九久久99| 久热91| 日99网站| 91色综合| 99在线小视频| 激情五月婷婷| 激情视频综合| 丁香5月啪啪| 久色婷婷200| 九九视频这里只有精彩| 久久这里只精品| 国产亚洲在线观看| 1囯产午夜仑鲁鲁| 91久久久久久| 五月丁香六月婷婷啪啪| 久久免费操| 日日婷婷不卡| 狠色狠色综合久久| 这里只有精品视频99| 免费看欧美成人A片无码| 婷婷伊人75| 婷婷五月天av网| 玖玖资源站蜜臀| 日本色天堂| 久久小说| 丁香五月情色| 婷婷六月天天| 亚洲123区高清入口| 男女99免费视频| 桔色成人官方网站| 99热手机在线精品| 五月天婷婷伊人| 深爱五月天天| 久久婷婷五月天| 久久99jiu9| www.激情五月天.com| 激情五月天婷婷丁香| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 狠狠色婷| 激情五月六月丁香| 亚洲操逼网| 香蕉97碰碰碰超视精品| 色婷婷婷婷五月天| 99欧美精品99日本精品| 思思久久96热在精品国产,| AA久久| 亚洲正能量欧美| 欧美婷婷| 人人看人人草人人摸| 色综合色五月| 婷婷五月天激情综合| 亚洲色A| 国产精品色色| wuyuedingxiang99| 久久九九综合| 婷婷五月天中文字幕.| 99热这里只有精品55| 欧美日韩成卜| 亚洲成人电影aaaa| 亚洲无AV在线中文字幕| 26uuuavcom| 99激情视频| 91色逼| 天天天天天天操| 五月久久丁香| 天天爽天天摸人妻综合网| 91色综合| 777色婷婷爱五月| 超碰在线观看9| 久热久re| 久久久久久激情| av成人在线播放| 久久99激情丁香婷婷小说网| 在线中文亚洲| 丁香五月婷婷啪| 97极品在线| 亚洲免费婷婷| 在线另类视频| 久久精品99| 人妻爽爽爽久久久久久久久| 色色99| 九九精品这里只有| 极骚大香蕉伊人| 严洲天天插| 欧洲亚洲精品| 日本色婷婷五月天成人电影| 91色综合网站在线| 91精品久久久久、久五月天| 色五月综合在线| 人妻22p| 久久精彩综合视频| 操操操B| 99思思热只有在这里看| 9久久久久久久久久久| 婷婷五月天亚洲综合| www.婷婷六月天| 五月天精品视频| 99热久只有精品首页| 无码成人AAAAA毛片AI换脸| 特级片神马电影| 大香婷婷| 婷婷色播婷婷| 天天操人人干| 丁香五月激情啪啪| 超级碰碰碰久久网站视频| 色99色| 激情丁香社区| 久cao香蕉影院| 精品久久艹| 伊人综合色干| 91久久日日| 五月开心久久| 精品99爱免费视频在线观看| 色婷久九| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 五月婷婷深深爱| 丁香五月天天哦| 欧美A级成人婬片免费看理论| 五月天综合在线观看| 婷婷色丁香五月| 国产亚洲精品AAAAAAA片| 五月天 另类图片| 五月天婷婷av| 婷婷五月丁香四射| 激情综合一| 五月丁香婷庭在线| 五月天丁香啪啪综合| 日韩熟女啪啪视频| 天天干天天操天天拍| 五月激情基地| 欧美成性色| 操日本色| 99精品综合| 亚洲色视频| 激情VA视频| 亚洲色9| 激情五月天福利| 99这里只有精品|v| 亚洲色婷婷| 五月激情久久综合| 婷婷开心深爱五月天| 精品九九久久| 影音先锋91网站在线观看| 亚洲熟女色| 色射婷婷五月天| 五月六月播婷婷| 99玖玖人人| 樱花99视频| 狠狠久久婷婷| 久久久久久9热不雅视频| 激情五月婷| 人人摸人人澡人人| 能看的av网站| 天天插综合| 亚洲 无码 中文字幕 中出 | 九九婷婷综合| 婷婷在线视频| 久久这里有精品| 激情综合亚洲色婷婷五月| 欧亚色色| 久色视频在线| 久久视屏这里只有久久| 久久中文人妻系列| 色噜噜狠狠色综合AV兰草影视| 婷婷色偷拍| 丁香花五月天婷婷成人社区| 亚洲第一成人无码A片| 久久综合五月天| 婷婷五月色综合| 色五月婷婷五月| 九九色综合九九色| 青草青青草| 六月丁香成人网| 97久久香草精品视频| 精a品a视a频| 婷婷五月大| 狠狠色综合网| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 婷婷激情五月天激情小说| 最新无毒无码AV| 无码成人播放器| Blackedraw视频一区二区| 99久久久| 丰滿爆乳一区二区三区| AV大片在线观看| 任我肏视频精品| 九九热99精品| 五月婷婷导航| 婷婷99中文字幕| 六月婷婷激情| 99国产精品久久久久久久久久久 | 亚洲av电影在线| 久热A片| 热99热久| www.五月婷婷.com| 天天开心天天色| 五月伊人综合| 密桃激情五月天综合网| 亚洲va成人va成人va在线观看| 99乱视频| 久久伊人五月天| 欧亚成人A片一区二区| 成人国产欧美大片一区| 日都一级A片| 日本啪啪网| 欧美五月丁香在线| 婷婷五月天狠狠| 日本狠狠色| 情色五月天网站| 色五月婷婷在线| 综合色图婷婷| 婷婷五月天堂| 操操操操操电影网| 99乱视频| 久久久亚洲精品一区二区三区浴池| 亚洲色频| 天天人人综合| 色五月中文网| 亚洲操操操| 狠狠色中色| 99久久久免费| 这里只有精品视频99| 99精品久久久久久久婷婷| 丁香五月激情综合| 成人免费在线电影| 中文字幕簧片| 色综合九九| 羞羞嫩草视频| 无码se| 狠狠色噜噜狠狠| 91色久| 美女被肏网站在线看| 大香蕉九九| 婷婷噜噜| 少妇大叫太大太粗太爽了A片| 久久久久久久五月| 丁香五月激情六月| 欧美婷婷丁香五月社区| 99精品久久久久久久婷婷久久 | 色情五月综合婷婷| 亚洲色图在线视频| 丁香六月成人网| 99九九99九九九视频精彩| 影音先锋日本三级资源| 丁香午月AV中文字幕| 九九这里有精品| 国产精品久久久久久久久久免费 | 天天爱天天秀天天做| 福利视频在线播放| www.99久| 五月狠狠| 九月大香蕉| 九九视频精品在线免费| 五月丁香大香蕉| 97亚洲婷婷| 五月丁香婷婷激情澎湃四射 | 999激情视频| 丁香五月婷婷综合激情啪啪啪| 久久这里在精品视频| 免费精品99| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 秋霞性爱AV| 99情色五月天| 能直接看的AV网站| 五月丁小婷婷激情四射| 六月五月婷婷| 色涩视频久久| 丁香五月激情性色郤| 激情五月婷婷| 亚洲中文丁香| 日本九九九九| 激情五月综合视频| 激情四射五月天| 五月激情视频| 九九精品免费| 婷婷五月天视| 中文字幕人妻熟女在线| 日本色婷婷综合| 五月丁香在线| 五月婷婷精品视频| 波多婷婷久久| 激情综合激情五月一起草| 123日本不卡在线| 伊人五月久久| 99超碰欧美| 亚洲免费99| 丁香五月婷婷五月基地| 激情五月婷婷色| 极品少妇婷婷五月| 五月丁香成人小说| 色玖玖爱| 丁香五月天堂| 欧美激情2025| 精品一区二区三区三区| 日韩成人AV在线播放| 九九综合伊人| 99热超碰在线| 亚州性爱99| 婷五月天| 99自拍视频在线观看| 成人五月天综合网| 99精品视频在线观看| 九九精品在线网| 综合 蜜月 婷婷| 婷婷五月天基地| 色琪琪一综合久久激情五月视频| 五月婷婷色播| 。久久久久久久久久久久久久人妻| 丁香五月婷婷综合激情啪啪啪啪啪啪啪| 六月丁香五月天| 五月婷网| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 久久久久久久久久婷婷| 亚洲AV网站| 5月婷婷综合| 色婷婷丁香女女| www.夜夜操.com| 97人人操人人干| 99ER热精品视频| 精品久久66| caop在线视频| 免费一区二区三区| 婷婷色色五月| 欧美激情综合色综合| 天堂在线9| 国外亚洲成AV人片在线观看| 女高怪谈在线观看| 极品色丁香| 五月丁香另类网| 这里只有精品视频99| 五月婷婷啪啪网| 五月伊人网| 91操黄| 丁香六月婷婷| 日日操夜夜撸| 99视频精品8 | 五月丁香婷婷综合激情基地| 狠狠色丁香久久| 嫩草AV久久伊人妇女超级A| 婷婷五月天无码| 99人这里只有精品| 另类图片激情五月| 色八戒操婷婷| 亚洲精品又粗又大又爽A片| 欧美色色色色色| 丁香伊人激情| 国产激情久久| 97色女人在线| 丁香婷婷久| 日本天天操| 激情亚洲婷婷| 99精品性爱| 五月色婷婷综合丁香精品无遮挡| 天天日夜夜欢| 99热一本久道| 二区成人视频| 五月婷A V在线| 激情影院丁香五月| 99人妻碰碰碰久久久久禁片| 狠狠xx| 亚洲射激情| 99er这里只有精品视频| 色婷婷综合久久久久| 1234操逼网| Aaa久久| 日本猛少妇色XXXXX猛叫| 激情小说五月天| 婷婷大乡焦噜噜| 夜夜夜夜夜操| 婷婷五月天黄色小说| 99热精品一区| 黄色99网| 日日婷婷不卡| 狠狠999| 五月天婷婷自拍图片在线观看| 日本片日本片祼观看网站在线看中文版网页在线看 | 99精彩视频在线观看| 亚洲无AV在线中文字幕| 内射爽无广熟女亚洲| 狠狠操天天干| 精品亚洲国产成AV人片传媒| 亚洲国产精品VA在线看黑人| 国外亚洲成AV人片在线观看| 青柠影视免费高清电视剧| 开心激情婷婷| 99精品视频在线观看| 国产欧美精品AAAAAA片| 五月网站| 老司机视频lsj爱就色| 久久久久久久久久久久久久久久一道本| 欧美成人AAA片一区国产精品 | 午夜一区| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 激情综合网五月激情| 狠狠丁香| 俺去也婷婷| 亚洲第一成人无码A片| 丁香六月在线综合| AV片在线观看| 亚洲AV永久无码影院黑人| 婷婷综合在线视频| 97人人做| 精品国产va久久久久| 婷婷六月丁香色| 欧美日本一区二区三区| z色五月播播久久| 97碰久久| 99热| 日本97在线看片| 色欧美日| 天天情天天狠天天透| 激情婷婷人妻| 看国产探花操逼三级片| 久久久久亚洲AV无码网影音先锋| 另类激情中文| 2025超碰| 91.com男女操| 天天爱天天做天天舔| 五月丁香花激情综合网| 99九九精品视频| 99自拍视频| 综合久久婷婷99| 婷婷五月丁香综合激情| 噜噜噜噜噜日本视频| 丁香五月冃欧美| 操操天堂| 69超碰在线| 激情五月婷黄版| 婷婷五月深情丁香深爱日韩| 五月丁香AV在线| 日韩成人AV在线播放| 少妇被躁爽到高潮无码文| 月色色综合婷婷网| 丁香六月av| 天天色噜| 国产小精品| 99色日本| 噜噜噜色噜噜| 91婷婷丁香| 婷婷五月天丁香综合网| 99re这里只有精品9| 91精品久久久久久综合五月天| 开心五月婷婷激情| 天堂网操| 天天日人人| 99成人| 成人国产欧美大片一区| 伊久久婷婷| 亚洲成人va| www.婷婷五月天| 亚洲九九婷婷| 午夜电影网VA内射| 激情五月综合| 91热久久| 婷婷五月天美女21p| 影音先锋日本三级资源| 丁香五月婷婷久久综合激情网| 丁香五月五月婷婷| 日本久久色| 五月激情婷婷开心五月| 五月婷色| 色综合狠狠色| 天天综合亚洲| 大香蕉伊人丁香五月| 在线观看五月婷婷网| 久久丁香五月| 99精品偷拍视频| 台湾佬天天日丁香婷婷五月天 | 久777| 五月婷色| 超碰免费人妻| 91亚洲天堂| 色五月综合婷婷| 五月激情小说| 亚洲艹网| 99热一区| 激情婷婷五月久久| 亚洲色综合| 激情五月天啪啪| 综合色色色| 九九久久久综合| 亚洲婷婷乱乱丁香| 婷婷在线中文字幕| 九九亚洲小视频| 99热精品在线观看| 婷婷五月 丁香六月| 亚洲色热| 热久久成人| 五月天成人综合| 五月婷六月综合在线观看| 婷婷午夜天| 成人看片网站| 丁香婷婷六月| 婷婷久久免费看| 亚洲V国产V欧美V久久久久久| 婷婷激情六月综合| 丁香五月天久久| 久久这里有精品在线观看| 在线播放 精品| 99热日韩| www.com任你艹| 天天做天天爱天天爽| 婷婷五月激情综合啪啪| 色五月激情| 91视频五月丁香| www.超碰在线| 4399在线观看免费高清电视剧| 9色在线| 五月丁香在线精品| 在线一起草av| 午夜成人综合| 噜综合| 国产看真人毛片爱做A片| 五月婷婷综合潮喷| 91久久九色| 另类图片天天影视在线观看| 激情五月第四色| 国产国产乱老熟女视频网站97| 久噜久噜| 欧洲精品爱爱| 色婷婷综合网| 婷婷五月丁香综合人妻| 伊人狠狠色婷婷综合丁香一区| 夜夜躁婷婷AV| 玖玖资源部在线播放| 欧美天堂婷婷日韩| 91丨九色丨丰满人妖| 综合欧美五月婷婷| 国产jd1024基地手机看国产| 婷婷成人五月天| 思思久久99热| 狠狠色噜噜狠狠狠狠狠色综合久久| 天天综合网站| 电影蜘蛛女| 嫩草哈哈操| 婷婷狠狠干| 欧美亚洲操逼| 9999三级片| 久久久av久av久片一区二区| 天天噜| 九月婷婷综合八月丁香在线观看| 大香蕉视频婷| 思思热在线观看| 国产精品香蕉| 五月丁香六月色婷婷综合五月天| 天堂网亚洲色图| 五月天停停日日| 99热这里只有精品在线观看| 丁香五月婷婷色播艳门照| 91无码视频| 婷婷丁香无码专区| 久久丁香五月婷婷| 婷婷五月18永久免费视频| 亚洲永久四色| www.AV在线| 国产毛多水多女人A片| 色爱综合网| 色婷婷色情| 97久久超碰| 丁香五月婷婷激情中文| 丁香五月av| 综合色五月天| 狠狠插日日干撸| 思思网站| 久久久WWW| 成人国产网站| 五月婷婷视频| 六月激情婷婷| 中文字幕人妻在线| 久久er99| www.狠狠干com| 99久久66| 婷婷丁香五月麻豆| 天天透天天干| 色一色综合| 狠狠五月天| 日本三级黄色大片| 五月婷婷视频在线观看| 婷婷五月天六月| 狠狠草婷婷| 婷婷啪啪| 午夜成人天堂久久无码日韩久久| 91AV视频| av在线免费播放观看| 色五月激情五月| 五月综合色| 久久精品99| 久久狠狠干| 久久久无码精品成人A片小说| 激情五月婷婷综合色播小说| 色婷婷五月天天天做| 色六月天天激情综合网| 五月丁香色情| 97久久久| 婷婷色在线观看| 五月综合激情| 天堂色婷婷| 超碰在线免费9| 91pornav在线| 99热综合色图| 五月婷婷天堂| 成人一级片| 色丁香婷婷| 九热精品| 色色色色综合网| 97操在线视频| 99这里只有精品视频免费| 爱射综合| 成人操呦av| 久久婷婷丁香五月一二三| 深爱五月综合网| 男人天堂亚洲综合| 婷婷婷五月天最新综合你懂的| 狠狠干狠狠干狠狠干狠狠干| 开心五月丁香啪| 五月丁六月婷| 色婷婷五月天视频在线| 五月花激情| 九九热精品| 激情综合网址| 99热色精品| 国产毛片欧美毛片久久久| 五月婷婷狠天天色综合| www.久久66| 久久人妻www| 丁香五月人妻| 色婷婷丁香五月| 九九激情网| www,奇米影视| www.色色com| 日本在线视频播放91| 婷婷激情综合网| 久鲁鲁色网| 激情亚洲色图片丁香综合| 色色色国产| 日日夜夜天天| 99热久| 国产婷婷婷| 亚洲AV无码影院| 丁香九月婷婷综合| 天天婷婷天天| 久热这里只有精品6| 97香蕉碰碰人妻国产欧美| 91欧美| 久久33视频| 91超碰在线观看| 天天天天天操| 99色视频| 免费视频无码| 久热婷婷在线视频| 婷婷亚洲日本| 色婷婷裸体色性在线| 99九无网码| 亚洲欧洲中文日韩久久AV乱码| www.玖玖婷婷在线| 丁香五月激情啪啪| 丁香五月天激情网| 99在线精品观看99| 激情综合色婷婷啪啪五月天| 五月天综合久久丁香91| 五月丁香婷婷无码A∨| 99久热这里只有精品| 久久伊人五月天| 婷婷六月香| 丁香九月久久| www夜夜操comwww| 九九免费视频| 亚洲国产成人AV在线| 激情网站五月| 五月久视频| 国产又爽又猛又粗的视频A片| 99九九中文字幕视频| 亚洲熟妇AV综合网五月丁香伊人 | 丁香五月av| 91超级碰人人操| www久久五月com| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 色狠狠综合| 日本视频欧美观看免费| 激情五月六月婷婷综合啪啪| 夜夜大香蕉婷婷丁香| 五月婷婷综合激情小说| 91丨九色丨国产打屁股| 小视频久久久aaa| 色欲一区二区三区精品A片| 天堂在线9| 99热无码首页| 国产精产国品一二三在观看| 久久久人妻人伦| 天天人人人人人人人人人人人| 久久婷婷青青草| 色色综合成人网| 狠狠爱婷婷爱| 亚洲免费电影2| www.思思99热| 亚洲妇女熟BBW| 久久久97| 色天堂A| 97操男人的天堂| 五月丁香亚洲综合网| www.色综合| 色婷婷丁香五月| 国产婷婷五月天| 日韩精品无码AV| 我要看激情五月天| 成人美女网| 青草性爱视频| 99热.com| 99精品国产热久久91色欲| 九九99热久久精品66中文字幕| 五月丁香婷婷激情图片| 米奇影视资源婷婷狠狠色激情欧美五月丁香 | 97精品欧美91久久久久久久| 久色资源| 中文字幕天天干| 99亚洲无码| 99视频综合网| 狠狠干综合网| 伊人五月天婷婷| 香蕉久久av一区二区三区 | 这里精品| 九九激情| 亚洲va欧美va天堂v国产综合| 亚洲欧洲美女在线观| 五月丁香六月欧美| 久热A片| 五月婷婷AV| 密视AV综合在线| 欧美婷婷五月丁香| 99艹精品在线观看| 久久久久er热| 99久久五月丁香野外| 五月天激情视频| 超碰在线9| 大香蕉五月婷婷| 99操久久| 日本色五月| 色婷婷五月天激情在线播放| 国产乱人偷精品人妻A片| 色婷五月| 极品九九九九九九| 九九热99熟女| 激情五月天久久丁香| 九月色婷婷| 天天干天天干天天干天天干天天| 国内自拍97在线| 五月性色| 婷婷丁香97| 亚洲高清在线| 五月婷婷六月奇米网丁香| 久久久久视剧HD| 久久久无码精品成人A片小说| 香蕉婷婷| 性做爰1一7伦| 99er热精品视频| 99欧州偷拍视频| 久久香蕉影院| 五月丁香花激情综合网| 激情亭亭五月| 九九热最新视频| 九九爱看亚洲| 久久九精品| 亚洲色频| 婷婷五月六月激情| 五月婷婷亚洲| 亚洲V国产V欧美V久久久久久| 五月丁香AV在线| 亚洲AV中文在线| 99在线精品免费视频| 青草激情综合| 99亚洲精品视频在线观看| 极品人妻VIDEOSSS人妻| 婷婷五月天六月丁香| 99精品久久| 精品99*| 91操网| 人人人操B超碰| 亚洲区视频| 热日韩欧美| www.99久久久| 国产另类综合| 久久九九爽| 国产在线网址1| 婷婷色婷婷| 99亚洲色色| www久久99com| 日本三级网址| 亚洲无码色| 久热69| va婷婷在线免费观看| 另类A片| WWW.五月com| 色情五月婷婷| 91碰碰视频| 伊人9999| 综合激情五月四射婷婷| 亚洲综合在线网站| 亚洲V国产V欧美V久久久久久| 中文字幕成人影视| 婷婷五月天性| 久热9| 久久精品五月| 变态 另类 在线| 久热99| 五月天婷婷基地| 久久婷婷五月丁香| 狠狠舔| 久久精品婷婷五月丁香| 精品99*| 日本99视频| 99热综合网| 色综合激情| 丁香五月婷婷亚洲综合精品在线| 思思热久久艹| 久草五月天| 亚洲乱码成人| 激情综合网之激情五月| 日本久久高清| 97碰碰在线观看视频| 婷婷综合在线网| 国产黄大片在线观看画质优化 | 久久精彩视频18| 无码日本精品XXXXXXXXX| 超碰人人在线| 91色逼| 久热这里| 五月婷婷六月开心| 79色色免费| 色久婷婷网| 欧美大奶熟女噜噜噜噜| 久久综合99| 天天综合网91| 国产avapp 网| 五月天婷婷色色网| 热99在线精品| 第四色五月婷婷| 婷五月天丁香婷五月| 国产人人操| 日本熟女啪啪| 激情影院69| 伊人在线另类| 爱iii做iiii日日| 123日本不卡在线| 1024欧美看片| av五月天婷婷丁香| 婷婷94s| 色婷婷另类| 日韩AV一区二区三区| 99啪在线视频| 玖玖婷婷精品| 丁香五月最新地址| 久久久宗合| 丁香五月天啪啪| 狠色综合网| 婷婷色无码| 五月丁香色婷婷基地| 日日噜狠狠色综合久久| 俺去啦综合网| 婷婷五月丁香在线视频| jiZZdr| 另类激情五月| 色五月人妻| 无码日本精品XXXXXXXXX | 日本久碰| 99热啪啪| 成人AV在线电影| 99热这里有精品| 99ri网站在线观看| 激情久久婷婷| 国产成人av在线播放| 99久热在线精品| 免费AV黄在线播放| 六月丁香综合网| 久久婷婷五月免费视频| 国产综合婷婷| 激情五月天影院| 九九九激情综合| 亚洲精品444久久久久久| 久操干| 在线五月婷婷小电影| 色亭亭五月天网扯| 国产成人+亚洲+欧洲| 97视频.干com| 97五月天| 99久99久| 九九99热久久精品66中文字幕| 激情综合婷婷| 亚洲天堂AAA| 婷婷五月激情小说| 少妇高潮一区二区三区99欧美| 涩涩五月天| 婷婷性爱综合| 性爱先锋AV| 五月婷婷亞洲中文| 91人人操人人| 先锋影音av色五月天资源站| 婷婷五月网图片区| 久久视频这里都是精品| 五月婷婷天天| 色婷婷激情| 偷拍99在线视频观看| 色吧综合网| 99热这里只有精品18| 人妻人人操| 色99久草在线| 91热99| www久热com| XX色综合| 吾爱AV导航| 婷婷丁香水多多视频| 丁香激情网| 久久艹 五月天| 51成人| 丁香婷婷在线| 99性爱视频| 激情视频综合| 激情综合网激情五月欧美| 色一情一乱一乱一区91| 久久久久9久无码视频| 99热网站| 丁香五月婷婷网| 五月天色小说| 秋霞免费三级片| 五月激情婷婷在线| 99热这里只有精品268| 激情五月婷婷丁香| 香蕉AV777XXX色综合一区| 丁香婷婷五月天激情四射| 狠狠色婷婷777| 天天天天操| 五月激情啪啪啪| 色色色色网| 琪琪色网在线| 五月婷婷开心深| 久久99久久99精品免观看粉嫩| 丁香五月婷婷国产在线| 好吊丝aV| 欧美色五月| 九九九九综合| 天天操婷婷| 99re视频在线精品| 99热只有国产在线精品| 99热精品免费| 亚洲不卡| 中文色婷婷| 日韩淑女人妻luan伦激情精品一区二| 欧美色色色| 五月天开心网| 99视频色在线观看| 男人天堂99| 九月婷婷综合网| 夜丁香五月婷婷| 草草色情综合网| 色婷婷色久综| www.色五月| WWW.天天日| 婷婷中文在线| 精品成人在线观看| 日韩另类在线观看| 大天天伊人| 六九色综合婷婷五月天| 99ri国产精品| 天天久| 久久99久久久久久久噜噜| 天天草比天天爽| 国产女人十八水真多1| 亚洲色亚洲精品| 综合久久十三| 人人视频色| 中文婷婷狠狠| av性爱网站| 毛片九九九九九九| 丁香婷婷深情五月亚洲| 秋霞网在线免费基地五月婷婷丁香| 五月天激情啪啪| 色色热日| 性色五月天| 玖玖色资源| 五月婷婷偷拍| 免费九九热| 超碰在线91|