精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Android攔截AMS請求實戰(zhàn)

移動開發(fā)
下面從各個 Android 版本看一下系統(tǒng)這個過程的實現(xiàn)方法以及我們是怎么攔截的,主要看一下 Android P 的源碼,其它版本的雖然過程不一樣,但是 Hook 的方式是類似的。

概述

接著上次后臺啟動 Activity 的需求,依照 實戰(zhàn)|Android后臺啟動Activity實踐之路 中的一些方法處理后,雖然在 Android Q 版本上還是有一些問題,但后臺啟動的能力算是基本完成了,后來我又解開了小米 ROM 的源碼,找到了他們后臺啟動這一項權(quán)限的實現(xiàn)方式以及怎么繞開這項權(quán)限的方法,發(fā)現(xiàn)結(jié)果意外的簡單..(這部分以后有機會單獨寫一篇文章)。

[[377520]]

這篇文章發(fā)生在后臺啟動的調(diào)研之后,如果我們要后臺啟動的 Activity 頁面在第三方 SDK 里,且啟動該頁面的動作(startActivity)也發(fā)生在第三方 SDK 中,那么它們直接 startActivity 的方式是不具備后臺啟動的能力的,因為一些原因我們不能要求 SDK 方修改啟動 Activity 的方法,因此需要找個方法能夠在不修改第三方 SDK 調(diào)用 startActivity 代碼的情況下,讓其具備后臺啟動的能力。第一個反應(yīng)就是攔截 startActivity 的請求,參考 Android之system_server進程 和 Android-Activity啟動流程,我們知道 AMS 是 system_server 進程中的一個線程,它負責(zé)啟動 Activity 的具體工作,在它的工作完成之后,會通過 Binder 調(diào)用回調(diào) APP 進程中 Activity 實例的生命周期方法。當(dāng) APP 進程調(diào)用 startActivity 時,會由 Instrumentation 獲取到 AMS 的 Binder 代理,然后通過它來跨進程調(diào)用 AMS 的相關(guān)方法,我們能做 Hook 攔截的地方就是這個 Binder 代理對象!

下面從各個 Android 版本看一下系統(tǒng)這個過程的實現(xiàn)方法以及我們是怎么攔截的,主要看一下 Android P 的源碼,其它版本的雖然過程不一樣,但是 Hook 的方式是類似的。

Android P

Android 8 到 Android 9 版本的 AOSP 獲取 AMS 代理的方式是一樣的,APP 進程在調(diào)用 context.startActivity 后,會來到 Instrumentation 中的相關(guān)方法里調(diào)用如下代碼:

  1. int result = ActivityManager.getService().startActivity(whoThread, who.getBasePackageName(), intent, ...); 

這里通過 Binder 跨進程調(diào)用到 AMS 中的相關(guān)方法,看一下 ActivityManager.getService() 的實現(xiàn):

 

  1. /** @hide */ 
  2. public static IActivityManager getService() { 
  3.     return IActivityManagerSingleton.get(); 
  4.  
  5. private static final Singleton<IActivityManager> IActivityManagerSingleton = new Singleton<IActivityManager>() { 
  6.      
  7.  
  8.  
  9.     protected IActivityManager create() { 
  10.         // 1... 
  11.     } 
  12. }; 

可以看到 IActivityManagerSingleton 是 Singleton 類型的實例,很顯然這個 Singleton 是一個懶加載的單例模板類:

  1. public abstract class Singleton<T> { 
  2.     private T mInstance; 
  3.  
  4.     protected abstract T create(); 
  5.  
  6.     public final T get() { 
  7.         synchronized (this) { 
  8.             if (mInstance == null) { 
  9.                 mInstance = create(); 
  10.             } 
  11.             return mInstance; 
  12.         } 
  13.     } 

于是可以知道 IActivityManagerSingleton.get() 返回的便是 create 方法中的實例,給出上面 1 處省略的 create 方法代碼:

  1. final IBinder b = ServiceManager.getService(Context.ACTIVITY_SERVICE); 
  2. final IActivityManager am = IActivityManager.Stub.asInterface(b); 
  3. return am; 

熟悉 Binder 的同學(xué)一眼就能看出這里的 am 是一個 Binder 代理對象,存在 ServiceManager.getService 方法就肯定存在 ServiceManager.addService 方法,一個是從 ServiceManager 中查詢 Binder 服務(wù),一個是往 ServiceManager 中注冊服務(wù),注冊的時機在系統(tǒng)啟動 system_server 進程的時候,參考 AMS啟動流程,這里就不深入描述了。

所以 ActivityManager.getService() 方法其實就是返回了 AMS 的一個 Binder 代理對象,用來跨進程調(diào)用 AMS 相關(guān)方法,因此可以通過 JDK 動態(tài)代理的方式,通過 Proxy.newProxyInstance 方法創(chuàng)建 am 的代理 Proxy 對象,并通過反射的方式將 ActivityManager.getService() 方法返回的 am 對象替換成我們的 Proxy 對象,那么在 App 進程調(diào)用 ActivityManager.getService().XXX 方法時都會被我們的 Proxy 攔截到,進而做一些處理。JDK 動態(tài)代理也是 Java 常用的設(shè)計模式之一,不太熟悉的同學(xué)可以參考 Jdk動態(tài)代理 的使用。

這個過程可以分成三個步驟:

  1. 反射獲取 am 對象,由于 ActivityManager.getService() 是一個隱藏方法,因此可以通過反射調(diào)用它拿到原 am 對象;
  2. 創(chuàng)建代理對象Proxy;
  3. 通過反射用 Proxy 替換 am 對象;

我們看到 am 對象其實就是 Singleton(其實例是IActivityManagerSingleton) 中的 mInstance 屬性,因此第三步只需通過反射將 mInstance 屬性設(shè)置為我們的 Proxy 對象即可,下面的 AmsHooker 是一個抽象類,在不同的 Android 平臺上有不同的實現(xiàn),主要用來獲取不同 Android 平臺的 am 對象及通過反射替換 am 對象:

  1. abstract class AmsHooker { 
  2.     // 通過反射,將am替換成proxy 
  3.     fun hookAms(proxy: Any?) { 
  4.         try { 
  5.             val hookObj = getHookObj() 
  6.             val hookField = getHookField() 
  7.             if (hookObj != null && hookField != null && proxy != null) { 
  8.                 hookField.set(hookObj, proxy) 
  9.             } 
  10.         } catch (e: Exception) { 
  11.             e.printStackTrace() 
  12.         } 
  13.     } 
  14.  
  15.     // 即IActivityManagerSingleton實例 
  16.     protected abstract fun getHookObj(): Any
  17.  
  18.     // 即mInstance 
  19.     protected abstract fun getHookField(): Field? 
  20.  
  21.     // 即am 
  22.     abstract fun getTarget(): Any
  23.  
  24.     // 接口,用來創(chuàng)建Proxy 
  25.     abstract fun getInterfaces(): Array<Class<*>> 

在 Android P 平臺上的實現(xiàn)如下,具體看注釋:

  1. class AmsPHooker : AmsHooker() { 
  2.     override fun getHookObj(): Any? { 
  3.         val amClass = ReflectUtils.getClass("android.app.ActivityManager"
  4.         // 拿到 IActivityManagerSingleton 屬性 
  5.         return ReflectUtils.readStaticField(amClass, "IActivityManagerSingleton"
  6.     } 
  7.  
  8.     override fun getHookField(): Field? { 
  9.         // 獲取 mInstance Field 
  10.         return ReflectUtils.getField(ReflectUtils.getClass("android.util.Singleton"), "mInstance"
  11.     } 
  12.  
  13.     override fun getTarget(): Any? { 
  14.         // ActivityManager.getService()返回 am 
  15.         return ReflectUtils.getClass("android.app.ActivityManager").getDeclaredMethod("getService").invoke(null
  16.     } 
  17.  
  18.     // 獲取interfaces,用來創(chuàng)建動態(tài)代理 
  19.     override fun getInterfaces(): Array<Class<*>> { 
  20.         return arrayOf(ReflectUtils.getClass("android.app.IActivityManager")) 
  21.     } 

接下來創(chuàng)建代理類(代碼有刪減):

 

  1. public class AMSProxy implements InvocationHandler { 
  2.     private AmsHooker hooker; // 根據(jù)不同 Android 平臺返回不同實現(xiàn) 
  3.     private Object origAm; // 原有 am 對象 
  4.  
  5.     private boolean ensureInit() { 
  6.         // ... 
  7.         hooker = getHooker(); 
  8.         origAm = hooker.getTarget(); 
  9.     } 
  10.  
  11.     private AmsHooker getHooker() { 
  12.         if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) { 
  13.             return new AmsQHooker(); 
  14.         } else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) { 
  15.             return new AmsPHooker(); 
  16.         } else { 
  17.             return new AmsNHooker(); 
  18.         } 
  19.     } 
  20.  
  21.      
  22.  
  23.  
  24.     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
  25.         // ... 
  26.     } 
  27.  
  28.     // 創(chuàng)建代理 
  29.     Object proxy = Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), 
  30.                 hooker.getInterfaces(), this); 
  31.     // 替換系統(tǒng)am對象 
  32.     hooker.hookAms(proxy); 

上面以 AMSProxy 實例為參數(shù)創(chuàng)建了一個代理對象 Proxy,并用這個 Proxy 對象通過 hookAms 方法替換掉了 am 對象,這樣在本進程通過 ActivityManager.getService() 來調(diào)用相關(guān)方法時,會調(diào)用到上述的 invoke 方法,在這可以做攔截:

  1. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
  2.     try { 
  3.         if (callback.canIntercept(method, args)) { 
  4.             if (callback.autoRemove()) { 
  5.                 // 將am對象還原 
  6.                 // ... 
  7.             } 
  8.             // 攔截am的請求,做自己的業(yè)務(wù)處理 
  9.             return callback.intercept(origAm, method, args); 
  10.         } 
  11.         return method.invoke(origAm, args); 
  12.     } catch (Exception e) { 
  13.         e.printStackTrace(); 
  14.     } 
  15.     return null

當(dāng)本進程中有代碼嘗試通過 am 來調(diào)用相關(guān)方法(比如說startActivity等)時,都會被 invoke 方法所攔截,然后通過我們設(shè)置的攔截條件(canIntercept)去選擇是否攔截。建議每次完成了攔截的業(yè)務(wù)需求后,就把原 am 對象通過 hookAms 方法還原,防止的本次進程中持續(xù)攔截系統(tǒng)請求。這里一直強調(diào)是本次進程,顯而易見,通過反射去替換 am 對象的方式,只會針對本進程起作用。

Android Q

在 Android Q 上,上述 Instrumentation 中的調(diào)用變成如下:

  1. int result = ActivityTaskManager.getService().startActivity(whoThread, who.getBasePackageName(), intent, ...); 

這變成了 ActivityTaskManager.getService():

 

  1. /** @hide */ 
  2. public static IActivityTaskManager getService() { 
  3.     return IActivityTaskManagerSingleton.get(); 
  4.  
  5. private static final Singleton<IActivityTaskManager> IActivityTaskManagerSingleton = new Singleton<IActivityTaskManager>() { 
  6.      
  7.  
  8.  
  9.     protected IActivityTaskManager create() { 
  10.         final IBinder b = ServiceManager.getService(Context.ACTIVITY_TASK_SERVICE); 
  11.         return IActivityTaskManager.Stub.asInterface(b); 
  12.     } 
  13. }; 

可以看到在 Android Q 上從 ActivityManager 變成了 ActivityTaskManager 系列的類,于是我們的 AmsQHooker 實現(xiàn)如下:

  1. class AmsQHooker : AmsHooker() { 
  2.     override fun getHookObj(): Any? { 
  3.         val amClass = ReflectUtils.getClass("android.app.ActivityTaskManager"
  4.         // 拿到 IActivityTaskManagerSingleton 屬性 
  5.         return ReflectUtils.readStaticField(amClass, "IActivityTaskManagerSingleton"
  6.     } 
  7.  
  8.     override fun getHookField(): Field? { 
  9.         return ReflectUtils.getField(ReflectUtils.getClass("android.util.Singleton"), "mInstance"
  10.     } 
  11.  
  12.     override fun getTarget(): Any? { 
  13.         // Reflective access to getService is forbidden when targeting API 29 and above 
  14.         // val getServiceMethod = amClass.getDeclaredMethod("getService"
  15.         return ReflectUtils.getClass("android.util.Singleton").getDeclaredMethod("get").invoke(getHookObj()) 
  16.     } 
  17.  
  18.     override fun getInterfaces(): Array<Class<*>> { 
  19.         return arrayOf(ReflectUtils.getClass("android.app.IActivityTaskManager")) 
  20.     } 

其它的步驟跟 Android P 是一樣的。

Android N

在 Android 7.1 及以下,Instrumentation 的調(diào)用又不一樣:

  1. int result = ActivityManagerNative.getDefault().startActivity(whoThread, who.getBasePackageName(), intent, ...); 

這變成了 ActivityManagerNative.getDefault():

  1. static public IActivityManager getDefault() { 
  2.     return gDefault.get(); 
  3.  
  4. private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() { 
  5.     protected IActivityManager create() { 
  6.         IBinder b = ServiceManager.getService("activity"); 
  7.         IActivityManager am = asInterface(b); 
  8.         return am; 
  9.     } 
  10. }; 

可以看到雖然類名和方法有所變化,但還是借助了 Singleton 類,所以只需要繼承 AmsHooker 重寫相關(guān)方法即可:

  1. class AmsNHooker : AmsHooker() { 
  2.     override fun getHookObj(): Any? { 
  3.         val amNativeClass = ReflectUtils.getClass("android.app.ActivityManagerNative"
  4.         // 獲取gDefault實例 
  5.         return ReflectUtils.readStaticField(amNativeClass, "gDefault"
  6.     } 
  7.  
  8.     override fun getHookField(): Field? { 
  9.         return ReflectUtils.getField(ReflectUtils.getClass("android.util.Singleton"), "mInstance"
  10.     } 
  11.  
  12.     override fun getTarget(): Any? { 
  13.         return getHookField()?.get(getHookObj()) 
  14.     } 
  15.  
  16.     override fun getInterfaces(): Array<Class<*>> { 
  17.         return arrayOf(ReflectUtils.getClass("android.app.IActivityManager")) 
  18.     } 

其它的也是重用 Android P 上的邏輯。

總結(jié)

通過上面的方式,可以實現(xiàn) 在本進程內(nèi)攔截通過 AMS 的 Binder 代理調(diào)用的相關(guān)方法,可以用來實現(xiàn)一些非常規(guī)的功能,雖然最近做的需求都比較非常規(guī)(liumang),不過拋開需求,對于開發(fā)而言去調(diào)研這些技術(shù),還是挺有意思的..哈~

寫博客是一件有意思有收獲也有難度的事情,需要爭取把文章的脈絡(luò)和邏輯梳理清楚,怎么寫才能把文章寫得更加清晰易懂,又有好久沒更新了,最近太忙了都沒有時間做這些事情,想到自己寫的文章(可)能被點贊,瞬間又有了動力,于是忙里偷魚寫了一篇,內(nèi)容沒啥深度,就當(dāng)平時的開發(fā)筆記吧。

責(zé)任編輯:未麗燕 來源: 蒼耳的微博
相關(guān)推薦

2021-10-28 09:36:12

高并發(fā)數(shù)據(jù)實踐

2024-08-05 09:29:00

前端接口請求

2021-10-29 16:36:53

AMSAndroidActivityMan

2021-01-12 08:20:51

AndroidActivity系統(tǒng)

2019-03-01 09:55:28

HTTPMock架構(gòu)

2012-07-20 11:13:07

云計算

2021-03-27 22:21:48

HTTPPython數(shù)據(jù)

2025-04-18 10:26:29

后端接口通用封裝

2024-05-20 08:21:36

Activity內(nèi)部類接口

2012-02-03 09:14:44

谷歌惡意應(yīng)用Android

2021-03-26 06:01:45

日志MongoDB存儲

2012-11-08 20:39:18

2024-09-02 08:17:18

2024-05-13 09:32:06

攔截器HTTP中間件

2012-04-26 10:50:37

2012-04-11 09:51:50

2012-02-20 13:44:08

2015-05-15 11:25:53

2020-11-12 09:55:02

OAuth2

2021-02-25 15:14:16

.NET項目攔截器
點贊
收藏

51CTO技術(shù)棧公眾號

美女久久久精品| 亚洲视频一起| 中文字幕中文乱码欧美一区二区| 91精品久久久久久久久久久久久久| 麻豆视频免费在线播放| 国产一区一区| 欧美视频在线免费看| 亚洲精品久久久久久一区二区| 99久久国产免费| 国产模特精品视频久久久久| 日韩在线中文字| 午夜男人的天堂| 欧美视频精品| 狠狠色狠色综合曰曰| 亚洲欧美日韩综合一区| 神马午夜电影一区二区三区在线观看| 日韩av在线发布| 欧美国产在线视频| 亚洲综合第一区| 林ゆな中文字幕一区二区| 欧美日韩精品久久久| 国内精品中文字幕| 午夜在线观看一区| 成人午夜三级| 3atv一区二区三区| 日本一区二区黄色| 黄色影院在线看| 久久蜜桃av一区二区天堂 | 狠狠色狠狠色综合系列| 91av成人在线| 久久久99精品| 国产精品99久久| 亚洲视频日韩精品| 久久久久麻豆v国产精华液好用吗 在线观看国产免费视频 | 牛牛影视久久网| 91精品黄色片免费大全| 日韩福利视频在线| 中文字幕资源网在线观看免费 | 18国产精品| 欧美日韩国产bt| 福利在线一区二区三区| 蜜桃视频m3u8在线观看| 亚洲午夜久久久久久久久电影院| 手机在线视频你懂的| 成人影院免费观看| 久久久久成人黄色影片| 久久精品一区二区三区不卡免费视频| 成人爽a毛片一区二区| 国产精品77777竹菊影视小说| 成人久久久久爱| 在线观看中文字幕av| 日本女人一区二区三区| 国产精品久久久久久久久久新婚 | 美女久久久精品| 国产精品欧美一区二区| 精品无码一区二区三区的天堂| 亚洲在线播放| 91精品国产色综合久久久蜜香臀| 欧美88av| 色94色欧美sute亚洲线路一ni| 成人免费观看cn| 最新黄色网址在线观看| 亚洲欧美精品一区二区三区| 欧美影视资讯| 欧美在线三级电影| 爆乳熟妇一区二区三区霸乳| 欧美色片在线观看| 欧美性淫爽ww久久久久无| 538在线视频观看| 日韩在线激情| 日韩欧美中文字幕公布| 黄色av网址在线播放| 黄色羞羞视频在线观看| 狠狠躁夜夜躁人人爽天天天天97 | 国产精品无码无卡无需播放器| 成人久久综合| 免费99精品国产自在在线| 久久艹精品视频| 在线综合视频| 国产精品视频中文字幕91| 91影院在线播放| 国产mv日韩mv欧美| 欧美极品色图| 国内精品久久久久久野外| 亚洲精品视频在线看| av之家在线观看| 国产精品久久久久久吹潮| 日韩一级高清毛片| 日本丰满少妇裸体自慰| 日韩精品――色哟哟| 羞羞的视频在线观看| 亚洲成精国产精品女| 女性隐私黄www网站视频| 九九热这里有精品| 精品欧美一区二区久久| 欧美熟妇一区二区| 亚洲国产精品成人| 欧美一级高清免费播放| 亚洲综合视频在线播放| 成人性色生活片免费看爆迷你毛片| 精品无人乱码一区二区三区的优势 | 日操夜操天天操| 蜜臀av在线播放一区二区三区| 97国产超碰| 国产精品四虎| 亚洲成人精品在线观看| 国产wwwxx| 国产精品一区二区三区美女| 色播久久人人爽人人爽人人片视av| 精品无码人妻一区二区三区品| 久久一区视频| 国产精品v欧美精品∨日韩| jizz在线免费观看| 亚洲成人久久影院| 午夜av中文字幕| 欧美久久综合网| 91国内在线视频| av av片在线看| 国产女人水真多18毛片18精品视频| 国产精品久久久久9999爆乳| 一级欧美视频| 在线国产精品视频| 国产 欧美 日韩 在线| 国产一区二区精品久久99| 日本不卡一区| 色多多在线观看| 精品国产sm最大网站| 日本裸体美女视频| 动漫av一区二区三区| 狠狠色丁香久久婷婷综合_中| 蜜桃传媒视频麻豆第一区免费观看| 成人黄视频在线观看| 色欧美片视频在线观看| 自拍视频第一页| 自拍欧美日韩| 成人激情视频在线观看| av电影在线网| 欧美午夜视频网站| 无码人妻aⅴ一区二区三区69岛| 日韩视频中文| 国产精品日韩一区二区三区| 永久免费网站在线| 91精品久久久久久久91蜜桃| www.com.av| 精品一区二区三区日韩| 亚洲欧美日韩另类精品一区二区三区 | 老司机午夜性大片| 色777狠狠狠综合伊人| 国产精品电影在线观看| 黄色电影免费在线看| 欧美午夜精品久久久久久久| 三级男人添奶爽爽爽视频 | 亚洲柠檬福利资源导航| 中文字幕亚洲影院| 我不卡神马影院| 国产日韩欧美综合| 看女生喷水的网站在线观看| 91精品在线免费观看| 草视频在线观看| 粉嫩欧美一区二区三区高清影视| 成品人视频ww入口| 老司机在线精品视频| 96精品视频在线| 毛片在线免费| 精品视频在线视频| 性生交大片免费全黄| 国产又黄又大久久| 久久精品xxx| 一呦二呦三呦国产精品| 国产精品久久二区| 精品国产丝袜高跟鞋| 日韩欧美久久一区| 国产一国产二国产三| 91老司机福利 在线| 亚洲 欧美 日韩系列| 天天操夜夜操国产精品| 成人区精品一区二区| 自拍偷拍欧美视频| 中文字幕亚洲综合久久| www.成人精品| 欧美日韩国产在线播放| 怡红院一区二区三区| 韩国理伦片一区二区三区在线播放 | 国产乱子伦三级在线播放| 欧美日韩精品一区二区三区蜜桃 | 992tv免费直播在线观看| 51精品国自产在线| 青青草成人av| 国产精品久久久久久户外露出| 中文字幕乱码在线人视频| 一本色道久久综合一区 | 中国日本在线视频中文字幕| 日韩一区二区中文字幕| 青青草免费观看视频| 亚洲欧洲成人自拍| 熟女人妻在线视频| 老汉av免费一区二区三区| 成年人网站国产| 色综合狠狠操| 九九九九九精品| 粉嫩av国产一区二区三区| 97精品免费视频| 快射av在线播放一区| 亚洲精品在线观看www| 国产www视频| 日本精品一区二区三区高清| 国产在线观看免费视频今夜| 国产精品国产三级国产普通话99 | 九九综合久久| www.久久草| 欧美xxxx性| 久久久久久久久久亚洲| 毛片在线播放a| 亚洲全黄一级网站| 丰满熟妇乱又伦| 欧美日韩国产高清一区二区 | 日本在线影院| 欧美国产日本在线| 嫩草香蕉在线91一二三区| 亚洲精品视频在线播放| 亚洲黄色在线观看视频| 欧美日本韩国一区| 亚洲 国产 日韩 欧美| 亚洲v中文字幕| 免费三片在线播放| 国产精品三级久久久久三级| 91中文字幕永久在线| 国产98色在线|日韩| 成年人三级黄色片| 日本三级亚洲精品| 黄色片视频在线播放| 一本一本久久| 五十路熟女丰满大屁股| 国产精品扒开腿做爽爽爽软件| 麻豆md0077饥渴少妇| www日韩在线| 日韩制服丝袜av| 黑人糟蹋人妻hd中文字幕| 亚洲日本国产| 99色这里只有精品| 亚洲黄色影片| a级免费在线观看| 国产精品theporn| 国产a级黄色大片| 欧美在线观看天堂一区二区三区| 亚洲精品免费在线看| 成人av动漫在线观看| 日韩精品久久一区| 精品72久久久久中文字幕| 美女精品国产| 狠狠操综合网| 亚洲精品一卡二卡三卡四卡| 精品freesex老太交| 日日噜噜噜噜夜夜爽亚洲精品| 一本色道久久综合亚洲精品酒店| 欧美二区三区| 欧美色网址大全| 中日韩在线视频| 欧美三级网页| 国内精品视频一区二区三区| 亚洲中字在线| 蜜臀久久99精品久久久酒店新书 | 国产大片一区二区三区| 国产精一品亚洲二区在线视频| 少妇性l交大片7724com| 成人免费视频免费观看| av网站有哪些| 中文字幕成人网| 爱爱视频免费在线观看| 亚洲第一福利视频在线| 天天操夜夜操视频| 欧美三电影在线| www.xxx国产| 亚洲人成电影网站色www| av影片免费在线观看| 欧美巨猛xxxx猛交黑人97人| 国产在线精彩视频| 国产精品aaa| 亚洲精品一二三**| 免费在线观看一区二区| 99九九热只有国产精品| 久久手机在线视频| 日日摸夜夜添夜夜添精品视频 | 妞干网视频在线观看| 性色一区二区三区| 午夜大片在线观看| 972aa.com艺术欧美| 性爱在线免费视频| 亚洲成人动漫av| 国产女优在线播放| 精品女同一区二区| 国产精品一级伦理| 久久久久久噜噜噜久久久精品| 欧美日韩视频免费观看| 超碰97在线人人| 波多野结衣在线播放一区| 91黄色在线看| 美女性感视频久久| 日本黄色录像片| 成人欧美一区二区三区1314| 日韩字幕在线观看| 欧美一区二区网站| 免费在线超碰| 久久久免费精品视频| 成人国产激情| 蜜桃导航-精品导航| 中文字幕免费精品| 亚洲欧美国产日韩综合| 99亚偷拍自图区亚洲| 国产又黄又爽又无遮挡| 色综合久久精品| 日本高清视频网站| 久久亚洲欧美日韩精品专区| 第四色男人最爱上成人网| 国产精品乱子乱xxxx| 91精品综合| 亚洲高清在线免费观看| 久久伊人中文字幕| 精品无码一区二区三区电影桃花| 欧美日韩电影在线播放| 韩国三级在线观看久| 66m—66摸成人免费视频| 日韩不卡在线视频| 在线丝袜欧美日韩制服| 日本亚洲一区二区| 日韩人妻无码一区二区三区| 午夜激情综合网| 亚洲经典一区二区| 久久99精品国产99久久6尤物| 亚洲男男av| 亚洲一区二区三区乱码 | 国产一区二区丝袜| 精品毛片免费观看| 成人精品小视频| 久久婷婷久久一区二区三区| 国产精品suv一区二区三区| 欧美不卡视频一区| 免费在线国产视频| 91黄在线观看| 亚洲一级电影| 国产精品久久久久久在线观看| 亚洲一二三级电影| 性色av蜜臀av| 欧美激情一区二区三区在线视频观看 | 蜜桃麻豆91| 翔田千里一区二区| 国产精品揄拍100视频| 欧美体内谢she精2性欧美| 青春有你2免费观看完整版在线播放高清| 97精品视频在线播放| 欧美顶级毛片在线播放| 欧美国产激情视频| 久久蜜臀中文字幕| 成年人视频免费| 中文国产成人精品| crdy在线观看欧美| 亚洲国产一二三精品无码| 国产成人在线视频网址| 国产大片aaa| 日韩电影中文字幕在线观看| 国产精品专区免费| 日韩欧美激情一区二区| 久久国产成人午夜av影院| 国精产品一区一区二区三区mba| 日韩欧美电影在线| 国产探花视频在线观看| 精品视频导航| 日本va欧美va瓶| 成人自拍小视频| 亚洲高清久久久久久| 中文字幕在线高清| 亚洲一区二区三区欧美| 韩国av一区二区三区在线观看| 久草视频在线免费看| 日韩精品在线免费| 日本午夜免费一区二区| 国产传媒久久久| 久久你懂得1024| 国产精品永久久久久久久久久| 欧美激情精品久久久久久久变态| 色天天色综合| 日韩精品视频一二三| 亚洲444eee在线观看| 成人影院免费观看| 国产精品初高中精品久久| 久久精品一区二区三区中文字幕| 成人欧美一区二区三区黑人一| 欧美成人video| 国产精品一区二区免费福利视频 | 婷婷社区五月天| 亚洲国产天堂网精品网站| 九七影院97影院理论片久久 | 国模私拍一区二区国模曼安| 亚洲黄色成人久久久| 成人美女视频在线看| 成人黄色激情视频| 欧美精品在线播放| 国产精品亚洲人成在99www| 天堂av.com| 在线看日韩精品电影|