日韩精品一区二区三区在线视频放-无码中文字幕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
返回資訊列表
天天综合91入口| 美女极品一区二区三区| 91少妇高潮| 黄站在线免费观看| 热99这里有精品综合久久 | 免费看污网址| 国产欧美另类久久久精品课程| 精品91摸| 日韩天天综合| 加勒比伊人综合| 日本一片一区| 97视频在线观看高清资源| 999九九精品| 天天日骚逼熟女| 欧美人妻制服| 高清国产成人无码| 婷婷情色综合网| 亚州中文字幕超碰97| 97久久精品国产| 伦理日韩国产久久| 欧美日韩另类在线播放| 天天肏美女| 亚洲综人网| 国产一级特黄大片处女| 日本天天人人狠狠在线日美女| 黑人中出21连凳花野真衣| 99热免费| 大香蕉啪啪啪啪在线| 青青草色AV| 国产成人精品必看| 日韩有码回春沙龙第一页| 囯产精品久久久久久久久久梁医生| 韩国三级一线观看久| AV九九| 99999精品视频| 国产日韩怡红院| 国产激情av女片自拍| 天天α片| 成人情色一区二区| 国产毛片毛片4p懂色| 亚洲人妻中文高清| 天天躁日日躁狠狠狠躁| 成功精品影院| 青青欧美| 成人三级片无码| 老女人爆菊| 视频二区美腿制服人妻欧美| www网站黄| 伊人大香蕉在线| 日本淫乱女一区二区三区视频| 日韩另类色图| 日韩精品一区二区日韩| 后入国产| 亚洲熟女一区| 欧美性天天影视| 视频一区二区免费在线| 少妇内射视频| 国产h小视频在线观看免费| 欧美丝袜制服久久| 人人干黄色| 久9久9精品| 九九综合久久| 日韩欧美福利视频看看| 久热这里只有精品9| 91蜜臀在线久久久久| 日韩卡一卡二卡三在线| 美女诱惑久久| 中日韩久久久免费看| 久操B网| 韩日无码在线观看| 精品国产丝袜一区二区三区乱码| 亚洲色狠| 免费操逼91| Aa东京男人的天堂| 欧洲自拍色图gif在线| 日本不卡码黄色| 亚洲综合五月天| 精品国产一区二区三区在线播出| 国产精品国产精品国产| 玖草在线视频| 97视频新免费| 久久人体一区二区| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 怡红院一区二区熟女人妻| 96一区二区三区| 久久人妻无码毛片A片麻豆| 欧洲一区二区三区免费| 91少妇人妻| 超碰97极品9| 伊人9| 欧美亚洲韩国视频十五区 | 日本高清加勒比| 久久精品国产精品| 欧美精品,四区。五区| 亚洲性图91| 情色五月天网| 亚州综合在线| 中文人妻av高清一区| 亚洲欧美色图小说| 亚洲图片 欧美电影| 超碰97欧美| 五月天亚洲色图| 4虎在线观看| 人人操人人摸avav| 亚洲一区中文字幕一区| 欧美少妇一区二区三区| 天美麻豆精品视频99| 色爱国产| 丰满精品人妻少妇久久字幕| 亚洲熟女人妻中文字幕一区二区| 久久精品毛片免费不卡| 亚洲激情综合| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 精品人妻视频一区二区三区蜜桃视频| 久久精品一区一起草| 一本久久久精品| 亚洲本色精品一区二区久久| 国产九九九九九九九九| 在线国产探花| 欧美成人精品一区二区男人蜜臀 | 干干干天天| 99热综合| 久久久男人的天堂| 岛国1区2区3区在线观看| 亚洲精品一区二区精华| www.91色| 大香蕉之青青草原| 日韩欧美成人性爱在线| 骚日日av| 日本福利二区视频| 99精品在线| 家庭乱伦网站国产| 我要色综合网站| 免费伦费视频在线观看| 97超碰这里只有精品| 国产成人91一区二区三区| 亚洲福利中文字幕在线| 老熟女天天操| 啊啊啊 在线观看| 黄页av| 亚洲精品99| 绑缚麻绳人妻寝取完整版| 国产偷人伦激情在线观看| 欧美亚洲性爱一区二区| 免费看黄视频亚洲网站| 加勒比久久av| 久操B网| 国产又黄又粗的视频| 1204金沙人妻懂旧版免费| 日韩免费中文字幕视频| 91AV国产精品| 一区麻豆 高清中文字幕| 日韩色欲久久一二三四区| 东北老熟女| 激情综合五月婷婷| 操逼操逼逼操操逼91 | 97视频网站在线观看| 97免费在线观看| 亚洲欧洲色情高清| 中文字幕91综合| 国内亚洲高清无码| 久欲AV| 国内毛片婷婷六月色| 男人的天堂在线有码| 国产操伦| 亚洲性爱乱操x| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 婷婷去俺也去六月色| 欧美狠狠| 日本大香蕉综合网| 欧美综合1性辶| 玖玖草久草99蜜月一区二区三区| 欧美一区二区情色| 91女人的网站| 奸色色 男人天堂 天天射| 福利视频网站| 欧美天天综合在线| 精品免费成人久久| 久9综合在线| 亚洲图片偷拍欧美| 九热久| 欧美日韩人妻精品一区二区三区| 美女干逼2| 亚洲不卡av在线| 五月综合视频| 成人日韩中文字幕| 大香蕉伊人在线成人AV在线观看 | 久久受www免费人成| 豆花视频操逼网址| 亚洲一级性爱视频免费看| 日本性感人妻91| 久久99草| 东北老女人的激情视频| 亚洲丝袜少妇在线| 97精品| 淫淫综合网| 一区二区三区免费视频入口| 久草国产在线视频| 日本人妻A片成人免费看片| 国产精品宅男免费| 99久在线精品99re8热| 国产理论视频在线播放| 欧美疯狂做爰xxxx| 久久精品国产96精品亚洲拳交| 亚洲无码?第一页| 变态乱伦伪娘灌肠一区二区| 亚洲丝袜二区| 欧美黑人168页欧美黑人167| 精品久久97| 高清有码一区二区| 精品人妻一区二区三区四区石在线| 亚洲91色| 亚洲人妻精品一区二区| 麻豆成人影音在线| 亚洲爽图| 久久xx| A一级色女| 久久久久久久性爱| 日韩 欧美 另类 人妻| 狼人综合婷婷激情四射 | 亚洲淫乱骚妇AV| 一二区在线观看视频| 视频一区二区三区精品| 黄页大片在线观看| 国产精品另类| 丁香五月婷婷基地| 91老司机精品| 婷婷丁香成人| 久久精品中文| 色青青久久影视| 亚洲精品国产av天美传媒| 久久久久久中文| 久久综合国产精品国产| 91九九九小逼| 午夜美女诱惑电源网| 殴美大黄片| 精品成人女人久久| 五月天色综合| 玖玖爱在线视频免费观看| 日韩乱伦视频| 精品无码产区一区二| 无码国产Av| 青青草久草AV| 色婷婷狠狠| 国产97视频免费观看| 亚洲欧美日韩国产丝袜自拍中文| 国产AV毛片| 人人操人人摸人| 手机av亚洲丝袜美腿日韩第一页二页| 色情综合网| dy888午夜老子影视达达兔| 小少妇| 91精品亚洲内射孕妇| 欧美性猛交美女自慰91| www.99中文字幕| 嗯嗯嗯不要不要免费视频| 国内偷拍精品一区二区| 97se综合| 啊啊啊啊啊在线观看网址| 午夜一级免费毛片| 日韩97P| 小骚逼被操的爽不爽| 日韩人妻 中文字幕| 欧美高潮在线| 亚州成人a∨| h无码动漫在线观看| 亚洲性天堂| 日本免费中文一区二区三区四区| 久久夜黄色无码A级大片| 国产成人久久精品蜜臀| 91美| 欧洲小说色图视频另类| 二级久久网| 秋霞男人网| 精品一区二区三区蜜桃臀赵总 | av东京热男人的天堂| 男人天堂.AB| 97电影院超碰| 亚洲熟妇自偷自拍另欧美| 国产精品久久久久久亚洲色欲| 久久久偷拍| 97天天插| 97手机日韩| 天天天堂影视日韩亚洲91| 97色涩| 品亲网欧美品亲网| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 加勒比伊人| 亚洲精品国产精品成人| 蜜乳AV.COM| 中文字幕精品一区欧美| 国产一区二区在线电影| 伊人五月天| 激情综合五月天| 天堂岛av| 极品粉嫩少妇视频| 亚洲熟妇AV日韩熟妇在线| 久久久无码精品人妻二区 | 色鬼在线综合| 舔舔啊| 国产白丝精品在线观看| 高清国产性猛交xxxx乱大交| 俺去俺来也在线www| 国产一区二区av综合| 九九精品美女高溯喷水| 亚洲美腿丝袜香蕉影视欧美成人| 中文幕97| 东京热一区二区中文字幕| 免费A V在线播放| 五月丁香色综合| 蜜桃臀av在线观看| 超碰精品人妻狠狠干| 男人的天堂2019| 精品国产乱码久久久久久免费| 欧美欧美少妇| 亚洲激情在线一区二区| 青青伊人这里只有精品| 人人操人人93| 免费观看啪视频| 久久最新视频免费观看| 97 色综合| 天堂8在线新版官网| 91天美传媒精品| 蜜臀久久在线视频| av爱爱爱| 韩国轻伦国内自拍一区| 天天草AV| 五月天色综合| 色97干| 日韩不卡a级视频专区| 久久美女福利是上海美女| 欧美大色交| 夜夜性| 国产精品无码av在线| 亚洲少妇激情视频| 精品九九国产无码| 天美精品一区二区三区四区在线观看| 日韩免费簧片| 国产AV人人 夜夜人人澡| 搡老女人老91妇女老熟女| 亚洲人妻AV| 欧美草草| 久久久久成人蜜桃精品| 亚洲春色一区二区三区| 久久国产99精品72福利| 亚洲色婷婷久久91| 亚州欧美综合| 婷婷情色综合网| 欧美大波激情xxxx| 人澡逼| 五月天激情小说| a'v在线资源| 久久精品视| 久久色情| 100啪啪视频大全| 久久侵犯人妻爽爽爽| 伊人热综合| 中日韩久久久免费看| 超碰超碰欧美| 静品嫩模一区二区| 男人天堂电影院| 青青操97| 欧美国产日韩高清在线| 欧美精品第3页| 亚欧视频在线| 美国黄片aaa| 国产97色在线 | 亚洲| 成人黑料社久久| 青青久久艹| 欧美亚洲se91| 成人A片男人的天堂| 97人人干人人操| 国产精品亚洲无码| 亚洲色阁| 中文久久久| 国产精品国产| 天天α片| 95人妻爽爽人人做人人澡| 日韩免费a级毛片无码a∨| 69精品| 啊啊啊男女| 天天操女人| 亚洲另类久操网| 91狠狠综合久久久久久| 综合自拍| 无码国产精品午夜不卡(| 日本高清视频xxxx| 欧美激情一区| 超碰97亚洲| 殴洲老熟女| 人人做人人妻人人夜视频| www.伪伪| 乱伦AVxx| 国产无马av| 超碰99热| 爱欲AV| 秋霞午夜视频一区二区| 91在线/欧洲| 淫穴高潮色图| av线电影| 性生活无遮挡纯毛片在线看| 亚州色国| 久久久久久久人妻丝袜| 嗯啊视频免费在线观看| 亚洲宅男天堂| 综合欧美日韩在线| 91无遮挡| 欧美视频一区二区在线| 无码伊人久久大杳蕉中文无码| 天天日天天舔天天喷天天射| 78久久久| 东方亚洲在线操逼天堂| 亚洲人妻久久| 操逼逼无码| 精品网站9999| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 欧美少妇色图| 国产操偷| 大香蕉在线视频重口味毛片在线| 亚洲色棕合| 草草草视频在线免费看| 欧美另类精品xxxx| 校园春色 男人天堂 | 国内外色色色色色成人视频| 75大香蕉| 精品78| 精品在线观看视频在线| 久久香蕉国产线看观看猫咪av| 精品免费一区二区三区在线亚洲人成| 超碰到97情色| 久久国产乱子伦精品免费女,网站| 天天日天天搞天天干| 久久婷婷亚洲| 97超碰人人模人人拍人人| 亚州操逼图| 91狠狠综合久久久| 天天爱综合网| 亚洲va有码在线天堂| 情色五月天久久久| 91宗合网| 天综合中文| 天堂精品| 欧美一级色| 日韩午夜国产| 激情无码日韩| 丝袜狂射91| 大香焦A片| 久久蜜色情在线视频xxx免费观看| 97啪啪| 天天干,夜夜爽| 99中文字幕| 中文精品一区二去| 久久久久久久久久久久久久久久9| 欧美性暴力猛交| 国产少妇肉丝在线观看| 欧美美逼| 宗合情欲网| 91亚洲人| 久久超碰亚洲人| 亚洲成人无码影院| 亚洲欧美不卡线| 91天美传媒精品| 日本成人A片网站| 九九九不卡| 95精品在线| 狠狠干91| 懂色av中文字幕一区二区三区天美| 熟女视频久久| 97在线观看免费视频| 性性久久| 婷婷亚洲天堂| 中文字幕免费观看| 校园春色亚洲无码| 中文字幕一二三区| av操操不卡| 91九色蝌蚪在线观看| 免费网站观看www在线观| 去干网最新版| 黄色香蕉视频网站一区| 青青操在线亚洲视频观看欧美在线| 激情视屏国产乱伦强奸| 五月天AV资源| 玖玖爱一区在线| 久久 国产精品 一区| 日韩中文字幕国产| 亚洲影院成人| 国偷自 一区| 欧美内射少妇| 五月天激情网图片| 亚洲欧美国产其他二区| 一级性爱视频免费在线| 2019天天干| 九九自拍伦理| 欧美日韩免费专区在线| 熟妇熟女亚洲天堂网| 激情啪啪拍91| 国产又粗又长又爽又色| 成人性爱美曰韩| 久久一区二区高清免费| 亚洲无码 国产无码| 国产97免费视频| 老女人爆菊| 综合网欧美在线| 俺去也婷婷| 亚洲操逼无码| 日本国产欧美高清在线| 天天躁日日躁AAA片李宗瑞| 97日韩| 伊人麻豆传媒| 欧美综合另类| A级片日韩欧美国产欧美视频精选观看| 久久亚洲国产成人| 97碰| 亚洲色图欧美色图制服丝袜| 操www| 久9热| 亚洲男人的天堂在线看| 97在线免费看视频| 3d成人精品一区二区| 3571色综合一区二区二区| 成人在线视频一区| 色香综合天天影视综合 | 殴洲老熟女| 91国产丝袜美女| 国产成人五月天丁香花| 看免费的黄片| 婷婷在线视频| 亚洲高清男人天堂| 午夜超爽| 久久国产精品熟女人妻| 国内偷拍精品一区二区| 另类小说五月天| 九九九国产精品| 成人一二三区| 岛园激情| 婷婷丁香人妻 | 日韩免费中文字幕视频| 欧美熟女丝袜| 亚洲日韩狠狠撸视频| 97无码视频在线播放| 国产精品色哟哟| 久久性爱网站| 久久东京热成人| 色牛aV| 激情综合网五月婷婷五月天| 2021国产成人精品久久| 日本高清_区二区三区| 精品人妻一区二区三区不卡断| 欧美97| 国产成年女人免费视频播放a| 久久精品一区二区三区蜜桃臀| 金典av| 天天色黄色影院天天操| 99热精品在线| 欧美夜色| 中文字幕 av v| 香伊人在线| 欧美内射少妇| 日小BB小视频| 免费作爱一级视频| 国产欧美一区二区| 国产精品成久久久久午夜午夜| 超碰99在线| 色呦呦国产精品免费看| 99热精品在线| 色狠狠色| 欧美激情专区| JULIA人妻风俗店中出电影| AⅤ片水多多| 亚州春色| 婷婷视频在线免费观看| 国产伦乱91| 精品国模无码| 无码人妻毛片丰满熟妇精品区| 性色乱AV一区二区| 欧美第38页| 亚洲精品国产熟女| 四虎精品永久在线播放| 九九香蕉网| 日韩熟女操逼| 在线精品福利免费播放| 亚洲激情网一二三四区| 快播久久人人aV| 国产又爽又黄| 2017大香蕉国产精品久久| 神马久久久久久| 欧美色涩| 午夜福利一区二区影院| 免费观看日本操逼视频| 精品九九| 日本色色视频网站| 亚洲色图欧美视频| 五月天婷婷久久| 啊啊嗯嗯好爽| 五月天激情综合网| 欧美色图欧美| www久久久| 黑人粗大V S日韩女优视频| 少妇天堂| 国产免费一区在线观看| 97久久久久久久久久| 亚洲砖码砖专无区2023| 欧美久久婷婷| 免费一级特黄特色大片在线观看看| 最新中文字幕av| 一本精品日本在线视频精品| 亚洲大色堂| 在线岛| 蜜臀一区二区三区在线| 天美传媒精品一区二区三区| 久久久久免费看少妇A片特黄| 明星性猛交ⅹxxx乱大交| 欧美成人精品一区二区男人蜜臀 | 五月丁香综合激情| 九九九免费视频| 91在线丝袜| 欧美精品欧美精品系列| 丁香婷婷五月| 亚洲免费看片| 日韩在线一区高清在线| 国产区91柔拿会所技师| 久久久啊啊| 亚洲熟女一区二区| 日本人人操人人操| 蜜桃狠狠色伊人亚洲综合网站| 久久啊啊啊视频| 天天爽夜夜爽夜夜爽精| 亚洲天天艹| 日本中文熟女视频| 少妇滛荡视频| 日韩一级二级三级免费看完整版国语版| 啪啪资源网| 伊人国产AV| 91 丝袜在线| 久草福利在线资源站| 欲色影视综合吧| 国产成人精品网站| 99欧美| 色婷婷视频| 2020中文字幕在线观看| 东北毛片| 手机在线大香蕉| 免费毛片在线播放| 久操高青| 四虎免费视频| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 立川理惠加勒比无码| 欧美午夜精品久久久久久3D| 一个国产在线综合网站| 在线观看不卡一区二区三区| 91精品人妻一区二区三区蜜桃臀| 一区二区三区成人高清视频| 欧美影音在线| 午夜一级免费毛片| 国产免费一区二区在线A片视频| 密臀在线免费观看| 狠狠操狠狠燥| 秋霞成人一级在线观看| 伦激情人妻另类人妻| 丝袜六区| 成人熟女区| 91精品人妻一区二区三区蜜桃| 天天做天天爱天天爽AV| 日韩三级网址| 好看的91视频| 芊芊操逼视频无码| 日韩成人高清一区二区| 按摩中文字幕| 91Chinese在线| 日韩亚洲国产视频| 精品国产Av无码久久久亚洲| 婷婷国产精品一区二区| 精品九九九九九九九九九| 九九精品美女高溯喷水 | 4399成人黄A片| 99久久亚洲精品无码毛片潘甜甜 | 亚洲 欧美 小说| 在线中文字幕极品av| 国产成久久综合片| 狠狠操狠狠操操| 欧美大香蕉97| 啊啊啊用力在线观看| 五月婷婷啪啪| 久久久免费的精品| 天天综合站| 午夜免费视频1000| 91久久婷婷| 无码操逼网| 日韩欧美大片免费高清啪啪| 亚洲综合伊人无码久久| 中文字幕欧美日本乱码一线二线 | 久久久久亚洲Av无码专区老牛影视| 在线小说视频一区| 啊啊啊啊在线观看网址| 96AV久久久| 亚洲日韩av一区二区三区百合| 婷婷色一区| 黄片视频观看| 国内偷拍精品一区二区| AVE乱伦| 少妇久久久久久久| 日本不卡二区| 在线毛片片免费观看| а√天堂资源官网在线资源| 欧美色图片欧美色图| 福利大香蕉| 伊人国产视频| 久久熟妇五十路一区| 亚洲五月丁香花狠狠干一区二区三区 | 亚洲aw毛茸茸在线| 夜夜操91744565| 激情专区综合| 亚洲综合网电影91| 99999久久久久9国产精品| 一区=区三区视频| 丁香五月天视频| 污啪啪啪视频| 伊人97色天使| 国产精品不卡一区二区三区| 夜草欧美| 99色婷婷中文字幕乱色| 色麻豆AV| 欧美成人色| 操人人| 激情小说在线视频| 色操逼网| 婷婷91| 99久久久| 国模不卡一本二本三电影| 欧美大片天天看| 天美传媒Av在线| 国产精品午夜福利| 乱伦熟女论坛| www亚洲免费| 色欲天天综合网| 久久久久久波多野吉衣高潮| 超碰97综合网| 麻豆色约约| 久区视频| 日韩欧美午夜一区二区| 最新日韩黄片| 秋霞男人网| 日韩av熟女一区二区三区成人| 天堂麻豆天美| 五月天日日操夜夜操| 97香蕉网| 综合欧美日本三级| 超碰 另类 欧美 | 麻豆天美国美国产| 日本五区不卡| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 中文字幕1区2区| 国产麻豆福利av在线播放| 亚洲成人免费中文字幕| 国产成人www免费人成看片| 99久久婷婷| 日本高清熟女久久一区| 亚洲一区二区三区四区视频| 91熟女网| 一级性爱视频免费观看| 日韩激情毛片一级久久久| 色优久久| 精品国模无码| 国产激情在线| 久久久久久久六六| 日本东京热大香蕉a片| 久艹免费| 超碰在线观看av不卡| 9ⅰ久久久天天| 7777欧美成是人在线观看| 色99久草| A级毛片在线看免费| 欧美大干日韩| 桃花色涩综合影院| 中国91AV| 激情五月天社区| 四虎免费看黄| 偷拍综合网| 操一区| 久久超碰天天| 黄色一级视| 操我啊啊啊啊啊| 黄站在线免费观看| 久久直播国产| 国产天美传媒精品| 免费看黄片现成| 91在线超高颜值国产| 九九玖玖精品| 91亚洲欧洲| 在线性黄高清免费视频| 成人一区二区三区四区| 自拍偷拍第26| 自拍视频大全亚洲专媒视频/一区二区三区| 欧美性夜| 麻豆天美电影一区二区| 九七毛片九九毛片| 97在线免费视频观看| 凹凸视频特色日本特黄| 玖色av| 人人考人人摸人人干| 另类老少妇| 人妻少妇av在线观看| 好屌色综合| 日韩中文字幕人妻视频| 亚洲色悠悠久久88| 顶级丝袜熟女一区二区三区| 午夜福利免费福利视频| 亚洲毛片基地专区| 97精品人妻一二三四| 97网址97| 看看日B真人视频| 果冻传媒A片一二三区| 亚洲 欧美 中文 日韩超碰| 欧美色图91p| 香蕉久久精品| 老司机深夜18禁污污网站| 欧美A√综合网| 97免费免费视频网| 青草av在线| 亚洲精品第一| 91xingse| 99视频这有这里有精品| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 欧美强奸一区二区诱惑| 风流老熟女一区二区三区l| 国产精品无码av嫩草| 在线A日本| 亚洲最大无码中文字幕网站| 中文字幕免费看大片| 韩日精品四区| 蜜桃精久三区| 天天综合欧美综合| x97av| 久久九色| 日韩欧洲操屄视频| 国内三级自拍小视频在线观看| 黄页大片在线观看| 超碰无码五月97| 天天操夜夜操| 囯产精品久久久久久久久久梁医生 | 国产精品播放| 色呦呦呦在线观看视频| 亚洲 欧美 91| 欲女人妻性色av| 91熟女视频网| 狠狠色噜噜狠狠狠狠2018| 韩国一级做A片免费的| 日韩三四五区| 久久久九九| 欧美日韩色综合网| 6080yy午夜理论三级一区二区三区无码| 91在线精品一区二区三区| 五月婷婷色色| 色网亚洲人| 日韩 欧美 另类 人妻| 精品射1999| 九九九免费视频| 91操碰| 成人久久久精品| 99热伊人| 欧美精品三区| 男人女人18禁片免费看网站| 国产一区免费午夜视频| 日日躁天天躁狠狠躁| 国产精品白丝AV| 97色五月天完| 中文字幕日韩情色| 精品人妻一区二区三区四区石在线| 91伊人久| 射欧美综合| 久久av无码| 吉田爱美AV在线| 东京热一区二区中文字幕| 又黄又爽在线观看视频| 欧美综合综合| 天天懆天天日| 麻豆天美国美国产| 久久大黄片| 亚洲综合性感在线| 大色综合| 欧美亚洲涩涩| 五月天婷精品激情| juliaann丝袜| 欧洲乱码视频| 国产乱伦视频污| 久久久久ab| 男人天堂导航| 色综合中文字幕不卡| 成人性爱AV在线免费观看| 日韩精品9999| 日本日皮视频逼| 久久国产成人精品国产成人亚洲 | 草草影院最新网址| 青草精品视频一日本久久久久网站| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 日韩亚洲美女一区久久| 黄片免费日韩| 天天添天天干电影| 人人操,人人插| 国产蜜臀在线| 色婷婷丁香五月| 国产第二页| 变态乱伦伪娘灌肠一区二区| 超碰4A| 欧美丝袜美女电影一二三四区| 婷婷激情四射| 黄页视频网站野外| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 一二三四日本视频高清| 撸无码不卡免费视频| 97视频在线观看高清资源| 97一区二区蜜臀| 亚洲综合激情五月久久| 午夜福利成人免费视频| 天天天干977| 69精品人人人人| 91丨九色丨东北熟女| 欧美青青视频| 国产精品人妻无码久久久互動交流| 亚洲成熟国产精品美女| 久久久久9999| 美女黄网| 麻豆国产尤物AV| 婷婷丁香五月激情啪啪| 精品人妻1区| 日本999精品视频| 亚洲夜色在线| 九九性视频| 婷婷六月色| 你懂的在线观看区国产| 天天干电影| 国产老太乱伦一区| 91欧美网| 午夜亚洲WWW湿好大| 高清国产精品无码| 欧美综合传媒| 中文字幕一二三av| 天美传媒精品一区二区三区| 欧美丝袜中文字幕07在线| 秋霞色色影院| 久久五十路熟女人妻| 思思热影视| 日韩人妻资源在线看| 九九久久首页| 91精产一区二区三区| 97久久久久久久久久| 久夜视频| 色在线亚洲视频www| 夜夜天天噜狠狠爱2021| 婬女免费一二三区A片| 97超碰国产精品| 大鸡吧尹人在线| av草草在线电影| 伊人99热| 人妻天天爽夜夜爽精品2| 九久9热| 久久99手机免费视频| 劲爆欧美人妖三区91| 亚洲怡春院| 玖玖久久久| 久久男人精品| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 91精品婷婷国产综合久久竹菊| 欧亚乱色熟一区二区三四区| 啊啊啊啊,啊啊好多水| 欧美久久九九| 天天欧美色| 精品久久久久久久久久久久| 精品网站9999| 人妻人久久精品中文字幕| 九久久九精品视频| 国产福利第一视频| 日本潮催一卡操| 欧美日韩另类在线播放| 久久肏大逼| 精品久久久不卡一区二区| 色网亚洲人| 立川理惠加勒比无码| 乱伦av.com| 91嫩草欧美| 啊啊啊网站| 久久久久成人亚洲国产| 97中文综合| 中国人高清www色视频免费| 久久99操天天日| 久久免费中文字幕在线观看| 欧美色干| 国产精品一区av在线| 黑人白女精品一区| 99热超碰| 天天做天天爱| 色噜噜狠狠色综无码久久合欧美| 偷拍亚洲情色| 日夜伊人网| 国产乱伦亚洲| 青青草手机在线免费观看| 精品欧美老熟女一二区| 亚洲色图 欧美热图 清纯唯美 另类自拍| 久久女人一区二区三区| 午夜精品探花| 六月丁香啪啪| 久久视频,这里只有精品| 国产高清自拍| 伊人久久大香线蕉无码| 中文字幕乱碼在线| 亚洲性天堂| 男女打扑克高清网站| 色色毛片| 91无摭挡| 五月色网| 蜜乳AV一区二区三区四| 丝袜色综合| 秋霞一级鲁丝片A片| 色女网日韩| 国产传媒av天美传媒在线| 狠狠爱综合网| 亚洲天堂一区| 亚洲免费精品一区| 日韩欧洲操屄视频| 精彩国产视频播放1区2区| 色欧洲| av资源在线观看少妇| 国产sv美女内射| 小少妇| 亚洲色图91| www.99热在线只有精品| 中国探花熟女| 亚洲一区在线观看欧洲| 亚洲精品 欧美精品| www.久久| 99热99在线播放激情| 欧美v日韩v亚洲v最新在线| 婷婷五月天成人网| 情色五月天久久久| 欧美大波激情xxxx| 特级大荫道BBwBBwBBW| 丰满欧美放荡少妇在线| 一区二区三区四区在线不卡| 亚洲男人天堂2| 秋霞影音一区二区三区 | 啊啊啊啊啊啊啊啊啊啊在线观看| 性爱乱伦一区| 亚洲无无码αⅴ每日更新| 97欧美精品| 精品无人区麻豆乱码1区2区图片 | 欧美日韩传媒| 亚熟在线| 国产成人综合在线播放| 最新9久久久9免费视频| 亚洲AV成人在线| 乱性AV| 亚洲精品97中文字幕| 中文字幕在线免费观看视频| 国产美女在线精品免费看| 91超碰碰在线| 野狼激情网| 精品国产av一区二区三区四区入口| 第45页一区二区| 婷婷五月综合在线| a片在线播放| 欧美日韩系列| 亚洲中文字幕有码视频一区二区三区| 操逼操网| 亚洲欧美日韩偷拍色图| 伊人丁香五月婷婷| 亚洲97| 碰碰在线视频| 黄片不用下载在线观看| 黄色人人| 天天爽人人综合免费7799| 国产大陆天天艹| 99性爱在线观看| 国产精品青草综合久久| 粉嫩不卡一区二区性爱| 蜜臀久久久久久999| 在线观看色视频| 熟女熟妇伦久久影院毛片一区二区| 五月婷婷基地| 国产日韩欧美操逼视频| 精品人妻一区二区三区四区| 日韩欧美天天爽爽爽天天爽爽| 亚州精人品大香蕉| 亚洲欧美日韩制服另类| 91天天综合在线| 啊操爽品善一区二区三区| 99热免费| 亚洲天堂99| 啪啪AV导航| 亚欧高清| 91美女小视频| 精品女同一区| 亚洲国产亚洲天堂| 国产农村妇女精品一| 久久久成人国产精品无码| 久久精品久久久久久久久| 天天久久| 91狠狠狠| 91精产一区二区三区| 嗯嗯啊在线视频| 激情文学88| 综合亚洲欧美| n1038 一二三区| 日韩天美| 婷婷午夜| 色天使亚洲综合在线观看| 99婷婷一区二区| 中文字幕五月婷婷免费| 亚洲国产一级黄色视频| 少妇精品久久| 亚洲欧美国产中文字幕| 一区二区三区国产精产| 亚洲天堂男人在线| 色一情一乱一乱一区91Av| 1024人妻| 日本熟女中文字幕一区| 综合亚洲欧美精品日韩?v| 国产一区二区成人av在线播放| 老熟女阿 国产91| 天天干天天日天天射黄色片| 色婷婷影院| 91亚洲色图| 丝袜综合| 91色人妻| 91欧| 和协影院中文字幕三区| 日韩啊V| 亚洲情色五月天 | 久久久久少妇| 九九AV| 亚洲诱惑| 日韩精品在线视频在线观看| 深夜激情| 性欧美| 男人的天堂Va| 97在线播放 | 涩涩五月天| 天天躁日日躁AAA片李宗瑞| 五月丁香啪| 熟妇熟女视频一区二区三区| 中文字幕高清20页视频| 麻豆久久久久久久久丝袜 | 天天超级碰碰碰| 中文字幕一品色图| 欧洲精品二区| 囯产操逼片| 久久春色| 日韩9区| 啊啊啊啊,啊啊好多水| 亚洲情色婷婷五月天| 久久久性| 日本熟妇人妻一区二区三区| 久久一二三级一一一| 变态乱伦伪娘灌肠一区二区| 四季av一区二区凹凸精品小说| 静品嫩模一区二区| 中文字幕日韩电影人妻| 亚洲激情欧美色图| 久热色情精品| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 四虎免费看黄|