国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲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
返回資訊列表
av草草在线电影| 日韩无码一区二区三区| 国产免费操逼| 狠狠2050在线观看| 亚洲 欧美 小说| AAAA级日本片免费视频| 久久人人妻| 热99re69精品8在线播放| 日本中文字幕在线视频| 乱伦a片视频| 狠狠操天天干| 国产精品毛片?v一区二区三区| 蜜臀av网址| 好爽视频在线观看| 久久久爆乳翘臀一线天伦理视频| 欧美姓爱综合网| 欧美激情片一区二区| 久久岛国| 日本丝袜美腿人妻九九| 777AV电影| 人人操天天爽| 亚洲一曲日韩精品| 欧美美女视频| 日韩一区二区熟女| 可能人人看人人摸| 人妻无码一区二区三区久久99| 日韩免费看黄片| 男人天堂免费| 亚洲美女精品| 性色av大全| 美女的肌被草喷水视频| 自拍偷拍 日韩无码| 夜夜操中文字幕| 操逼不卡中文字幕| 日逼97| 蜜臀av一区二区三区免费观看| 日韩少妇无码| 大香蕉99999| 性欧美第一页| 射丝袜高跟鞋99| 九九综合久久中文字幕| 激情小说在线视频| 啊嗯嗯啊好大好爽| 久草成人福利导航| 免費黃色視頻觀看一| 草b在线| 超碰97最新人妻| 一区二区视频你懂的| 秋霞网—男女啪啪亚洲免费体验区| 蜜臀在线免费观看在线免费观看| 在线欧美69V免费观看视频| 久久人妻无码毛片A片麻豆| 国产成人无码网站在线视频| 亚洲黑人在线| 9l视频自拍9l九色成人| 亚洲资源站| 久久久久久大| 精品伊人久久久大香线蕉小说| 麻豆色99999| 色五月激情网| 国产极品一区二区三区三州| 精品人妻一区二区三区四区不卡在| 国产SV一线| 成人电影一区| 手机看av网站在线看| 男人的天堂 在线一区| 色999偷自拍拍| 永久免费发布性爱网| 91亚洲网| 伊人久久综合影院精品久久久 | 亚洲精品黑丝| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 蜜臀久久99精品久久久久久久久| 熟女乱伦A| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 天堂无码精品国产久| 天天伊人| 国产免费一区2区3区| 久久国产999| 天无日色综合| 一区二区三区 丝袜 高跟 美腿| 岛国黄色大片网站| 国产多人在线观看视频| 精品九九国产无码| 午夜啪| 无码二级三级| 国产高清在线自在拍69| 久久久久久中文版| 欧美爆操91| 久久精品国产精品亚洲艾通辽熟妇| 日韩三A大片在线观看 | 欧美亚洲特P| 大乔未久88一区| 翘臀vidoes| 99久re热视频精品98| 欧美性爱日韩性爱| 国产成人超碰在线| 中文字幕一二区二三区人妻专区| 国产美女自拍AV| 一级AV性爱| 97亚洲在线| 台湾佬大香蕉| 国产精品久久久久婷婷二区次| 91熟女.com| 久久久久久中文版| 欧美第一页| 久久熟女久| 青娱乐大香蕉| www.AV有限公司一区| 午夜欧美J进J出白浆流出久久久| 日韩紧密久久| 日本不卡二三区| 人人色人人射人人妻| 欧美日韩丝袜 | 性爱1区| 欧美久久人人网| 天天操人人操狠狠插| 97久久精品亚洲| 午夜婷婷| 中亚av| 国色天香av| 白嫩嫩一区| 天天干,天天日| 99国内精品| 嫩草 人人网精品| 传媒免费一区二区三区| 香蕉免费一区二区三区不读| 91美女看B| 欧美熟女丝袜| 91天天综合在线| 国产97色在线 | 亚洲| 91中出在线| 人人妻人人澡人人爽久久av| 另类亚洲一区二区三区| 亚洲国产婷婷在线播放| 亚洲欧洲综合视频在线| 人妻碰碰碰碰碰碰| 伊人96在线| 东京热,男人的天堂| 九九九九9999| 亚洲精品天堂久久A∨51成人漫| 久久av成人无码免费| 国产精品视频白浆免费| 欧亚乱色熟一区二区三四区| 91 国产丝袜在线播放-百度| 91bbbbbb| 思思热久久成人| 97人人模人人爽人人| 日韩精品99999| 2017大香蕉国产精品久久| 后入综合久久| 超碰在线人人射| 无码免费精品高清| 青青草白白色| 久久伊人影院| 精品国产91av一区二区三区| 久久曰曰| 国产不卡的视频| 好吊色综合| 国产一区二区免费福利片| 亚洲无码免费看| 东京热激情视频一二三区 | 岛国黄色大片网站| 91丝袜激情在线| 综合网亚洲在线| 午夜视频久久久久一区| 97超碰69| 视频二区美腿制服人妻欧美| 亚洲系列第一页| 欧美黑人猛交春色影视大全| 国产伦精品| 国产97视频免费观看| 欧美少妇大量自拍视频在线观看| 成人性爱视频在线看| 九九综合| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 国产四虎在线| 亚洲综合有码| 欧美激情中文字幕另类小说| 亚洲色图国产另类| 成人av性爱电影在线观看| 婷婷六月色开| 亚洲精品97久久中文字幕| 黄色成人网久久久久久| 青青草密桃在线播放| 国产天天噜一噜久久久| 久久人人爽爽人人爽人人片αV| 91网站18在线观看| 亚洲天堂精品日韩电影| 99热只有| 伊人麻豆传媒| 欧美国产日韩高清在线| 青青操视频在线| 网站A V在线| 九九色色| 超碰97久| 激情第四色| 亚洲影视高清第一页| 亚欧成人综合影院| 97干天天| 一本一道波多野毛片中文在线| 不卡人妻少妇精品毛片一区23区视频| 96久久久久| 色99在线| 伊人影院日本| 色眯眯av| 色欲日韩欧美在线一区| 91天美免费| 久久鲁干| 无码天堂| 日韩资源网| 中国大陆国产高清AⅤ毛片| 亚洲综合99999| 少妇人妻好深太紧了vr91| 青娱乐手机日韩在线视频| 翔田千里AⅤHD无码| 91爱看| 嗯啊视频免费在线观看| 人妻激情视频| 69精品人人人人| 思思热在线视频免费| 人人超碰在线观看黄| 99re国产精品视频| 亚洲少妇免费视频\| 中文字幕在线观看视频www| 欧洲色综合| 婷婷激情综合网| 精品亚洲国产成人AV制服丝袜 | 激情综合网一盗摄| 中文字幕在线高清男人的天堂 | 国产91 丝袜在线播放| 黄页大片在线观看| 日本一级婬片试看三分钟| 国产一区二区精品在线视频| 能看的AV| 国产精品久久久无码AV网站| 人人操人人摸人人骑| 亚洲大胆人体av| 国产精品久久伊人| 成人一道本免费视频| 色欧洲97| 亚洲骚女一区二区三区| 思思热在线cao| 97久久久久| 天堂国产AV| wwwcaobibi| 亚欧色图在线激情| AV有码在线| 日本九九久久99播| 国产一区二区三区影片| 人人操人人插 - 百度 - 百度| 欧洲精品久久| 小草精彩毛片| 五月天玖玖资源站| 99久久精品无码一区二区| 亚洲se91| 欧美久久人体| 情色五月天久久久| 亚洲天堂综合AV| 日韩免费在线视频观看| 男啪女色黄无遮挡免费观看| 深夜激情| 日韩精品系列| 亚洲综合性网址| av天堂影视中文在字幕在线中文| 国产精品一区二区黄片| 1人人看人人摸人人操| 亚洲高清色综合| 97超碰超欧美。| 天天日日日射| 性站| 极品极品色影院| 国产精品99精品视频网站| 麻豆精品.欧美精品.日韩精品.| 天天日天天屌天天操| 色香阁在线| 精品少妇一区二区三区在线视频| 中国乱伦一区二区| 欧美熟妇成人一区二区| 操逼操2| 四虎免费在线观看| 97色欧洲| 999久久久久久久久| 一区二三区四区视频大全套| 免费超碰97久久| 色情亚洲日本成人| 99啪啪视频| 夜夜爽爽爽| 亚洲va综合va国产va中文| 伦理片秋霞免费影院| 中国少妇XXXX做受| 亚洲免费成人在线高清无码视频| 国产狂喷潮在线精品| 97这里只有精品| 欧美亚洲丝袜人妻制服中文99| 国产精品色约约| 亚洲揄拍网| 成人五月天色网| 少妇500双飞99| 欧洲射精91| 天操天操夜操夜月操月年年操| 奸色色 男人天堂 天天射| 人人乐大香蕉| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 天美av在线观看| 欧美激情亚洲色图| 精品一区二区三区四区女| 欧美熟女妇同| 99re6国产精品99re| 一区二区三区四区在线不卡| 97色欧洲| av影片在线观看不卡| 欧州一区二区三区四区| 日韩欧美aⅴ综合网站发布| 日本无码1| 天天看,天天做| 色九区| 麻豆天美国美国产| 日韩精品作爱导航| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 后入 亚洲 美女 射| 日韩一区二区熟女| 黄久在线| 色99999| 熟女这里只有精品6| 欧美黄片免费在线观看视频| 操碰91| 国产夜夜艹| 试看福利| 欧美色就是色| 婷婷影院入口| 97精品国产97久久久久久| 99国产天美| 熟女精品一区二区在线观看| 蜜屁av| 啪啪啪精品| 日本亚洲熟女视频| 青女在线| 91精品人妻一品二品三品| www熟女乱伦com| 欧美成人一区二区三区在线播放| 亚洲情色五月天 | 这里只有97精品| www国产无码| 综合操逼| 97国产超湿| 青青草五月份天| 91AV入口| 国产欧美伊人| wuyechaopeng| 午夜.DJ高清在线观看免费7| 日本色色网| 久久久九九九九| 国产伦精品| 午夜福利视频在线一区| 久久视网78| 日本三级精品| 淫荡熟女乱伦网| 人人喜人人妻| 97亚洲自在精品在线观看| 欧美精品精品一区二区| 91超级碰碰| 97在线青| heyZO天然素人无码AⅤ专区| 97午夜剧场日韩| 亚洲天堂一区二区| 可以免费观看的日韩av毛片| 色综合加勒比四四季| 国产白丝AV| 日韩丝袜二区| 性感美女啊啊啊在线| 日韩中文字幕国产| 亚洲免费精品一区| 久久这里只有精品9| 激情久久久| 天天插天天操天天摸天天射天天看| 97超碰人妻| 五月丁香六月激情综合| 大茄子熟女AV导航| 乱伦熟女区| 91国产丝袜美女| 免费1级a做爰片观看| 在线人妻熟女一区二区三区四区五区| 欧美色图91| 99无码视频| 91伊人久久在线| 自拍偷拍 高清无码| 青春草A| 欧美Aⅴ| 一区二区精品更新提醒| 青娱乐999| 日韩精品人妻中文字幕有码午| 啊啊嗯嗯好爽| 精品久久久久,69国产成人精| 国产精品农村妇女精品| 天天肏夜夜肏| 后入国产| 夜夜高潮夜夜爽| 熟女乱3伦999| 精品人妻视频一区二区三区蜜桃视频| 国产精品毛片?v一区二区三区 | 日日干日日操五月天伦理视频| 中文字幕97| 久久这里都是精品| 免费家庭乱伦视频| 日韩资源网| 免费一级欧美片片线观看| 骚鸭AV| 九九AV| 97干在线| 中文在线久久字幕| 一,爱啪啪,在线免费视频| 日本一久是| 免费精品福利在线观看| 日韩中文字墓| 亚洲欧洲第二视频在线观看色图| 天天日天天干天天整| 丝袜美腿丝袜| 二区熟妇韩日| 国内毛片免费h片在线| 外国91| 一区 欧美 日韩 麻豆| 天天做日日做| 亚州性色| 天天天天做夜夜夜夜做| 久久久97| 精品人妻中文字幕4399| 国色综合天| 中文字幕十五区| 久操精品网| 我要去看2个日本美女.com曹逼| 美女诱惑在线一区| 6080yy午夜理论三级一区二区三区无码 | 久久鲁夜| 欧美78| 成人七区| 色婷网| 无码人妻毛片丰满熟妇精品区| 亚洲日本韩国在线| 无遮挡男女激烈动态图| 丝袜美腿91| 青青草原综合久久大伊人精品| 欧美经典一区二区三区| 欧美狠狠干| 国产高清在线自在拍69| 亚熟在线| 日本一区三级韩国| www超碰| 亚洲另类小说卡通动漫| 思思热国产高清| 舔人妻中文免费视频| 亚洲一区二区三区麻豆传媒| 最近的最新的中文字幕视频| 日韩无码操逼片| 97色97干| 91亚洲欧美激情| 麻豆传媒一区二区在线观看| 久九干| 啊啊啊啊一区| www.99视频| 日本激情免费大片| 日本成人A片免费看| 热99这里有精品综合久久 | 精品国产片亚洲一区| 中文字幕美女91| 少妇久久久久| 久久久久久十| 天天综合91入口| 久久九精品| 欧美天天综| www.狠狠干.coom| 日本色色网| 国产成人无码高清| 操逼国产免费| 韩国午夜理伦三级好看| 日韩在线一区高清在线| 日本熟女免费視颖| 久久久久久久九九九九九九| 久久精品国产Aⅴ| 9丨久久九九九| 日韩精品 欧美激情| 疯操AV| 一区超碰一区| 日韩AV噜噜噜一区二区三区四区| 涩亚洲欧洲| 夜夜爽夜夜摸夜夜操免费视频| 色制服丝袜夫妻av一区| 和协影院中文字幕三区| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 激情干在线| 亚洲 国产 精品一区| 一本一道vs波多野结衣| 婷婷AV一区二区三区| 亚洲精品精品一区二区| 亚洲啪啪性视频| 99久久久久| 99热亚洲| 亚洲欧美综合色| 欧美在线大香蕉| 91黑丝操| 麻豆av一区二区| 中欧人妻丝袜中文字幕| 老熟女乱伦片| 日韩精品在线观看观看| 围产精品一区二区三区视频播放| 视频分类 国内精品| 九九色逼| 麻豆av一区二区三区| 日韩精品人妻中文字幕久久久| 东京热天堂网| 国产狂喷潮在线精品| 激情熟女12P| 精品人妻一区二区视频| 国产超碰| 日韩天堂av电影在线观看| 青春草A| 日韩电影免费网站麻豆视频| 加勒比中文av| 强奸乱伦大香蕉| 99久久九九| 岛国小电影| 欧美综合 站| 欲香欲色综合天天伊人| 久久中文字幕一区不卡| 亚洲日韩成人性爱视频| 一区中文字幕二区日韩| 97在线欧| 久久丁香久草综合网| 一区二区三区精品视频| 亚洲码和欧洲精品激情系列| 99热这里只有精品1| 中文?日韩?免费?精品| 黑人嘿嘿嘿超爽免费视频| 婷婷五月天小说| 欧美色图成人网一区二区| 国产精品日日摸天天碰| 日韩三A大片在线观看| 亚洲精品视频在线播放| 美腿丝袜偷拍亚洲欧美| 久久超碰com| 乳欲人妻办公室奶水| 日本高清电影欧美色图| 夜夜免费视频| 思思视频免费看网站| 一区二区三区视频| 97爱b| 九九九久久久| 亚洲综合色婷婷| 久操在97| 性色AV蜜色av色欲av| 自偷自拍的亚洲视频| 国产白领连续中出在线播放| 国产一区二区二区按摩精品啪视频| 免费强奸av| 国产精品欧美激在线| 亚洲 欧美 色图| 91人妻尻屄视频| 色天使大香蕉| 伊人操你| 久久99国产综合精品女同| 97 国产精品| 中国大陆国产高清AⅤ毛片| 久久色一区| 久久 精品| 亚洲操操| 蜜臀网址在线| 国产高潮AA片免费看| 欧洲亚洲综合| 精品人妻一区二区视频| 10000部十八禁看电影| 91美女在线观看| 成人情色一区二区| 国产视频第二页| 乱色视频中文字幕| 天天影视综合色| 性爱1区| 日本在线15p| 国产超碰| 色约约一区=区三区| 91GD.COM| 91日韩国产欧美亚洲另类精盘州至城都| 免费综合亚洲中文| 91综合网在线| 久久久不能久久久久| av网站在线看| 91撸色网 玖玖网 欧美| 涩涩涩综合| 91久久久久久久| 亚洲日韩成人性爱视频| 亚洲欧美骚| 亚洲精品久| 高清国产无码av| 97超碰资源网| 国产又大又硬又长又粗| 一本色道久久综合精品婷婷| 亚洲天堂,男人| 日韩熟女三十乱伦| 99re这里| 麻豆这里只有精品| 97色网| 久久久久七视频| 国产成人亚洲精品无码古代早漏男| 97超碰免费生活| 91free福利| 97超级久久| 99爱久久视频频| 日韩熟女乱伦中出| 国产精品69久久久久久久| 日韩熟妇二区| 中文精品一区二去| 久久久涩| 欧美亚洲20p| 亚洲色 国产 欧美 日韩| 欧美性色欧美| 成人热久久精品| 欧亚在线视频| а√天堂资源官网在线资源| 97资源站久久| 97视频在线观看播放与子乱对白在线……| 伊人精品久久网站| 亚洲欧洲综合| 天堂资源站| 麻花传媒免费网站在线观看| 亚洲精品91| 欧美亚洲日韩16色| 亚洲.欧美.丝袜.中文.综合| 亚洲伊人a线观看视频| 91天美免费| 99久久综合| 操碰91| 欧美日韩免费性爱| 超碰地址久久| 亚洲综合另类色图| 中文字幕少妇色| 在线观看精品国产免费| 精品久| 蜜臀久久99'精品久久久| 亚洲宅男天堂| 抽插无码高清一区| 五码视频在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 极品尤物女神在线观看| 天天激清| 97中文字幕一区| 日韩三级在线观看mp4| 极品极品色影院| 97超碰伊人| 婷婷15月天青娱乐| 国产精品91一样| 99操逼| 在线免费观看日韩一区| 一级做a爰片性色毛片久久| KK色在线影院| 91精品免费| 亚洲综合在线高清| 天天影视综合网欧美精品| 九九探花视频在线观看| 中文字幕人妻资源在线| 五月丁香激情四射| 欧美三四五区| 色天天野狼综合社区| 亚洲欧美一区二区不卡视频播放| 99r九九| 丁香六月婷婷| 玖玖在线视频| 日韩欧美亚洲一区二区三区影院| 性爱免费视频成人| 亚洲密乳AV| 男女日B国产| 欧美天天综合| 三四中文字幕| se..亚洲欧美| 久久久久久久9999| 中文字幕一区二区无码成人| 91视频综合在线| 久久一本大香蕉 | 亚洲精品欧美专业| 国产欧美日韩在线不卡第一页| 可以免费观看的日韩av毛片| 三级精品三级在线观看| 日本1区2区不卡视频| 欧美日本成人一区二区| 色色毛片| 亚洲电影中字一区二区| wwwxxx日本爽| 丁香六月激情| 国产高清MV操逼视频| 隔壁邻居波多野结衣中文字幕| 97在线精品观看视频| 人人干人人操人人爱| 一级岛国大片| 久久久亚洲Av| 一级片视频啪啪| 人妻无一区二区三区| 立川理惠被中出无码| 另类TS人妖一区二区三区 | 日本不卡一二区| 成人青青草原伊人| 99re在线| 精品国产一区探花在线观看| 先锋激情∨在线视频播放| 欧美不卡在线一区二区| jizzjizz欧美| 操逼网站地址| 97视频观看| 久久视网78| 91亚洲狠狠色| 97精品在线视频| 欧亚无码视频| 久久亚洲AV无码专区首页| 色欲Av人妻精品一区二| 日韩性爱视频在线免费观看| 国产精品自拍欧美在线| av大香蕉| 久插综合| 色97综合中文字幕| 欧美色亚洲| 成人性爱AV在线免费观看| 影音先锋中文字幕日本好一区二区| 黄色高清无码无码破解免费暗网 | 欧美亚洲一级在线观看| 成人免费福利在线观看| 人妻久久久久久| 亚洲宗合电影| 91操熟妇| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 亚洲男人天堂2012| 秋霞男人网| 久久精品噜噜噜成人看免欧美大片| 亚洲色交| 粉嫩不卡一区二区性爱| 嗯啊不要在线观看嗯啊| 蜜臀亚洲综合一二三四区| 综合网少妇| 成人a级高清视频在线观看| 国产成人自拍视频在线| 99re8免费高清在线| 92大香蕉| 白天啪啪晚上啪啪视频| 激情开心五月天| 亚洲一区二区 麻豆传媒| 久久久久熟女| 欧美系列在线一区二区| 嗯啊啊啊轻点视频| 亚洲综合在线91| 久久伊人亚洲AV无码网站| www.99色| 啊啊啊啊啊啊啊在线| 国产捆绑一区| 色婷婷狠狠18禁| 国产精品丝袜久久亚洲不卡| 亚洲天堂男人天堂| 久久久婷婷婷| 91精品久久久久久77777| 亚洲精品久久久久毛片A片拉屎| 高清无码 国产精品| 欧美色图亚洲特色| 久久久不卡| 最新日韩黄片| 国产一区二区三区,在线观看观看 五月开心久久AV官网 | 亚洲激情在线| 国产AV线| 成人无遮挡毛片免费看| 91女在线观看| 99热这里都是精品| 色999;丁香五月| 国产精品国产| 51一区二区三区| 97 视频在线| 亚洲 无码 偷拍| 狠狠欧美| 日韩欧美加勒比| 九九性视频| 91无码人妻精品一区二区三区蜜桃 | 夜夜高潮夜夜爽国产伦精品| 综合激情二| 欧美黑人与女人91~| 夜夜爽夜夜操| 花野真衣| 久九色| 亚洲情色五月天| 欧洲精品一级二级精品综合视频综合| 色色色热| 欧美亚洲特P| 丁香五月成人| 久久超碰com| 欧美乱色| 九九九九精品| 大香蕉色网| 国产精品久久妻无码网站| 国产有码一区| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 人妻少妇无码| 成人av动漫在线观看| 看看日B真人视频| 黄片无码在线制服| 啊啊啊啊啊啊啊啊啊啊在线观看| 精品日韩人妻精品一二三区| 91伊人影视综合| 九月激情婷婷| 色天堂在线观看| 久操不卡视频| 日1区2区3区2020| 黑操B| 国产精品高潮久久久无码| 操操操操网黑人| 国产一区在线观看无码AV| 粉嫩av一区二区三区四季| 三级三级三级a级全黄三| 一区二区无码视频| 六六久久日韩不卡| 热99这里有精品综合久久 | 久悠悠av| 另类TS人妖一区二区三区| 超碰97欧美日韩| 中文字幕亚洲在线一区| 夜夜骑夜夜操| 欧美日本天堂| 国产热RE99久久6国产精品首| 欧美综合色,www| 亚洲限制级在线| 色官网色综合| 不卡日本一区二区| 内射黑人| 91一起操| 尤物av网站免费在线播放| 激情四射五月天| 日韩精品一区二区三区色欲| 欧美日韩在线视频网站| 欧美性天天影院| 亚洲 图片 综合91| 太久视频| 日日摸日日碰夜夜爽视频| 超碰天天操你比| 色999亚洲人成色| 老司机天天操| 欧洲亚洲人妻无码久久三区四区| 嗯~啊~快点 死我视频| 啪啪AV导航| 天天综合网日韩| 欧美 亚洲 综合 制服 另类| 99久久com免费视频′| 日韩综合无码色欲vv| 2020中文字幕在线观看| 蜜桃丰满熟妇av无码区不卡| 爱爱60秒免费视频| 色青青久久影视| 婷婷伊人五月| 中文字幕一区二区三区人妻不卡| 97超碰无码网| 亚洲熟妇自偷自拍另欧美| 日本熟女免费視颖| 九九综合九九综合| 国内外毛片在线观看| 久久久18禁| 国内毛片国产专区二| 无码人妻一区二区三区色欲aⅴ| 久久在肏| 亚洲精品黑丝| 亚州 综合 色图| 粉嫩国产精品久久粉嫩| 自拍偷拍2025在线观看| 日本熟女不卡视频| 日韩欧美日韩| 一区二区三区一亚洲中文字幕、综合区灬 | 婷婷中文字幕| 国产 热久久久久国产精品| 国产福利电影| 青青草毛片| 熟妇人妻精品一区二区| 91激情网| 操操操操网黑人| 91黑丝少妇| 色香阁在线| 国产欧美伊人| 五月色综合| 久久综合激情| 国语av最新自产拍在线观看| 在线观看成人性爱免费小视频| 91激情| 日本韩高清无砖码22o| 日本中文字幕熟妇| 午夜综合在线| 亚洲色图第一页| 人妻爽爽啪视频| 国产 大胆 对白| 亚洲射综合网| 天天天天天天天天综合| 精品国产乱码久久久久久影片| 七久久久| 婷婷三区| 超碰国产情侣自拍网| 日韩在线AB| 人人妻人人操人人乐| 国产四虎在线| 久久五月份| 四虎 精品 WWW| 中文字幕一区二区三区蜜臀| 泰国AV在线观看| 久久伊人网视频一区二区三区| 91久久国产综合久久| 成人无码专区精品视频| 97超碰美国| 少妇69中文| 青青青青草av在线观看| 在线黄色污污网站| 久久久精品一区二区| 啊啊啊好疼| 亚洲无码一区成人免费午夜| 暴力av在线| 中文视频在线观看| 欧美探花网| 蜜乳av一区二区| 国产综合永久精品日韩鬼片| 91精品久久久久久综合五月天| 在线看免费无码AV天堂的| 99只有精品| 91人人爽人人爽| 97频视在线| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 中文字幕一二区二三区人妻专区| 黄色大片免费在线| 26uuu国产免费观看| 97天天摸天天碰| 中文字幕在线观看第二页| 97 九色| 日本精品一区二区三| 男人天堂东京热| 亚州熟女乱伦| 日韩精品视频在线观看一卡二卡| 中文字幕 码 自拍 视频 区| 伊人影院在线理论播放| 日韩人妻丝袜美腿中文| 小电影欧美91| 性暴力欧美猛交在线直播| 色牛牛AV| 欧美嫩性色| www.男人天堂| 超碰色97| 亚州操逼图| 96AV精品| 老司机久久| 午夜精品久久久久久久久久久久久| 日本阿v天堂在线观看| 熟女乱伦A| 翔田千里av一区二区三区| 欧美香蕉视xxx| 啊啊啊好大好深| 性无码专区2020| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 成·人免费午夜在线观看| 免费强奸av| 99热亚洲天堂| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 超碰久久综合| 国产午夜精品在线观看| 人人操人人操草草| 极品五月天噜噜| 国产人妻精品一区二区三区秋霞| 91美女视频在线观看| 国产精品无套内谢| 国产亚卅97| 亚州综合色| 久久久久亚洲Aⅴ无码| 久久久久久91香蕉国产| 少妇精品久久久八区九区| 天天上日日上日韩精品| 九月丁香婷婷| 久草综合视频| 强被迫伦姧在线观看无码网站| 色五月婷婷在线| 亚洲天堂日本| ji熟女.com| 亚洲天堂性爱| 色妇综合网| www超碰| 人妻素股| 中文字幕一区二区韩| www.四虎在线| 亚洲国产精品成人久久蜜臀| 久久九九网| 亚洲天堂电影网| 美国一区二区三区视频| 大香蕉在线视频重口味毛片在线| 97久久久久| 国产一级片| 自拍啪啪视频| 丁香五月激情综合国产| 97久久国产亚洲精品超碰热| 超碰免费人妻人人| 精品视频专区| 一级性爱视频免费观看| 91N欧美| 97久久久| 91丝袜美女国产| 91丝袜美女视频| 91超碰人人| 五十路三区在线| 91久久精品国产| 欧美精品三级黄片| 东京热激情视频一二三区 | 中文字幕在在线观看网站| 91天堂网| 大奶啊啊好爽| 中国特猛少妇色xxx| 超碰79人人乐| 国产资源中文字幕在线| 久草久热| 成人无码在线视频网站| 新97国产超碰| 91精品女厕偷拍视频| 91国产在线精品| 91人精品妻入口| 欧美页片| 成人麻豆av电影网站| 99福利社| 五月丁香| 热99这里有精品综合久久| 97大色网| 日韩乱中文| 夜夜免费视频| 久久婷婷五月天| 人人爱人人乐人人操| 中文字日本乱码| 国产AV无码AV| 国产一区二区在线看| 韩国久久97| 91在线超高颜值国产| 九九九草| 91亚洲黑人| 91人妻精华帖| 91处女在线视频| 美女刺激久久国产欧美| 国产精品久久妻无码网站| 白丝少妇一区二区| 丰满的三级少妇欧美久久久| 日本不卡一区| 日日A∨| 狠狠干狠狠色| 中文字幕乱码在线观看| 蜜桃视频一区二区三区在线观看| 国产午夜无码片在线观看影视| 成人一道本免费视频| 安微少妇操BBB| 无码欧美有限公司| 精品高清一区二区三区三州| 九九九九九九综合| 97人人爱人人做人人乐| 日韩亚洲中文字幕在线| 啪啪啪亚欧美视频| 精品久久大胆人体| 99欧美| 国产AV激情无码久久无码 | 国产成人精品一区| 看看小穴| 亚洲精品精品一区二区| 日韩一二三区| 色色青青久久| 啊啊啊啊啊啊好湿好爽视频| 91三级理论片播放器| 一区二区乱码福利| 九九九久| 亚洲男人天堂网久久| 日本女人操逼| 一级黄色视频网| 久久伊人影院| 呻吟 欧美 日本 中出| 综合久欧洲| 婷婷综合久久| 一区二区三区四区免费视频| 香港澳门日本三级网站| 丝袜视频网国产90| 大肉棒导航| 久九干| 狼人久草| 能直接看AV的网站| 日韩性爱人人爱人人操| 91色狼| 久久久久99精品成人片蜜臀| 天堂综合| 久久综合精品一区二区三区| 91xingse| 六六久久日韩不卡| 日本一区二区不卡精品| 人人操人人干网页| se吧提供91精品国产91久久久久久| 亚洲久久天堂| 本道在线| 97久久国产亚洲精品超碰热| 26uuu国产| 再深点灬舒服灬太大了好硬好爽| 99精品欧美一区二区三区桃色| 日本淫乱女一区二区三区视频| 亚洲色欧| 久久精品无码熟妇一区二区三区视频导航| 98精品国产乱码久久久久久| 亚洲熟妇图片| 五月天春色激情网| 99热色这里只有精品| 亚洲欧美中文日韩视频中国语| 熟女色综合久久| 色呦呦呦在线观看视频| 91在线超高颜值国产| 日韩性爱视频在线免费观看| 美国黄片aaa| w w w.久久精品| 在线αⅴ| 欧美精品23| 91福利网在线观看| 亚洲欧洲av影音| 中文字幕日韩专区精品系列| 69一区二区三区| 天天射夜夜骑| 啊啊啊好多水| 精品人妻一区二区三区四区石在线| 伊人骚琪琪亚洲天堂网站| 天天网综合| 女沟厕偷窥piss小便| 免费国产视频| 久9re热视频这里只有精品| 综合久久久久久久久91| 欧美在线啊啊| 国产精品高潮久久久无码| 亚洲最新Av| 久久黄色视频一区二区三区| 神马久久久久久伦理片| 亚洲乱码国产乱码精网站| 亚洲一区二区三区在线激情| 丁香五月激情网| 亚洲激情网一二三四区| 91精品黄在线观看| 日韩啪啪啪啪啪| 丰满翘臀美女影院视频| 欧美激情片一区二区| 亚洲色香| 精品人妻一区二区蜜桃视频| 日韩欧美传媒一区国产| 蜜臀99久久| 欧美日韩性爱操大逼| 九九热在线精品视频| 天天做天天爱夜夜爽毛片试看| 丰满岳乱妇一区二区三区| 亚洲色吧网| 91天天爽| 美國A片| 99操| 亚洲伊人久久综合97| 狠狠综合网| 九九九久| 操逼视频免费日韩无码| 国产污视频麻豆传媒一区二区| 天天综合亚洲综合| 婷婷五月天影院| 久啪| 亚洲天堂五月天国产| 91女在线观看| 9999久久久| 91人妻PORNY九色大屁股| 天天天操天天天爱| 黑人操一区二区|