久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码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
返回資訊列表
亚洲色图欧美色图日韩色图| 久久久爆乳翘臀一线天伦理视频| 女人被添高潮免费视频| 久久久com| 国产九九久久久精品| 欧美日动态视频| 国产精品粉嫩福利在线| 91美女小视频| 成年人黄色小视频网站| 日日碰狠狠添天天爽超| 日韩有码免费视频| 在线一区| 91综合网站| 日日噜噜夜夜狠狠视频无| 日本性爱少妇| 18一区二区三区| 久草在| 国产九九九九九九| 你懂的在线观看区国产| 免费国产视频| 欧美91精品国产自产| 台湾成人无码AV| 熟女乱伦A| 色爱国产| 精品国产99| 亚洲91射| 日韩黄色片子| 51一区二区三区| 热久久这里只有精品| 欧美亚洲丝袜美女电影| 男人的天堂99| 蜜臀AV网站| 美女露胸露屁股| 精品9999| 无码高清少妇久久| 成人在线视频二区| 中文字幕av一区二区三区人妻少妇 | 99ri精品| 老女人老91妇女老热女| 91天堂网| 黄色AAAAAAAAAAA大片| 天天色播| 熟女高潮合集-永久久久-成人AV | 精品人妻一区春色| 欧美中出| 超碰在线国产| 精品无码久久久久| 人人干黄色| 色爱综合网| 国产性感在线观看| 国产精品操| 国产懂色精品国产av| 九九热精品| 色踪合AV| 久久受www免费人成| 天天综合精品| 久久天堂网| 免费看黄片现成| 久久午夜伦| 亚洲区限制级 99| 无遮挡又黄又刺激的视频| 五月婷婷爱六月丁香色| 欲射影视| 久久久性爱| 337p大胆噜噜噜噜噜91Av| 最新精品久久蜜桃 | 色婷婷A V一二三四区麻豆综合| 无码高清少妇久久| 九九久久首页| 亚洲色阁| 天天操综合网| 91制服丝袜| 26uuu性物| 中文字幕 av v| 后入式免费视频| 亚洲最大无码中文字幕网站| 国产一区二区三区,在线观看观看| 亚洲综合电影| 熟女丝袜视频| 老司机福利青青草| 中文字幕一区二区三区蜜臀| 中国AAAAAA黄色片| 精精夜夜| 51久久夜色精品国产麻豆| 女优视频第10页| 久久久久久久久一区二区三区| 成人性爱电影网| 伊人96在线| 岛国视频免费在线观看| 美女诱惑在线一区| 中文字幕交换人妻| 中出人妻中文字幕91在线| 欧成人在线| 狠狠激情综合狠狠操中文字幕| 青青操视频在线| 操操逼操操逼操操逼逼| 国内一区二区三区| 国产亚洲精品美女久久久m| 天天日天天操VV| 草草电影院| 91是天天| 免费自拍三级综合| 日韩专区久久久| 日本欧美国内在线| 日本欧美不卡| 热久日综合| A 在线网址| 高清肉丝中文无码| 色色五月婷| 超碰色图| 欧美综合骚| 色九久| AV天天在线观看| 在线有码中文字幕| 长久操视频| 成人性爱电影网| 78m啪啪啪| 久久久久国产亚洲一区欧美色图日韩| 国产亚洲女v在线观看| 97精品97久久| 丁香六月婷婷综合| 亚洲天堂在线怕怕视频 | 中文字幕乱在线伦视频中文字幕乱码在线| 欧美日韩人人早| 久久精品久久久久久久久| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 另类在线| 呦呦影院| 日韩人妻精品| 青青草日韩无码| A级国产欧美激情在线| 啊啊啊不要啊啊受不了了视频在线| 制度丝袜99| 久久久草草精品| 一起草av| 日韩精品在线视频在线观看| 亚洲欧美激情小说| 激情第四色| 欧美日韩在线视频网站| 任我爽在线视频免费观看| 99热9| 蜜乳视频网站| 国产精品久久久久9999小说| 中文字幕乱碼在线| 久久久18| 岛国毛片在线观看免费| 中文三一区| 久久久久久夜夜夜夜夜| 九月婷婷| 精品午夜福利国产一区二区在线观看| 在线天堂资源亚洲| 日本中文字幕一区| 亚洲AV永久无码一区仙野| 男人的天堂2019| 久久超碰免费的| 久久女婷| 91碰超| 人妻夜夜爽天天爽三区麻豆AV网站| 丝袜喷水在线| 国产九九九九九九九九| 亚洲无992tv| 久久久国产护士丝袜美腿一| 久久精品小视频| 久久夜黄色无码A级大片| 60秒不遮不挡| 亚洲自拍小说| 嫩草影院永久在线制服丝袜| 麻豆天美国美国产| 91超级碰碰| 国产精品乱码久久久| 日本东京热大香蕉a片| 免费观看的av| 亚洲无 码A片在线观看麻豆| 国产精品粉嫩福利在线| 久久綜合很很很| 夜夜操二区| 国产第25页在线观看| 日产操逼| 久久大香蕉97| 久湿久久 | 台湾成人无码AV| 91亚洲欧洲| 999熟女精品| 乱伦熟女区| 欧美一级久久久丰满| 清纯唯美亚洲综合| 婷婷午夜清品久久久久久久性色视频观| 欧美亚洲高清不卡| 中文字暮97| 91色久| www黄片免费看com| 日日干天天干夜夜爽| 五月天伊人网| 亚洲综合九九| 人人妻人人澡人人爽人人精品浪潮| 熟女熟妇伦久久影院毛片一区二区| 免费久久9999| 久久精9| 99re这里只有精品3| 另类天堂| 国产欧美日韩在线不卡第一页| 91大神精品长腿在线观看网站| 校园春色 欧美| 天天狂操夜夜狂日| 久操国产在线| 91老司机视频| 屁股久久久久久| 草B在线| 国产美女91| 丝袜狂射91| x97av| daxiangjiao你懂的| 男人的天堂久久狠| 精品人妻伦一区二区三区久久| 99在线视频播放| 久久有码| 久久99999| 啊啊啊好舒服视频在线观看| 亚码人妻| 色网在线| 九九九九一级| 久久久免费视频18| 草B在线| 国产激情在线| 亚洲色婷婷久久久综合日本| 成人毛片免费| 操逼逼一区视频| 91深夜夜| 超碰78| 欧美爆乳精品一区二区| 日韩熟女操逼| 欧美顶级黄色大片免费| 日本午夜久久电影| 嗯嗯啊啊视频在线看| 女人的久久久| 日韩激情视频| 福利大香蕉| 91九色丰满高潮| 中文字幕欧美日本乱码一线二线| 日日躁天天躁狠狠躁| 欧美日韩久久精品爱爱| 久久久少妇| 国产探花日韩援交| 久久艹逼视频| 九九玖玖精品| 老女人老91妇女老热女| 色五月激情AV在线| 激情欧美97| 国产午夜精品理论片一二三区区 | 日韩pv中文| 伊人玖玖网| 后入式五六区| 91色综合| 国模不卡| 99爱在线视频| 秋霞福利网| 农村妇女精品一二区| 综合久久99| 激情欧美97| 92性色国产午夜福利在线661| a天堂视频| 婷婷五月影院| 综精品久久久aaaa| 亚洲激情欧美色图| 九九视频黄色片| 人人爱人人操人人性| 日本色色色| 亚洲精品国产AV天美传媒| 人妻激情在线视频| 亚洲av青草久久一区二区| 成人自拍三级在线观看| 色五月网址| 国产成人主播| 国产AV中文| 中文一区二区三区影院| 色乱二区| 亚洲自拍欧美国产首页网曝| 超碰人妻久久| 国产浮力影院第1页| 99超碰色| 久久久久人| TS人妖另类精品视频系列| 91精品无码人妻系列| 26uuu国产| 77国产精品| 啪啪啪男女亚洲中文字幕99| 在线综合 亚洲 欧美中文字幕| 日韩成人综合网| 伊人991| 啊啊啊免费视频| 欧美人妻一区| 久久久久久久久久久人妻| 中文字幕第95页| 精品国产Av无码久久久亚洲| 久久婷婷五月天| 97一区二区三区视频| 少妇久久久久久| 性做久久久久久久| 美女毛片999| 欧美综合777| 亚洲av无码国产精品字幕| 久久精品国产72国产精品福利 | 熟妇操花| 啊啊啊啊好大好硬啊啊啊啊啊 | 蜜臀99久久精品| 囯戸精品高潮呻吟旡码| 精品女人999| 啊啊在线| 99色热国产视频精品| 亚洲色人妻综合| 亚洲高潮影院| 国产亚洲精品农村妇女| 麻豆视频test| 综合97| 五月婷婷激情网| 日韩在线观看AV| 久久欲| 丰满人妻一区二区三区在线| 97在线免费观看| 五月婷婷丁香| 九九九国产| 日韩av影片在线观看| 操淫穴亚洲五月丁香| 97欧美视频| 99欧美| 小电影欧美91| 蜜乳av首页| 日欧毛片久久| 蜜乳AV.COM| 少妇一区二区三区在线观看| 人人么人人操| 亚洲色图大香| 欧美亚洲特P| 人妻日日干| 久久久九精品| 伊人久久大香线蕉无码| 春色校园综合网| 香蕉视频欧美一卡二卡| 久热久一区二区三区| 91香蕉国产尤物视频| 黄色污污污污污污网站| 超碰欧美97| 少妇一线天久久久久久| 亚洲国产熟妇综合色专区| 四虎影视永久在线免费| 色老牛| 日韩欧美中文日韩欧美色| 97精品久久久久中文字幕| 黄片qw| 97精品视频网站| 国产又猛又粗又爽又黄| 欧美韩国你懂得在线| 国产精品嫩草久久久久| 色综合超碰超| 18禁免费视频| 久久精品91| 免费一级欧美片片线观看| 亚洲人妻色图| 天美麻豆精品视频99| av网站免费看| 亚洲欧美国产中文字幕| 亚欧无码在线| 另类欧美色| 爆乳免费黄网站| 夜夜草我| 狠插 制服 自拍| 人人人人插| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 另类小说综合网| 欧美亚洲激情一二三| 强奸乱伦日韩AV| 麻豆天美在线| 日本不卡高清免v欧美日韩在线观看| 日韩性爱啪啪视频| 天天激色| 中文字幕在线观看丝袜| 黄色成人网久久久久久| 麻豆区久久久久亚| 香蕉在线一区二区三区| 超碰成人人人爽人人爽| 国产捆绑一区| 亚洲激情在线| 在线女人91| 青青伊人久久| 五月亭亭六月丁香| 欧美操逼视频二区| 亚洲国产麻豆一区二区三区| 少妇熟女一区二区三区| 日本理论在线| 国产97色在线 | 亚洲| 久操高青| 日韩中文字幕在线视频观看| 97超碰伊人| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 欧美日韩性爱操大逼| 婷婷六月色| 欧美97在线欧| 熟女网站最新| 五月天玖玖资源站| 国产v片在线免费观看| 国产成人啪一区二区| 男人天堂.AB| 日韩亚洲精品一区二区| 欧美综合第一页| 夜夜操一区二区| 98一区二区精品| 精品偷拍13p欧美dodk视频| 偷拍视频青青草在线视频| 97超碰巨乳| 一区二区你上我| 久操网线| 超碰在线1234区| 自怕偷自怕亚洲精品| 亚洲双插| 另类专区加勒比| 国产熟女无套内射| 夜色五月天| 亚洲欧洲成人在线电影| 欧美日韩精品久久久久东北老熟妇| 91人人看| 久草福利在线资源站| 91av熟女人妻| 99久在线精品99re8| 亚洲中文字幕在线视频一区二区 | 精品人妻二区三区| 久热91| 欧美日韩啪啪电影| 欧在线一二区| 好一吊区二区| 综合久久99亚洲人妻中文在线| 91久精品| 99re视频在线观看这里只有精品| 国产精品无码AV网站| 欧美伊人久久综合网| 国产精品久久久午夜夜伦鲁鲁| 97视频7| 精精夜夜| 爱做久久久久久| 97在线精品观看视频| 天天综合网在线91| 中文字幕免费在线观看| 少妇精品久久久八区九区| 男人久久精品| 女生自91网站| 在线人妻熟女一区二区三区四区五区| 26uuu国产免费观看| 黄片视频观看| 亚洲色图第一页| www.男人天堂| 综合五月天| 国内毛片无码一级毛片| 国产精品午夜高潮呻吟久久av| 欧美欧美少妇| 欧美|91色综合| 久久亚洲AV成人精品无码| 亚洲精品尤物yw在线影院| 久久午夜色播影院免费高清| 成人久久久| 91熟女在线| 欧美美女视频| 亚洲AV色图一区| 新97国产超碰| av东京热男人的天堂| 99re这里只有精品3| 婷婷五月成人| 曰韩无码777| 国产精品秘 福利姬在线观看| 操逼网免费无码视频| 成人a大片在线观看| 粉嫩粉嫩一区性色AV片| 成人无码影片视频在线| 五月丁香六月综合缴清无码| 中文字幕精品一区二| 久久二| 国产传媒av天美传媒在线| 超碰97护士| 欧美色亚洲| 国产精品高潮久久久无码| 囯产精品久久久久久久久久梁医生 | 情趣丝袜无码操逼视频| 操婢日韩| 国产乱码精品一区二区三区四川| 骚人妻少妇视频| 天天激色| 亚洲中文字幕av| 女生久久网| 亚洲色图欧美色图另类图片| 日本高清免费一本视频在线观看| 尤物黄色在线观看网站| 人人爱人人操人人性| ji熟女.com| 十八禁视频一区二区| 色天使亚洲综合在线观看| 日本一区二区三区四区免费观看| 丁香婷婷啪啪| 夜夜嗨一区二区| 99啪啪视频| 夜夜操91744565| 亚洲第一色页夜| 欧美91色| 日韩少妇无码| 秋霞无码av鲁丝片一区| 国产成人精品亚洲日本| 色99在线| 国产五码丝袜屁眼| 伊人性在线视频| 中文字幕丰满子伦无码专区在线视频最新| 五十路六十路素人熟女| 强奸a片网| 激情自拍 校园春色| 亚洲av影院在线观看| 99婷婷| 丁香五月天婷婷姐| 91精品国产乱码| 中文字幕第二页| 国产精品亚洲四五区在线观看| 人妻内射一区二区在线视频| 粉嫩AV一区二区夜夜| 国产午夜福利专区综合| 亚洲AV无码国产精品久久久久 | 欧美成人一级麻豆| 6080YYY午夜理论片在线观看| 精品人妻美妇91job| 日韩美女久久一区二区三区| 欧洲精品一二三在线| 极品色综合| 成人性爱av| 九九伊人网| 欧美爆操91| 天美传媒在线一区| 老熟女91视频| 夜夜夜夜久久久久| 欧美激情激情xxxx欧美专区| 人妻久久一区二区三区| 国产91亚洲精品一区二区三区| 国产1769在线| 国产精品91ai| 亚州综合色| 色综合天天| 国产日韩欧美三级片| 亚州乱码中文字幕综合久久久| 丝袜美腿丝袜| 久久成人国产| 操逼视频色| 日本色色网| 亚洲一二三| 91熟女网| 91黑人无码激情在线| 韩国女主播青草在线| 男人精品区| 亚洲高清无码AAA久久久精品| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 999久久久国产精品| 日韩不卡在线一区二区| 日韩无码嘿咻黑热久| 老司机福利社视频在线观看| 亚洲成aⅴ人片不卡无码| AAAA级日本片免费视频| 亚洲成人免费电影| 99婷婷| 神马九九九| 豆花视频操逼网址| 老鸭窝亚洲毛片| 久久久久人| 黄片视频,下载| 狠狠躁AV| 青草成人免费视频一com| 2024人人操人人摸| 日韩精品人妻中文字幕有码午| 欧美色另类| 色噜噜人妻av中文字幕| 日韩高清黄片| 亚洲91av| 中文有码9| 亚洲 日韩 丝袜 熟女 变态| 熟女在线视频| 久久精品操| 国产专区第一页| 9久久美女首页| 日产操逼| 啊啊啊啊啊操我视频| 97爱爱爱| 亚洲AV免费在线| 亚洲日精品| 精品性爱无码在线播放| 青青草原成人| 爱我干综合| 午夜无码熟妇丰满人妻| 草伊人高潮喷水超碰| 99综合网| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 日本东京热久久久电影| 热久久这里只有精品| 亚洲激情久久久伊人综合| 一级久久久久久久久久久| 搡老女人老91妇女熟女| 国产亲戚伦亲在线| 国产精品成人福利在线| 九热大香蕉| 国产Av超碰| 做爱福利视频一区二区| 十八禁成人网站在线观看| 狠狠干妹子| 日韩在线观看中文字幕视频| 好色美女九七第一页| 久热9| 国产精品扒开腿做爽爽爽视频| 看看小穴| 亚洲欧美精品国产一区二区| 天天激色| 亚洲夜夜欢无码一区二区| 无马一区二区| 久久久久久中文字幕中文字幕最新| 超碰在线人人射| 99热精品国产| 黄色大片免费在线| 精品人妻av在线播放| 国产按摩一区二区三区| 曰韩人妻中文字幕在线| 大香蕉男人的天堂| 殴美大黄片| 久久女人| 欧美内射少妇| 国产家庭乱伦网址| 97综合久第一页| 亚洲操操操| 人人人干干人人干| 精品小视频在线| 亚洲一区二区三区欧美日韩| 校园春色 男人天堂| 亚洲欧美色图| 欧美综合站| 久热影视| 亚洲色图8| 日本99视频| 草草草草视频| 96国产污污污丝袜| 国产激情视频在线观看| 久久精品国产精品一区| 91 丝袜在线观看| 99无码精品| 手机在线免费看的av| 91男女| 青青草日逼视频| 日本视频在线观看污污污| 暴力av在线| 亚州色站 日韩电影| 26uuu国产免费观看| 久久美女福利是上海美女| 欧美猛交黑寡妇中文字幕| 亚洲精品日韩国产欧美| 另类欧美色| 日韩9999| 98色网| 日韩免费看在线黄色片| 成人开心网在线视频| 婷婷伊人一区| 乱伦图一区| 啊啊啊啊好疼| 蜜桃精久三区| 国产精品制服丝袜清纯唯美| 99色网| 骚货 中文字幕 av| 欧美图片色综合| 9999久久久久| 黄色大片免费在线| 国产精品久久久啊| 天天干天天日天天射黄色| 亚洲丝袜少妇在线| 亚洲男人天堂网久久| 双插性欧美一二三区| 大香蕉中文| 国产中文字幕在线| 欧美内射少妇| 久久久久久欧美精品se一二三四| 色大香蕉97N| 国产少妇肉丝在线观看| 日韩亚洲Av人人夜夜澡人人爽| 大香蕉99re| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 午夜福利区| 婷婷色五月激情| 久久岛国| 婷婷伊人綜合中文字幕小说| 久操免费观看| 午夜毛片高清免费不卡| 色女网日韩| 久久九九99| 韩美日操逼| 97天天综合| 97视频在线视频| 粉嫩少妇自慰在线| 观看免费区二区三区二| 日韩女模中文造逼| 岛国在线一区二区三区| 北约熟女超碰| 日本潮催一卡操| 懂色aV一区二区天美传媒| 中出在线视频| 秋霞福利网| 综合97亚洲| 中文字幕天天操| 欧美在线伊人色| 欧美熟妇视频| 91狠狠| 国产熟女自拍| 青青草字幕AV| 欧美五区| 91N五十路| 日本高清久久| 色综合av男人天堂| 国产熟女免费观看久久| 国产福利在线视频网站| 变态乱伦伪娘灌肠一区二区| 最新国内自拍av免费| 高清无码久操视频| 亚洲色天| 亚洲乱码精品一区二区| 亚洲午夜未满十八勿入网站日本又色又爽又黄| 午夜爽爽爽| 精品人妻一区二区免费蜜桃视频| 狼人狠干| 91美女视频电影| 人澡逼| 91天天综合在线观看| 久久精品综合| 99re只有精品| 久久久性爱视频| 午夜精品久久久久| 色综合潮| 九一精品牛牛一区二区| 丰满搜索结果 -第18页- 久久高清无码| 国语人妻精彩刺激| 欧美日韩国第一区| 91jk色拍| 小骚逼被操的爽不爽| 中文字幕一区二区三区人妻少妇在线| 欧美三级免费伊人| 免费看污网址| 国产粉嫩出水在线播放| 久久香蕉国产线看观看猫咪av| 99久久久久久久久| 亚洲av无码成人精品国产| 日本三级大片| 五月天开心网| 中文字幕 一区二区 亚洲无码| 久久婷婷一区二| 特级大荫道BBwBBwBBW| 操人妻丝袜高跟| 欧洲一区二区三区免费| 久久有碼| 九九热精彩视频| 久9综合在线| 国产精品网址| 欧美激情视频在线一区| 亚洲网站一区二区在线| 亚洲欧洲综合av在线| 97在线视频观看网站| 欧美精品久久久久久久久88| 五十路熟女人妻一区二区三区四区五| 欧 美 自 拍 偷 拍| 97视频在线播放| 天天躁日日躁AAAAXXXX国产 | 欧亚揄拍偷拍精品视频| 国产精品禁久久久精品| 亚洲天堂欧美| 国产美女在线精品免费看| av天堂精品久久| 啪啪资源网| 激情五月婷婷| 91久久堂| 亚洲大色堂| 精品无人区麻豆乱码1区2区图片| 欧美亚洲高清| 欧美日韩性爱无码| 色啪网| 超碰97男人| 天天α片| 日本色色视频网站| 一级A啪啪啪啪| 伊人青青一区成人视频在线观看区| 日影院久久婷婷夜夜网| juliaann欧美丝袜办公室| 自拍偷拍国产欧美日韩韩| 国产精品女久久久久av爽| www.婷婷| 亚洲日韩久久精品一区| 色综合大香蕉| 美日韩男女操屄视频| 操逼网免费无码视频| 欧美三级一级| 欧洲色综合| 色操逼网| 亚洲中字慕不卡| 美女国产一区二区久久| 久久一区无码| 国产中文字幕在线观看| 久久精品国内Av熟女高清| 99综合自拍| 久操影视| 夜夜做夜夜爽精品视频| 97爱爱| 天天干人妇| 91网站视频在线观看| 日本男人天堂| 无码 黑人一区二区三区| 日本天天操| 黑人天8A∨高清网站| 十八禁黄色| www.久久制服糖| 天堂精品在线| 亚州精品人妻一二三区| 国产一区二区三区免费视频在性观看| 久久久久免费少妇| 日日日大屁股骚女人精品| 97舔舔| 久久中久文96| 强被迫伦姧在线观看无码网站| 黄色欧美性爱视频| 97在线欧洲| 亚洲黑人在线| 97色碰| 欧美乱妇狂野欧美在线视频| 国产精品人妻免费精品| www.99热| 婷婷10月天青娱乐| 国语国产操逼伊人AV网| 天天亚洲综合| 婷婷婷婷婷婷久久久久| 国产精品久久久鸭无码的功能| 久久综合超碰| 日本性交操一区二区不卡系列| 精品女人999| 97视频播放| 操逼日韩无码| 国产精品久久久九九九| 亚洲精品一区二区日本| 日本超碰在线国产一区| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 黄色视频高清无码网站| 亚洲第一页色| 91中出视频| 日本精品成人无码| 97在线欧| 日韩av免费一级电影| 久久伊人网视频一区二区三区| 97超碰超| 青青草日韩无码| 欧美另类天堂| 乱伦1色页| 操死我了嗯嗯嗯| 少妇xx精品| 啊啊啊啊啊啊啊在线| 亚洲涩图欧美| 亚洲第一无码播放立川理惠| 老司机午夜精品福利视频一区二区| 亚洲囯产精品女人久久久| 亚洲综合小视频小说在线观看| 99e久久国产精品| a人欧美综合天堂麻豆| 人人操我人人干| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 中文在线久久字幕| 久久久亚洲Av| 男人精品天堂一区| 日本一区二区不卡精品| 91亚.色| 99日韩| 91天堂丝袜美腿| 1024人妻| 欧美人妖内射| 天堂精品在线| 美女性91| 99久久久无码| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 91c色| 国产精品国产| 欧美99热| 国产日韩久久| 欧美一二三区四五区| 婷婷干黄色| 亚洲熟久久| 性爱乱伦一区| 性生活性生大爱77AV国产| 白嫩嫩一区| 国产精品高清2021在线| 亚洲熟女乱色一区二区三区久久久| 偷拍新久久| 丁香婷婷久久 | 黄色AV免费| 日韩美女高潮喷水视频| 欧美三级中文字幕hd| 一本色道熟妇| 久久中出在线| 人妻乱仑一区二区三区| 亚洲天堂加勒比| 91偷拍欧美亚洲| 爱av免费| 久久97超碰| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 后入 亚洲 美女 射| 国产毛片毛片4p懂色| AV老汉| 黄片免费看黄片免费看| 射综合网| oumeizonghese,www| 色色色色网站| 丁香色狠狠色综合久久小说| 久操网在线| 熟女乱伦二区| 嗯嗯啊啊好爽| 亚州熟妇精品| 91丝袜美女国产| 天天干天天燥| 欧美狠狠狠| 久草资源在线视频官方总站日韩丝袜美腿 | 在线岛| 好涩综合| 97碰| 国产一区二区三区,在线观看观看| www.久久99| 操啊国产| 噜噜噜亚洲精| 磁力99AV| 99re视频在线观看这里只有精品| 亚洲视频1区| 亚洲国产天堂| 久久99草| 久99| 影音先锋视频在线| 国产又黄又爽| 96精品久久久| 99999久久久久9国产精品| 午夜福利视频在线一区| 91啦人妻| 97在线播放| 国产精品熟女九九九| 欧美黄色片AAAAA| 立川理惠被中出无码| 天天综合网视频91| 青青草日本中文字幕 | 992这里有精品| 成人三一级一片aaa| 天天视频黄| 久久久九| 国产精品suv一区| 99热综合在线| 另类专区在线观看| 国产一级高跟丝袜| 日韩操啪| 密臀在线一区尤物| 国模91| 日欧美色| 蜜臀久久99精品久久综合| 久久肏大逼| 一区二区三区亚洲| 久久精品国产亚洲AV清纯| 中国91AV| 国产91专区| 一牛一区二区三区久久| 精品国产乱码久久久久久影片| 久久精品三级影视| 可以免费看黄片的视频| 亚洲无992tv| 色综合天天爱去电影网| 97欧美色| 校园春色宗合网| 精品97精品97| 日韩激情无码影院| 性91| 亚洲一区二区中文字幕| 久久国产精品,久久国产| 精品精品精品| 久久思思热| 五月丁香六月婷| 日本 欧美 国产一区| 激情综合网五月婷婷五月天| 久久亚洲欧美中文字幕国语| 美国日韩黄片| 十八禁啪啪视频| 麻豆天美91| 色吧91| 精品国产乱码久久久久久网站入口| 夜夜嗨一区| 91激情国产| 91网站18+| 69丨亚洲丨精品丨入口免费播放| 91爱欧美| Aa东京男人的天堂| 欧美激情久久久久| 激情文学欧美| 东京成人一区| 色九月综合| 校园春色制服丝袜中文字亚洲| 六月丁香五月婷婷| 最新欧洲欧美日本激情网站| 妺妺跟我一起洗澡没忍住| 中文自拍欧美影视| 超碰成人国产| 亚洲一区日韩| 伊人久久艹| 激情丁香五月婷婷| 亚洲欧美一区二区三区一猛片| 91精品人妻电影| 黄色区免费观看中文字幕| 手机看片日韩人妻| 国产AV色黄看到爽| 台湾成人无码AV| 一级啊性爱在线视频| 国产成人久久久精品免费AV| 欧美成人性爱视频大全| 精品国产乱码久久久久久口爆网站 | 另类图片五月| 大香蕉免| 欧美天天综合站| 欧美色道啊| 男同专区一区二区三区在线| 91日韩国产欧美亚洲另类精盘州至城都 | 精品福利| 日韩无码视频黄色| 国产精品成人福利在线| 麻豆啪啪啪视频| 精品人妻伦一二三区久久| 花野真衣| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 九九成人精品| 91 综合 色| 精品一区二区三区18| 一区二区三| 操人人| 亚洲砖码砖专无区2023| 91蜜桃婷婷狠狠久久综合9色| 亚洲日本成人动漫| 又大又长又爽| 97国产天堂岛| 久久精品99| 九九九九九九九九九国产精品| a片在线播放| 久久天堂| 日本高清视频xxxx| 亚洲色图殴美色图激情乱伦| 成人在线日韩| 久久久999网站| 91天美传媒在线| 丰满少妇精品一区二区| 清纯唯美综合亚洲| 极品另类| 精品人妻中文字幕4399| 精品一区二区亚洲国产| 日韩欧美麻豆大片| 男人的天堂色偷偷青青草视频婷婷网| 青青草日韩免费观看高清在线| 黄色一区三区| 中文字幕制服诱惑| 午夜精品久久久久久久久久蜜桃| 高清国产性猛交xxxx乱大交| 日本韩欧美在线播放a| 97亚洲性爱| 久草在| 加勒比综合在线| 黑人精品XXX一区一二区| 97人人操人人摸人人爱| 久久最新免费视频23| 91AV天美在线视频| 麻豆三极片| 亚洲人妻av| 青青操综合网| 欧美日韩性爱电影在线| 欧美成熟性爱精品| 欧美性爱精品一区二区| 亚洲一二三精品久久网| 五毛骚逼极品美女怕怕| 久久精品熟妇丰满人妻99| 约操熟妇| 色婷婷综合久久久久中文一区二区 | 成人麻豆av电影网站| 国产女人高潮视频| 日韩大香蕉精品在线视频| 亚洲女人91| 狠狠色噜噜狠狠狠狠狠色综合久久 | 超碰到97情色| 欧美视频一| 色综合久| 美女露胸露屁股| 久久精品国产97欧美精品亚洲 | 伊人网在线点播| 久久亚洲欧美中文字幕国语| 91精品黄在线观看| 综合亚洲情色| 精品国产a∨一区天美传媒| 成人一级性爱| AV天天综合| 新怡红院| 久久毛卡| 亚洲 图片 欧美 色图| 强乱老妇中文字幕| 国产中文字幕曰本毛片| 大香蕉色网| 少妇精品久久久八区九区| 国产午夜福利电影免费在线观看 | 国产嫩草精品A88AV| 国产一级特黄大片处女| 偷窥自拍亚洲色图| 欧洲综合色| 精品性爱一区二区| 性爱AV天堂| 九九视频黄色片| 99热综合在线| 99少妇| 国产免费久久久久| h色99999| 国产女人高潮嗷嗷嗷叫小说| 色综合中文字幕不卡| 亚洲欧美碰碰| 欧美中出1| 中文字幕一区 二 区 三 四 五 区日 日 骚| 日韩综合第八区国产精品| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 啊啊啊啊啊啊在线| 日本国产二线女色| 999久久久免费精品国产牛牛| 欧美亚洲中文| 91强奸乱轮| 亚洲情色五月天 | 岛国片在线播放| 超碰av人人人| 日躁天天爽爽| 亚洲超碰AV| 欧美曰韩国产精品| 成年人黄色| 91人妻Pr| 夜夜 中文视频rt| 国产美女在线精品免费看| 色五月婷婷网| 物业黑人 AV一区| 艹精品| 欧美日韩少妇色情| 亚洲一区在线观看欧洲| 志村玲子视频一区二区| 亚洲精品国产拍免费91在线| 围产精品一区二区三区视频播放| 亚洲涩涩| 一区二区三区免费岛国片| 91色伦综合| 精品亚洲黄色片 国产精品导航一区二区 | 亚洲色图欧美色图制服丝袜| 大香蕉视频啪啪啪啪| 亚洲黑丝在线| 熟妇视频一区二区三区在线| 精品在线观看视频在线| 精品久久久一本一道| 欧美日韩性爱精品| 人妻熟女一区二区三区视频| 屌逼传媒| 中文字幕乱亚洲美女精品一区| 欧美亚洲激情小说| 搡老熟女免费视频| 久久久国产精品人妻丝袜| 国产精品永久免费10000| 999九九精品|