日韩精品一区二区三区在线视频放-无码中文字幕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
返回資訊列表
国产超碰人人操| sewuyueav| 99精品无码| 亚洲一区二区三区在线激情| 国产麻豆一级精品视频| 亚洲熟女综合| 大香蕉乱级| 精品妇女一区二区三区| 国产9熟妇视频网站| 欧美性爱第一区| 亚洲精品819| 校园春色 亚洲| 久久久久久亚洲Av无码| 黑人嘿嘿嘿超爽免费视频| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 欧美99| 国产天天看| 91美女在线| 激情视屏国产乱伦强奸| 亚洲风情综合网| 国内毛片婷婷六月色| 人妻夜夜爽天天爽麻豆三区网站 | 亚洲导航深夜福利| 麻豆人妻偷人精品无码视频| 久久99人妖视频国产| 色爽——AV| 无码精品一区二区三区潘金莲| 顶级少妇BT天堂| 少妇久久| 精品综合久久久久久97| 多乙久久久久久| 在线亚洲丝袜视频网站| 日本性爱不卡视频| 人妻少妇无码 | 久久九精品| 黄片免费日韩| 九九热视频这里只有精品| 国产精品免费1区2区视频| 激情小说五月天| 999色欧美中文字幕| 爱我干综合| 一区二区三区一亚洲中文字幕、综合区灬| 欧美黄色片AAAAA| 男人的天堂kva| 久久综合五月天| 97视频免费| 狠狠色婷婷| 色姑娘综合网| 97精品国产手机| 欧美日韩色综合网| 男人天堂新| 精彩视频日韩| 精品中文字幕一区二区| 99re在线视频这里只有精品| 曰韩精品九九无码| Sekablack无码一区| 色天堂在线观看| 多乙久久久久久| 欧美天堂在线| 人人超碰在线观看黄| 无码日韩人妻av一| 欧美春色| 丝袜视频一区二区在线播放国产中文| 密乳无码| 精品视频久久| 97在线欧洲| 日韩无码黄色片| 国产第二页| 五月天丁香网| 国产传媒午夜理伦精品| 久久久爆乳翘臀一线天伦理视频| 性爱综合一区二区| 大逼色网站| 男人的天堂2018东京热啪啪啪| 秋霞一级鲁丝片A片| 国产尤物在线三区| 超碰天天久久79| 人人透人人操| 久久91视频| 91美女国产在线| 亚州操操穴网| 午夜男女爽爽爽在线视频 | 亚洲综合情色| 国产有码一区| www.zbzhongsen.com| 国产精品盗摄 偷窥盗摄| 亚洲中文字幕久久无码精品| 91少妇通奸网站| 无套内射性感少妇视频| 亚洲美女自拍偷拍视频| 美女黄站| 欧美日韩系列| 免费国产| 亚洲蜜臀懂色| 啊嗯好大视频在线观看| 91中文精品日韩欧美在线| 久久直播国产| 大香蕉专区| 亚洲中文人妻色| 国产精品制服丝袜清纯唯美| 免费?级毛片无码?∨蜜芽试看| 日韩91网| 偷拍亚洲情色| 欧美 传媒 麻豆 日韩 偷拍| 2025亚洲男人天堂| 无码伊人久久大杳蕉中文无码| 欧美 亚洲 第一页| 国语少妇精| 操逼内射干逼白丝91| 屌逼麻豆| 婷婷五月天激情四射| 日韩欧美福利视频看看| 欧美中文字幕日韩在线| 精品78| 97精品97久久| 日韩熟女视频二区| 999熟女精品| 日韩天美| 人妻一区二区三区| 久草综合京东| 日本不卡二三区| 欧美激情超碰777| 亭亭丁香激情| 亚洲码和欧洲精品激情系列| 久久综合久久综合人久久夜精品| 一牛影视久久久一区二区三区| 最新国产精品久久精品| 91碰碰| 一级啊性爱在线视频| 国产三区免费在线观看| 亚洲经典啪啪| 日本潮催一卡操| 欧美亚洲91| 欧美在线视频观看一二三四区高清| #NAME?| 超碰 另类 欧美 | 国产又大又硬又长又粗| 夜色AV无码手机在线影院 | 午夜毛片高清免费不卡| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 97伊人超碰| 少妇久久久免费| 日本不卡一区二区三区| 老司机福利社视频在线观看| 欧美日韩狠狠爱| 葡萄牙性视频一二区| 影音资源男人日韩| 欧美爱爱97| 欧美高清无码免费视频高清版| 国产成人欧美精品在线| 国产美女裸体秘 永久无遮挡| 宅男影院久久久,99| 爽极品影院| 奇米狠999| 免费中文在线| 中文字幕一区二区三区蜜臀| 91N综合网在线| 亚洲天堂中文字幕无码男同| 躁躁日曰躁2020| 偷拍色图| 日韩在线电影| 蜜乳AV一区| 97国产精品视频| 九一性生活免费视频| 亚洲综合 欧美| 人妻色情天天操| 亚洲色人阁| 男女无套 免费网站| 国产精品麻豆成人av| 综合免费无码中文| 美腿色图| 激情文学小说一区二区| 韩国免费播放一级毛片| 久久精品国产免费观看99| 首页亚洲国产高跟丝袜诱惑视频| 欧亚久久偷拍视频| 丰满人妻一区二区三区免费 | 欧美伦乱爱| 精品人妻一区二区三区-国产| 大香蕉之青青草原| 国产a级午夜毛片| 美中韩AV综合网| 国产精品第一区第一页| 国产精品岛国片在线观看| 色综合色| 亚洲十八禁止| 一级毛片电影免费看| 俺去俺来也在线www| 久久久亚洲精品电影免费看| 欧美草草高清日韩视频| 黄色免费网页无码| 精品人妻一区二区免费蜜桃| 亚洲在线网站| 色婷婷激情| 啊啊啊啊好大好硬啊啊啊啊啊 | 亚洲色图欧美色图在线播放| 操国产高清| 亚洲成人一区二区精品| 精品999日本| 三级精品三级在线观看| 东北黄色电影| 亚洲国产精品久久AV| 亚洲av强奸乱伦| 天综合网| 99re这里只有| 人摸人人操人| 噜噜噜噜天天狠狠| 静品嫩模一区二区| 天天干1区2区在线| 精品九九国产无码| 中国国产精品一区视频| 精品一久久久| 色九久| 嫖老熟女A片一二三区| 久久中日麻豆| 久热在线精品免费观看| 啊啊啊啊二区好大| 亚洲 在线| 国产亚洲一黄| 亚洲欧美碰碰| 久久中文色图| 一本大道不卡一二三区| 夜夜国产一区| 无码精品人妻一区二区三区妖精| 偷拍 亚洲| www国产无码| 亚洲日韩肥臀视频在线观看| 亚欧无码线免费观看视频| 搡老熟女老女人老熟妇免费视频| 嗯嗯嗯啊啊在线观看| 亚州AV无码国产精品| 加勒比五月天| 国产激情在线| 欧美色图91| 久久人妻四季| 免费在线观看国内色片网站网址| 国产九九九九九九| 淫妻综合网| 天天综合欧美| 天天天天天天天天综合| 中文字幕中文字幕一区二区| 又大又白奶子| 亚洲国产精品9999在线观看| 伊人久久亚洲色欲综合网站 | 伦理片秋霞免费影院| 偷拍导航视频网站| 久妇网| 伊人一区二区在线播放| www.久久超碰| 97香焦色区| 欧美成人免费在线观看| 亚洲欧美精品久| 大香蕉乱伦视频网| 99999亚洲另类| 综合久欧洲| 精品人妻美妇91job| 亚洲天天操| 亚洲伊人久久精品狠狠在线| 爽极品影院| 久久久草草精品| 91女人的网站| 操人无码| 精品人妻中文字幕4399| 日韩99999| 亚洲精品久久久久久久久豆丁网| 国内毛片国产欧美拍| 青青草日韩免费观看高清在线| 99视频自拍| 人人操人人色网| 精品一区二区三区四区外站| 国产av尤物| 日本最新免费韩国1区2区视频播放| 人人摸人人添人人操| 中文字幕十五区| 亚洲高清在线se| 日本熟女中文字幕一区| 免费1级a做爰片观看| 天天澡天天爽日日av| 后入式999| 污啪啪啪视频| 日韩av影片在线观看| 八戒午夜福利理论片| 在线小说视频一区| 一本久久精品中文字| 久久国99999| 色爱综合网欧美| 亚欧性爱在线无码| 婷婷伊人綜合中文字幕| 韩国女主播青草在线| 美女操逼A A| 色999五月色| 中文人妻av高清一区| 天天综合欧美| 嗯嗯啊啊啊好爽| 天天色香欲综合网| 超踫中文字幕| 国产精品交换一区二区| 午夜男人一级A片7777| 秋霞蝌科网日本一区| 国产25页| 99热婷婷| 色5月婷婷| 18禁精品网站在线看| 人人操欧美风骚| 天天日骚逼熟女| 大香蕉色网| 亚洲综合另类欧美久久久| 五月丁香色综合| 女人爽到高潮潮喷18禁网站| 五月天婷精品激情| 乱伦av麻豆| 国产一区二区三区高清视频| 人妻丰满熟妇av无码区蜜桃| 999熟女精品| 五月天加勒比啪| 免费看美国人人爽,人人操| 青娱乐亚洲热| 国产一区二区久久| 精国久久一区二区三区98| h色99999| 欧美亚洲清纯| 男人的天堂Va| 国产午夜精品在线观看| 精品国模无码| 乳欲人妻办公室奶水| 少妇人妻好深太紧了vr91| 第四色奇米影视777| 成人免费看吃奶视频网站| 九九精品99| 天堂无码精品国产久| 首页中文字幕中文字幕免费| 婷婷亚洲综合| 9热9热综合网| 亚洲日韩久久精品一区| 激情文学亚洲| 男人天堂欧美| 一牛影视成人片免费| 美女午夜福利免费视频| 麻豆国产尤物AV| 欧美欲色| 久久久久婷婷精品av电影| 午夜视频久久久| 超碰99在线| 久久久久九九九| 麻豆国产精品午夜视频| 五月天黄色激情视频| 欧美色图天堂在线| 日韩ab网 | 亚洲字幕一区二区| 九月丁香| 麻豆九九九| 国产丸一视频| 久久久九九九| 激情啪啪拍91| 亚洲一二三四区机械| 国产人妻精品一区二区三区秋霞 | 国产高清MV操逼视频| 精品少妇后入一区二区三区四区人妻巨乳| 99啪啪视频| 99热大香蕉伊在线| 黄色香蕉视频网站一区| 国产情侣自拍在线播放| 中文字幕视频在线观看一区二区| 日韩 欧美 国产 麻豆| 97se亚洲综合自| 无码人妻精品一区二区中文| www.99热| 性色高清..……| 午夜国产成人精品视频| 国产精品色色| 97se综合| 你懂的在线观看区国产| 精品超碰中文在线| 九九九九97| 亚洲无码国产探花在线观看| 丁香五月影院| 国产乱弄免费在线视频。| 999综合网| 99视频自拍| 天天天天天天天天综合| 午夜男女爽爽爽影院视频| 男人的天堂不卡一区二区| 加勒比少妇AV婷婷六月天超碰超碰| 香蕉欧美| 人妻熟女一区在| 国产av色网| 九九干| 91丝袜美女| 淫淫综合网| 国产久久av| 图色综合网| 欧美欧美少妇| 人妻22p| 亚洲AV在线资源| 99e久久国产精品| 六六久久日韩不卡| 美女高潮国产高清| 91啪啪视频| 欧美亚洲色的图| 乱伦a片视频| AV天堂男人的天堂| 伊人专区一区二区三区| 欧美一区二区日韩传媒搭讪精品| 亚洲电影中字一区二区| 麻豆天美国美国产AV| 亚洲人妻五月丁香婷婷| 亚洲婷婷五月天| 大鸡巴久久| 亚洲成人在线播放| 97色综合中文网| 野狼激情网| 国产精品白丝| 亚洲熟妇乱女区二区三区| 97亚洲综合影院| 荡小穴在线观看| 97爱| 91欧美长吊| 欧美激情性久久久久久| 日日干男人的天堂| 亚欧无码在线| 尤物视频新赏网鲜网色诱网| 天天爽人人综合免费7799| 四虎免费在线播放| 激情六月天| 九九九久久久| 国产一区二区三区久久精品太古里| 在线播放一级无码视频| 欧亚三区动漫| 99www.bibizy香蕉资源国产一区二区三区高清 | 九九视品黄色| 777AV电影| 亚欧美综合网。| 欧美中出1| 91岛国动作片| 欧美性生活内射| 精品视频免费在线一区| 成人一二三区| 欧美人妻色| 久久香蕉国产线看观看猫咪av| 欧美少妇高潮| 求求你操操我| 色小视频蜜乳| 琪琪精品免费一区二区三区 | 亚洲人在线成线成人| 国产精品美女久久久久AⅤ国产馆| 成人十八禁日韩欧美一二三| 中文字幕一区日韩精| 久久一区二区加油站| 99re视频在线观看这里只有精品| 亚洲成人黄色在线观看| 999熟女精品| 色综合99| 伦伦成年午夜免费视频| 欧成人精品H无码| 麻豆人妻少妇在线免费观看| 大香蕉av在线| 午夜超爽| 97亚洲综合| 青青草久久| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 国产成自自拍在线观看| 强奸乱亚洲| 免费αV在线视频| 中国和日本人色哪个不下载能放| 大香蕉综合久久| 激情文学网伊人| 亚洲国产麻豆一区二区三区 | 久久原创中文| 男人的天堂欧美| 婷婷成人五月天| 日逼国产| 人人操人人操人人人操| 试看60秒 爽| 欧洲精品二区| 亚洲情色 无码专区| 超碰精品| 97天天爽| 1024人妻| 五月丁香激情综合网| 免费一级精品啪啪视频| 成人五月天丁香激情综合| 天操天操夜操夜月月年年操操 | 台湾成人无码AV| 国产资源中文字幕在线| 欧美色女人| 日本97久久| 使劲用力艹少妇视频一区二区| 91粉芽高清在线一区二区| 亚洲精品啪视频| 国产精品久久天天干| 亚洲欧美综合| 中文字幕丰满子伦无码专区在线视频最新 | 人人贴人人摸| 免费av在线播放二区| 97精品免费| 东京热毛片177b2viP| 欧美日韩精品青青| 激情婷婷丁香| 夜夜免费视频| 人人九九精| 亚洲日本天堂| 欧美成人贴图| 精品一级| 久久东京热久久| 东京太热男人的天堂久久久| 久久久亚洲熟妇资源| 精品少妇一区二区三区| 伊人国产AV| 超碰97极品9| 久超碰这里只有精品| 色天天野狼综合社区| 97超碰中文字幕| 亚洲情色综合网| 99这里都是精品| 日曰骚久久精品| 午夜福利在线合集| 欧美大的香蕉有线电视视频| 亚洲天天综合| 超碰色男人操熟女| 超碰综合色| 秋霞午夜视频一区二区| 欧美日韩天堂| 夜夜影视四色| 精品久久人妻成人网| 亚洲欧洲国产综合av| 去干网最新版| 国产亚洲 中文欧美久久| 天天操av懂色| 人妻人人澡人人爽人人| 久久久久久久综合,国产| 情色五月天就去干| 欧美综合91| 日韩无码黄色片| 天天躁日日躁AAAXX| 99精品网| 精品人妻视频一区二区三区蜜桃视频| 伊人国产AV| 亚洲在饯| 91在线视频国产网站| 眼镜人妻101.com| 国产欧美日韩精品中文| 天天日天天舔天天喷天天射| 欧美中文狠| 九九热午夜欧亚国产视频| 大香蕉狠狠爱| 91c色| 青青草日韩无码| 精品乱子一区二区三区99| 夜夜爽妓女| 60秒免费小视频| 久久99干一本高清| 久久久久久久伊人精品| 国产伦精品一区二区三区在线观| 国产SV一线| 我爱操| 极品欧美一区二区三区| 狠狠爱综合| 青娱乐大香蕉| 欧美色青| 91精品久久久| 97天天摸天天碰| 最新av在线| 91中文字幕| 激情久久久| 神马久久久久久久久久久久| 97爱爱爱| 任你草| 免费亚洲国产精品久久一区| 综合网亚洲| 日韩AV一区二区三区四四| 亚欧免费| 一二三四日本视频高清| 色欲久久99精品久久| 午夜国产乱伦视频| 韩国久久97| 日韩欧美麻豆 | ′ !γ}丶。。久久精品欧美一区二区三区| 97这里只精品| 免费a级毛片av无码久久精品中文字幕| 多毛小伙内射老太婆| 欧洲Au麻豆| 亚洲欧美国产精品久久久久久久| 2024年最新色情网站在线观看| 丁香六月综合激情| 成人情色综合网| 日本欧美一区二区三区免费| 狠狠夜色午夜久久综合在线| 欧美一二三级精品在线| 顶级少妇BT天堂| 91色图| a网站免费观看| 超碰 欧美| 91精品无码人妻系列| 日日噜噜夜夜久久亚洲一区二区| 影音先锋每日最新资源在线观看| 亚洲日本韩国在线| 精国久久一区二区三区98| 日婷婷| 91无码中出人妻视频| 99rre在线精品99re8| 午夜免费福利视频一区| 久久人妻无码毛片A片麻豆| 亚洲无992tv| 超碰色老头| 久久av一级av少妇av高潮| 亚洲一区二区三区麻豆传媒| 婷婷丁香激情| 欧亚第一综合网| 久久精品国产亚洲妲己影视| 大香蕉在线视频重口味毛片在线| 鸡巴插逼视频| 四虎精品永久在线观看| 超碰人人妻| JIZZJIZZ亚洲女人被躁| 国产熟女乱论| 久久亚州精品成人Av无| 豆花视频操逼网址| 乱伦Av网| 熟妇人妻一区二区三区| 日本好吊色视频| 国产激情片在线观看| 精品久久久久黄少妇| 国产中文大片资源中文字幕| 性色国产东北露脸精品视频| 风流老熟女一区二区三区l| 吉川爱美亚洲二区在线| 亚洲强奸乱伦影视网| 色97国产69香蕉| www.久久99| 日韩成年人性爱视频| 久久精品国产99国产精品亚洲| 亚洲成人免费中文字幕| 哈哈操 大香蕉| 伊人成人情色综合| 国产亚洲精品av一区| 日本不卡中文| 久久婷婷五月天| 91无遮挡| AV中文字幕剧情1区2区3| 九九Av| 极品销魂美女一区二区| 啊啊啊好疼| 1024人妻| 欧美黄色片在线播放| q2午夜理论片夜色av| 日本 欧美 亚中文字幕| 97人人夜夜精品视频| JuliaAnnXXX888| 2020视频1区2区3区| 一本大道不卡一二三区| 国产精品扒开腿做爽爽爽视频| 欧美日日网| 人妻99p| 激情天天视频| 大逼色网站| 人人妻人人操人人乐| 美女露胸露奶头| 黄网站黄视频网站进入口| 高清国产精品无码| 精品一区二区三区蜜桃| 做爱福利视频一区二区| 欧洲人妻视频| 国产做?爰片久久毛片?片美国| 免费精品无码一级毛片牛牛影视| 综合97久久| 久久一二三级一一一| 逼逼逼逼操操操操操操操操操午夜剧场| 男人的天堂三级| 国产高清MV操逼视频| 亚洲欧洲激情卡通另类文学四射小说网站 | ji熟女.com| 破处bbq| 日韩av熟女一区二区三区成人| 国产精品国产拍高清AV| 日韩精品碰碰| 一起草三级AV电影在线观看| 久久久无码精品人妻二区| 天天α片| 日韩AV色图| 国产呦精品一区二区三区下载| 97免费在线观看视频| 加勒比性爱成人在线| 伊人国产视频| 国产传媒美日韩av| 综合国产97| 亚洲不卡AV在线| 色综合99| 强奸乱伦资源| 精品成人动漫一区二区| 影音先锋新男人| 999久久久免费精品国产牛牛| 久久有码视频| 久久久九九| 96精品一区| 亚洲高清在线se| 久久久久久久久久久久黄色 | www熟女乱伦com| 男人的天堂2019| 2017亚洲天堂| 夜夜嗨视频| 啊啊啊操死我| 秋霞色色影院| 久久久555| 国产美女自拍视频| 蜜臀va69| 亚洲 欧美综合| 玖玖综合网| 九九九九九九九九九国产精品| 综合色区偷拍| 超碰九7| 中文字幕一区二区三区50路| 碰碰97| 婷婷色色五月天福利| 中文字幕日韩专区精品系列| 国产精品嫩草久久久久| 福利在线观看一区二区| 综合自拍| 3d成人精品一区二区| 婷婷五月天久久久| 麻豆天美国美国产| 亚洲丝袜天堂| 欧美天堂第二区| 在线五区| 蜜臀网 一区| 亚洲av资源| 人人操人人操人人人操| 伊人网综合在线视频| 中文字幕性感少妇av| 亚洲色吧网| 九九成人精品| julia ann久久| 欧美日韩人妻精品一区二区三区| 91五十路| 国产人妖视频一区在线观看| 天堂种子在线www网资源| 婷婷激情四射| 亚洲天堂情色| 风间由美日韩欧美久久| 美女黄页网站| 最近2018中文字幕在线高清第一页| 强奸国产精品视频| 狠狠综合网| 欧美婷婷久久| 青女偷拍网| 日熟女| 久久精品国产亚洲AV片多多 | 日韩色图 一区二区| 伊人操| 国产精品久久99日日| 婷婷六月色| 白丝少妇一区二区| 欧美性91| 97久久国产精品女不卡| 日韩在线观看字幕精品| 欧美 亚洲 制服 精品| 少妇99| 亚洲中文字幕精品一区| 性爱av在线免费观看| 后入人妻一区| 亚洲AV色图| 国产精品干干干| 美女露胸露尿口| 夜夜国产一区| 精品人妻一区二区三区四区不卡在| 国产91啪| 人妻激情另类| 欧美在线天堂| 亚洲偷拍自拍在线视频| 亚洲日韩青青草色月| 欧美亚洲天天| 一区二区三| www男人天堂| 搡老女人老91妇女老熟女| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 国语国产操逼伊人AV网| 亚洲成人贴图| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 美国美女AV在线| 日本三级日本三级99| 偷拍自拍在线视频观看| 日韩高清黄片| 精品一区二区三区国产 | 九九亚洲| 国产精品伦理| 亚洲人码13| 久久精品老司| 天美麻豆精品视频99| 亚洲偷拍自拍在线视频| 99re99| 亚洲高清91| 国产三级中文字幕粉嫩| 激情五月天校园春色网| 国产肏屁眼视频| 中文字幕一二三区| 欧州色图区| 麻豆这里只有精品| 日韩AV一起草| 亚洲二区精品在线观看 | 亚洲一区二区中文字幕| 曰韩操B| 高清国产精品无码| 丁香五六月啪啪| 97超碰久久| 亚洲va有码在线天堂| 日韩精品人妻中文字有码在线 | 黄色欧美性爱视频| 在线97视频| 色爽——AV| 成 人 影视 一区 二区 三区 四区| 丝袜综合网| 国语精品对白| 最新精品久久蜜桃 | 婷婷久久五月| 九九无码视频| 俺去俺来也在线www| 在线可观看的黄色网址| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 久草成人| 久久9精品| 蜜臀久久久99久久久久| 97天天| 另类小说欧美激情校园春色| 欧姜老司机| 成人性交免费视频| 久久久久久9| 国产福利合集| 国产成人超碰在线| 国产精品人妻熟女aⅴ| 中日亚韩免费视频| 留下AⅤ黄色片| 国产一级片| 色穴精品| 蜜臀th| 加勒比无码毛片| 一二三区精品视频| 欧美色999| 青草成人免费视频一COm| 网友自拍第一页| 国产99999| 午夜视频好爽啊| 激情网色| 六月丁香五月婷婷| 韩国黄色片精品久久久| 国产三级日产三级韩国三级| 欧美综合亚洲| 抽插亚洲无码| 久久久久白虎| 麻豆亚洲AV成人无码久久精品| 日韩少妇在线视频| 欧美美女自慰一区二区三区| 久久久久久中文| 操逼短片| 日本女人久久久| 成人性爱免费播放| 成人aⅴ一区二区三区| 亚欧性爱无码| AA丁香综合激情| 久久伊人网视频一区二区三区| 久久9 9 9精品| 国内外毛片在线观看| 91人人| 亚洲精品白浆高清久久久久久| 一区二区三区 日韩欧美| 色综合久久久久| 91最新综合| 伊人9| 中文字幕一区二区视频在线观看| 午夜.DJ高清在线观看免费7| 超碰成人免费| 自拍欧美| 日韩15p| 国产精品免费日韩| 亚洲色图超碰在线| 国产日韩中文字幕欧美| 婷婷色色五月天福利| 日本性爱不卡视频| 日韩国产品视频中文字| 综合色久欲| 超清福利精品视频在线| 人妻精品视频一区二区| 日少妇亚洲版| 久久高潮妇女视频| 男人a天堂手机在线版| 91久久久久久久久久久| 夜夜春夜夜操| 操b在线观看| 97久精品| 国产国产亚洲一二三久久| 2017人人操,人人摸| 九九九九久久久| 蜜桃丰满熟妇av无码区不卡| 日本不卡五区| 国产精品午夜高潮呻吟久久av| 久久久久久久久九九久孕交| 校园春色第一页| 黑人美精品 A片| 国产超碰国产97| 九九九成人| 人妻精品一区二区在线| 美骚妇av高清在线| 97超碰超碰| 六月色婷婷| 天天影视91看看| 日本精品一区二区中文字幕| 欧洲与亚洲欧美精品中文字幕| 综合网91| 少妇超碰在线| 欧美在线大香999| 日韩三A大片在线观看| 狼人综合婷婷激情四射 | 97干色天堂| 欧成人精品一区二区三区| 久久久久亚洲Aⅴ无码| 天天看特黄的免费网站| 亚洲一区二区三区在线激情| 少妇二级| 天美传媒AV在线播放| 香蕉久久国产AV一区二区| 少妇99| 日韩性爱1级片视频| 婷婷色色五月天| 久久久久密臀视频| 日韩精品国产一区二区| 中文字幕乱碼在线| 国产一区二区三区高清视频| 人人喜人人妻| 麻豆天天躁天天揉揉AV| 色色香蕉| 亚洲91大片| 亚洲精品国产熟女久久久久久| 九九天堂| 久久9精品| 日本九九九九| 抽插亚洲无码| 激情丁香五月婷婷| 97av在线观看| 依人大香蕉| 精品午夜福利导航| 久草成人福利导航| 91美女视频在线观看| 欧美熟妇视频| 26uuu最新| 亚洲和欧美裸体美女双飞视频| 欧亚性爱在线视频| 免费超碰97久久| 久久鲁干| 久久久久女教师免费一区| 国产成人无码啪| 日本高清熟女久久一区| 特级丰满少妇一级AAAA爱毛片| 欧美洲精品一级| 高清在线偷拍自拍视频| 日韩精品一二三| 在线播放中文字幕| 中文字幕熟女人妻丝袜| 日韩精品熟妇| 淫荡少妇免费| 蜜臀99久久精品| 啊啊啊啊嗯嗯嗯用力好爽 | 中文字幕超碰CAO| 亚洲黄色网址视频| 99精品无码| 亚洲丝袜色| 超碰97人妻免费在线| 熟女网站最新| 91GD.COM| 亚洲影院成人| 在线情色电影 91大 | 操逼片国产| 亚洲欧美国产中文字幕| 福利在线黄片| 麻豆成人影音在线| 丝袜美腿校园春色| 熟女视频久久| 久久啊啊| 超碰久久精品| 色婷婷五月天| 妇女性内射冈站HDWWWCOM| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 精品一区二区三区四区女| 日韩精品永久在线观看| 97在线观看视频| 老熟女91av| 蜜乳AV一区二区三区四| 熟女人妻一区二区三区免费看| 99热aaa| 九九99精品| 超碰2017| 97人妻人人躁人人玩人人| 国产女上位好爽在线| 做爱A级亚欧| 麻豆一区二区AV天美| 久久伊人网视频一区二区三区 | 东京热视频网| 亚洲s色图| 性色avv| 黄色毛片A片| 日韩精品中文字幕人妻| 国产欧美日产一区二区三区 - 国产欧美日 | 99re只有精品| 亚洲无码一区二区三区三州| 久久亚洲AV无码白度| 91无摭挡| 亚洲限制级在线| 久久九九网| 一区二区三区亚洲| 久久亚洲不卡一区二区三区| 九九aV| 亚洲无线码欧洲精品区别| 肥臀熟女一区二区三区视频| 日韩情色AV| 曰韩精品九九无码| 五月天婷精品激情| 精品日韩人妻精品一二三区| 天天欲望网| 久湿久久 | 98色网| 日韩性爱电影一区| 成人av在线播放| 熟女精品日韩一区二区三区| 夜草欧美| 一牛影视久久久一区二区三区| 欧美日韩操逼嗦吊| 人人看人人爰人人操| 亚洲美女AV无码| 呦女网站| 欧美aⅴ99久久黑人专区| 玖玖97综合 | 久久久久久亚洲Av无码| 啊啊啊操死我| 亚洲青青草| 欧洲与亚洲欧美精品中文字幕| 亚洲 欧美 中文 日韩超碰 | 日本东京热加勒比久久| 黄片www视频免费| 精品人妻一区二区三区免费视频| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 日本美女性生活久久久久久久 | 丁香五月综合| 约操熟妇| 大香蕉视频一二三区| 亚春色色| 新怡红院| 青青青草原| 9997se| 97精品在线| 精品久久一区二区三区四区五区| 色色无码| 大香蕉啪啪啪| 簧片免费看视频| 色综合久| 91精品啪在线观看国产城中村| 在线视频免费观看午夜| 人人妻人人爱人人玩| 亚洲欧美伦综合| 精品免费囯产一区二区三区| 清纯唯美综合亚洲| 后入式五六区| 2019亚洲男人天堂| 97亚洲国产影视| 神马久久久久眼| 天天舔九色婷婷| 美国久久一二三四| 女人妻一区| 激情色播| 国产亚洲色婷婷久久99精品91| 天天综合网在线91| 丰满人妻-区二区三区免费看| 大逼色网站| 在线欧美亚洲| 日韩熟女精一区二区三区不卡| 天天综合站| 天天干嫩逼网| 999精品女人| 夜夜嗨视频| 中文字幕黄片在线| 亚洲日本激情| 婷婷午夜成人色中色| 婷婷影院入口| 乱色视频中文字幕| 亚洲AV永久无码一区仙野| 99热综合| 日韩成人综合网| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 欲香欲色综合天天伊人| 久久无码精品| 亚欧无码线免费观看视频| 黄片色区软件| 一块操欧美性爱| 日本三级久| 亚洲男人的天堂AV| 亭亭在线资源| 伊人性在线视频| 五十路熟女人妻一区二区在线观看| 9 1超碰九色| 欧美 亚洲| 亚洲国产成人7777| 亚洲高清无码在线桃色| 操我无码| 激情五月综合| 亚洲色图 欧美热图 清纯唯美 另类自拍| 99啪| 欧美日韩理论一区| 1024手机看片欧美日韩| 欧美日韩亚洲少妇寂寞影院正在播放 | 伊人嫩草| 亚洲色图亚洲| h无码动漫在线观看| 久久久网站| 久久超碰亚洲人| 欧美日韩一干二干| 久久精品无码熟妇一区二区三区视频导航| 国产精品不卡av免费在线观看| 超碰精品国产无码| 中文自拍欧美影视| www.狠狠干.coom | 婷婷人妻激情| 亚洲āv网址在线观看| 国产午夜无码片在线观看影视| 中文字幕精品一区二区精品| 久久久熟妇熟女国产| 91中出在线| 人妻无一区二区三区| 国产又粗又长又爽又色| 99999久久久久9国产精品| 色婷婷一区二区三区久久午夜| 97在线视频免费观看| 亚洲情欲| 99操逼| 日本黄色裸日本黄色裸体 | 日日97| 日韩视频精品在线观看| 凹凸视频特色日本特黄| 天天爽天天干| 一区二区三区色综合| 日韩少妇无码| 女同性恋久久| 精品久久久久瑟瑟| 精品人妻高清麻豆av| 黄片免费视频2019| 日韩三级一区| 少妇大屁屁| 日韩一级性爱无码| 男人天堂一区二区| 91国产丝袜美女| 欧美综合91| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美激情色婷婷花野真衣一区二区| 亚洲夜夜欢无码一区二区 | yirendaxiangjiashipin| 欧美色道啊| 国产极品粉嫩馒头一线天av| 九九色影院| 亚码人妻| 国产美女在线精品免费看| 99热精品在线播放| 天天干1区2区在线| 日本日逼高清| 涩爱AV在线| 天堂性色|