日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

Android APK 加固原理(三):方法級代碼抽取——PVM1 虛擬化打包到底是什么?

Android APK 加固原理(三):方法級代碼抽取——PVM1 虛擬化打包到底是什么? Android APK 加固原理三方法級代碼抽取——PVM1 虛擬化打包到底是什么系列文章?第一篇《Android APK 加固原理一Native Shell 如何隱藏和恢復(fù) DEX》第二篇《Android APK 加固原理二從 DEX 解密到 ART 加載如何縮短代碼明文暴露窗口》第三篇《Android APK 加固原理三方法級代碼抽取——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ù)——如何檢測 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)心的問題會逐漸從“APK 里面有沒有完整 DEX”轉(zhuǎn)變?yōu)椤斑\(yùn)行時(shí)能不能把 DEX 恢復(fù)出來”進(jìn)一步又會變成“能不能只針對關(guān)鍵方法進(jìn)行分析”這也是方法級保護(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這種理解對于 XopProtector 的PVM2才成立。對于 ?PVM1?并不是這樣。XopProtector 的VmCodec.java對 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方法級虛擬化打包而不是True Code Virtualization真正的代碼虛擬化。這兩個(gè)概念一定要區(qū)分。三、PVM1 和 PVM2 到底有什么區(qū)別這是整個(gè)系列最容易混淆的地方??梢灾苯佑孟旅孢@張表理解特性PVM1PVM2保護(hù)粒度方法級方法級是否抽取原始指令是是是否生成虛擬化數(shù)據(jù)是是是否存在 Interpreter否是是否恢復(fù) Dalvik是否是否寫回 DEX是否最終執(zhí)行者ARTNative Interpreter核心目的提高靜態(tài)逆向成本改變代碼執(zhí)行模型對運(yùn)行時(shí) Hook 的抵抗能力中等更強(qiáng)性能開銷相對較小更高實(shí)現(xiàn)復(fù)雜度較低很高XopProtector README 對兩者的定義非常明確--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 的核心從“類級保護(hù)”下降到“方法級保護(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ìn)一步下降到了“Method 級”。五、第一步找到需要保護(hù)的方法XopProtector 的 Packer 是在構(gòu)建階段工作的。源碼中的PackerMain會讀取 DEX并遍歷其中的 ClassDef、ClassData 以及 DirectMethods / VirtualMethods。核心流程可以抽象為APK ↓ 解包 ↓ classes.dex ↓ 解析 DEX ↓ 遍歷 ClassDef ↓ 定位目標(biāo) Class ↓ 遍歷 DirectMethod ↓ 遍歷 VirtualMethod ↓ 提取 code_item源碼中的walkDexMethods()就承擔(dān)了這一職責(zé)。它會遍歷dex.classDefs()然后讀取classData.getDirectMethods() classData.getVirtualMethods()再逐個(gè)調(diào)用extractOne(...)處理方法。六、PVM1 并不是所有方法都保護(hù)這是一個(gè)非常重要的設(shè)計(jì)。XopProtector 并不是無腦把所有方法都轉(zhuǎn)換成 PVM1。源碼中存在vmpPrefixes對應(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因此可以針對不同代碼價(jià)值選擇不同保護(hù)等級。七、第二步讀取方法真正的 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它會根據(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é)果就不會完全相同。十、PVM1 的第二層Nibble Swap除了 XORPVM1 還做了一層非常輕量的字節(jié)變換。源碼中if((i1)0){b((b4)0xf0)|((b4)0x0f);}也就是對偶數(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你會發(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 在提取完方法指令以后會直接修改原來的 DEX。流程原始 Method Code ↓ 讀取 ↓ 保存到 PVM1 ↓ 原位置寫入 Stub源碼中writeReturnStub(...)會把原始 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í)行過程中會檢查 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()會將不同 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è)方法級保護(hù)體系的“索引核心”。DEX 中的方法是通過method_ids進(jìn)行編號的。例如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 的“方法級映射關(guān)系”。十七、PVM1 運(yùn)行時(shí)到底發(fā)生了什么這部分是整個(gè)機(jī)制最值得分析的地方。很多人會誤以為啟動(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)以后會先定位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í)候自然只會執(zhí)行return 0它不知道真正代碼在哪里。所以必須在ART 加載 / 定義 Class / Method的關(guān)鍵路徑上進(jìn)行干預(yù)。XopProtector 在初始化階段會protector::hook::install_hooks();然后再解析和應(yīng)用code.bin源碼明確說明在解析 / 應(yīng)用 code.bin 前安裝 ART hooks以便 DefineClass 時(shí)進(jìn)行 patch。因此整個(gè)體系實(shí)際上形成DEX ↓ ART ↓ Hook ↓ 識別被保護(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 到底算不算虛擬化答案是算但屬于非常輕量級的“虛擬化打包”而不是完整 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)成本相對較低。二十二、真正的 PVM2 為什么會復(fù)雜得多假設(shè) PVM2 也拿到add-int mul-int return它不會把這些指令恢復(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 方法不會恢復(fù)到 Dalvik而是通過 JNI trampoline 進(jìn)入 Native Interpreter讀取code.bin中的 PVM2 image。這就是下一篇文章真正需要討論的內(nèi)容。二十三、PVM1 對靜態(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)用絕對不可破解。二十五、PVM1 最大的價(jià)值其實(shí)是“方法級明文控制”如果把保護(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ù)對象從“整個(gè)代碼包”變成“一個(gè)個(gè)關(guān)鍵方法”。這就是方法級加固最重要的工程價(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所以完整體系是代碼抽取 代碼變形 加密存儲 原位置空洞化 運(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ù)解決不同攻擊面。這比單純依賴一種“超級加密算法”更加符合商業(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è)則對應(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é)同完成的方法級保護(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而會變成原始 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 還會為每個(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 ↓ 寄存器 / 對象 / Field / Method ↓ 最終執(zhí)行并重點(diǎn)解釋為什么 PVM2 和 PVM1 已經(jīng)不是同一個(gè)層級的加固技術(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高潮| 久久久免费懂色| www.久久超碰| 三级AV入口| 热天堂一区二区| 大香蕉一人| 人妻81p| 长长久久曰曰夜夜成人网| 龙兴卡官方查询| 国产色产精品在线观看| 久久色激情一区二区三区| 亚洲性刺激| 日日摸夜夜夜夜爽| 国产二区三区粉嫩在线| 日韩黄片视频试看| 久久一本大香蕉| 欧美夜夜草视频| 日韩欧美视频青青| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 久久av一级av少妇av高潮| 77777亚洲蜜臀精品久久综合蜜臀| 日本黄色XXX| 久久性爱精品一区| 精品亚洲俞拍视频一区| 日日操免费视频| 不卡九肏| 美国精品国产精品| 欧美日韩一干二干| 精品毛片av一区二区| 午夜天堂精品久久| 中文AV制服乱伦| 精品人妻二区三区| 色在线综合| 1区2区3区中文字幕日韩| 成年人黄色视频免费| 午夜天天碰综合视频| 欧洲精品一级二级精品综合视频综合| 日本综合久久| 三级色影综合网| 色婷婷影院| 上特色A在线| 手机av天堂久久久久| 丝袜内射| 丝袜综合网| 久久久久13| 久久精品国产Aⅴ| 亚洲网自拍| 小日子操bb在线看| 久久精品无码不卡| 丁香六月婷婷| 亚洲欧洲综合成人av一区| 97伪v| 日本高清有码网址视频| 999精品久久久久久久| 热天堂一区二区| 萌白酱自拍视频| 91精品人妻一品二品三品| 日韩有码免费视频| 精品毛片av一区二区| 99最新日韩偷拍视频| 人妻少妇av在线观看| 中韩中文字幕在线观看| 国产精品久久久久久夜夜夜| 久久五十路熟女人妻| 97超碰国产亚洲精品| 国产男女无套视频免费观看| 97精品视频| 操美女人妻| 手机在线视频国内精品| 熟女人妻一区二区三区免费看| 国模精品一区二区三区苹果色戒 | 久草视频制服诱惑| 性爱乱伦网址| 欧美日韩国产一区二区小黄片大全| 美女啪欧美一区| 色婷亚洲五月在线观看| 亚洲欧美日韩免费电影| 91色婷婷综合久久中文字幕二区| 2026国产精品视频| 天堂精品小草| 丁香六月婷婷久久综合| 北约熟女超碰| 亚洲AV麻豆Aⅴ无码电影一| 97操综合| 九九热视频这里只有精品| 久久婷婷六月综合| 丰满高潮18xxxx| 人人妻人人玩人人澡人人爽| 变态综合色| 91AV天美在线视频| 乱老熟女一区二区三区| 欧美日韩人人精品| 人妻熟女字幕一区二区| 丁香五月综合| 级做a爱无码性色永久免费| 乱人乱色一区二区三区免费| 一区二区视频你懂的| 色av中文字| 蜜乳AV网址| 色婷婷六月丁香七月婷婷| 中文字幕黄色一起草| 亚州男人的天堂| 一及黄久一点| 啊啊啊快操我视频| 亚洲AV不卡在线观看尤物| 九九热男人天堂| 99色综合| 久久精品人体| 暖暖精品二区三区观看| 少妇高潮99p| 91久久久久久久久18| 综合操逼| 国产激情av女片自拍| 欧美姓爱综合网| 欧美曰韩国产精品| 亚洲五区熟女| WWW.加勒比人妻一区不卡.com| 国产欧美第五页| 在线不卡视频| 亚洲中文字幕97久久精品少妇| 欧美日韩性爱精品| 中文字幕在线播放2中文字幕在线观看2| 欧美精品1区2区3区| 国产精品自产拍在线观看社区| 青青久久手机线视频| 日本一级婬片试看三分钟| 91亚洲色人| 99re6久热只有精品6在线直播| 人妻熟女字幕一区二区| 超碰免费在线| 天天综合91在线| 人人人人人人少妇| 久久精品视频28| 大香网伊人久久综合网eew| 少妇免费视频| 欧洲视频在线| a级免费在线观看| a片久久久久久久久久久久| 视频国产欧美在线播放| www.伪伪| 看一级黄色视频| 色色色999| 国产欧美日韩在线不卡第一页| 狠狠综合| 91色色综合| 无卡一区=区| 亚洲素人综合| 99re在线| av天堂天堂av日韩| 国产精品国产拍高清AV| 九九热免费国产视频婷婷伊人五月| 91精品成人www| 久久久久久久国产| 中文字幕福利视频一区二区三区在线观看| 一本久道久久综合狠狠爱一密臀精| 女优大全 - 91n| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 久久这里只精品99re66图| 婷婷久久综合久| 亚洲国产综合久久天堂| 黄久在线| 亚洲色图A| 色吧5亚洲| 亚洲91在线播放影院| 国产精品亚洲美女久久久久| 麻豆精品A片免费观看| 狠狠操狠狠燥| 亚洲永久AV无码精品秋霞| 亚洲高清无码免费观看视频| 躁躁日曰躁2020| 东北女人性交| 91影库| 超碰免费在线| 亚洲色图欧美色图另类图片| 国产日韩中文字幕欧美| 99人人干| 久久综合日韩亚洲欧美| 五月天欧美色图| 天天网综合| 日韩有码 一区二区三区| 中国探花熟女| 美女91在线观看| 91性网| 日韩去日本高清在| 综合97亚洲| 麻豆亚洲AV成人无码久久精品| 国产一区二区在线播放量| 日本99久久| 亚洲91网站| 清纯唯美亚洲| 婷婷天堂站| 精品免费国产二区三区| 精品91日日夜夜超清资源| 盗摄女人妻在线| 天天日老熟妇| 91精品导航| 太久视频| 色网在线| 国产精品无码久久久久2028| 欧美日韩少妇色情| 欧 美 自 拍 偷 拍| 亚洲男人的天堂亚洲| 中文字幕诱惑制服人妻丝袜美丝袜美| 色婷婷六月丁香七月婷婷| 麻豆天美国美国产| 国产精品网址| 精品国产乱码久久久久久久久1| 熟妇一区,二区,三区。| 国产97色在线| 一区二区播放| 柠檬AV导航| 99色热| 国产又爽又黄| 中文字幕黄色一起草| 日本123区操B视频| 色欲av国内精品久久久久久| 人妻丝袜无 码视频专区| 成人夜夜| 久9热| 综合欧美色图| 亚洲自拍青操视频| 国产精品久久久亚洲第一牛牛_在线观看| 啊嗯好大视频在线观看| 97视频620| 欧美天堂日韩三级国产传媒| 啊啊啊快操我视频| 午夜福利合集| 啊啊啊免费视频| 国产日韩久久| 美女写真| 日韩啪啪网| 99免费在线视频| 色婷婷电影网| 天美精品av| 91久精品| 91丨人妻丨国产丨丝袜| 亚洲国产一区二区日韩专区| 中文久久| 人妻少妇无码| 少妇色欲综合网2| 久久婷婷苹果| 天天拍夜夜| 熟女人妻一区二区三区免费看| 强乱老妇中文字幕| 精品人妻中文字幕高清| 亚洲精品免费中文字幕| 牛牛aV| 夜夜草网站| 三级三级三级日本99| 99青草| 精品美女少妇一区二区三区| 超碰97极品9| 国产深夜福利| 亚洲国产一区二区入口| 久久天天性久久伊人| 区一二区日韩亚洲乱码av电影| 秋霞一区二区三区四区五区六区七区| 爱丝福利| 国产99精品一区二区三区免费| 黑人无码一区二区| 麻豆久久视频在线地址| 美女AV一区二区| 懂色av中文字幕| 亚洲熟妇丝袜在线观看| 在线人成亚洲视频免费观看| av凤凰久久久| 强奸乱伦 亚洲一区| 97欧美日韩精品| 舔足天天操天天射| 亚洲五码一区二区三区| 美女人妻色网站| 传媒免费一区二区三区| 91中文字幕| 十八禁的黄污污免费网站| 99色视频| 欧美性视频二区三区| 91亚洲欧美激情| 艹精品| 精品久热| 亚洲色天堂九9| 精品国产三级av韩国在线| 日韩精品黄片免费观看| 丰满翘臀美女影院视频| 久久系列| 久久久无码av精| 宗合情欲网| 不卡日本一区二区| 色婷婷综合视频| 亚洲男人的天堂网| 最新av中文字幕高清| 丁香五月天堂网| 欧美日韩亚洲五月天婷婷| 久操精品| 一区二区激情国产熟女| 中文字幕青青草| 日本熟女免费視颖| 91精品成人| 羞涩视频| 日韩在线视频1234| 欧美中文综合| 欧美激情五月天| 99少妇| 性色av婷婷久久一区二区点复制| 国产AV线| 丁香六月啪| 亚洲久草AV色图| 久久首页| 男人天堂久久精品不卡| 综合久久欧美| 97干色| 婷婷综合视频| 91人妻人人澡人人爽人人精品| 久久婷婷一区二| 亚州色综合| 婷婷在线播放| 天天日天天操天天射河南省| 亚洲熟妇乱女区二区三区| 欧美中文综合| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 120分钟婬片免费看| 久久精品操| 自拍鲍鱼一区在线高清观看免费| 久久久久白虎| 99re这里只有精品3| 69视频入口| 亚洲图片欧美制度| 一区二区视频在线播放| 伊人网在线点播| 婷色五月| 26UUU欧美日本| 久草精品一区| 久久久久免费少妇| 久久久久久亚洲Av无码精| 婷婷色香| 欧美三级中文字幕hd| 天天操福利视频综合网站| 1024人妻| 亚洲 欧美 日韩 国产一区二区 | 99少妇内射| 99热综合在线| 亚洲国产麻豆一区二区三区| 日韩三级av片| 青青青艹在线视频| 色情五月综合婷婷| 中文字幕一区二区日韩网| 久久↗↗| 亚洲国产一区二区三区在线| 日本日皮视频逼| 免费视频一二三区| 伊人伊人LD| 91超级碰| 约操熟妇| 伊人影院日本| 亚洲,欧美,综合网| 超碰97首页| 在线只有精品| 日本激情免费大片| 天天噜| 亚洲熟女乱色一区二区三区久久久| 亚洲无码99| 无码高清少妇久久| 欧美乱欲| 神马久久免费电影观看| 欧美激情一区二区| 亚洲色色色| 国产成人一级av88| 中文字幕一区二区免费在线| 国产9熟妇视频网站| 绑缚麻绳人妻寝取完整版| 国产原创自拍| 99热欧美| aaaa黄片| 精品国产丝袜一区二区三区乱码| 女色综合| 日韩欧美女求操每天更新| 日本超碰97日韩精品人妻| 亚洲精品丝袜-不卡成人免费……| 操逼天美3区| 欧美日韩国产成人高清| 亚洲综合在线第一页| 人妻人人澡人人爽人人| 日韩精品9999| 欧美 亚洲 大香| 亚洲欧美精品一区天堂久久 | 香蕉黄色一级视频| 亚欧色图在线激情| 狠日欧美| 四虎免费在线观看| 0755午夜福利视频| 国产后入式在线观看| 99色日| 超碰99热中文字幕| 日本99一区二区| 欧美高清性猛交| 欧美一区二区传媒| 成人热久久精品| A啊啊在线观看| 日韩国产十八禁| 91人妻视频| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 风韵犹存大大大大香蕉 | a v网站在线播放| 免费1级a做爰片观看| 91精品国产91久久福利| CCYY草草影院地址入口| 久久天天艹| 国产精品区在线12p| 岛国黄片网站| 啪啪免费| 欧洲色色| 操美女人妻| 国产成人天堂| 欧美激情一| 快灬快灬 一下爽蜜桃在线观看| 国产精选视频| 国产一区二区二区按摩精品啪视频| 夜夜躁狠狠躁日日躁av| 麻豆国产精品午夜视频| 午夜AV人气不卡| 中文字幕免费看大片| 中国亚洲呦女专区| 艹我哪美一区无码| 天天享受天天看| 亚洲超碰综合网| 夜夜国自区| 欧美翘臀视频网站一区二区三区| 国产黄色视频久久| 8050无码八戒| 国产精品国产自产拍高清AV| 一区二区三区色综合| 国产精品白丝AV| 97在线看| 久久亚洲精品成人av| 日本九九九九| 亚洲射综合网| 大香蕉草草| 精品欧美乱码久| 97精品国产| 精品亚洲黄色片 国产精品导航一区二区| 在免费jIzzjIzz在线视频| 嗯啊不要啊在线| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 狠狠色狠狠色狠狠五月| 婷婷丁香六月天| 亚洲视频一二区| 蜜臀久久99精品久久久久久成人小说| 人人操人人干xxx| 精品v日韩欧美国产| 久久熟女人| 尤物AV免费网站| 亚欧无码线免费观看视频| 久操视频资源站公开| 伊人五月天青青草婷婷| 懂色av中文字幕| 粉嫩av平台| www.丁香五月| 我想要啊 啊 啊| 一区操逼| 精品久一区免费| 美女91网| 日韩性爱电影一区| 亚洲色图 图片| 亚洲福利影院一区久久| 欧美日韩99| 蜜桃臀久久| 18禁精品网站在线看| 精品人妻1237| 国产传媒日韩| 久久久久人妻| 欲色综合| 人人爱操| 青青草公开在线免费不卡视频| 奇米狠999| 一区二区 日韩 欧美 国产 传媒| 国产9区| 丁香久久| 久久九九97| 精品一区二区人妖| 国产91专区| 亚乱色| 欧美色图 人妻| 性爱网站一区二区| 97超碰美国| 91夜色| 久久亚码| 欧美 综合 亚洲| 青娱乐淫乱1314| 人妻熟女字幕一区二区| 久久精品—区二区三区内射| 成人情色一区二区| 久操国产在线| 花野真衣| 日本不卡二区| 神马久久网| 黄片国产精品一区二区| 国产乱码久久久久久| 在线免费观看日韩一区| 91精品久久久久久77777| 可能人人看人人摸| 一区二区三区四区五区高清无码永久视频| 极品少妇久久久久| 久热这里| 在线日韩精品一区二区三区| 激情终合网| 亚洲1区2区三区高清中文字幕| 97网址97| 99精品在线播放| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 岛国激情视频软件| 久久久久久久久久久久欧美日| 欧美顶级黄色大片免费| 久久久无码精品人妻二区| 91在线无码精品秘 软件| 一本色道人妻久久| 曰本精品久久久| 国产精品无码久久久久2028| 国产丝袜高跟美女av免费观看| 99色婷婷| 女性喷水高潮在线观看| 2019亚洲男人天堂| 嗯嗯,啊啊,国产精品| ,成人免费啪啪视频| 中文字幕AV片| 久久婷婷一区二| 国产成人99久久亚洲综合| 亚洲综合色在线| 91大胆欧美| 欧美日韩激情无码专区| 亚洲熟女综合网| 国产精品久久久777| www久| 久久久久亚洲熟妇熟女| 综合亚洲网| 大香蕉中文aV在线| 婷婷色中文字幕| 激情小说亚洲色图| 欧美肥臀在线| 美女毛片999| 99性爱视频| 萌白酱自拍视频| 九九久久国产精品怡红院| 又大又长又爽| www.婷婷五月天| 韩日性爱av| 亚洲国产另类在线中文| 超碰97人人乐| 欧美最大综合网| 丝袜喷水在线| 黄色网址久久精品欧美喷水| 国产成人自拍视频在线| 亚洲蜜乳av| 日韩性爱小视频| 中文字幕在线第二页| 九九热超碰97亚洲最新香蕉| 久久久久久中文字幕中文字幕最新| 国产高清MV操逼视频| 欧美高清18A片| 久久岛国| 九九九999久久久网站| 欧美亚洲成人在线一区二区三区| 啊啊啊啊啊啊好湿好爽视频| 亚州操操穴网| 男人的天堂在线有码| 91狠狠综合久久久| 5278欧美一区二区三区| 综合操逼| 免费作爱一级视频| 99精品成人免费看| 5278欧美一区二区三区| 一级久久久久久久久久久| 99久久婷婷丁香| 成人免费毛片| 天天久久| 综合久久97| 精品国产a∨一区天美传媒| 91美女中出| 午夜后入| 97超碰色| 国产自产91区13区| 久久精品国产免费观看99| 日本一区视频在线观看| 伊人丁香五月婷婷| 一区二区三区黄色片a| 亚洲成人黄色在线观看| 成人av福利在线观看| 国产精品视频自拍在线| 欧美黄色片在线播放| 亚洲精品尤物yw在线影院| 青草草免费网站av| 男女激情黄色网址| 欧美丰满熟妇XXXX性ppX人交| 粉嫩在线一区二区懂色| 婷婷啪啪| 日本一二三高清| 啊啊啊啊啊啊啊啊啊啊在线观看| 97热视频在线观看| 老司机香蕉久久久久| 97精| 成人97人人超碰人人| 亚洲精品xxx| 欧美亚洲日本激情在线| 丁香五月天啪啪| 夜夜操天天肏| 91无摭挡| 欧美综合91| 男人的天堂午夜av| 中文字幕 国产区| 91视频国品一二三区| 大香蕉在线视频重口味毛片在线| 天天操天天谢| 91精品老女人| 免费啪啪一级视频| 色香阁在线| 国产精品久久久九九九| 成人性交免费视屏| 久久美女国产| 久久免费中文字幕在线观看| 极品五月天噜噜| 91人妻视频在线| 爱爱动态试试看6 0秒| 极品久久久久久久久久久久久久| 欧美成人都市人妻| 9999九九九久久久| 久久狠狠色噜噜狠狠狠狠97| 国产精品视频内谢女人| 伊人五月天激情| 亚洲丁香花色| 九九十八精品| 九九九精品美女| 乳欲人妻办公室奶水| 国产欧美精品日韩区二区麻豆天美| 97超视频在线观看| 色综合一区二区三区| 久久久成人国产精品无码| 影音综合网| 日韩9区| 日本色色色色色视频| 91天天综合网,天天综合网| 97在线播放 | 1769一区二区| 久久超碰免费的| 资源新线在线天堂| 中文字幕一区二区三区视频播放| av一区二区三区四区五区久草臀| 男女一进一出视频久久| 91人妻PORNY九色大屁股| 亚洲高清少妇| 狠狠中文字幕| 国产精品网站www| 伊人操| 深爱五月天| 91精品国产长腿丝袜美女| 欧美成人性爱视频免费观看| 午夜福利在线视频1000| 精品传媒在线一区| {男男暴菊gay无套网站| 2020中文字幕在线| 97色视频在线| 午夜激情床戏激情| 91无码中出人妻视频| 久久美女国产| 免费国产视频| 欧美91精彩| 九九内射在线| 天天做日日做| 精品人妻一区二区三区在| 久久久久9久久久久| 操逼www.| 搡老女人老91妇女老熟女| 国产AV人人 夜夜人人澡| 国产第25页在线观看| 五月天婷婷社区| 一区二区三区四区五区久久久久久| 青女在线| 国产97/欧美| 国产免费小视频| 精品人妻中文字幕高清| 91制服丝袜| 五十路人妻在线| 大香蕉综合| av无码精品久久久久| 夫妻天天操岛国视频| 97国产综合欧美| 国产精品密臀网在线观看| 国产欧美精品日韩区二区麻豆天美| 亚洲精品一二区| 天天看天天日| 97九色| 欧美日韩传媒| 亚洲男人天堂网| 18禁看网站一区| 国产精品爱欲| 国产成年女人免费视频播放a| 国产熟妇 码视频户外直播| 91欧美网| www.99色| 色情乱伦AV| 爱做久久久久久| 性色avv| 极品久久久久久久久久久久久久| 亚洲淫色网中文| 美女高潮视频91| 精品一区二区三区蜜桃臀赵总 | 日本免费一区二| 我想要啊 啊 啊| 欧美精品精品一区二区| 91美女中出| 蜜臀久久99精品久久久久电影| 91精品女厕偷拍视频| 欧美爆操91| 看全色黄大色大片免费视频| 国产成人无码啪| 91色久| 啪啪91| 国产热av| 久久婷婷电影网| 日va操| 麻豆这里只有精品| 蜜臀久久久久久999| 青青操在线亚洲视频观看欧美在线 | 天天插天天操天天摸天天射天天看| 综合欧美色图| 人人操人人插人人摸人人干| 一区二区三区精品黑丝白丝酒店对鸡 | 欧美另类精品xxxx| 久久草视频污视频| 操逼国产免费| 97 国产一区| 精品国产乱码久久久久久网站入口| dy888午夜老子影视达达兔| 97精品综合| 欧美少妇高潮| 美腿色图| 中日韩免费看男女操逼大全| 九九九九九用不成了| 久久伊人最新网址视频| 欧色综合| 中国一级操逼视频| 91色s| 超碰精品在线| 欧美国产精品久久九九| 天天舔天天日天天射| 亚洲激情在线观看一区| 毛片17S| 一二三四视频中文字幕在线看| 污污污8888| av午夜影院在线播放| …亚洲黄色厕厕女女在线播…| 91夜夜蜜桃臀1区2区3区| 亚洲aV性爱| 久久久一区二区三区三州| 97超碰中文在线| 狠操91,com| 天天做日日做天天欢。| 97视频一区| 婷色五月| 国语对白露脸XXXXXX| 97精品国产精品免费观看| 一级性爱啪啪视频| 综合熟妇一区二区三区| 男人天堂免费| 久久精品国产97欧美精品亚洲 | 欧美在线第五页| 久偷拍欧美日韩三区| 欧美亚洲AN| 热久日综合| 歐美性天天| 欧美在线l亚洲| 亚洲老司机123专区| 抽查国产福利主播| 91人妻尻屄视频| 伊人影院日本| 欧美日韩久久精品爱爱| 黄资源| 亚洲中文人妻色| 麻豆国产免费影片| 国产亚洲深夜激情| 欧 美 自 拍 偷 拍| 欧美呦呦性爱| 国产欧美精选激情视频| 国产精品 久久久精品一牛| 国产AV色黄看到爽| 日韩欧美大力操| 精品人妻av在线播放| 人人操人人摸人人看人人干| 久久精品人人做人人看| 蜜乳av一区二区| 久久久亚洲欧美综合| 午夜影美女日鸡鸡天天视频国产 | 天天干人妇| 国产亚洲 中文欧美久久| 欧州激情视频在线一区二区| 色噜噜国产在线| 无码9区| 禁止观看美女黄| 国产极品久久久| 欧美韩国你懂得在线 | 在线观看无码三级少妇| 人妻精品一区二区在线| 大香蕉亚洲中文| 亚洲 欧美 小说| julia ann久久| 成人精品在线免费视频| 自拍偷拍2025在线观看| 青青操少妇| 久久超碰日韩精品| 国产精品视频精品一二| 夜色97| AAAAAAAAA黄片| 三上制服丝AV| 在线毛片片免费观看| 亚洲色偷偷色噜噜狠狠99网| 超碰人妻久久| 一区二区三区机械有限公司| 91精品少妇搡搡搡| 综合久久六月久久婷婷| 日韩精品操少妇| 囯产精品久久久久久久久久二区三区| 亚洲古典另类欧美在线| 极品后入免费视频| 无码人妻精品一区二区三区99不卡| 在线观看十八禁| 性饥渴少妇av无码毛片| 天天综合网在线| 一牛影视成人片免费| 国产馆极品诱惑| 九九九热精品| 国产成年女人免费视频播放a| 婷婷久久大香蕉| 亚热日本熟女| 亚洲天堂少妇| 一级日本牲交大片好爽在线看| 手机看av网站在线看| 嗯嗯啊啊视频在线看| 国产乱不卡| 精品视频免费在线一区| 久久男人网| 超碰97人人cao| 人人手机欧洲亚洲国产人妻| 亚洲成人贴图| 久久女人视频| 秋霞免费无码视频日韩A片| 91亚洲黑人| 超碰在线人人射| 情色av电影| 日韩成人无码| 歐美性天天| 亚洲国产一区二区入口| 亚洲天堂日本| 中文字幕成人理论在线| 国产熟女一区二区| 无码乱人伦中文视频| 久久超碰av在线| 天天色,天天干,天天干| 98福利在线视频| 97人人超| 91五十路| 色九九九综合| 色99视频| 中文字幕美女91| 男人天堂 天天射| 116美女午夜| 国产精品美女久久久久AⅤ国产馆| 欧美91网站| 乱色视频中文字幕| www久久国产精品| 啊啊啊啊好大好硬啊啊啊啊啊 | 91天天爽| 亚州一区二区| 伊人精品国产| 宗合情欲网| 久久人妻办公室视频| 亚洲免费成人在线高清无码视频| 台湾佬大香蕉| 亚州中文字幕超碰97| 夂久色| 人人色人人操在线| 欧美大香蕉久| 玖草在线视频| 久久久精品一区二区| 成人热久久精品| 91国产丝袜足交精品视频| 亚洲一区日韩| 日本片日本片祼观看网站在线看中文版网页在线看 | 性无码专区2020| 久久久无码视频| 鸥美中出| 夜夜嗨TV| 操久久久久| 美女久久久久久久久久久| 欧洲精品一级二级精品综合视频综合 | 亚洲色图 欧美热图 清纯唯美 另类自拍 | 91丝袜在线观看| 久久久新亚洲AV| 人人贴人人摸| 欧美成熟性爱精品| 超碰79人人乐| 在线性黄高清免费视频| 毛片17S| 久一区久久蜜桃| 国产女性无套 免费观看| 亚洲自拍欧美国产首页网曝 | 九九九九亚洲| 精品国产91内射久久| 91狠| 97资源亚洲| 国产精品爆乳懂色蜜乳| 亚洲欧美日韩制服另类| 亚洲 国产 精品一区| 99自拍视频在线观看| 中文字幕在线观看第二页| 国产妇女精品视频青青草| 国产尤物在线三区| 日本性爱网址| 91精品综合久久久久久五月丁香| 亚洲综合另类欧美久久久| 91处女在线视频| 嫖老熟女A片一二三区| 日本高清久久| 无码视频一区二区| 久久久久久久| 51一区二区三区| 精品四五区| 97免费在线观看视频| 在线性黄高清免费视频| 久久久久久人| 无码国产精品午夜不卡(| www.acm成人黄色毛片| 精品欧美А∨无码黑人大荫蒂| 97国产天堂岛| 亚洲AV无码成人精品久久| 蜜桃AV天堂| 色吧五月| 色哟哟AⅤ| 97超级久久| 白丝少妇一区二区| 丁香五月天激情| 亚洲动态色图| 国产农村妇女精品一二区| 丁香九月 婷婷| 黄日韩| 欧亚在线视频| 男人天堂新在线| 国产欧美日韩臀| 性爱Av免费| 蜜臀久久久99久久久久 | 少妇熟女一区二区三区| 欧美激情久久久久| 97视频在线免费看| 韩国黄色片精品久久久| 精品高清一区二区三区三州| 久9爱精品| 久久久久人| 射 色综合| 在线观看国产黄色| 久久久99免费| 亚洲欧美不卡线| 91爱综合| 91美女中出| 无码人妻丰满热妇又大又粗| 两女互慰AV高潮喷水在线观看| 97国产精品在线观看| 韩日男人的天堂| 青青草日本无码| JIZZJIZZ国产精品喷水| 老熟女乱伦片| 91痴汉| 97bbn| 久久精品视频在线观看| 中文字幕123| 欧美日韩 强奸乱伦| 国产一区二区a毛片| 色综合久久av| 乱抡国产91| 2019天天干| 先锋女优在线观看视频| 骚日日av| 亚洲电影91| 亚洲色图综合网| 久久大香蕉手机高清| 日本色婷婷| 丝袜视频一区二区在线播放国产中文| 玖色AV| 看日韩美女二区三区免费操逼视频| 日本中文字幕在线电影| 国产 日韩 欧美高清| 夜夜爽夜夜操| 超碰免费人妻人人| 成人三级片无码| www.夜夜操| 女优视频第10页| 97人妻色| 久肏视频字幕| 人人弄人人摸| 欧美亚洲另类在线蜜桃| 亚洲综合成人网| 久久超碰97中文字幕| 男人的天堂日韩| 蜜区区视频79| 美女黄网| 天堂俺去俺来也www久久婷婷| www.婷婷| 国产中午字一暮区| 国产精品视频内谢女人| 激情干在线| 亚洲精品97在线| 欲色综合| 91碰碰碰| 久久久久成人网| 国产精品一二三在线看| 亚洲欧美国产中文字幕| 性色av大全| 免费成人在线熟妇网| 日本大香蕉综合网| 激情网色| 少妇人妻无码| 97免费在线视频| 久久久97| 品亲网欧美品亲网| 中文字幕亚洲永久精品| 欧美熟爽综合| 2017天天拍大香蕉| 久久久草成人网站久久久草成人久久久草久久久 | 久久久久久97| 另类天堂| 亚洲人妻精品一区二区| 色9999日韩国产| 少妇高潮一区二区三区在线| 亚洲日韩av专区无码| 亚洲av影院在线观看| 在线 欧美 亚洲| 日韩欧美视频青青| 人人操人人操人人人操| www久| 亚洲男人天堂网站| 韩美日操逼| 这里是精品| 亚洲天堂资源网| 综合网亚| 成人婷婷丁香| 久久一级无码精品毛片6| 欲射影视| 欧美日韩性爱操大逼| 怡红院成人视频| 精品熟女一区=区三区| 人人插人人摸人人| 亚洲综合色图欧美| 无码抄逼网| 人妻二区| 91欧美情色| 91蜜臀在线久久久久| 无码国产精品久久久久| 少妇高潮流水av免费| 插B在线观看| 9/A片| 久操不卡视频| 婷婷色色五月天福利| 啊啊啊啊无码| 好湿好紧好爽 视频| 免费a在线播放v| 国产成久久综合片| 久久一二三四五六七八九区| 久久久熟妇熟女国产| 999在线电影香蕉| 五月天婷婷欧美三区| 无码一区二区精品视频久久久春药| 青女偷拍网| 婷婷激情丁香| 嗯~啊~快点 死我视频免费看网站| 久九干| 久久一二三四五六七八九区区区| 国内毛片国产专区二| 国产亚洲日本精品在线| 欧美十八禁在线看| 六月婷婷五月丁香| 精品国产丝袜一区二区三区乱码| 日本操逼视频免费| 男人的天堂99| 久久97超碰| 亚洲综合影院| 啊啊啊久久| 91综合在线| 国产强奸乱伦xd| 国产精品自拍欧美在线| 色噜噜人妻丝袜a∨先锋影| 极品色社| 中文字幕av一区二区三区人妻少妇| 大鸡巴久久久| 男人天堂站| 玖玖爱伊人玖玖爱| 亚洲 欧美 第一页 | 后入精品| 亚洲高潮影院| 黄色成人网久久久久久| 日逼视频日本| 亚洲熟妇自偷自拍另欧美| 中文字幕在线播放2中文字幕在线观看2| 99色在线| 色情亚洲日本成人| 啊啊啊好大好湿| 国产精品操| 亚洲一区日韩| 色香综合天天影视综合 | 一本大道久| 九九九热| 亚洲αv一区二区三区| 亚洲色9| 久热99999| 国模不卡| 色www精品视频在线观看| 欧亚日韩一区在线| 偷拍欧美激情| 97免费视频在线| 中文字幕狠狠玩| 日本东京热大香蕉a片| 啊v在线观看视频| 丁香六月东京热| 欧美激情久久久久| 久久无码成人| 91无摭挡| 亚洲av无线观看| 91黑丝美女| 国产一区二区精品久久99| 欧美 综合| 粉嫩av平台| 97天天操天天干| 久久亚洲AV无码专区国产精品| 97se综合网| 国产高清26uuu| 试看60秒| 九九伊人网| 亚洲成人贴图| 91蜜臀在线久久久久| 国产毛片久久久久久久| 色欲久久99精品久久| 99这里都是精品| 国产白丝精品在线观看| 麻豆精品久久久久久久| av毛片aaaaa免费看| 男人下部插入女人下部| 91色欧美| 美欧老女人97| a久久| 波多野结衣先锋影音| 色婷婷一区二区三区久久午夜成人不| 亚洲精品日日夜夜52| 骚女天天综合网| 老司机久久| 国产精品青青草| 天美麻花大全视频| 亚洲一区二区三区不卡国产欧美| 天天热精品| 成人精品视频一区二区| 无码 有码 国产18p| 97色在线视频| 欧美精品 - 91爱爱| 99国内精品| 一区二区日韩欧美久久| 奇米四色影视777久久久| 亚洲性高潮|