色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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高清无码| 亚熟hd视频在线| 日韩性爱再线视频| 国产400孕妇孕交群| 东京热亚洲一区二区| 黄色交缠性感爆操91国产精品免费一区二区三区 | 色色综合网站| 亚洲少妇综合在线播放| 黑人免费福利视频| 99re在线视频这里只有精品 | 999 久久久| 夜夜操狠狠操| 精品亚洲国产成人AV制服丝袜| 一区二区三区麻豆| 超碰在97| 最新av在线| 婷婷六月天| 日韩人妻播放| 亚洲天堂五月天国产| 人妻大香蕉| 伊人青青一区成人视频在线观看区| 熟女五十路一区二区三| 自拍偷拍 日韩欧美| 亚洲欧洲激情| 我中文字幕6区 | 91香蕉国产尤物视频| 亚洲涩图欧美| 国产99999久久精品| 丁香六月婷婷| 久久这里只精品99re66图| 超碰在线人妻中文字幕| 超碰97久久| 日本在线999| 午夜操一视频一区| 色婷婷日韩精品一区二区三区| 蜜桃不卡一区二区| 亚洲色图 图片| 区一在线观看| 亚州成人a∨| 婷婷在线视频| 亚洲性爱高潮影院| 亚洲另类综合欧美| 97久久精品亚洲| 丁香五月天激情| 成年人性爱日韩| 亚洲h片在线免费观看| 熟妇xxxxx性春色| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 久久久久亚洲| 97在线观看免费视频| 亚洲欧美情色| 在线 亚洲 网爆 自拍| 蜜臀操逼黄色视频操的好爽| 欧美制服另类丝袜| 丰满翘臀美女影院视频| 亚洲国产一区二区三区在线| 亚洲国成人情色好看电影| 国产在线视视频有精品| 91高清无码下载| 青青操综合网| 欧美啪啪女女| 激情99| 婷婷导航| 中文字幕 av v| 日韩三四五区| 欧美亚综合色图| 97超碰热线| 久久久久久9999| 天天干夜夜肏| 久久精品国产Aⅴ| 国产资源中文字幕在线| 亚洲免费成人在线高清无码视频| 色噜噜狠狠色综合日日| 亚洲不卡不卡中文字幕不卡| 欧美综合传媒| 伊人骚琪琪亚洲天堂网站| 日本操逼无码| 伊人91| 欧美亚洲第1页| 99re3这里只有精品| 亚洲无码国产探花在线观看| 青娱乐日韩无码| 精品国产网站| 快播久久人人aV| 久久国产AⅤ| 色香色欲天天综合网天天来吧| 久久久久久AⅤ无码免费肉站| 一道本久久棕合爱| 久久亚洲日韩熟女精品| 看一级特黄a大一片| 啊啊啊好爽快点啊啊啊嗯嗯| 青青草久久一区网| 清纯唯美亚洲| 激情五月综合| 日日骚av| 国产激情视频在线观看| av一区二区三区四区五区久草臀| 色九久| 波多野42部无码喷潮在线观看 | 亚洲AV无码国产精品久久久久 | 日韩78m视频| 91日产桃蜜| 97日韩| 色情乱伦AV| 青苹果影院男人的天堂| 97在线免费公开视频| 色综合一本| 性爱av在线免费观看| 少妇与黑人高潮在线| 成人夜夜| 综合一区中亚洲国产成人综合精品 | 隔壁邻居波多野结衣中文字幕 | 加勒比海人人操超碰在线| 岛国网址国产| 97干色天堂| 欧美亚洲今日在线| 图片区小说区| 欧美韩国你懂得在线 | 久久99国产综合精品女同| 2020中文字幕在线| 黄页视频网站野外| 性欧美天天| 色欲久久99国产精品久久久久久| 亚洲免费人妻在| 九九九九97| 九九干| 麻豆影音天美视频| 日本人妻伦在线中文字幕| 国产精品一二三免费网站| 亚春色色| 激情五月天婷婷| 91在线一起| 插欧洲美女欧美精品| 日本黄色XXX| 日逼逼免费看| 影音资源男人日韩| 欧美日韩国产中文精品字幕自在自线| 精品久久九| 多毛小伙内射老太婆| 日日A∨| 国内毛片热久久思思热| 青青青青草av在线观看| 18禁免费视频| 日韩电影天堂视频一区二区| 蜜乳性色无码专日粉嫩骚逼AV| 免费啊啊啊| 亚洲精品毛片在线观看| 久久精9| 一类无码操逼视频| 国产蜜臀在线| 成人AV素股で擦久久| a片在线播放| 嗯嗯啊啊操死我| 欧美精品日韩久久久九 | 中文字幕亚洲热播人妻| 火箭成精品视频884必出精品| 可以免费观看的AV| 五月天婷婷在线看| 吊色| 青青草在线成人视频| 在线观看不卡一区二区三区| 欧美日韩亚洲天堂网| 在线v中文字幕一区二区三区| 成人区人妻精品一| 国产AV天美| 999亚洲国产视频| 欧美日韩国产色五月综合在线| 亚洲夜夜欢无码一区二区 | 一区二区三区欧美激情| 乱伦a片视频| 欧美后入式| 夜夜夜久久| 一起草日韩| 欧美色图电影| 亚洲综合性网址| 天天做天天爽| 一级久久久久久久久久久| rion磁力链接| 日比av无码| 日韩国产十八禁| 欧美操逼熟女| 人妻少妇久久中文字幕一区二区 麻豆| 夜草欧美| 欧美72网页| 国产成人无码久久精品| 影视综合无码少妇| 97K超碰在线| 91日产欧美| 97精品国产97久久久| 午夜福利在线合集| 精品国产Av无码久久久亚洲| 欧综合网| 视频二区美腿制服人妻欧美| 偷窥自拍亚洲色图| 丁香六月啪啪| 爱做久久久久久| 性爱乱伦视频免费| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 欧美偷偷网| wwe 天天干.com| 亚卅熟女乱色| 夜色AV无码手机在线影院| 内射夫妻三片| 欧美精品69性爱| 国产精品天干天干综合网麻豆| 日韩av女优在线免费一区| 探花激情视频| 亚洲五月天激情| 午夜精品五区| 草草影院日本第一页| 中文字幕精品码亚洲| 狠狠操狠狠燥| 中文字幕一二三av| 日韩天天综合| 日韩小电影| 丝袜亚洲91| 精品免费1| 婷婷色色五月| 992这里有精品| 狠狠操狠狠插| 日韩pv中文| 中文字幕在线播放2中文字幕在线观看2| 青青青国产手线观看视频2| 中国91AV| 久久日韩肥臀| 啊啊啊 在线| 黄页网站成人免费| 国产sv美女内射| 久草看看看| 97超碰9| 天天日天天干少妇日| 97色色色| 日韩一级性爱无码| 少妇高潮对白在线观看| 国产乱伦性爱AV| 婷婷亚洲综合| 99热这里只有精| 一区二区三区男女操逼黄色小电影| 97免费视频网| wuyechaopeng| 9精品久久久久| 亚洲黄色| 日本免费中文字幕在线 | 五月天综合在线| 色婷婷六月| 久久久噜噜噜久久久| 亚洲激情 欧美色图| 欧美少妇高潮久久91| 东北女人| 欧美色图99| 91九九| 97免费视频在线观看| 国产精品久久蜜乳av| 亚洲色宗合| 精品国产91内射久久| 在线播放免费av福利片| 天天色综合天天操| 欧美少妇第一页| 941超碰| 中文字幕第2页| 91w欧美| 操逼片国产| www.狠狠操| 六月丁香五月婷婷| 一区二区国产视频在线观看| 麻豆久久一区二区三区| 一级啊性爱在线视频| 97人妻色| 三级网站超变态精品| 少妇500双飞99| 欧美加勒比| 九色精品视频导航1| 色九区| 欧美色图成人网一区二区| 少妇大屁屁| 人人 操人人 操人人| 久碰视频| 97超碰欧美手机在线| 日韩中文字墓| 六月天婷婷| 欧美性暴力猛交XXXX| 无码人妻一区二区三区四区老鸭窝| 一个人免费视频观看在线WWW| 青青操狠狠撩| 神马久久免费电影观看| 无码天天操| 极品五月天噜噜| 国产美女精品| 蜜臀99久久国产| 无码人妻丰满热妇又大又粗| 91五月天| 男人的天堂VA| 97色碰| 成人资源中文字幕在线观看| 国产熟女完整版中字| 麻豆婷婷成人一二三| 亚洲国产97| 久久美女福利是上海美女| 九九热精彩视频| 香蕉欧美| 亚洲综合码| 香港久久久| 熟女人妻一区二区三区| 成人黄页| 国产精品久久成人免费| 欧美综合自拍成人自拍第二十页| 97色操| 在线观看中文av字幕| 97爱免费插| 亚州欧美综合| 黄片在线免费在线观看| 欧洲站一级二级三级h| 国产大学生口爆吞精合集| 97精品视频网站| 中文字幕,人妻,日韩| 欧美综合色站| 欧美一区二区观看在线| 夜夜嗨免费视频| 黄片免费看的| 美女t无毒不卡不卡| 99热91| 91亚洲电影| 色性荡荡荡荡视频| 一区二区不卡视| 天天看天天综合成人网| 国产无码精品久久久久久| 内射日韩大臀美女| 国产精品人妻无码久久久互動交流| 97亚洲国产影视| 久久久久久久强迫| 青青草伊人久久| 国产最火爆久久国产网站网站| 啊啊啊在线观看免费视频| 国产乱伦亚洲| 欧美亚洲日韩16色| 九九色逼| 成人精品无码| 妇女视频网站| 免费看日产一区二区三区| 中出20p| 激情五月丁香五月| 亚洲本色精品一区二区久久| 欧美激情久久久久| 天综合网| 国产情侣自拍在线播放| 偷拍精品一区二区三区| 加勒比色综合| 亚洲强奸乱伦影视网| 91丰满| 97色涩| 久久99综合| 日韩在线国产字幕| 日本黄色天堂| 狠狠躁AV| 日韩人妻一区二区精品| 日本人妻最新在线中| 国语av最新自产拍在线观看| 大屁股国产在线视频| 亚洲婷婷综合网| 北条麻妃99精品青青久久| 日本成人A片免费看| 人妻喷水| 国产精品色| 国岛片视频| 加勒比海人人操超碰在线| 鸥美插入视频| 亚洲伊人久久精品影院| 中文久久一区| 久久性爱免费送| 边做饭边操逼逼| 91亚洲最新在线| 精久久久| 亚洲激情深爱文学小说网站| 乱久久久| 伊人991| 狠狠色综合网| 999亚洲国产视频| 久久人人爽爽人人爽人人片αV| 日韩 欧美 国产 麻豆| 国产精品久久久九九九| 久草看看看| 高潮精品| 日韩性爱视频在线免费观看| 成 人片 黄色大片| 日韩欧美午夜视频在线| 欧美黑人XXXⅩ高潮交| 日韩精品一区二区三区色欲| 五月丁香色综合| 国产少妇与亚洲av| 大香蕉日韩欧美| 日韩综合色图| 尤物网址| 97人人干人人操| 超碰久久性爱| 久久久久久亚洲精品中文字幕人妻| 天天操天天插| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 激情无码日韩| 天天综合色| 96AV久久久| 少妇色欲综合网2| 中文字幕欧美丝袜07资源| 国产午夜在线观看| 色婷婷综合网站| 欧美在线55555| 床戏久久久av一区二区麻豆| 无码人妻一区二区三区色欲aⅴ| 日本www操操操| 国产有码一区| 日韩中文字幕视频| 人妻乱仑一区二区三区| 97欧美精品综合| 99re在线精品78| 久久久精品中文字幕爱豆| 色色五月天激情| 九九成人精品| 国产成年女人免费视频播放a| 久久人妻四季| 亚洲另类天堂| 人人操AV| 久久伊人最新网址视频| 亚洲综合97中文网| 日韩人妻播放| 国产小炒后入式| 五月天婷婷在线看| 超碰98综合网| 青青草丝袜在线视频| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 久草成人影片| 久久女婷| 无码直播久久久| 国产精品在线网站| 熟女色综合久久| 色777999综合| 午夜呻吟欧美| 久久99人妖视频国产| 婷婷九月国产| 99久久9| 天天澡天天爽日日AV| 嗯……啊…嗯嗯…啊…好舒服| 免费在线看黄片av| 日本东京热大香蕉a片| 国产麻豆福利av在线播放| 亚洲色阁| 日韩三四五区| 国产欧美精选激情视频| 精品十八在线观看| 亚洲欧美综合网站| 密臀在线免费观看| www网站黄| 国产成人精品一区| 欧美一级黄片免费播放| 蜜臀中文字幕| 欧美在线|亚洲| 超碰国产情侣自拍网| 精品v日韩欧美国产| 欧美亚洲今日在线| 欧美亚洲激情小说| 欧美久久伊人| 成人精品一区二区91毛片不卡| 亚洲乱色熟女一区| 张柏芝国产一区在线观看| 精品少妇高潮久久| 国产日韩怡红院| 国产白丝网站| 欧美BT 亚洲色图| 日本高清一本二本免费不卡| 快播久久人人aV| 亚洲怡春院| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 午夜福利一区二区三区四区五区色婷婷| 人妻少妇一区二区| 国产中文大片资源中文字幕| 麻豆视频国产一区二区| 超碰在线人妻中文字幕| 国产精品极品美女视频| 天天干天天燥| 国产真实野战在线视频| 午夜啪| 精品亚洲国产成人AV制服丝袜| 无码丰满熟妇一区二区浪潮AV| 日韩人妻制服丝袜av| 青青草日韩无码| 四月丁香婷婷| 精品一区二区三区四区外站| 97久久超碰国产精品| 黄色香蕉视频网站一区| 超碰在线人妻中文字幕| 92性色国产午夜福利在线661| 日韩操逼HD| 久久精品一区二区三区不卡| 澳门人妻久久| 内射中国少妇高清视频免费视频| 校园春色亚洲色图| 日本午夜精品理论片A级APP发布| 婷婷久热| 久草精品一区 | 国产精品久久久久无码AV会牛| 中文字幕精品一区二区精品| 国产99999久久精品| 欧美综合亚洲综合| 黄色网址在线免费观看| 人人爽天天爽| 老熟妇一区二区三区| 日本不卡高清视频| 超碰人妻中文在线| 欧美激情久操网| 久久精品国产亚洲AV无码电影| 伊人成人情色综合| 99视频自拍区| 91站街按摩店老熟女熟女| 日韩亚洲97| 色综合色欲色综合色综合色综合| 午夜福利在线视频1000| 人人 操人人 操人人| 日韩99神马视频播放| 成人九九| 日本午夜福利影院| 欧美丝袜美女电影一二三四区| 99婷婷一区二区| 欧美天天拍| 超碰在线在公开超碰在线在公开| 久久成人午夜精品影院| 亚洲清纯唯美| 午夜福利免费精品视频| 欧美91精彩| 殴美大黄片| 亚洲欧美在线丝袜| 五月激情啪啪| 国产精品熟女一区二区三区| 白嫩嫩一区| 亚洲图片另类| 日本五十路熟女一区二区| 亚洲天堂美臀在线| 熟女突然公开看18禁影片| 91熟女视频网| 午夜精品久久久久久久男人的天堂| 97超碰超| 午夜综合在线| 9色在线| 黄色大片视频在线免费看| 91女人的网站| 五月天激情小说网| 凹凸视频在线一区二区| 中文无线日韩一区| av久日| 欧美精品在线观看| 乱伦av麻豆| 激情在线青青操| 午夜呻吟欧美| 日本五十路熟女一区二区| 情色五月天就去干| 蜜桃久久精品一区二区三区| 蜜臀久久99精品久久久久免费观| 日韩在线观看字幕精品| 亚洲精品性爱片| 操国产逼| 97碰碰色| 中文字幕第95页| 青青草吊丝| 国产精品91ai| 国产日韩欧美亚洲精品95 | 精品中文字幕第一页| 精品玖九九久| 精品人妻伦一区二区三区久久| 成人AV素股で擦久久| 在线不卡视频| 婷婷五月天激情网| 干婷婷综合网| 97精品综合久久| 人人插人人摸人人| 成人无码电影在线观看网| 网站A V在线| 久久久亚洲熟妇熟女| 91色欧美| 啊啊嗯嗯好爽| 天天做日日做| 欧美午夜一区二区三区| 亚洲乱熟女一区二区三区大香蕉| 欧美另类综合久久| 亚洲一级性爱视频免费看| 一级@啪啪视频| 国产亚洲日韩欧| 3PAV乱伦视频| 婷婷久久五月综合激情| 91人妻做a观看视频| 91精品久久久久五月天精品 | 无遮挡男女激烈动态图| 久久久久久久国产视频| 操逼操操操91| 国产无遮挡| www.acm成人黄色毛片| 97资源亚洲| 91肉片| 日韩成人综合网| 又黑又大又粗 | 99热aaa| 天美一区在线| 岛国1区2区3区在线观看| 国产精品电影| 污污污8888| 亚洲人妻色图| 人摸人人操人| 欧美一区二区日韩传媒搭讪精品| 性色高清在线| 97欧美综合| 午夜欧美女人操逼| 91超碰碰在线| 后入式免费视频| 亚洲国产麻豆一区二区三区| 97超级欧美| 亚洲码和欧洲精品激情系列| 99re6国产精品99re在线| 高精欧美色| 婷婷丁香成人| 欧美日韩国产色五月综合在线| www.色吧5.com| Av手机版天堂网| 开心五月婷婷激情| 久久久九九| 久久久久久久国产a∨| 色五月第四色| 成人a大片在线观看| 东京热av男人的天堂| 成年人黄色小视频网站| 天天插天天射| 亚洲av青草久久一区二区| 肉嘟嘟www视频在线观看高清| av午夜玫瑰| 51国产午夜精品视频| 超AV色女| 在线综合 亚洲 欧美中文字幕| 国产一级久久久| 久久久精品91八戒| 黄色二级片网站| 最近2018中文字幕在线高清第一页| 91久久久久久久久久久| 可能人人看人人摸| 人妻天天爽| 色色婷婷五月天| 午夜性生活av免费在线看| 北京专精特新企业招聘信息| 亚洲精品国产专区在线观看| 欧美日韩1234| 99re9这里只有精品| 亚洲欧美中文日韩视频中国语| 久久久一区二区三区四区五区| 日韩精品区二区三区不卡| 综合国产影视三级| 九九九九九九九九九国产精品 | 18啪啪手机免费性爱| 欧美色图97| 精品国产网站| 好湿好紧好爽 视频| 男女日B国产| 久久欧美激情| 国产伊人精品在线| 蜜臀AV成人精品蜜臀| 香蕉人人操tv| 日韩电影在线观看网址| 中文无线日韩一区| 台湾肥佬网一区二区三区| 狠狠狠狠狠| 九九热超碰| 国产成人自拍视频在线| 国产自产自拍| 无码人妻丰满热妇又大又粗| 久久国产在线一区二区| 精品九九九| 999热这里只有精品| 伊人嫩草| 伊人国产AV| 热热色中文无码| 99re这里只有精品2| 伊人四虎综合| 探花精品 一区二区| 91亚洲电影| 亚洲 暴爽 AV人人爽日日碰| 人人操 欧美| 国产精品久久久久无码Av网曝门| 丰满美女一级毛片在线播放| 久久久免费的精品| 亚欧高清在线| 97国产色综合| 中文字幕av一区二区三区人妻少妇| 91成人久久| 性色综合网| 国产综合网站在线播放 | 嗯啊不要啊在线 | 色五月av| www.伪伪| 国产农村妇女精品一二区| 九九英色视频| 亚洲91射| 亚洲成人日韩小说| 国产成人资源| 婷婷久草| 婷婷五月综合在线| 91N综合在线| 农村妇女精品一二区| 九九久久玖玖| 欧亚免费视频| 五月开心久久AV官网| 大香蕉日韩| 亚欧性爱无码| 伊人伊人LD| 91亚洲人| 26uuu欧美| 中文字幕人妻丝袜乱一区三区| 色呦呦国产精品免费看| 五月天丁香| 美女爽到高潮91| 少妇一区二区三区精选| 日韩三级久久久| 欧美天天综合网| 丁香五月婷婷基地| 日本精品免费一区二区三区四区| 91色人妻| 成人精品视频一区二区| 日语五十路和六十路亚洲国产精品| 成人一道本免费视频| 麻豆视频test| 久久亚洲AV无码白度| 91女网站| 91性色| 女人双腿搬开让男人桶| 大香蕉淫人网| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 日本九九久久99播| 高清国产性猛交xxxx乱大交| 精品视频97| 琪琪精品免费一区二区三区| 青青草玖玖爱| 黑人精品成人一区二区三区| 成人青青草原伊人| 欧美中文字幕男人天堂久久精品| 91精品网站| 在线v中文字幕一区二区三区| 国产精品欧美在线观看 | 国产自产一区视频在线| 夜夜免费视频| 人人操AV| 99热伊人| 91福利网在线观看| 亚洲欧美综合色| 天天干美少妇一区| 亚洲国产成人精品久久久国产成人一区二区 | 国产操逼网站亚洲一级黄色| 一区二区首页| 国产一区二区视频在线播放| 国产熟女一区二区| 久草婷婷| 综合国产97| 爱媛媛久久国产福利| 午夜小电影在线插入淫高潮| 91熟女视频网| 男人的天堂日韩| 熟女一区二区| 图片区小说区| 中文字幕一区二区在线日韩精品| 久久久九九九| 视频在线观看青青99国产| 青青草色情网站视频| 色九月综合| 日韩女优在线| 久操综合在线| 国产精品乱码久久久久久久久久久久| 亚 欧 美 综合| 最新一二三区视频| 久久久A∨| 操操碰| 四月丁香婷婷| 97免费在线视频在线观看| 啪啪91| 麻豆精品A片免费观看| 欧洲精品一区二区三区| 国产人妻一区二区三区欧美毛片| 麻豆国产av网| 校园春色制服丝袜中文字亚洲| 极品白嫩福利在线| 熟妇亚洲一区二区三区| 精品人妻一区二区乱码一区二区| 富二代亚洲精品99| 日本新免费二区三区| 亚洲美女精品九九视频| 嗯嗯嗯啊啊在线观看| 欲色综合| 一本一道vs波多野结衣| 色婷婷丁香| 国产白嫩精品久久| 97超碰资源网| 精品九区| 婷婷91| 欧美专区在线| 久久九九热| 色综合加勒比| 中国亚洲呦女专区| 亚洲s色图| 欧美亚洲首页| 亚洲 暴爽 AV人人爽日日碰| 立川理惠无码一区二区| 91殴美大片| 亚洲av成人精品一区| αⅴ天堂| 丰满少妇一区二区三区四区观看| 欧美偷| 美女尤物人人操| 中文字幕在线观看AV| 五月天日日操夜夜操| 在线综合色| 91亚洲精品青草| aV中文麻| 日韩激情啪啪啪| 亚洲AV无码乱码在线观看性色| 9久精品视频在线观看| 日韩啊V| 午夜福利在线视频1000| 96久久久| 精品国产乱码久久久久久影片| 国产97色在线| 骚逼高潮久久精品| 亚洲欧美日韩激情不卡| 五月色综合| 欧美的精品的视频| 国产精品成人无码av无码免费| 第45页一区二区| 亚洲久9| 天天添天天干电影| 久久啊啊| 亚洲第一综合| 久久午夜鲁丝片| 十八禁网站在线| 国产精品女aA片爽爽视频| 天天综合精品| 少妇人妻太紧太深av| 欧美日韩亚洲电影| 欧美色婷婷| 亚洲福利影院一区久久| 亚洲综合另类欧美久久久| 亚洲美女AV无码| 91N综合在线| 九月丁香婷婷| 久久98| 日本成人A片免费看| 色悠悠伊人网五月天| 午夜精品久久久久久久99热影院| 国产成人手机视频激情| 大逼色网站| 新97国产超碰| 日本有码久久| 欧美性巨大╳╳╳╳╳高跟鞋| 国产丰满少妇久久久精品影院| ..日韩av毛片精品久久久| 人妻夜爽夜夜爽| 久久偷拍人| 五月香婷婷| 岛国片国产成人亚洲播放| 亚洲天堂另类| 嗯……啊…嗯嗯…啊…好舒服| 日本日皮视频逼| 久操网无码在线| 亚欧高清| yaouchengrenav| 婷婷五月天激情四射| 中文日韩欧美熟| 久久久久久9999| 大香蕉综合| 老熟女91av| 欧美日韩国产中文精品字幕自在自线,| 日本在线播放不卡一区| 在线天堂资源亚洲| 国产精品久久久久久久久久久久久久吹 | 欧美大香蕉久| 亚洲男人天堂网站| 亚洲清纯综合| 狼人狠干| 天天射夜夜操| 无码日韩人妻av一| 日本日皮视频逼| 亚洲色图尤物视频| 亚洲最大成人a毛毛片| 亚洲欧美色图小说| 蜜臀久久99精品久久久电影| 日韩色| 国产视频一区二区三区在线免费观看| 99婷婷一区二区| 亚欧日韩成人| 日韩999| 亚卅熟女乱色| 欧美在线官网| 金典av| 1024精品在线| 久久91视频| 超碰 另类 欧美| 少妇高潮一区二区三区在线| 亚洲欧美精品国产一区二区| 先锋精品av色鲁| 人人摸人人舔一区二区| 色图四区| 精品人妻av在线播放| 久草五月| 日韩精品电影| 亚洲AV成人精品网站在AV| 福利社区午夜一区二区| 久久欧美按摩999| 超碰欧美COM| 国产女人操逼视频| 人人操天天爽| 2024黄色视频| 人妻少妇视频在线播放| 九七毛片九九毛片| 一本色道综合久久欧美| 日韩三级一区| 精品久操| 99精品视频在线观看免费| 天天碰操中国年青熟妇| 亚洲情色 自拍| 国产99久久99热这里只有精品15 | 国产品精品自在在线午夜免费| 天天干干天天干干| 熟女自慰久久久| 国产精品点击进入在线影院高清| 开心五月天激情网| 91精品人妻偷情| 打av高清| 自怕偷自怕亚洲精品| 诱惑人妻欧美一区在线播放| 日本操逼无码| 91久久久老司机| 日本www操操操| 熟女精品日韩一区二区三区| 成 人 影视 一区 二区 三区 四区 | 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 超碰在线91| 91天天c| 手机看av网站在线看| 色香在线| 99色热| 天天看天天在线精品| 蜜桃不卡一区二区| 大香蕉伊人久久| 老熟女乱伦片| 高清不卡视频| 亚洲 自拍偷拍 欧美| 熟女少妇一区二区三区| 国产熟妇一区二区| 69精品少妇一区二区三区蜜桃| 四虎午夜影院| 欧美激情视频一区二区| 夜夜综合| 一区二区三区网站日日骚| 人妻 中文 日韩| 少妇久久| 九九九久久久W精品| 亚洲欧美啪啪| 午夜福利在线视频1000| 婷婷色一区| 国产一区二区在线播放量| 男人天堂网站| 久草老司机| 日本九九九九| 欧美性爱精品一区二区| 国产精品高清2021在线| 久久六六| 中文三一区| 欲色综合| 91大香蕉伊人| 久草精品一区 | 国产精品久久久久久高清无码免费看| 少妇内射www在线观看视频| 亚洲一区二区 麻豆传媒| 1024人妻| 观看免费区二区三区二| 日本1区2区不卡视频| 中文字幕国产在线天堂| www.av不卡中文字幕| 久久同城AV| 欧美一区二区三区成人性生活 | 东京热毛片177b2viP| 97手机日韩| 精品一级毛片在线观看| 国产成人拍国产亚洲精品| 亚洲免费成人在线高清无码视频| 综合免费无码中文| 国产福利影视| 殴美牲| 亚洲日韩av一区二区三区百合| 久久成年精品| 婷婷久草| 超碰色97| 色吧5亚洲| 99久久久无码精品国产人| 神马久久久久久伦理片| 亚洲精品一区二区精华| 精品亚洲黄色片 国产精品导航一区二区 | 91狠狠| www.av家庭乱伦| 377p欧洲日本亚洲大胆| 可以在线观看AV的网站| 国产精品黄色三级av| 色婷婷影视| 97香蕉人人乳| 人妖欧美一区二区| 熟妇乱伦一区二区| 亚洲制服欧美另类内射| 综合欧美日本三级| 校园春色制服丝袜中文字亚洲 | 国产免费一区| 亚洲黑人在线| 久久久久久国产精品免费网站| 看日韩美女二区三区免费操逼视频| 精品国产一区二区三区久久久蜜臀| 国产热av| 亚洲av噜噜噜噜噜噜| 欧美黄色大香蕉一区二区| 老熟女熟妇| 欧美成97爱| 日韩精品中文字幕一| 按摩中文字幕| 91熟女.com| 亚洲无码视频免费在线观看网址!| 999亚洲国产视频| 色婷婷综合网站| 国产天美传媒精品| 蜜臀99久久精品久久久懂爱| 操逼网免费无码视频| wwe 天天干.com| 麻豆成人影音在线| 久久性爱大全| 任我爽视频在线观看| 综合色欧美| 网页导航五月天免费一二三区| 欧美狠狠弄| 日骚逼视频| .精品人妻一区二区三| 日韩在线观看中文字幕视频| 亚洲色悠悠久久88| 欧美性生活男人的天堂| 久久久久久久极品香蕉视频| 97丝袜亚洲在线播放| 无码精品久久久久久亚洲| 长长久久88视频| 2019男人的天堂| 免费人成毛片乱码| 蜜桃久久综合视频| 伊人玖玖网| 超碰在线人人射| 五月天丁香欧洲日韩| 久久香蕉国产线看观看亚洲女人 | 欧美天天拍| 91欧美网| 一,爱啪啪,在线免费视频| 亚洲诱惑| 国产精品熟女九色九色蜜臀| 少妇同性| 岛国1区2区3区在线观看| 精品久久在线区一区| 亚洲丝袜诱惑| 欧美制服另类丝袜| 啊啊啊想要| 久久a久久| 久久综合九色综合欧洲98| 97色冈| 中国少妇啪啪视频| 日本福利社| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 亚洲成人美女无吗| 呦女网站| 国产九九九九九九九九| 欧美精品欧美精品系列| 五月天玖玖资源站| 一区二区三区男人的天堂| 少妇无码av专区线| 日本一久是| 天天插夜夜操| 最新9久久久9免费视频| 天天操人人操狠狠插| 神马久久久久久久久久久久| 久久久亚洲Av| 91操人| 三级三久久线久久99久目本WW| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 9久久精品| 91 刺激在线| 欧美成人精品欧美一级乱黄一区二…| 欧美日韩岛国大片在线观看| 亚洲三级。日韩三级| 亚洲精品97在线| 黄色视频60分钟| 久久9精品网站| 久久,精品一二三| 五月丁香六月综合缴清无码| 东北女人操比视频| 91精品国产麻豆国产自产在| 欧美极品| 中出20p| 麻豆AV短剧| 怡红院一区二区熟女人妻| 国产精品人妻免费精品| 亚洲色图伊人网| 亚州操操穴网| 性色av蜜臀av色欲aV| 99国产精品| 区自美91| 日本女厕偷拍| 五月丁香网站| 久操免费在线| 亚洲色图欧美另类在线| 欧美综合骚| 欧美一级美片在线观看免费| 亚洲成人ab| 中文字幕AV片| 亚洲影视综合网| 久草网站免费在线观看| 中文字幕后石码三区四区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 色综合91好| 国产精品经典一卡久久久| 国产毛片片精品天天看视频| 九九热视频这里只有精品| japan日本高清乱xxxx| 久久久中文| 国产超碰97| a人欧美综合天堂麻豆| 激情五月婷婷| 一中国女人毛片水真多| 全国男人天堂网| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 亚洲美女 晚间男人天堂| 神马久久久久久| 天天操福利视频综合网站| 天堂岛av| 香蕉综合网| 欧美性爱五月天| 中文字幕精品一区二区精| 日韩偷拍一区二区三区 | 国产中午字一暮区| 欧美天堂亚洲电影院一区在线播放| 开心激情婷婷| 五月丁香啪啪网| 亚洲超碰在线| 欧美日韩 强奸乱伦| 久久直播国产| 无码人妻精品一区二区三区99不卡| 蜜臀在线视频| 人妻天天爽天天爽三区| 少妇精品| 97中文字幕九区| 亚洲,欧美,综合网| 中文字幕第二页| 另类 综合 日韩 欧美 亚洲| 亚洲欧洲无码97久久精品| 美国久久一二三四| 97色97好| 国产十八禁视频| 亚洲AV无码久久精品蜜桃小说| 亚洲性猛交|