亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

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
返回資訊列表
久久久久ab| 中文字幕黄色一起草| 天天天堂影视日韩亚洲91| 日韩无码服务区| 啊啊啊啊啊啊好多水| 欧美gv在线观看| 久久这里只精品99re66图| 国产传媒1234区| 九九热精品| 欧美国产伊人久久久久| 日韩99神马视频播放| 舔足天天操天天射| 亚欧高清v| 久久久久久久久久久999| 97神马久久| 操逼1区| 久久精品亚洲婷婷| 国产老女人久久毛| 成人影 天天操 亚洲| 国产怡红院在线| www.99中文字幕| 精彩视频日韩| 日本最新免费韩国1区2区视频播放| 96国产污污污丝袜| 久久男人精品| 欧美少妇色综合| 欧美巨大性舒爽顶到了| 黄色乱论网站| 精品一区二区三区蜜桃| 97国产精品国| av网站免费线看| 亚欧Av| k频道色撸撸| 中国国产精品一区视频| 欧美亚州综合网图片| 精品少妇人妻av久久免费| 熟妇亚洲一区二区三区| 秋霞网—男女啪啪亚洲免费体验区 | 操美女高潮抽搐白浆| 色综合20p| 国产尤物AV尤物在线观看不卡| 久久久久久中文版| 人妻 中文 日韩| 青青久操| 五月丁香六月激情| 午夜操一操| 夫妻四区五区六区| 一级性爱aaaa| 美女爽到高潮91| 蜜臀少妇一区二区| 风月影院十八禁| 亚洲天堂东京热| 日韩在线欧美精品一区二区| 久偷拍| 色欲无码人妻日韩欧美精品| 搡老女人老91妇女熟女| 操操逼操操逼操操逼逼| 亚洲综合影院| 丰满精品人妻少妇久久字幕| 欧美性爱另类综合| 亚州性9| 亚洲成人精品久久久| 日本东京热加勒比久久| 懂色av一区二区三区天美传媒| 吻戏激情性巴克| 精品无码一区二区三区| 欧美日韩不卡传媒| 熟妇熟女视频一区二区三区| 91无遮挡| 啊啊啊啊,啊啊好多水| 丝袜 亚洲 偷拍| 日本三级A片网站com| 日日夜夜青青草母狗| 动漫爆乳3D奶水一区在线观看| 91综合在线| 禁十八久久| 黄片免费久久久久久久| 日韩无码人妻| 99热99re6国产在线播放| 中文字幕 国产区| 国产操逼网站亚洲一级黄色| 日本媚薬中文字幕在线| 国厂麻豆77q4| 97免费在线视频在线观看| 俄罗斯一区二区视频在线观看| 中文字幕第7页| 亚洲熟妇图片| 伊人久久88国产女| 免费啪啪啪网站18岁| 肏逼视频日本| 啊啊啊轻点在线观看| 精品四五区| 尹人免费观看视频在线| a片偷拍视频| 91色欧美| 9997se| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 伊人黄色视频免费观看| 2019精品国产无码成人| 春色综合免费| 免费超碰97久久| 精精夜夜| 91大学精品激情戏| 99热色精品| 亚洲一区二区久久久久| 欧美性爱第一页久久| 欧美亚洲特P| 中文字幕在线第二页| 亚欧美天堂在线| 天天日天天色| 992这里有精品| 日韩黄色成人性爱| 国产高清在线观看欧美| 无码精品久久久久久亚洲| 天天综合影院91| 97人肏| 久久香蕉影院| 夜夜爽33333| 欧美大香蕉专区网| 亚洲一本色道中文无码aV天美| 国产精品福利视频播放| 2017av无码免费无线播| 天天射天天操天天干天天吃2018| 国产无码久久高清| 夜夜操美女| 欧美18老人禁| 黄色AV免费| 五十路熟女人妻一区二区在线观看| 啊啊啊好疼| 日日日骚女人精品| AV男人天堂网| 99久在线精品99re8| 91丝袜在线视频| 美骚妇av高清在线| 欧美久久人体| 婷婷爽人人婷婷爽视频| 最新亚洲黄色免费电影 | 欧美日韩不卡a片| 妇女性内射冈站HDWWWCOM| 久久久久久久强迫| 国产高清免费不卡av| 日逼逼免费看| 小少妇| 久无码| 78p欧美| 操b网站亚洲无码| 亚洲色图加勒比| 久草精品一区 | 日韩成人性日韩成人性爱视频在线免费观看| 91色宗合| 日韩免费簧片| 久久xx| 久热免费视频| 国产999精品久久久久久| 日韩无码嘿咻黑热久| 国产天天骚| 国产精品天干天干综合网麻豆| 日韩丝袜人妻AV| baiduhicn.com。| 久9爱经典视频| 中文字幕乱码在线观看| 亚洲天堂久久久久久粉红视频| 天天干天天操天天操夜夜操天天操| 影音先锋日本乱伦| 亚洲AV无码国产成人| 精品四五区| 大香蕉欧美国产日韩高潮| 九热超碰| 久久透逼视频| 五月激情综合网| 亚洲日韩av一区二区三区百合| 啊啊啊要高潮了| 久久久性少妇| 国产精品自拍视频| 久思思热视频在线观看| 91校园春色长篇| 欧美色图 人妻| 黄色工厂这里只有精品| 26uuu性| 91c色| 亚洲成人av色网| 高凊专区人人操| 亚洲素人网| 精品女同一区二区三区| 亚洲男人综合| 麻豆久久久一区二区| 九九九九免费高| 亚洲色图亚洲| 欧美综合网在线| 亚洲精品国产精品成人| 色婷婷电影网| 99热精品在线观看| 夜嗨影院| 韩国轻伦国内自拍一区| 视频不卡中文字幕| 亚洲第一页色| 亚洲日韩AV视色| 大但人体久久久久| www.91理论| 欧美白嫩女HD| 麻豆天美91| 色色操| 日韩欧美中文字| www.亚洲黄色| 久久伊人在线五区| 精品视频一区二区| 亚洲偷拍自拍在线视频| 天天影视之亚洲综合网| 乳欲人妻办公室奶水| 国产日本熟女顶级一区二区三区视频| 天天操妹子| 中文字幕在线高清男人的天堂| 日本性爱网址| 中文字幕第95页| 最新国内自拍av免费| 天天综合香 ld视频| 日韩9区| 九九热在线视频| 久久精品无码一区二区三区| 九九在线精品| 性综合网| 岛国AV一区二区电影| 黑人娇小av在线播放| 色婷婷丁香五月| 亚洲在线91| 亚洲欧美大| 色综合天天爱去电影网| 91狠狠综合久久久久久| 色欲Av人妻精品一区二| 你操综合| 日韩,欧美,中文在线| 人妻熟女一区二区三区在线| 脫衣舞一区二区三区| 蜜屁Av| 国产精品婬乱一级毛片彝族| 久久超碰天天| 国产黄a三级三级三级av在线看 | 四虎影库国产精品免费| 自拍内地三级在线观看| 亚洲熟女一区| 蜜臀久久99精品久久久久久久久| 男人的天堂2019| 首页亚洲国产高跟丝袜诱惑视频| 亚洲日韩精品久久久久一区壹牛 | 99抽插| 亚洲天堂AV在线播放| 亚洲情色五月天 | 五月婷视频| 九九热re99re6在线精品| 婷色五月天| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 久久久久久久亚洲Av无码| q2午夜理论片夜色av| 色久综合| 日日夜夜草草草| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 综合色好色| A啊啊在线观看| 91强奸乱轮| 国产视频第二页| 日日天天久久啊啊aaa| 亚欧无码在线| 欧美黄页| 精品九九淫乱男| 日本三级大片| 无遮挡一级毛片视频免费的| 在线二区不卡| 人澡逼| 亚洲免费精品一区| 91Chinese在线| 51国产午夜精品视频| 玖玖超碰熟| 久久久一级| 人人看欧美性爱| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 国产精品久久9| 美国日韩黄片| 欧美在线亚洲| 日韩av无码网站| 久久久久久九九九九-美女久久久久久久-成人AV | 密臀视频三区免费网站| 国产不良强奸视频免费看| 天堂网 主播 亚洲| 粘花网06av视频| 在线99热| 精品一二三区久久AAA片| 久久男人的天堂| 蜜臀99久久精品| 大香蕉AV丝袜| 日韩97超碰中文字幕| 91被操| 色臀AV| 毛片99-全集电影手机免费观看完整-B029AV | 四虎视频在线观看| 久久精品亚洲东京热色播| 99热只有| 国产免费久久久久| 欧美日产国产在线成人第一区| 久久久亚洲熟妇资源| 亚洲精品1区| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 狠日操| 人人操 欧美| 精品网站99999| 无码heyzo高清一区| 日韩另类| 一级久久性爱视频| 国产精品美女久久久久AⅤ国产馆| 色香综合| 日本视频在线中文字幕| 男人精品区| 精品少妇99| 91 丝袜在线| 欧洲亚洲人妻无码中字久久三区四区| 免费网色网站| 性色av一区二区| 99热啪啪| 精品女人999| 激情文学网伊人| 日韩人妻免费精品| 久久东京国产精品视频| 激情专区综合| 色情婷婷| 色噜噜人妻av 中文字幕| 艳美熟妇先锋一二三区| 熟妇一区二区三区| 免费9 1久久| 91久精品| 日韩精品人妻中文字有码在线| 欧美人妻色| 久久精品视频在线观看| 91激情综合| 亚洲精品亚洲人成在线麻豆| α√在线| 可以免费观看的AV| 日本淫色网| 人妻熟女一区二区三区在线| 亚洲色图第四色| 欧美日韩小说| www.av家庭乱伦| 欧美人人曰人人操人人射射| 牛黄色久午久| 麻豆 欧美 日韩| 一区麻豆 高清中文字幕| 99热aaa| 2026国产精品视频| 日日躁天天躁狠狠躁| 美女诱惑久久| 一二三四视频中文字幕在线看| 欧美日日操| a在线观看| 国产成人网站在线观看| 色诱avtt| 美欧色综合| 久久丁香久草综合网| 五月婷网站| 国产精品熟女乱伦| 欧美九九99久久精品| 亚洲人人夜夜澡人人爽| 中文操逼字幕| 日本三级大片| 熟女一区二区| 蜜桃AV天堂| 四虎国产精品永久在线囯在线 | 大香蕉手机在线视频| 天天流夜夜操| 亚洲九九爱| 欧美色图20p| 青娱乐999| 色播五月婷婷| 啊啊啊97视频| 97亚洲在线| 26uuu久久| 亚洲第一无码播放立川理惠| 99免费在线视频| 欧美 亚洲 另类 综合| 天天操夜夜操| 99热成人| 在线电影亚洲色图| 色综合天天| 国产九九久久久精品| 欧美丝袜亚洲| 69精品久久久久中文字幕| 久热久一区二区三区| 成人草草视频| 国产精品无码在线| 日韩情色AV| 九九九九九九视频免费| 大香蕉啪啪啪| 国模久久在线| 岛国艾薇凹凸视频天堂| 日韩 成人 有码| 91香蕉国产尤物视频| www.激情| 东北女人性交| 激情开心五月天| 99久久99久久免费精品蜜臀| 97色伦欧美| 91偷拍欧美亚洲| 国产精品久久久久久久久久久久| 日韩性爱视频在线免费观看| 一区二区首页| 人妻一区二区三区四区视频| 国色天香av| 九99久久| 狠狠爱综合网| 国产精品一二三| 大香蕉久| 久9爱精品| 综合色啪| 高清孕妇孕交 交| AV一起草在线| 欧美综合在线91| 久久久久亚洲三级电影| 欧美性,色九九| 少妇啪啪自拍| 欧美与日韩97| 综合色播| 五月天亚洲色图| 操人妻少妇中文| 天天噜| 天天欧美色| 国产精品伦理| 日本大片日本一区二区免费高清| 97精品久久| 97在线视频观看| 99热这里只有精品18| 高清无码 国产精品| 国偷自 一区二区| 日韩中文字幕在线视频观看| 易易A毛视频| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 国产精品久久久久久夜夜夜| 人人妻人人澡人人爽人人精品浪潮| 91一区二区| 美女骚尻视频| 情色AV电影| 澳门黄片一香蕉视频| 国产少妇高潮| 超踫中文字幕| AV和黑人在线播放| 青青草综合在线| 91色久| 国产精品人妻无码久久久互動交流 | 中文字幕一区二区三区视频播放| 精品人妻一区二区蜜桃视频| 91精品国产91久久久久久久久久久久| 色色色网站| 91N综合网| 亚洲情色1区| 偷拍自拍在线视频观看| 亚州性9| av麻豆啪啪| 麻豆这里只有精品| 国产9 9在线 | 亚洲| 欧美黑人168页欧美黑人167| 影音综合网| 强奸a片网| 综合伊人激情| 国产成自自拍在线观看| 国产女人高潮视频| 亚洲小电影免费涩涩成人在线高清| 亚洲伊人青青草| 亚洲少妇诱惑| 精品久久視頻在线| 岛国片在线观看视频亚洲| 国产精品一二三| 图色综合网| 亚洲最大无码中文字幕网站| 69少妇一区二区| 午夜性| 婷婷中文字幕| 网页导航五月天免费一二三区| 日韩三级av片| 久久久久无码一妻区| 免费a在线播放v| 天天日天天干天天色| 啊啊啊啊在线播放| 青青欧洲黑| 天天干天天操天天拍| 久久男女激情视频网站| yiqicaoav| 青青草一区二区高清无码视频 | 欧美日韩黄片精品在线| 国产一区在线看| 国产又长又大又粗的视频| 精品然女一区二区| 久久久中文| 国精精品无码一二三区水多多| 亚洲精品一区二区精华| 超碰在线91| 校园春色美腿丝袜 | 91性网| 欧美激情色婷婷花野真衣一区二区| ′ !γ}丶。。久久精品欧美一区二区三区| aaaa黄片| 久久久久久电影| 国产午夜在线观看| 久久超碰国产一区二区三区| 人人爱人人乐人人操| 美女十八禁| 日韩成人人妻网站| 91久久精品美女高潮喷水| 国产和美国毛片| 午夜综合在线| 你草精品在线视频| 一区二区三区蜜桃成人撸久久东京热 | 亚洲性综合11| 蜜汁欧美| 在线观看精品国产免费| 亚洲AV成人精品网站在AV| 看日韩黄片| 国产蜜臀精品一区二区尤物| 欧美色图校园春色| 亚洲欧美色图片| 啊啊啊好大好深| 91蜜桃传媒精品久久久一区二区| 91女日逼| 亚洲综合999| 精品无码欧美三级| 在线无码网站| 亚洲图片欧洲图片aⅴ| 爆操无码| 看一级黄色视频| 91 在线亚洲| 中文字幕一二三区| 色综合20p| 蜜桃臀AV在线| 欧美熟妇精品黑人巨大91| 日本一区不卡| 中国少妇XXXX做受| 免费看日本操逼视频| 裸体美女国产免费久久久网站| 小草三级久久观看| 欧美在线l亚洲| 日本999精品视频| 99久在线精品99re8热视频在线| 91欧美巨乳| 欧日韩一二三f区| 国产精品日日摸天天碰| 欧美亚洲91| 26uuu性物| 欧美精品一区二区少妇免费A片| 國產尤物AV尤物在線觀看| 五月天伊人| 亚洲av强奸乱伦| 99热亚洲天堂| 国产精品久久久久久夜夜夜夜| 九t超碰| 久久久久九九九| 亚洲天堂中文字| 大香蕉啪啪啪| 嫩草影院永久在线制服丝袜| 麻豆激情综合| 亚洲色图欧洲| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 亚洲性爱高潮影院| 中文字幕丝袜人妻| 91网18| 色欧美在线| 日韩99精品视频综合区| 精品少妇后入一区二区三区四区人妻巨乳| 亚洲AV无码久久精品蜜桃小说| 九七超碰人人乐| 久久久久久电影| 天堂中文日本在线观看| 久久婷五月| 色www精品视频在线观看| 欧美日韩在线小说| 熟女视频久久| 欧美熟妇操操视频| 中文久久| www.99热| 亚洲天堂人妻熟妇视频| 丁香五月天啪啪| 综合网97| 国产97亚洲| 久久精品国产72国产精品福利| 玖玖资源中文字幕制服丝袜| 婷婷精品国产一区二区三区日韩| 欧美大的香蕉有线电视视频| 人人操人人摸人| 少妇内射www在线观看视频| 天天综合亚洲综合| Julia在线播放亚洲久久| 国产中文字幕在线| 国产精品免费1区2区视频| 国产精品青草综合久久| 91色综合激情| 极品肉射| 性爱久久| 加勒比综合88| 日本在线播放不卡一区| 免费草草草草草视频| 少妇人妻太紧太深av| 成人熟女区| 国产精品嫩草影院午夜两性 | 九九无码视频| 成人情色综合网| 久久草草亚洲蜜桃臀| 色眯眯射| 亚洲欧美伦综合| 东北丰满熟女国产一区| 亚洲av总站| 九九视频黄色片| 欧美日韩一干二干| 欧美日本中字另类在线| 久久久久921| 中文操嬖片。| …中文字幕亚洲乱,97人妻无码费视… | 强奸乱伦AV网站| 国产熟女二区| 强奸乱伦av电影| 少妇特黄一区二区三区| 国产亚洲国产超碰| 午夜操操操| 精品久热| 91精品无码久久久久久久| 久久一区无码| 久草国产在线视频| 色娱乐色呦呦夜夜夜夜av| 国产高清免费不卡av| 久日91在线| 亚洲黄网在哪免费看| 欧美人妖内射| 国产精品老熟女一区二区| 亚洲欧洲激情卡通另类文学四射小说网站 | 久久久98网站免费视频| 欧美影院一区二区三区| 青青草视频久久久久| 九九综合九九综合| 中文字幕视频2区| 午夜男人av| 热热色青青草| 国产天天骚| 天天日天天干天天操| 97色涩| 操美女高潮抽搐白浆| 日本人妻最新在线中| 欧美白嫩在线放| 国产野战露脸在线播放| 欧美性五月| wwwss在线观看| 97人妻人人躁人人玩人人| 中文字幕五区| 亚洲制服欧美另类内射| 欧美一级美片在线观看免费| 精品大全99999| 99精品在线观看| 天天干人人看综合| 久久久精品久久| 91美女视屏| 蜜乳AV一区二区三区四| 98超碰欧美| 日韩中文字幕2020| 日韩在线视频1234| 91人妻Pr| 国产午夜在线观看| 蜜臀中文无码午夜| av72网| 99国产人成精品| 777奇米影视777四色| 免费视频在线一区二区不卡| av影片在线观看不卡| 99只有精品| 一区二区久久天天干狠狠| 伊人色综合网| 免费看久久久性性| 成人乱码一区二区三少妇| 天天弄天天操| 无码区蜜乳| 囯产精品久久久久久久久久梁医生 | aaaa少妇高潮大片| 国产福利在线视频网站| 久久国产AⅤ| 花花AV导航| 97在线视频免费看| 亚洲熟女一区| 国产女人9999| 亚洲的天堂网| 97精品第3页| 日韩中文字幕2020| 免费亚洲国产精品久久一区| 丝袜视频一区二区在线播放国产中文| 色爱欲亚洲| 天天爽天天| 九色婷婷| 无码WWW免费视频网站| 欧美91视频| 亚洲精品人妻在线| 日本一区二区三区四区免费观看| 日韩中文字幕精品一区在线| 国产精品人人爽人人做可爱福利| 久久久久人妻二区精品叶可怜| 五月丁香黄色网| 91人精品妻入口| 人人操人人舒服| 日韩性爱毛片操骚逼| 欧美不卡二区| 亚洲精品啪视频| 九九RE视频在线精品| 无码又爽又硬又激情免费视频| 丁香六月婷婷| 刺激性视频黄页| 暖暖精品二区三区观看| 欧美日韩亚洲天堂网| 青操影院| 日本免费二区三区| 日韩一级二级三级免费看完整版| 日韩性爱免费观看视频| 九月丁香婷婷色| 无码抄逼网| 污啪啪啪视频| 蜜臀久久99精品久久久久免费观| 亚熟hd视频在线| 99re在线视频| 欧美天天综合在线| 91AV入口| 亚洲成a人在线观看久| av大香蕉| 18岁禁 茉莉成人久久| 麻豆人妻偷人精品无码视频| v91av| 18禁中文字幕| 人人扣人人操| 丝袜综合| 老鸭窝在线视频播放| 久久性爱视频免费看| A 天堂在线观看视频| 婷婷在线视频| 伊人aaa| 欧美AB在线| 人人摸.人人色| 91中文在线| 牛牛久久国产精品视频一二三| 性九九九九九九| 免费精品无码一级毛片牛牛影视 | 麻豆天美一区二区| av网站在线观看了| 欧美亚洲综合色| 久久骚| 91情色| 亚洲天堂 视频你懂的| 亚洲视频一二区| 这里只有97精品| 欧美一级A片不卡视频。| 精品毛片久久久精品毛片| 欧美永久激情一区二区| 91高潮| 在线观看色视频| 亚洲国产剧情少妇激情| 日本不卡一二区| 成人乱人伦一区二区| 亚洲 欧美都市激情| 亚洲另类色综合网站| 91一区二区三区蜜桃| 久久,精品一二三| 成人情色综合网| 国产一区二区三区免费视频在性观看| 99丝袜福利在线播放| 97ai亚洲| 国产精品一区二区三区,亚洲综合| 伊人久久国产免费观看视频| 91女优在线观看 | 美女91在线| 欧美 亚洲 偷拍自拍| 天操老女人| 国产一区二区三区白丝| ,国产乱人伦精品一区二区三区| 天天日骚逼熟女| 免费在线黄片视频| 天堂精品在线| 亚洲激情视频| 91xingse| 熟妇一区二区| 亚洲人成网www| 超碰人妻久久| 大香蕉啪啪啪| 天天射天天色成人| 婷婷性爱| 91少妇高潮| 午夜色婷婷| 老司机香蕉久久久久| 强奸乱伦αv片| 久久精品99| 亚洲国产欧美中日韩成人综合视频| 天美传媒在线一区| 男女激情黄色网址| 淫穴高潮色图| 国产亚洲福利第一页丝袜| 思思热在线视频在线| 国产精品无码久久久久2028| 大香蕉2017| 五月开心网| 人人贴人人摸| 熟女91网站| 天天综合网91入口| Blackedraw视频一区二区| 性暴力欧美猛交在线直播| 曰韩人妻中文字幕在线| 国产一区二区二区按摩精品啪视频| 自拍六区| 日韩九九九| 久久久亚洲| 精…码一二三区| 人妻少妇久久中文字幕一区二区 麻豆| 欧美写真视频一区| 黄页| 大香蕉伊人网| 麻豆三极片| 内射小黄片| 国产精品久久妻无码网站| 亚洲精品一二牛牛| 熟女乱伦A| 日韩卡一卡二卡三在线| 天堂8在线新版官网| 欧亚在线视频| 91蜜桃婷婷狠狠久久综合9色| 久久一二三四五六七八九区区区| 精品女人999| 天堂精品小草| 强奸熟女一区二区三区| 午夜精品久久久99热蜜桃的功能特点| 新91视频.cmp| 天天干嫩逼网| 91被操| 秋霞成人一级在线观看| 波多野42部无码喷潮在线观看| 国产精品蜜乳AV| 性做久久久久久免费观看软件| 男人夜色天堂ss| 婷婷情色综合网| 久久曰曰| 欧美96交| 亚洲精品九九九| 无码丰满熟妇一区二区浪潮AV| 国产A v无码专区| 熟女乱伦A| 99热久| 亚洲情色一区三区| 天操天操夜操夜月月年年操操| 蜜臀一二三区| 日韩欧美性吧婷婷乱伦大香蕉 | 国产精品露脸在线观看| 国产一级137片内射麻豆| 精品一区二区人妖| 日韩国语字幕| 九九九九免费高| 国产青青综合伊人| 男人女人18禁片免费看网站| 国产亚洲美日韩Aⅴ中文字幕无码成人| 成人乱码一区二区三少妇| 一品道视频一区二区三区| 夜夜騷av、一區二區| 久久熟女嫩草成人片免费| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 东京日日夜夜| 久久亚洲天天做| 天欧美在线| 亚洲无线观看久久| 亚洲色图殴美色图激情乱伦| 日本一区二区电影网站| 天天插天天操天天摸天天射天天看| 欧在线一二区| 日韩免费大片一级播放| 夂久色| 亚洲诱惑天堂| 粉嫩av在线| 国产一级αv免费看片| 亚洲最大黄网| 青草影院内射高潮| 中国一级αV| 91强奸乱轮| 欧美日韩国产电影| 久久综合97| 欧美成人一区二区三区在线播放 | 亚洲成人一二三区| 亚洲 欧美 日韩另类 麻豆| 插入逼91| 天天日天天插| 一区二区三区色综合| 国产精品点击进入在线影院高清| 一区三区啪啪| 91久久国产综合精品| 成人怡红院| 91动漫操逼视频| 欲射影视| 人妻一区二区三区四区视频| 9久热| 久草成人影片| 欧美一级特黄淫片在线观看| 色999偷自拍拍| 国产传媒日韩| 久久这里只精品99re66图| 91高潮喷水美女| 6080YYY午夜理论片在线观看| 蜜臀av一区二区三区免费观看| 91l欧美在线| 69视频入口| 久久久 国产精品| 日韩欧美天天爽爽爽天天爽爽| 婷婷在线视频在线观看| 中文字幕日韩国产传媒欧美精品| 97久久久久| 性爱精品一区| 成人热久久精品| 人人操,人人插| 玖色AV| 久久少妇| 婷婷中文字幕| 国色综合天| 国产精品一区二区黄片| 大香蕉日韩欧美| 黄片com.| 超碰午夜| 色色福利| 色狠人在线99| 99久久精品无码一区二区毛片免费| 欧美另类色图片| 九九九网站| 99九九久久| 啊啊啊好舒服视频| 亚洲成人在线播放| 超碰地址久久| 天天日少妇逼AV| 青青青青操国内视频在线| 久久久久13| 夜夜精品视频| 中文字幕 人妻不满 在线视频| 啊啊啊慢点| 五月丁香综合激情| 91亚洲欧美| 香一区二区三区| 国产一区免费午夜视频| 欧洲乱码视频| av在线免费一区二区| 操淫穴亚洲五月丁香| 一级性爱aaaa| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 中文字幕av亚洲在线| 青青草一区二区三区四| 伊人久久婷婷| 久久精品久久久久久久| 国产精品肉丝自拍| 亚洲国产成人精品999| 亚洲精品国产AV天美传媒| 欧美aa一级片| 九九av| 久久性爱视频| 欧美激情综合| 韩日精品福利视频一区不卡在线免| 日韩成人精品视频自拍| 97亚洲色图| 亚洲日韩肥臀视频在线观看| 亚洲无码国产精品久久| 色爽——AV| 日本精品一区三区| 免费一级a毛片久久久久久鸭绿欲| 吊色| 日本大片日本一区二区免费高清| 精品美女久久久久| 亚欧洲一区二区视频| 五月丁香六月婷| 乱伦一二三| 2020中文字幕在线| 国产精选三级在线观看| 可免费观看的av毛片中日美韩| 欧美大片天天看| 91狠狠综合久久久久久| 99久久久无码国产精品性啊聊| 精品二999| 五月丁香色情| 亚洲高清无毛一区二区| 日韩丨制服丨中文|在线| 国产熟女少妇一区| 成全在线观看免费观看| 久久二| 国产精品高潮久久AV| 亚洲色久| 91性高朝久久久久久久久| 日本道人妻久久久在线不卡色视频| 校园春色综合| 日本性爱少妇| 午夜精品久久一区二区| julia ann久久| 亚州精人品大香蕉| 成人性爱美曰韩| 天天澡天天狠天天天做| 死我十八禁| 人人妻人人操人人乐| 99热只有这里有精品| 亚洲高清视频在线免费观看| 蜜臀va69| 婷婷情色五月天| 中文字幕一区av| 国产成年女人免费视频播放a| 99re欧美| 亚洲 另类 丝袜 自拍 动漫| 狼天天狼天天大香蕉| 欧美国产成人在线| 久久人妻视频网| 欧美性爱一级操| 亚洲无码精品AV久久久| 色区97| 肉丝中文无码高清| 91在线丝袜视频| 日韩精品国产精品五码一区二区| 日韩午夜精品一区二区三区电影| 在线观看不卡一区二区三区| 久久视频,这里只有精品 | 欧美熟妇精品黑人巨大91| 超碰久久精品| 男生女生啊啊啊啊| 久久9精品视频| 色婷婷九月| 亚洲性爱无码乱伦av| 日比av无码| 骚妻少妇精品性色无码四色A V| 久久超碰98| 任我爽视频在线观看| 91蜜臀熟女| 狼人久草| 黄片不用下载在线观看| 操婢日韩| 国产91亚洲精品一区二区三区| 97超级久久| 人妻色情天天操| 午夜后入| 欲射影视| caopeng97人妻| 爱欲AV| 久久天天摸| 嗯嗯啊中文字幕| 激情丁香婷婷| 欧美在线干| 无码在线亚洲| 91精品啪在线观看国产城中村| 一起草高清无码| 蜜臀久久99精品久久久久久-DVD原版全| 亚洲天堂电影网99999| 欧美黑人168页欧美黑人167| 天天热精品| 啊啊啊啊好疼视频| 九九人妻| 亚洲综合 欧美| 在线电影亚洲色图| 麻豆传媒一区二区在线观看| 欧美超碰人妻97| 久久超碰大香蕉| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 嫩草 人人网精品| 96久久科窝| 九九九九九九九九九九九免费国产| 大香樵伊人网| 粉嫩国产精品久久粉嫩| 吻戏激情性巴克| 日本有码久久| 刺激性视频黄页| 一牛影视久久久一区二区三区| 91jk色拍| 麻豆天美制片厂网站视频| 色娱乐色呦呦夜夜夜夜av| 欧美综合在线91| 色拍偷亚洲| 亚洲男人天堂视频| 欧色网址| 欧美天天综合网版| 天天日天天干少妇日| 人人操人人色网| av亚欧| 在线观看高清AV| 国产精品自拍xxxx| 色综合婷婷| 丁香五月激情网| 中文字幕天天天天天| 2001天天操| 日本三级韩三级99久久| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 欧美加勒比| 亚州综合色| 中文字幕一区二区三区四区在线视频| 以及麻豆国产入口在线观看免费| 亚洲免费成人在线高清无码视频| 日欧操屄| 久久高清欧美国产| 日日干夜夜干| 黄色二级片网站| 亚洲综合贴图91| 国产AV天美传媒一区二区三区| 天天日夜干| 国产辣妈在线视频福利| 性色av网站| 强奸乱伦动态污图免费 | 亚洲精品国产熟女久久久| 一本久道久久综合狠狠爱一密臀精| 蜜臀久久99精品久久久久久-DVD原版全| 国产三级资源在线观看| 黄在线| 欧美.亚洲.另类.丝袜.制服.诱惑| 狠狠搞 亚洲91| 男人的天堂久久狠| 国产精品久久久久婷婷二区次| A级片一区| 亚洲砖码砖专无区2023| 激情五月婷婷| 超碰碰激情97+久| 亚洲日韩久久精品一区| 日韩人妻丝袜中文字幕| 啪啪资源网| 亚洲精品99| 久久一本大香蕉 | 五月天黄色av| 26uuu国产免费观看| 99免费视频| 嫩草影院永久在线制服丝袜| 人人妻人人色一区二区三区| 一级做受视频免费是看美女| 日本色色色色色视频| 小少妇| 天天日美女的B| 丝袜足交视频| 日本性爱网址| 亚洲欧美一区二区三区在钱蜜桃| 97精品在线| 婷婷久久五月综合激情| 日韩精品亚洲专区在线影视| 天天干天天日天天射黄色大片| 婷婷九月国产| 人人干人人操人人爱| 久久性爱城| 亚洲 另类 丝袜 自拍 动漫| 中文视频在线观看| 欧美日韩国内不卡| 91国产大片| 婷婷激情四射| 国产精品99久久久www| 亚洲人在线成线成人| 一区二区三区一亚洲中文字幕、综合区灬| 26uuu欧美日韩| 猛交交| 青女偷拍网| 中日韩一区二区三区欧美| 大香蕉九九| 无码人妻毛片丰满熟妇精品区| 思思热在线视频免费| 麻豆人妻精品一区二区| 97久久国产亚洲精品超碰热| 欧美性爱无码一区二区三区| 国产suv精品一区二区四| 大香蕉99re| 性色av婷婷久久一区二区点复制| 91国产大片| 襙一襙| 精品无码一区二区| 久久三区四区| 亚欧性爱在线无码| 5252色欧美在线| 成人国产视频在线观看| 天天舔天天| 精品在线78|