欧美成人午夜精品久久久,国产?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
返回資訊列表
色99免费视频中文| 99免费热在线精品| 久久久久9| 五月情综合| 91VIP在线观看| 久久婷五月天| 人人摸人人操人人爽| 婷婷色天香| 97艹| 丁香五月综合狠狠| 影音先锋自拍网| 亚洲网视屏| 99热中文字幕久久| 第四色婷婷色五月| 天天舔天天摸天天射| 99热在线网站| 久婷婷久草| 五月丁香影视| 色婷五月天| 欧美激情综合五月色丁香| www.天天色综合| 极品少妇婷婷五月| 五月丁香黄色视频| 97丁香五月| 青青草搞屄视频网站| 欧美成人日韩| 182TV大香蕉| 西西4r午夜剧场| 狠狠狠狠狠狠| 丰满少妇猛烈A片免费看观看| 在线观看中文字幕亚洲| 99热国产精品| 97色色婷婷| 大香蕉婷婷五月| 99视频在线精品| 1010日日无码| 五月天综合在线观看视频| 日日干综合| 婷婷五月丁香久久| 激情综合色| 可以直接看的av| 激情综合色婷婷啪啪六月天| 久久五月激情综合| 色情综合网| 九九色综合网| 五月天婷婷成人网| 黄网在线免费观| www久视频com| 伊人九九热| 丁香激情五月天| 婷婷天天五月天| 五月丁香亚州综合网| 我淫我色婷婷五月天激情四射| 天天综合精品| 中文字幕综合色| 婷婷丁香人妻天天| 五月天丁香综合| 超碰人人干| 精品人妻一区二区三区四区不卡在| 五月丁香激情深爱婷婷| 另类激情五月| 国产毛片精品一区二区色欲黄A片| 99热这里只有精品在线观看| 97caop| av网站不卡在线| 99视频这里有精品| 亚洲色婷婷五月天| 91艹人| 色五月久久成人婷婷| 噜噜噜噜婷婷五月天| 大香蕉综合在线| www.色婷婷| 99在线精品视频观看免费下载| 九九色综合| 婷婷丁香77777| 五月丁香亚洲综合网| AV79| AV九九| 成人综合网站| 久久久五月五丁香| 久久综合天天综合| 综合色久| 夜色.cnm| 狠狠擼综合| 欧美日本一区二区三区| 久久九九网| 97啪啪| 亚洲午夜成人av电影网| 91超碰九色| 久久婷五月综合色| 99日本精品视频热| 丁香九色不卡aaa| 91九色在线| 婷婷色色播五月天| 丁香色婷婷五月天| 色99免费视频中文| 婷婷五月久久| 九九亚洲视频| 伊九九三级区| 五月婷婷官网色| 97色婷婷成人综合在线观看| 五月天色站| 丁香大香蕉| 玖玖福利视频资源| 少妇人妻人伦A片| www91久久| 婷婷色五月偷拍| 五月色天情| 久久婷婷综| 婷婷五月,综合伊人| 久久婷婷激情| 五月丁香婷婷综合视频| 天天网曰日曰夜夜综合永久免费| 亚洲综合色五月| 91婷色| 黄色三级毛片中字| 日操五月婷| 激情久久综合| 激情伊人| 五月久久婷婷| 色激情综合| 岛国AV网| 91久久国产综合久久| 五月亭亭六月激情| 天天日天天舔| 精品99久久久久成人网站免费| 久久思思99| 九九热这里只有精品12| 国精产品一区一区三区免费视频| 亚洲视频a| 五月丁香花视频| 五月天婷久久| 思思热在线视频99| 一本到不卡高清DVD| 激情丁香五月婷| 久久久人妻| 婷婷五月激情在线| 亚洲天天| 欧美 日韩 成人| 成人综合伍月天| 五月综合激情网| 亚洲五月天色| 八戒青柠影视剧在线观看| 91黄址| 亚洲国产99| 日本三级日本黄色| 99热精品在这里| 最新国产AV| 丁香婷婷六月激情综合| 激情六月婷婷啪啪| 欧美激情综合五月色丁香| 精品人妻午夜一区二区三区四区| 99色一| 亚洲最大成人综合网720P| 久草婷婷| 最近中文字幕大全免费版在线 | 26UUU精品一区二区Com| 亚洲视频1区| 婷婷五月天综合小说网| 亚洲爱婷婷| 五月婷丁香久久综合| 99爱精品视频| 六月丁香狠狠爱| 91无码高清| 日本99在线| 久热九九| 九九热思思热| 亚洲色综久久五月| 色偷偷综合| 亚洲人人96@| 国产伦亲子伦亲子视频观看| 国产精品久久久久久五月天加勒比| 国产精品天天狠天天看| 色噜噜狠狠一区二区三区| 色一情一乱一乱一区9| 久久玖玖综合| 欧美99热| 视频一二区| 久久综合影院| 色丁香综合影院| 嫩草极品| 色5月婷婷色| 综合天天综合| 五月丁香直播| 97干婷婷| 精品二区| 婷婷综合五月天| 熟女激情网| 婷婷丁香五月综合网| 99亚洲无码| 久久Xx| 99免费热视频在线| 日本五月天一页| 日本天堂免费99| 91一起操| 另类激情综合| 婷婷五月天免费| 五月天精品视频| 久久婷狠狠色| 欧美人人草草| 丰满老熟妇BBBBB搡BBB| 久色激情| 99热这里只有是亚洲国产| 啪啪综合| 91精品视频男人的天堂| 亚洲熟妇AV乱码在线观看| 精品人妻久久久久久| 九九精品片一| 天天操婷婷| 99热这里都是精品| 另类图片天天影视在线观看| 播五月丁香三月婷婷| 99久久亚洲精品视频| 97色综合| 欧美性生交A片免费看| 综合网亚洲| sS丁香五月婷婷| 色婷婷色五月综合| 日韩熟女啪啪视频| 丁香五月激情综合| 日日天天干| 丁香五月综合网亚洲综合欧美狠狠| 色情婷婷。| 夜夜嗨一区二区三区直播内容| 无码人妻激情| 五月丁香在线| 亚洲色另类| 天天人人天天爽| 婷婷五月综合色拍| 中文字幕av亚洲| 狠狠久久婷五月综合色| 亚洲V国产V欧美V久久久久久| 婷婷五月激情的图片| 五月天婷婷五月| 亚洲激情网站无码| 日本www五月婷婷| www.婷婷六月天| 99久久高清视频| 丁香丁香激情网| www.婷婷五月天| 亚洲无码激情| 九九热婷婷| 欧美色必爱| 国产AV一区二区三区日韩| 婷婷色五月天在线| 亚洲色五月| 97热视频| 996er热| 爆乳熟妇一区二区三区爆乳照片| 日本一级特黄大片AAAAA级| 婷婷五月天精品| 新激情五月开心五月婷婷五月丁香五月 | 日韩一区二区A片免费观看 | 色婷婷色五月另类综合| 婷五月天在线草| 思思99热这里只有精品| 色热久资源| 青青草tp| 99在线观看亚洲| 婷婷色在线| av中文在线| 日本久久天堂| 五月天无码视屏播放| 亚洲五月婷婷在线| 九九视频这里有精品| 开心婷婷五月中文字幕组| 97韩国久久电影院| 欧美 日韩 成人| 色你久久| 精品人妻伦九区久久AAA片| 97香蕉碰碰人妻国产欧美| 色优久久| 婷婷五月丁香激情图片 | 国产欧美日韩性爱| 蜜桃五月天色| 激情宗合 激情宗合| 精品综合爱| 久艹大香蕉| 亚洲精品国产setv| 五月色婷婷综合丁香精品无遮挡| 99久久免费精品| 亚洲成人噜噜| 婷婷五月情| 少妇AB又爽又紧无码网站| 97超碰,人人舔,人人操,人人摸 | 大战熟女丰满人妻AV| 影音先锋男人女人| www.色九月| 九色视频91疯狂| 九九视频这里是精品五月| 中文不卡一二三区| 国产操碰| 第四色在线观看| 亚洲人成网站999久久久综合| www.色九月| 超碰久热| 激情综合丁香五月| 欧美精品18| 婷婷色色亚洲| 99 热国产在| 亚洲性爱99在线| 婷婷成人视频| 色婷婷六月| 五月天色站| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 五月天天丁香婷婷在线中| 高清无码中文字幕aVDV| 色色色色五月| 亚洲四色五月| 五月丁香色婷婷综合| 极品另类| 国产操逼视频网站| 狠狠 婷婷| 婷色视频| 婷婷丁香五月天中文字幕| 天天日综合| 思思99热| 91久久久久久久久| 六月丁香激情| 丁香婷婷六月| 天天干肏夜夜| 国产成人精品亚洲线观看| 婷婷丁香先锋资源网站| 色色色色色色综合| 天天爽天天| 国产综合81p| 丁香伊人综合| 被强行糟蹋的女人A片| 日韩另类在线观看| 天天爽夜夜爽夜夜爽精品视频| 夜夜穞天天穞狠狠穞AV美女按摩| 超碰人妻在线| 啊v视频在线观看| 婷婷久久爱| 五月婷婷狠天天色综合| 婷婷五月天成人网| 97色色婷婷| www.五月天婷婷| 丁香五月天AV在线 | 色婷婷五月天在线观看| 三级三久久线久久99久目本WW| www.五月天社区| 51精品国自产在线| 色丁香综合影院| 五月花免费视频| 七七色色综合| 超碰97免费在线| 亚洲中文AV网站| 国际国外精品欧洲南美洲专区无码不卡| 亚洲人人操| 亚洲啪啪视频| 久久免片| 婷五月天在线草| 激情综合五月婷婷| 婷婷六月丁香久| 久久伊人大香蕉| www.9797国产| 99操逼视频| 五月天激情四射网站| 91视频久久久| 99在线播放视频| 91久久九久久九久久九久久九久久| 色亚洲激情| 国产高潮白浆一区二区| 天天爽夜夜操| 91狠狠色| 嫩BBB搡BBBB榛BBBB| 最新午夜理论片| 五月丁香综合啪啪| 欧美激情-区二区三区| 色婷婷色综合久久精品V| 婷婷射图五月天| 色激情网| 超碰免费成人| 热九九在线| 激情五月天丁香| 五月丁香综合精品| 久久综合图片| 五月丁香六月激情| 狠狠做六月爱婷婷综合aⅴ| 亚洲无码色| 婷婷激情五月天在线视频| 久久精品99国产精品日本 | 国产av天堂| www.五月天。com| 亚洲丁香婷婷| 久久东京热婷婷五月| 草综合网| 91色色色视频| 五月天另类视频| 色。 日日日| 亚洲情欲久久| 色五月婷婷综合| 狠狠另类视频| 色五月五月婷婷| 激情丁香社区| chaopeng在线人人| 免费视频99| 天天撸夜夜爽| 婷婷五月天综合网| 亚洲成人在线观看av| 五月丁香婷婷六月| 天天做综合| 99久久超级| 午夜九九九九九九九九九九九九九| 91九九| 激情五月丁香五月色| 99激情视频| 66久久视频在线| 久久精品日| 亚洲这里只有精品| 美女天天爽| 丁香五月AV在线| 久久九九囯产| 丁香五月天操B| 五月天婷婷免费| 五月婷婷深爱六月| 色色精品色| 亚洲殴洲精品Av在线| 激情六月综合| 亚洲无码99| 午夜青草资源| 婷婷八月激情| 五月丁香久久久久| 日韩伊人大香蕉| 五月婷婷丁香| 国产在这里只有精品| 人妻精品久久久久久久| 婷婷AV丁香| 99热亚洲精品| 任你日热视频| www九月婷婷| 99热这里是精品| 丁香 久久| 欧美va在线| 五月天色婷婷小说| 五月婷婷久久激情 | 97人人草| 五月天婷婷久久视频| 五月天综合在线观看视频| 思思久久96热在精品国产,| 大香蕉久久婷婷精品综合| 79成人网| 色婷綜合网| 華人性愛AV在線| 婷婷五月天精品| 热久久这里只有三级视频| 婷婷丁香六月天| 婷色五月| 五月婷婷,六月丁香| 色五月婷婷操逼| 思思精品视频| av人人干| 五月丁香色综合| 丁香色综合| m色激情网| 国产六月婷婷| 天天日,夜夜爽| 这里只精品| 婷婷免费精品视频| 综合激情网五月激情| 国产超碰在线| 丁香五月AV在线| 色色综合成人网| 91久久婷婷| 99色干| 99九九在线精品热动漫| 99操逼| 人人操日| 操操操av| 丁香5月婷婷| 日韩色情亚洲五月天婷婷| 六月婷婷国产| 日本成人噜噜噜| 五月天婷婷乱论小说| 夜夜撸天天操| 大香蕉伊人爱在线| 五月激情六月丁香| 国产在线激情视频| 第1影院之五月婷婷| 九月大香蕉| 日本九九网| www.jiujiujiu| 五月天婷婷激情网| 亚洲十月婷婷综合| 婷婷五月激情视频在线| 97精品自拍| 五月婷婷五月天| 国产真人做爰视频免费| 另类亚洲电影| 久久色区| WWW.桔色成人.COM| 成人免费在线电影| 亚洲色色色| 五月婷婷碰碰| 日本精品99| 婷婷久久国产视频| 丁香婷婷激情五月天无毒不卡蜜桃| 婷婷五月激情图片| 亚洲亚洲人成综合网络| 激情九九六月激情免费视频| 99热99成人| 久久这里只有精品1| 亚洲色五月婷婷| 久久久五月婷婷| 二色AV| 伊人国产婷婷五月天| 99爱视频在线播放| 欧美性爱五月天| 丁香花社区av| 丁香五月欧美激情| 99视频精品全部免费观看| 久草热视频在线观看| 大香蕉五月婷婷| 免费观看欧美成人AA片爱我多深| 99人妻碰碰碰久久久久视| 色八月婷婷| 人人爱国产| 激情婷婷五月| 日本三级毛片| www.夜夜騎夜夜狠| 99久久综合网| 久久精品系列| 婷婷丁香五月综合网上| 狠狠色婷婷| 99久久视频| 中文不卡一二三区| www.五月.com| www99久久| 日日日影院| 99久在线精品99re8| 五月天丁香花婷婷| 天天舔天天| www.91.com黄| 婷婷五月天丁香激情| 99久久玖玖| 丁香五月天无码| 成人丁香五月| 91丨九色丨熟女丰满| 这里只有精品在线免费视频| 91人妻PORNY九色大屁股| 久久电影五月天丁香电影| 日本怕怕视频| 大香蕉久久| 久久天堂| 婷婷五月综合网| 亚洲操女| 99久久综合网| 性一交一乱一交A片久| 亚洲视频五区| 六月丁香中文字幕| 五月婷婷婷| 丁香五月婷婷在线观看| 先锋影音男人的天堂AV| 六月丁香五月激情网| 婷婷五月天成人网| 99国产er热视频| 9 1超碰九色| 综合玖玖偷拍| 日本色五月| Y11111111111少妇电影院| 婷婷激情五月天色| 久久人妻熟女一区二区| CHINESE熟女老女人HD视频| 久久曰曰| 亚洲色网址| 丁香久久| 性做爰1一7伦| 91视屏在线观看com.wwwvv| 大香蕉综合在线| 九九色热| 六月丁香啪啪啪| 亚洲五月天,激情视频| 色情综合网| 九热视频| 92久久精品一区二区| 99高级会所久久| 欧美大肥婆大肥BBBBB| 十月丁香婷婷| 狠狠一日| 婷婷五月天美女21p| 色五月大香蕉婷婷| 婷婷精品在线| 综合激情啪啪| 丁香五月影| 激情婷婷色五月| 五月天怕怕| 丁香五月色五月| 色婷婷久久| 日日日日日| 丁香五月无码| 久久这有这里精品| 五月婷三级片| 久狠狠狠| 快乐婷婷五月天| 国产AV一区二区三区最新精品| 五月激情久久综合| 五月婷婷综合影院| 爱射综合| 五月婷婷丁香网| 九九热99视频在线| 国产毛片精品一区二区色欲黄A片| AV国产有码| 色婷婷色和| 在线婷婷| 俺去也在线视频| 国产九九一区二区三区| 五月丁香综合激情| 亚洲色情网站| 五月丁香六月色婷| 色色丁香婷婷五月天| 日本大逼91| 丁香婷婷基地| 情婷婷五月天| 精品视频这里只有精品| 色综合播放| 丁香五月性| 麻豆五月丁香婷婷| 99日本精品视频热| 久久久久久久久久久jjjj| 中文AV在线播放| 婷婷综合网伊人| 香蕉久久国产av一区二区| 婷婷丁香六月| 久久在线大香蕉| 日日天天操| www99久久| 亚洲网站观看视频| 夜夜爽天天干| 激情五月丁香亭亭| 亚洲AAAA网| 九九青青草成人| 亚洲视频另类| 亚洲国产精品SUV| 久久最新色| 色播丁香婷婷五月激情| 人妻性操逼中文字幕 国产| 五月色激情综合网| 青草视频在线观看视频| 久操大香蕉| 色99在线视频| 99热这里只有精品最新网址| 久久av电影| 99精品自拍视频| 秋霞少妇毛片| 婷婷中文综合网| 色综合五月天| 色吧五月婷婷| 五月丁香久人妻中文| 婷婷五月丁香伊人| 色色婷婷综合网| 色五月丁香五月五月婷婷| 中文字幕,综合,91| 狠狠色噜噜狠狠狠777奇米| 综合色久| 九九在线视频| 五月天综合婷婷| 久99久热| 99热99精品| 激情五月婷婷在线观看| 99热精品中文字幕| 婷婷色基地| 国产乱妇乱子伦| 丁香五月天激情综合网| 人人干人人操人人摸人人做| 五月丁香少妇网| 九九热这里| 色999;丁香五月| www.色五月.com| 五月婷婷天堂| 伊人狠狠丁香婷婷综合尤物| 99色网站| 欧美色五月| 色日本五月天| 五月天丁香| 日本欧美成人片AAAA| 九九AV| 五月天大香蕉| 777米奇影视第四色| 婷婷97狠狠成人网站| 99在线精品免费视频| 男女啪啪做爰高潮无遮挡| 中文字幕按摩做爰| 超碰人人在线观看| 五月花激情网| 91九色|疯狂|高潮|对白|| 91黄址| 色热久资源| 婷婷五月天日逼| 丁香五月婷婷成人网| 伊人网色婷婷五月天| 婷婷五月美女直播| 亚洲无码yw| 激情五月综合| 熟妇人妻中文字幕无码老熟妇| 日韩AV免费电影在线播放| 色色丁香婷婷五月天| 综合激情sV| 超碰91在线| 色日本丁香婷婷| 狠狠干五码| 可以免费观看的AV| 91色色色| 碰人人97| 丁香六月婷婷激情综合| 99只有这里是精品| 久久婷婷五月天激情四射| 欧美婷婷综合| 欧美日韩成人h| 玖玖在线| www.五月婷婷久久.com| 天天日天天舔| 色婷婷五月天| 草榴视频网| 天天日夜夜B久久| 97色色在线视频| 国产67194| 婷婷五月天桃花网| 五月丁香91| 丁香网五月网| 91热久久| 亚洲AV无码电影| 激情视频网址| 伊人啪啪网| 天天色综网| 涩涩激情五月婷婷| WWW·天天操·视频?| 99色最新在线视频网站| 色婷婷亚洲精品天天综| 色色综合五月| 激情五月婷婷欧美极品| 婷婷伊人综合中文字幕| 99九九精品视频推荐| 国产激情综合| 日婷婷久久开心| www.久久| 亚洲国产成人综合| 婷婷性色| 五月丁香本色在线观看| 激情网站五月| 婷婷六月天| 99精品丁香五月| 婷婷五月天综合激情| 色五月婷婷亚洲| 超碰v| 99re久久| 丁香五月婷婷大香蕉| 新激情五月天| 六月综和久久| 99色视频在线| 亚洲天堂啪啪| 97色色视频| 欧美一级a | 天天精品视频免费观看| 夜夜大香蕉婷婷丁香| 欧美激情综合色综合| 天天爽天天干| 色999亚洲人成色| 999精品乱码77777| 欧美精品A片一区在线观看| 婷婷五月天性| AA片在线观看视频在线播放 | 无码少妇高潮喷水A片免费| 亚洲超碰在线| 91viP在线看| 色www.con| 婷婷五月天激情开心网| 超碰激情五月| 激情五月色在线播放| 狠狠干.com| 极品人妻videosss人妻| 少妇水多A片太爽了| 草操AV在线| 亚洲激情久久| 六月婷婷深深爱| 激情综合网五月天| 久久久精品99亚洲综合| 色婷婷五月天在线观看| 五月丁香爱婷婷深深| 99热国产这里只有精品| 婷婷伊人綜合中文字幕| 九九热99热| 久久网站免费亚洲| 欧美性猛交 XXXX 乱大交| 99视频久久免费视频| 超碰在线人妻| 日日干夜夜撸夜夜骑| 香蕉久久国产AV一区二区| 韩国婷婷丁香五月| 亚洲中文AV| 99热.com| 婷婷丁香五月天影院 | 国产又黄又爽又色的免费| 日本狠狠爽| 综合色色五月| 天天骑天天操| 狠狠综合网| 丁香五月综合| 狠狠操狠狠干综合| 91操在线观看| 午夜天堂啪啪| 日韩抽插操逼| 国内自拍1区| 五月天天综合| 精品国产va久久久久| 国产偷人爽久久久久久老妇APP| 国产精品久久久丁香五月八戒视频| chaopengdaxiangjiao| 女人天堂 AV| 桃色激情五月天| 看片视频在线免费日产在线看| 久久久久综合激动五月天| A片天天| 色狠狠婷婷| 色色色欧美| 色五月情| 九九热免费视频| 毛片网站谁有| 婷婷色综合网日韩国产| 日韩成人无码人妻| 亚洲五月天伊人| 久久伊人婷| 日日操日日撸| 亚洲五月天婷婷在线| 色狠狠色综合久久久绯色AⅤ影视 大香蕉五月天婷婷丁香91 | 激情丁香五月婷| 久久综合香蕉国产国产蜜臀AV| 久久婷婷色色| 色婷婷五月亚洲| 色婷久九| 五月丁香六月激情网站| 99操久久| 好激情在线综合网| 久久久五月天| 996re热精品视频| 色色色com| 日婷婷久久开心| 这里只有精品99视频| 久草嫩草在线观看| 97碰在线视频| 午夜婷婷久久 | 涩综合在线| 七月激情六月婷婷综合在线播放| 婷婷爱五月| 久久98热re| 狠狠色 综合色区| 97资源碰碰| 69久久久| 99色这里| 色99色| WWW.亚洲无码| 五月婷婷六月丁香| 天天肏高清在线| 色噜噜在线| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 久久香蕉福利| 丁香五月停停av| 久久精彩免费视频| 91狠狠色色丁香婷婷综合久久| 99热这里只是精品| site:jszngf.com| 9操在线| 亚洲无码激情| 色色六月| 日韩一级一片内射视频4K| 色五月av| 超碰精品在线| www.色婷婷.com| 天天日本夜夜谢| 五月婷婷九月婷婷九月婷婷| 99久久国产成人精品| 色色五月婷婷| 97视频.干com| 91互操| 久久婷婷丁香视频网| 禁片二区| 午夜]香婷婷深深爱| 少妇性BBB搡BBB爽爽爽视頻| 九九香蕉网| 色播五月婷婷| 五月天成人小说| 99ri精品| 久久久WWW| 99热碰碰热| 婷婷97碰碰| AV在线免费网站| 影音先锋一区| 激情五月丁香五月| 五月天激情四射| 久久98| 大香蕉啪啪啪| 五月丁香香蕉| 99综合| 白人荫道BBWBBB大荫道| 日本乱子人伦在线视频| 国精产品一区一区三区免费视频 | 丁香六月成人| 九九色黄色| 欧美婷婷综合网| 五月婷婷色色网址| 99ri在线播放| 九九精品自拍| 中文字幕婷婷五月天| 26uuu四色| 色婷婷丁香五月在线| 丁香五月在线观看综合| 在热视频精品| 99热都是精品| 九九热黄色| 激情综合亚洲| 色色色色色色综合网| 大香焦A∨| 婷婷久久天堂网| 国产肏屄大片| 五月天激情综合在线| 电影《战争与艾拉》免费观看| 婷婷色日本| 五月激情六月宗合| 99狠狠色| 97干在线| 九九久久腿| 久久久性爱网| 色久婷婷网| 玖久久网站| 婷婷丁香综合| 丁香色五月婷婷17C| 人人色AV| 免费视频无码| 婷婷色五月激情| 五月丁香婷婷欧美色图视频五月丁香777电影 | 99惹精品视频| 欧美大道不卡| www.天天干| 极品五月天| 激情久久五月天| 亚洲综合色丁香五月天| 天天日综合| 精品婷婷| 激情婷| VA日本视频| 激情五月天小说| 五月天激情国产综合婷婷| 中文字幕无线久必| 欧美三级黄色片久久| 婷婷五日b| 天天插天天射| 能看的av| 精品99在线| 色情五月天首页| 婷婷九月亚洲| 色五月,com| 丁香五月天网站| 天天做天天爱天天玩夜夜爽| 久草大| 99久久婷婷精品视频| 99re99在线看| 99久久网站| 欧美成人一区二区三区在线视频 | 99精品在线观看| 日韩精品一曲二曲三曲四曲五曲| 99热只有精品在线播放| 五月丁香综合激情网| 五月丁香影视| 99自拍视频网站| 久久这里有精品视频| 五月婷婷六月天| 六月丁香狠狠爱| 五月天综合区| 九九热最新地址| 久久99看免费| 开心五月婷| AV中文在线| 7777激情基地| 五月天婷婷久久| 超碰在线免费观看3 9| 操操操av| 91狠狠综合久久| 看逼中文字幕| 五月激情综合深爱| 精品夜夜澡人妻无码AV| www婷婷| 色综合天堂| 月色色综合婷婷网| 日本激情五月天‘| 亚洲精品一区无码A片| 99 热国产在| 99操久久| 久久精品63| 亚洲精品99| 丁香六月激情国产| 另类小说五月天激情| 色欲久久综合| 无码色色色色色| 亚洲无码播放| 4438激情网| 天堂五月婷婷| 成人在线高清| 九九婷婷网五月天| 丁香五月婷婷亚洲天堂| 99久久免费精品| 亚洲日本三级片| 亚洲激情免费视频| 亚洲中文AV| 婷婷激情丁香六月| 精品综合网在线| 激情五月婷婷色播网| 久草婷婷网 | 丁香五月天激情四射网| 激情綜合W W W,激情五月天| www.1024久久| 丁香六月婷婷综合欧美| 亚洲 成人 电影av在线观看| 色婷婷色婷婷五月| 草久私拍| 99热这里只有精品免费| 久久 无毛。| 久色激情| 99久热在线精品| 婷婷色网| 婷婷五月免费观看| www,黄色在线,con| 五月深爱网| 91亚洲免费片| 欧美色色色色色色色色色色| 九九热啪啪| 五月婷婷AV| renrencaoni| 亚洲网综合在线| 99热在线免费| 99热网址| 五月天色影院| 亚洲综合视频一下| 婷婷五月综合丁香久久| 天天综合网在线| 91色噜噜狠狠狠狠色综合| 久久色情| 少妇激情五月婷婷| 色呦呦在线| 色在线99| 欧美激情五月天婷婷| 丰满少妇猛烈A片免费看观看| 99爱无码| 色综合久久综合中文综合网| 亚洲九区| www.成人婷婷综合| 久久精品五月天| 久久婷五月| 婷婷五月丁香六月天亚洲综合| 色婷亚洲五月丁香| 五月天色区| 婷婷丁香五月亚洲综合网在线视频观看| 久久全色| 网站免费一站二站| 99热99热不卡| 久久久久久综合88| 99ER热精品视频| 激情亚洲婷婷| 先锋资源996| www91精品| 啪啪啪啪五月天| 艹天天射| 无码色| 婷婷五月天影视首页| 色综久久久| 人人叉久| 日本欧美成人片AAAA| 网站免费一站二站| 美女婷婷六月色| 超碰97久久| 免费看欧美成人A片无码| 国产精品VA在线| 2025中文在线视频字幕免费观看| 日本三日本三级少妇三级66| 六月婷婷色综合| 99热这里只有精品4| yazhou seshipin| 久久综合播放| 性欧美大战久久久久久久83| 色九亚洲| 五月婷婷伊人在线| 久思思久视频| 五月婷久久草| 4399无码视频二区| 五月花婷婷| 天天综合久久| 婷婷五月丁香六月天亚洲综合| 中文激情网| 婷婷娌伦网| 丁香五月天AV在线 | 国产做A爰片毛片A片美国| 99热综合在线| www,天天干| 狠狠色无码| 久久精品爱爱| 色一情一乱一乱一区91| 五月婷久久综合| 刘玥av在线| 午夜丁香| 中文字幕在线观看视频www| 六月婷婷五月天| 五月丁香六月婷婷在线播放| 激情欧美婷婷| 九九热大香蕉| 碰碰操91| 3DAV亚洲香蕉久久 一区二区| 777影视理论片大全在线观看| 色丁香五月婷婷| 99久久精品国产色欲| 色色色色色色色色色色色色色色,网站| 久久国产性爱A V| 久久综合性| 亚洲婷婷丁香| 丁香婷婷91在线观看视频| 日本天堂久久| www.久操| 亚洲永远av在线播放| 日韩在线看AV| 国产露脸150部国语对白| 色婷婷网| 九九伊人网| 91精品久久久久久77777| 思思热在线精品视频| 亚洲操操| 婷婷五月六月丁香| 99热精品中文字幕| 色综合婷婷| 久热婷婷| 色色色综合色| 涩涩五月天| 亚洲人人操| 风流少妇A片一区二区蜜桃| 亚洲综合另类| AA片在线观看视频在线播放| .精品久久久麻豆国产精品| 亚洲精品久久久久久久久久飞鱼| 亚洲激情综合| 9精品久久999| 91久女| 九九精品系列| 无码A片一区二区免费| 日本久久99久久| 51XX午夜影福利| 亚洲色五月| 色综久久AV| 天天综合色综合| 五月天俺去也| 99在线免费视频| 9|无码久久久久久| 丁香五月六月综合激情| 色99色| 新激情五月天| 五月激情综合性爱| 天天综合网91| 丁香婷婷精品视频| 国产丁香五月天婷婷| 牛牛碰免费| 五月综合色| 夜夜夜夜夜操| 极品人妻VIDEOSSS人妻| 真实熟女-91九色| 丁香五月人妻| 人人草成人视频| 亚洲看av的网站| 成人色五婷婷| 婷婷五月天丁香花| 成人国产欧美大片一区| 九色综合五月天婷五月| 久久9久久| 五月花婷婷在线精品视频| 五月丁香六月婷婷综合伊人| 日日操日日撸| 丁香五月Av| 狠狠干.com| 91狠狠色色丁香婷婷综合久久| 狠色狠色狠色狠色狠色网| 狠狠CAO日日穞夜夜穞AV| 丁香五月天堂亚洲社区| 激情人妻综合| 99色看这里只有精品| 26uuu亚洲精品国产| 91大神操美女| 桃色成人网| 一本色道久久88加勒比—| 另类色视频| 婷婷五月天开心网| 婷婷激情综合网| 九色激情| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 亚洲综合网 665566| 久久久婷丁香五月| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 五月婷婷六月激情| 成人婷99最新| 亚洲成人乱码av网站| 久久92| 在线视频九色97| www.yw尤物| 思思re99视频在线观看| 成年人丁香五月| 日本一级大片| 深爱婷婷色| 99九无网码| www,setingting| 99国产er热视频| 99色热| 91精品国产综合久久久不卡电影| WWW99热| 洗浴中心操B视频| 色噜噜狠狠色综无码久久合欧美| 嫩草视频观看| 五区毛片七区毛片| 亚洲超碰在线| 婷婷五月色综合| 深夜A片| 五月天偷拍| 成年人夜夜喷水| 激情五月色播五月| 婷婷五月花| 大香蕉久久伊人婷婷五月丁香| 无套内射极品大美女| 99热个人在线| 99er这里只有精品| 97操碰碰无码视频| 超碰在线94| 欧美Va在线| 嫩草AV久久伊人妇女超级A| 超碰人人干| 久热超碰91| 日本在线wwww| 在热视频精品| 风流少妇A片一区二区蜜桃| 中文网AV| 婷婷久草| www.色9| 国产亚洲色婷婷久久99精品91| 91人人爱| 天天拍久久| 亚洲精品一区中文字幕乱码| 丁香五月婷婷激情小说| 先锋资源91| 激情丁香久久久久久| 99国产这里只有精品| www.色色色com| 六月婷婷七月丁香| 成人综合网站| 国产成人VA| 蜜桃人妻无码AV天堂三区| 五月天激情综合网站| 日本三级中国三级99人妇网站| 站长推荐无码播放| 日本久久性| 婷婷射丁香| 九九热视频99| 97色片| 大香蕉五月天| 级情九色| 五月丁香啪啪网| 欧美日本综合网| 色5月婷婷| 亚洲99激情| 青柠影视免费高清电视剧| 6080av| 婷婷五月天av小说| 久久小片| 97黑人精品区| 婷婷五月情|