日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用xposed自动获得微信个人收款二维码链接和收款记录

發布時間:2023/12/14 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用xposed自动获得微信个人收款二维码链接和收款记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、說明

? ? ? ??現在的App一般都會帶有支付功能,而現在比較流行的支付一般有支付寶、微信、銀行卡等,一般情況下,應用開發者會直接對接支付寶、微信或者第三方支付公司的Api,以完成支付,但是都需要收取不小的費率,于是,有的第三方支付平臺就想到了鉆空子的方法,利用一些特殊的手段獲得收款二維碼以及收款記錄,這樣就可以繞過支付平臺完成支付過程了,本篇文章的目的就是分析如何完成這樣一個流程,本文的意圖只有一個就是通過分析app學習更多的逆向技術,如果有人利用本文知識和技術進行非法操作進行牟利,帶來的任何法律責任都將由操作者本人承擔,和本文作者無任何關系,最終還是希望大家能夠秉著學習的心態閱讀此文,支付寶的相關文章可以參考:https://blog.csdn.net/xiao_nian/article/details/79881274,這篇文章是獲得支付寶的個人收款二維碼和賬單信息,而我們現在是要獲得微信的個人收款二維碼,和用戶的收款記錄。本篇文章只分析hook 部分的代碼。

二、問題分析

1、微信的二維碼收款

我用的微信版本是6.6.2

獲得個人收錢二維碼的流程如下:

打開微信主界面--》點擊右上角的收付款---》進入到收付款界面--》點擊二維碼收款--》進入二維碼收款頁面--》點擊設置金額--》進入設置金額界面--》設置金額和備注--》點擊確定--》返回二維碼收錢界面并刷新收錢二維碼

二維碼收款界面如下:

設置金額頁面如下:

點擊收款小賬本進入收款小賬本頁面,再點擊收款記錄即可進入收款記錄界面:

?

三、反編譯微信并分析

反編譯應用的方法可以參考:https://blog.csdn.net/xiao_nian/article/details/79391417,這篇文章介紹了如何反編譯微信的apk。

1、hook微信主界面注冊廣播

類似支付寶的過程,我們首先需要在微信主界面創建時注冊廣播并保存其實例,并在其銷毀時銷毀廣播并清空對其實例的引用

// hook 微信主界面的onCreate方法,獲得主界面對象并注冊廣播findAndHookMethod("com.tencent.mm.ui.LauncherUI", classLoader, "onCreate", Bundle.class, new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {XposedLogUtils.log("com.tencent.mm.ui.LauncherUI onCreated" + "\n");weiXinLauncherActivity = (Activity) param.thisObject;// 注冊廣播weiXinBroadcast = new WeiXinBroadcast();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(WeiXinBroadcast.WEIXIN_QR_CODE_URL_STRING_INTENT_FILTER_ACTION);intentFilter.addAction(WeiXinBroadcast.WEIXIN_BILLLIST_INTENT_FILTER_ACTION);weiXinLauncherActivity.registerReceiver(weiXinBroadcast, intentFilter);}});// hook設置金額和備注的onDestroy方法findAndHookMethod("com.tencent.mm.ui.LauncherUI", classLoader, "onDestroy", new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {XposedLogUtils.log("com.tencent.mm.ui.LauncherUI onDestroy" + "\n");weiXinLauncherActivity.unregisterReceiver(weiXinBroadcast);weiXinBroadcast = null;weiXinLauncherActivity = null;}});

?

2、設置金額界面

?

用hierarchy view查看設置金額界面布局,如下:

可以看到設置金額界面對應的Activity為"com.tencent.mm.plugin.collect.ui.CollectCreateQRCodeUI",再次查看設置金額界面的布局,找到確認按鈕,如下:

可以看到"確認"按鈕的id為"ak_",在微信apk的public.xml(解壓apk后的res/values/public.xml文件,記錄資源id)中搜索"ak_",可以搜到如下代碼:

<public type="id" name="ak_" id="0x7f1006ec" />

也就是說id"ak_"對應的值為"0x7f1006ec",將"0x7f1006ec"轉換為10進制,結果為"2131756780",在反編譯代碼中全局搜索"2131756780",可以搜到如下內容:

Searching 16831 files for "2131756780"E:\tools\xpose\classes.jar.src\com\tencent\mm\plugin\facedetect\a.java:61: public static final int cAg = 2131756780;E:\tools\xpose\classes.jar.src\com\tencent\mm\plugin\wxpay\a.java:292: public static final int cAg = 2131756780; E:\tools\xpose\classes.jar.src\com\tencent\mm\R.java:1975: public static final int cAg = 2131756780;3 matches across 3 files

可以"2131756780"這個值在三個地方都有定義,但是名稱都為"cAg",打開CollectCreateQRCodeUI反編譯代碼,搜索"cAg"字段,結果如下:

((Button)findViewById(a.f.cAg)).setOnClickListener(new View.OnClickListener(){public final void onClick(View paramAnonymousView){double d = bh.getDouble(CollectCreateQRCodeUI.a(CollectCreateQRCodeUI.this).getText(), 0.0D);g.Dk();int i = ((Integer)g.Dj().CU().get(w.a.xrD, Integer.valueOf(0))).intValue();x.i("MicroMsg.CollectCreateQRCodeUI", "wallet region: %s", new Object[] { Integer.valueOf(i) });if (!CollectCreateQRCodeUI.a(CollectCreateQRCodeUI.this).XO()) {com.tencent.mm.ui.base.u.makeText(CollectCreateQRCodeUI.this.mController.xIM, a.i.uPA, 0).show();}for (;;){return;if (d < 0.01D) {com.tencent.mm.ui.base.u.makeText(CollectCreateQRCodeUI.this.mController.xIM, a.i.uMS, 0).show();} else if (i == 8) {CollectCreateQRCodeUI.this.r(new m(Math.round(d * 100.0D), CollectCreateQRCodeUI.b(CollectCreateQRCodeUI.this), q.FZ()));} else {CollectCreateQRCodeUI.this.l(new s(d, "1", CollectCreateQRCodeUI.b(CollectCreateQRCodeUI.this)));}}}});

很明顯,這段代碼應該是在布局中找到確認按鈕,并給其設置監聽事件,經分析,發現下面代碼是發起獲得二維碼鏈接的請求:

CollectCreateQRCodeUI.this.l(new s(d, "1", CollectCreateQRCodeUI.b(CollectCreateQRCodeUI.this)));

"s"應該是請求參數,定義如下:

public final class sextends i {public String desc;public String fpP;public String ljf = null;public double ljg;// 構造函數的三個參數類型,第一個為金額,第二個為二維碼類型,我們一直傳入"1"就可以了,第三個為備注信息public s(double paramDouble, String paramString1, String paramString2){HashMap localHashMap = new HashMap();try{StringBuilder localStringBuilder = new java/lang/StringBuilder;localStringBuilder.<init>();localHashMap.put("fee", Math.round(100.0D * paramDouble));localHashMap.put("fee_type", paramString1);localHashMap.put("desc", URLEncoder.encode(paramString2, "UTF-8"));this.ljg = paramDouble;this.fpP = paramString1;this.desc = paramString2;D(localHashMap);return;}catch (UnsupportedEncodingException localUnsupportedEncodingException){for (;;){x.printErrStackTrace("Micromsg.NetSceneTenpayRemittanceQuery", localUnsupportedEncodingException, "", new Object[0]);}}}... }

再來看一下發起請求的"l"方法,定義如下:

public final void l(k paramk){cCe();this.zIY.a(paramk, true, 1);}

現在我們只需要hook住CollectCreateQRCodeUI的onCreate方法,獲得其實例對象保存在靜態變量中,并在onDestory是設置為空,這樣就可以獲得CollectCreateQRCodeUI的實例了,然后在需要獲得二維碼鏈接時,調用其"l"方法發起請求即可,代碼如下:

// hook設置金額和備注的onCreate方法,自動填寫數據并點擊findAndHookMethod("com.tencent.mm.plugin.collect.ui.CollectCreateQRCodeUI", classLoader, "onCreate", Bundle.class, new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {XposedLogUtils.log("com.tencent.mm.plugin.collect.ui.CollectCreateQRCodeUI" + ":onCreated方法");mWeiXinCreateQRCodeActivity = (Activity) param.thisObject;Intent intent = ((Activity) param.thisObject).getIntent();String jinEr = intent.getStringExtra("qr_money");String beiZhu = intent.getStringExtra("beiZhu");// 連續生成二維碼鏈接時,是否需要關閉金額設置界面executeWeiXinGenerateQrCodeMethod(jinEr, beiZhu);}});// hook設置金額和備注的onDestroy方法findAndHookMethod("com.tencent.mm.plugin.collect.ui.CollectCreateQRCodeUI", classLoader, "onDestroy", new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {XposedLogUtils.log("com.tencent.mm.plugin.collect.ui.CollectCreateQRCodeUI onDestroy" + "\n");mWeiXinCreateQRCodeActivity = null;}});/*** 當設置金額界面已經打開的情況下,可以直接執行生成二維碼方法*/public static void executeWeiXinGenerateQrCodeMethod(String amount, String beiZhu) {if (mWeiXinCreateQRCodeActivity != null) {XposedLogUtils.log("executeWeiXinGenerateQrCodeMethod " + amount + " " + beiZhu);if (!TextUtils.isEmpty(amount)) {Object paramObject = null;Class paramObjectClass = findClass("com.tencent.mm.plugin.collect.b.s", mWeiXinClassLoader);try {Constructor paramObjectConstructor = paramObjectClass.getDeclaredConstructor(double.class, String.class, String.class);paramObject = paramObjectConstructor.newInstance(Double.valueOf(amount), "1", beiZhu);callMethod(mWeiXinCreateQRCodeActivity, "l", paramObject);} catch (Exception e) {e.printStackTrace();}}}}/*** 打開設置金額界面** @param qr_money* @param beiZhu*/public static void startWeiXinCreateQRCodeActivity(String qr_money, String beiZhu) {Class weiXinCreateQRCodeActivityClass;Intent launcherIntent;if (weiXinLauncherActivity != null) {XposedLogUtils.log("launcher WeiXinCreateQRCodeActivity");weiXinCreateQRCodeActivityClass = XposedHelpers.findClass("com.tencent.mm.plugin.collect.ui.CollectCreateQRCodeUI", mWeiXinClassLoader);launcherIntent = new Intent(weiXinLauncherActivity, weiXinCreateQRCodeActivityClass);launcherIntent.putExtra("qr_money", qr_money);launcherIntent.putExtra("beiZhu", beiZhu);weiXinLauncherActivity.startActivity(launcherIntent);return;}}

在支付寶的廣播接收類中,定義如下:

public class WeiXinBroadcast extends BroadcastReceiver{public static String WEIXIN_QR_CODE_URL_STRING_INTENT_FILTER_ACTION = "com.hhly.pay.weixin.info.qrCodeUrl";@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().contentEquals(WEIXIN_QR_CODE_URL_STRING_INTENT_FILTER_ACTION)) {String qr_money = intent.getStringExtra("qr_money");String beiZhu = intent.getStringExtra("beiZhu");XposedLogUtils.log("WeiXinBroadcast onReceive " + qr_money + " " + beiZhu + "\n");if (!TextUtils.isEmpty(qr_money)) {if (Main.mWeiXinCreateQRCodeActivity != null) { // 如果已經有設置金額,則直接使用其實例,不需要重復啟動Main.executeWeiXinGenerateQrCodeMethod(qr_money, beiZhu);} else { // 生成二維碼鏈接Main.startWeiXinCreateQRCodeActivity(qr_money, beiZhu);}}}} }

我們hook了設置金額界面的onCreate方法并保存了其實例,這樣就不用每次生成二維碼鏈接都打開設置金額界面了,下面再來看一看當服務端返回二維碼鏈接之后設置金額界面的回調方法,經觀察,回調方法定義如下:

public final boolean d(int paramInt1, int paramInt2, final String paramString, k paramk){boolean bool2 = false;boolean bool1;if ((paramk instanceof s)){bool1 = bool2;if (paramInt1 == 0){bool1 = bool2;if (paramInt2 == 0){paramString = (s)paramk;paramk = new Intent();paramk.putExtra("ftf_pay_url", paramString.ljf); // 獲得二維碼鏈接paramk.putExtra("ftf_fixed_fee", paramString.ljg); // 獲得金額paramk.putExtra("ftf_fixed_fee_type", paramString.fpP); // 獲得類型paramk.putExtra("ftf_fixed_desc", paramString.desc); // 獲得備注setResult(-1, paramk); // 將參數回傳給二維碼收款界面finish(); // 關閉當前界面bool1 = true;}}}...}

分析上面的代碼,該方法會將二維碼鏈接等數據放入intent中并回傳給收款二維碼界面,最后再關閉設置金額界面,我們只需要hook住該方法,并替換其執行邏輯,就可以在獲得二維碼鏈接后不銷毀設置金額界面了。其中,最后一個參數"k paramk"中定義了二維碼鏈接信息,代碼如下:

findAndHookMethod("com.tencent.mm.plugin.collect.ui.CollectCreateQRCodeUI", classLoader, "d", int.class, int.class, String.class,findClass("com.tencent.mm.ae.k", classLoader), new XC_MethodReplacement() {@Overrideprotected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {XposedLogUtils.log("com.tencent.mm.plugin.collect.ui.CollectCreateQRCodeUI" + ":d方法");XposedLogUtils.log(methodHookParam.args[0] + " " + methodHookParam.args[1] + " " + methodHookParam.args[2]);if (methodHookParam.args[3] != null) {WeiXinQrCode weiXinQrCode = new WeiXinQrCode();weiXinQrCode.ftf_pay_url = getStringField(methodHookParam.args[3], "ljf"); // 獲得二維碼鏈接weiXinQrCode.ftf_fixed_fee = getStringField(methodHookParam.args[3], "ljg"); // 獲得金額weiXinQrCode.ftf_fixed_fee_type = getStringField(methodHookParam.args[3], "fpP"); // 獲得類型weiXinQrCode.ftf_fixed_desc = getStringField(methodHookParam.args[3], "desc"); // 獲得備注XposedLogUtils.log(weiXinQrCode.toString() + "\n");// 發送廣播將二維碼鏈接信息傳給xposed插件Intent broadCastIntent = new Intent();broadCastIntent.putExtra("weiXinQrCode", weiXinQrCode);broadCastIntent.setAction(PluginBroadcast.WEIXIN_QR_CODE_URL_STRING_INTENT_FILTER_ACTION);Activity activity = (Activity) methodHookParam.thisObject;activity.sendBroadcast(broadCastIntent);}return true;}});

其中WeiXinQrCode類是我們自己定義的類,用來保存二維碼信息,定義如下:

public static class WeiXinQrCode implements Parcelable {public String ftf_pay_url;public String ftf_fixed_fee;public String ftf_fixed_fee_type;public String ftf_fixed_desc;public WeiXinQrCode() {}protected WeiXinQrCode(Parcel in) {ftf_pay_url = in.readString();ftf_fixed_fee = in.readString();ftf_fixed_fee_type = in.readString();ftf_fixed_desc = in.readString();}public static final Creator<WeiXinQrCode> CREATOR = new Creator<WeiXinQrCode>() {@Overridepublic WeiXinQrCode createFromParcel(Parcel in) {return new WeiXinQrCode(in);}@Overridepublic WeiXinQrCode[] newArray(int size) {return new WeiXinQrCode[size];}};@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(ftf_pay_url);dest.writeString(ftf_fixed_fee);dest.writeString(ftf_fixed_fee_type);dest.writeString(ftf_fixed_desc);}@Overridepublic String toString() {return "ftf_pay_url:" + ftf_pay_url + "," +"ftf_fixed_fee:" + ftf_fixed_fee + "," +"ftf_fixed_fee_type:" + ftf_fixed_fee_type + "," +"ftf_fixed_desc:" + ftf_fixed_desc + "\n";}}

然后在xposed插件的廣播接收類中接收二維碼鏈接信息,如下:

public class PluginBroadcast extends BroadcastReceiver{public static String WEIXIN_QR_CODE_URL_STRING_INTENT_FILTER_ACTION = "com.tencent.mm.info.qrCodeUrl";@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().contentEquals(WEIXIN_QR_CODE_URL_STRING_INTENT_FILTER_ACTION)) {App.dealWeiXinQrCodeUrlString(intent);}} }public static void dealWeiXinQrCodeUrlString(Intent intent) {Main.WeiXinQrCode weiXinQrCode = intent.getParcelableExtra("weiXinQrCode");Log.i("aaaaa:", weiXinQrCode.toString() + " " + weiXinTotalCount); }

在xposed插件中發送獲得二維碼鏈接廣播,打印信息如下:

05-31 16:58:42.181 12445-12445/? I/aaa:: ftf_pay_url:wxp://f2f1dsW3BhPFHjfKRd2Royq4-jp0yy_JUxxe,ftf_fixed_fee:5.0,ftf_fixed_fee_type:1,ftf_fixed_desc:你好5

可以看到二維碼鏈接已經打印出來了。

三、獲得賬單信息

首先,我們來看一下收款記錄對應的頁面,如下:

用hierarchy view查看其布局,如下:

可以看到收款記錄頁面所在Activity為"com.tencent.mm.plugin.appbrand.ui.AppBrandUI",而具體的收款信息顯示在"InnerWebView"中,也就是說收款記錄是在一個WebView中顯示的,那么想從WebView中獲得收款信息就比較復雜了,一般的,如果頁面顯示在WebView中,應該是通過http請求獲得h5頁面并加載,那么我們可以嘗試一下抓包來獲得收款信息,打開抓包Charles抓包工具,然后再打開收款記錄頁面,可以抓到如下請求:

可以看到成功抓取到了賬單數據,分析請求參數,總結如下:

url:https://payapp.weixin.qq.com/qrappzd/user/incomelist?sid=AAHE8SPddES5nFhpG3Cm-7zVE2XqeHLx3PzD78ZL33nzvA&v=3.4.3請求方式:post請求參數:{"v": "3.4.3", // 請求接口版本"start_time": 0, // 查詢收款數據開始時間"end_time": 1527760717, // 查詢收款結束時間"last_bill_id": null, // 請求這個賬單編號對應賬單之后的數據"page_size": 10, // 每次請求數據條數"sort": "desc", // 排序方式"is_first": true, // 是否是第一個請求"sid": "AAHE8SPddES5nFhpG3Cm-7zVE2XqeHLx3PzD78ZL33nzvA" // 用戶信息id}

用postman模擬請求,發現是可以成功請求到數據的:

上面的請求信息中,最關鍵的部分為"sid",這個應該類似loginToken一樣的信息,用來驗證用戶信息的,也就是說,我們只需要找到獲得"sid"的辦法,就能夠獲得到收款記錄。然后,微信的收款記錄是用微信小程序實現的,我找了一天也沒有找到獲得"sid"的方法,后面有時間可以嘗試反編譯微信小程序的代碼,看能不能找到獲得"sid"的方法。看來這個辦法暫時行不通,那么有沒有其他的辦法獲得收款數據呢?在微信的交易記錄中我們也可以獲得收款信息,如下:

查看其布局,如下:

麻蛋,又是一個WebView頁面,同樣,抓包獲得了如下數據:

總結請求數據:

url:https://wx.tenpay.com/userroll/userrolllist?classify_type=0&count=20&exportkey=A%2F4YTLDXVQMB1IScuR4uDa8%3D&sort_type=1請求方式:getCookie:export_key=A/4YTLDXVQMB1IScuR4uDa8=; userroll_encryption=5Wyzpp5yYABVU2ZLQ9ueNA5LT466SEtjxY5Z1L0bhnnzcWwYEij0Q0T+ZeUfu0T4qFTAELJEZYvclmmtF39a/mW5syVtXHUYstaIYCrEVcOb0yfR6OkVpqb1xUE5p3rCXT3OF8YwcgoIDCS5PepNkg==;

上面得參數中,export_key和userroll_encryption是關鍵參數,有了這兩個參數我們就可以獲得賬單數據,用postman模擬請求如下:

我在反編譯代碼中找了很久,同樣沒有找到獲得export_key和userroll_encryption的辦法,到現在為止,問題好像卡住了,然而,一次偶然的操作,我打開了微信交易記錄的原生頁面,也就是說,微信交易記錄的頁面是可以配置使用原生的頁面還是使用h5頁面的,原生的交易記錄頁面如下:

查看其布局,如下:

可以看到原生交易記錄頁面對應的類為"com.tencent.mm.plugin.order.ui.MallOrderRecordListUI",首先分析一下其布局結構:

可以看到,其賬單數據其實是在MMLoadMoreListView控件中顯示的,應該是一個可以支持加載更多的ListView控件,這個我們是能夠猜到。查看"MallOrderRecordListUI"類的代碼:

public class MallOrderRecordListUIextends WalletBaseUI {...public MMLoadMoreListView ldB; // 交易記錄頁面對應的ListViewpublic a pcp = null; // listview adapter引用public List<i> pcq = new ArrayList(); // 交易記錄數據public int wn = 0; // 記錄已經加載的數據條數protected String pcr = null; // 服務端返回的已經加載過的賬單數據的條數,會在請求參數中傳入該值...// 初始化布局protected final void initView(){// 這里有一個判斷,只有用對應的方法打開交易記錄頁面才會去加載數據,我們再xposed中打開交易記錄界面,這個條件是不成立的,也就是說打開交易記錄界面時,不會主動的去加載數據if ((com.tencent.mm.wallet_core.a.ag(this) instanceof com.tencent.mm.plugin.order.a.a)){this.acS = true;biJ(); // 加載數據}...this.ldB = ((MMLoadMoreListView)findViewById(a.f.uqt)); // 在布局中找到listviewthis.pcp = new a(); // 新建adpater實例this.ldB.setAdapter(this.pcp); // 給listview設置adapter// 設置listview的item點擊監聽this.ldB.setOnItemClickListener(new AdapterView.OnItemClickListener(){public final void onItemClick(AdapterView<?> paramAnonymousAdapterView, View paramAnonymousView, int paramAnonymousInt, long paramAnonymousLong){...}});// 設置listview的item長按監聽this.ldB.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){public final boolean onItemLongClick(AdapterView<?> paramAnonymousAdapterView, View paramAnonymousView, final int paramAnonymousInt, long paramAnonymousLong){...}});// 給listview綁定加載更多的監聽this.ldB.ybX = new MMLoadMoreListView.a(){public final void axW(){if (!MallOrderRecordListUI.this.acS){MallOrderRecordListUI.this.acS = true;MallOrderRecordListUI localMallOrderRecordListUI = MallOrderRecordListUI.this;localMallOrderRecordListUI.wn += 10; // 已經加載的數據條數MallOrderRecordListUI.this.biJ(); // 調用該方法加載數據}}};...}// 請求賬單數據方法public void biJ(){// 調用"l"方法請求賬單數據,傳入請求參數,其中this.wn為我們ListView中數據的條數,this.pcr為服務端返回給我們的已經加載的數據條數l(new com.tencent.mm.plugin.order.model.e(this.wn, this.pcr));}// 獲得賬單數據之后的回調方法public boolean d(int paramInt1, int paramInt2, String paramString, k paramk){boolean bool;if ((paramk instanceof com.tencent.mm.plugin.order.model.e)){if (this.mzP != null){this.mzP.dismiss();this.mzP = null;}paramString = (com.tencent.mm.plugin.order.model.e)paramk; // 賬單數據this.pcr = paramString.pbf; // 服務端返回的已經加載過的賬單數據條數,這個值bl(paramString.pbd); // 具體賬單數據在paramk.pbd中bm(paramString.pbe);this.mCount = this.pcq.size(); // 現在已經加載過的賬單數據if (paramString.liB > this.mCount) // paramString.liB返回的是用戶當前賬單數據總條數{...}}...}// 交易記錄列表對應的adapterprotected final class aextends BaseAdapter{protected a() {}private i uA(int paramInt){return (i)MallOrderRecordListUI.this.pcq.get(paramInt);}public final int getCount(){return MallOrderRecordListUI.this.pcq.size();}public final long getItemId(int paramInt){return paramInt;}public final View getView(int paramInt, View paramView, ViewGroup paramViewGroup){...}}}

可以看到,微信最終是調用"l"方法來請求賬單數據的,其中參數"e"的定義如下:

package com.tencent.mm.plugin.order.model;import com.tencent.mm.sdk.platformtools.x; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;public final class eextends com.tencent.mm.wallet_core.tenpay.model.i {public int liB;private int ocK;public List<i> pbd = null; // 賬單數據public List<d> pbe = null; // 賬單列表上的懸浮日期數據,我們不關心public String pbf;public e(int paramInt, String paramString){// 設置請求參數HashMap localHashMap = new HashMap();localHashMap.put("Limit", "10"); // 每次請求數據的條數,微信寫死了就是10條,我們可以通過其他方法修改這個值localHashMap.put("Offset", String.valueOf(paramInt)); // listview中數據的條數localHashMap.put("Extbuf", paramString); // 服務端返回的已經加載過的數據條數D(localHashMap); // 調用D方法構造請求參數}// 數據回來后的回調方法public final void a(int paramInt, String paramString, JSONObject paramJSONObject){int i = 0;x.d("MicroMsg.NetScenePatchQueryUserRoll", "errCode " + paramInt + " errMsg: " + paramString);this.pbd = new LinkedList();// 解析json數據,轉換為對象形式try{this.liB = paramJSONObject.getInt("TotalNum");this.ocK = paramJSONObject.getInt("RecNum");this.pbf = paramJSONObject.optString("Extbuf");JSONArray localJSONArray = paramJSONObject.getJSONArray("UserRollList");if (localJSONArray != null) {for (paramInt = 0; paramInt < localJSONArray.length(); paramInt++){paramString = new com/tencent/mm/plugin/order/model/i;paramString.<init>();JSONObject localJSONObject = localJSONArray.getJSONObject(paramInt);paramString.pbq = localJSONObject.optInt("PayType");paramString.pbi = localJSONObject.optString("Transid");paramString.pbj = localJSONObject.optDouble("TotalFee");paramString.pbk = localJSONObject.optString("GoodsName");paramString.pbl = localJSONObject.optInt("CreateTime");paramString.pbn = localJSONObject.optInt("ModifyTime");paramString.pbo = localJSONObject.optString("FeeType");paramString.pbt = localJSONObject.optString("AppThumbUrl");paramString.pbm = localJSONObject.optString("TradeStateName");paramString.pby = localJSONObject.optString("StatusColor");paramString.pbz = localJSONObject.optString("FeeColor");paramString.pbA = localJSONObject.optDouble("ActualPayFee");paramString.pbB = localJSONObject.optString("BillId");this.pbd.add(paramString);}}...return;}catch (JSONException paramString){x.e("MicroMsg.NetScenePatchQueryUserRoll", "Parse Json exp:" + paramString.getLocalizedMessage());}}... }

微信將每次請求的數據條數寫死了,每次只能請求10條數數據,從上面的代碼中可以看到最終是通過調用"D(localHashMap);"來構造請求數據的,它是在"com.tencent.mm.plugin.order.model.e"的父類"com.tencent.mm.wallet_core.c.h"中定義的,其定義如下:

public final void D(Map<String, String> paramMap) {...}

那么只要我們考慮hook住該方法,判斷如果當前類的類名是"com.tencent.mm.plugin.order.model.e",就修改參數paramMap中key值為"Limit"的value值,這樣不就修改了每次請求賬單數據的條數了嗎?

考慮另外一個問題,我們現在想屏蔽掉用戶對交易記錄頁面的操作,因為我們可以自己調用對應的方法來獲得賬單數據,而不需要讓賬單數據顯示在界面上,或者讓用戶滑動賬單頁面就加載更多數據了,通過上面的分析我們知道,微信是通過調用"biJ()"來加載數據的,我們只需要replace掉該方法,不就可以讓用戶操作界面無法加載數據了嗎?而賬單數據的顯示是在交易記錄界面賬單數據返回的回調方法中實現的,同樣我們可以replace掉該方法,就可以讓賬單數據不顯示在界面上了。

整個處理賬單頁面的代碼如下:

?

public static Activity weiXinMallOrderRecordListUI = null; // 微信賬單頁面public static List<WeiXinBillObject> weiXinBillObjectList = null;// hook交易記錄頁面的onCreate方法,保存其對象實例并調用獲得賬單數據方法findAndHookMethod("com.tencent.mm.plugin.order.ui.MallOrderRecordListUI", classLoader, "onCreate", Bundle.class, new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {XposedLogUtils.log("com.tencent.mm.g.a.st.MallOrderRecordListUI" + ":onCreate");weiXinMallOrderRecordListUI = (Activity) param.thisObject;startGetWeiXinBillList();}});// hook交易記錄頁面的onDestory方法,釋放對其對象實例的引用findAndHookMethod("com.tencent.mm.plugin.order.ui.MallOrderRecordListUI", classLoader, "onDestroy", new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {XposedLogUtils.log("com.tencent.mm.plugin.order.ui.MallOrderRecordListUI onDestroy" + "\n");weiXinMallOrderRecordListUI = null;}});// 替換掉交易記錄頁面的加載數據方法,讓用戶操作界面不能加載數據findAndHookMethod("com.tencent.mm.plugin.order.ui.MallOrderRecordListUI", classLoader, "biJ", new XC_MethodReplacement() {@Overrideprotected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {XposedLogUtils.log("com.tencent.mm.plugin.wallet_core.model.ae" + ":bLH");return null;}});// hook D方法,修改每次請求賬單數據的條數findAndHookMethod("com.tencent.mm.wallet_core.c.h", classLoader, "D", Map.class, new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {if (param.thisObject.getClass().getName().contentEquals("com.tencent.mm.plugin.order.model.e")) {if (param.args[0] != null) {Map<String, String> paramMap = (Map<String, String>)param.args[0];if (paramMap.containsKey("Limit")) {paramMap.put("Limit", "100"); // 修改每次請求賬單數據的條數,這里修改為100條}}}super.beforeHookedMethod(param);}});// hook交易記錄頁面數據返回的回調方法,替換其原來的執行邏輯,讓賬單數據不顯示到界面上,并且獲得賬單數據findAndHookMethod("com.tencent.mm.plugin.order.ui.MallOrderRecordListUI", classLoader, "d", int.class, int.class, String.class,findClass("com.tencent.mm.ae.k", classLoader), new XC_MethodReplacement() {@Overrideprotected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {XposedLogUtils.log("com.tencent.mm.plugin.order.ui.MallOrderRecordListUI:" + "d" + "\n");XposedLogUtils.log(methodHookParam.args[0] + " " + methodHookParam.args[1] + " " + methodHookParam.args[2] + "\n");if (methodHookParam.args[3] != null) {Object resObject = methodHookParam.args[3];String pcr = getStringField(resObject, "pbf"); // 服務端返回的已經加載過的數據條數Integer totalCount = 0;if (getField(resObject, "liB") != null) {totalCount = (Integer) getField(resObject, "liB"); // 服務端返回的當前用戶賬單數據總條數}XposedLogUtils.log("pcr:" + pcr + " " + "totalCount:" + totalCount + "\n");// 獲得賬單數據Field billListFiled = XposedHelpers.findField(findClass("com.tencent.mm.plugin.order.model.e", classLoader), "pbd");final Object billList = billListFiled.get(resObject);// 轉換賬單數據到我們自己的對象中if (billList != null) {List<Object> bList_obj = (List) billList;for (Object object : bList_obj) {WeiXinBillObject weiXinBillObject = new WeiXinBillObject();weiXinBillObject.payType = getStringField(object, "pbq");weiXinBillObject.transid = getStringField(object, "pbi");weiXinBillObject.totalFee = getStringField(object, "pbj");weiXinBillObject.goodsName = getStringField(object, "pbk");weiXinBillObject.createTime = getStringField(object, "pbl");weiXinBillObject.modifyTime = getStringField(object, "pbn");weiXinBillObject.feeType = getStringField(object, "pbo");weiXinBillObject.appThumbUrl = getStringField(object, "pbt");weiXinBillObject.tradeStateName = getStringField(object, "pbm");weiXinBillObject.statusColor = getStringField(object, "pby");weiXinBillObject.feeColor = getStringField(object, "pbz");weiXinBillObject.actualPayFee = getStringField(object, "pbA");weiXinBillObject.billId = getStringField(object, "pbB");weiXinBillObjectList.add(weiXinBillObject);}// 連續加載1000條數據或者加載完成則不再繼續加載,在這里判斷是否加載到了所要的賬單數據,我這里設置的條件是加載超過了1000條數據if (weiXinBillObjectList.size() >= 1000 || bList_obj.size() == 0 || bList_obj.size() >= totalCount) {for (WeiXinBillObject weiXinBillObject : weiXinBillObjectList) {XposedLogUtils.log(weiXinBillObject.toString());}} else { // 繼續加載賬單數據getWeiXinBillList(weiXinBillObjectList.size(), pcr);}}}return true;}});/*** 加載賬單數據* @param offset* @param extbuf*/private static void getWeiXinBillList(int offset, String extbuf) {if (weiXinMallOrderRecordListUI != null) {Object paramObject = null;Class paramObjectClass = findClass("com.tencent.mm.plugin.order.model.e", mWeiXinClassLoader);try {Constructor paramObjectConstructor = paramObjectClass.getDeclaredConstructor(int.class, String.class);paramObject = paramObjectConstructor.newInstance(offset, extbuf);callMethod(weiXinMallOrderRecordListUI, "l", paramObject);} catch (Exception e) {e.printStackTrace();}}}/*** 啟動微信交易記錄頁面*/public static void startWeiXinBillListActivity() {Intent launcherIntent;if (weiXinLauncherActivity != null) {XposedLogUtils.log("launcher MallOrderRecordListUI");launcherIntent = new Intent(weiXinLauncherActivity, findClass("com.tencent.mm.plugin.order.ui.MallOrderRecordListUI", mWeiXinClassLoader));weiXinLauncherActivity.startActivity(launcherIntent);return;}}/*** 開始獲得賬單數據*/public static void startGetWeiXinBillList() {if (weiXinBillObjectList == null) {weiXinBillObjectList = new ArrayList<>();}weiXinBillObjectList.clear(); // 清空原來的數據getWeiXinBillList(0, null); // 加載賬單數據}private static String getStringField(final Object obj, final String fieldName) throws IllegalAccessException {Field sField = XposedHelpers.findField(obj.getClass(), fieldName);if (sField == null) {return null;}return String.valueOf(sField.get(obj));}private static Object getField(final Object obj, final String fieldName) throws IllegalAccessException {Field sField = XposedHelpers.findField(obj.getClass(), fieldName);if (sField == null) {return null;}return sField.get(obj);}/*** 微信賬單對象*/public static class WeiXinBillObject implements Parcelable {public String payType;public String transid;public String totalFee;public String goodsName;public String createTime;public String modifyTime;public String feeType;public String appThumbUrl;public String tradeStateName;public String statusColor;public String feeColor;public String actualPayFee;public String billId;public WeiXinBillObject() {}protected WeiXinBillObject(Parcel in) {payType = in.readString();transid = in.readString();totalFee = in.readString();goodsName = in.readString();createTime = in.readString();modifyTime = in.readString();feeType = in.readString();appThumbUrl = in.readString();tradeStateName = in.readString();statusColor = in.readString();feeColor = in.readString();actualPayFee = in.readString();billId = in.readString();}public static final Creator<WeiXinBillObject> CREATOR = new Creator<WeiXinBillObject>() {@Overridepublic WeiXinBillObject createFromParcel(Parcel in) {return new WeiXinBillObject(in);}@Overridepublic WeiXinBillObject[] newArray(int size) {return new WeiXinBillObject[size];}};@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(payType);dest.writeString(transid);dest.writeString(totalFee);dest.writeString(goodsName);dest.writeString(createTime);dest.writeString(modifyTime);dest.writeString(feeType);dest.writeString(appThumbUrl);dest.writeString(tradeStateName);dest.writeString(statusColor);dest.writeString(feeColor);dest.writeString(actualPayFee);dest.writeString(billId);}@Overridepublic String toString() {return "payType:" + payType + "," +"transid:" + transid + "," +"totalFee:" + totalFee + "," +"createTime:" + createTime + "," +"modifyTime:" + modifyTime + "," +"feeType:" + feeType + "," +"appThumbUrl:" + appThumbUrl + "," +"tradeStateName:" + tradeStateName + "," +"statusColor:" + statusColor + "," +"feeColor:" + feeColor + "," +"actualPayFee:" + actualPayFee + "," +"billId:" + billId + "," +"goodsName:" + goodsName + "\n";}}

在廣播中定義如下:

public class WeiXinBroadcast extends BroadcastReceiver{public static String WEIXIN_BILLLIST_INTENT_FILTER_ACTION = "com.tencent.mm.info.billlist";@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().contentEquals(WEIXIN_BILLLIST_INTENT_FILTER_ACTION)) {if (Main.weiXinMallOrderRecordListUI != null) {Main.startGetWeiXinBillList();} else {Main.startWeiXinBillListActivity();}}}}

?

最后在Xposed插件程序發送一個廣播,可以看到如下日志打印:

?

06-01 10:27:46.137 I/Xposed (10765): payType:0,transid:4200000119201806015247324551,totalFee:9800.0,createTime:1527783145,modifyTime:1527783151,feeType:CNY,appThumbUrl:,tradeStateName:支付成功,statusColor:#888888,feeColor:#000000,actualPayFee:9800.0,billId:e91e105b20a10700d55d1574,goodsName:京東-訂單編號76517324492 06-01 10:27:46.137 I/Xposed (10765): payType:5,transid:100005020118053100078332119850436866,totalFee:52000.0,createTime:1527774458,modifyTime:1527774458,feeType:1,appThumbUrl:,tradeStateName:等待朋友確認收錢,statusColor:#888888,feeColor:#000000,actualPayFee:52000.0,billId:fafc0f5b20a10700d55d1574,goodsName:微信轉賬 06-01 10:27:46.137 I/Xposed (10765): payType:2,transid:4200000144201805318564157226,totalFee:680.0,createTime:1527771799,modifyTime:1527771799,feeType:CNY,appThumbUrl:,tradeStateName:支付成功,statusColor:#888888,feeColor:#000000,actualPayFee:680.0,billId:97f20f5b20a10700d55d1574,goodsName:深圳市南山家家樂生活超市消費 06-01 10:27:46.137 I/Xposed (10765): payType:2,transid:4200000116201805312045134300,totalFee:1900.0,createTime:1527768245,modifyTime:1527768245,feeType:,appThumbUrl:,tradeStateName:支付成功,statusColor:#888888,feeColor:#000000,actualPayFee:1900.0,billId:b5e40f5b20a10700d55d1574,goodsName:萬連佳 收銀員:005-102 06-01 10:27:46.137 I/Xposed (10765): payType:6,transid:100005030118053100078332117578249866,totalFee:1800.0,createTime:1527768062,modifyTime:1527768062,feeType:1,appThumbUrl:,tradeStateName:已轉賬,statusColor:#888888,feeColor:#000000,actualPayFee:1800.0,billId:fee30f5b20a10700d55d1574,goodsName:二維碼收款 ...

ok,問題解決。

利用賬單cookie來獲得賬單

上面說到過,微信賬單h5頁面請求賬單數據的接口總結如下:

url:https://wx.tenpay.com/userroll/userrolllist?classify_type=0&count=20&sort_type=1請求方式:getCookie:export_key=A/4YTLDXVQMB1IScuR4uDa8=; userroll_encryption=5Wyzpp5yYABVU2ZLQ9ueNA5LT466SEtjxY5Z1L0bhnnzcWwYEij0Q0T+ZeUfu0T4qFTAELJEZYvclmmtF39a/mW5syVtXHUYstaIYCrEVcOb0yfR6OkVpqb1xUE5p3rCXT3OF8YwcgoIDCS5PepNkg==;

其中最關鍵的就是要獲得Cookie,只要得到Cookie,就可以利用接口查詢賬單,之前一直沒有找到獲得cookie的方式,現在我們仔細分析一下這個問題,微信賬單頁面是一個h5頁面,而h5頁面在Android中都是通過WebView加載的,而我們在開發中一般都會給WebView設置WebViewClient來監控頁面的加載情況,WebViewClient的onPageFinished是頁面加載完成的回調方法,我們可以在該方法中獲得請求頁面所需要的Cookie信息,這是一種獲得H5頁面的Cookie的通用方法。

經過上面的分析,我們知道可以Hook住微信賬單頁面的WebViewClient的onPageFinished方法,然后通過判斷加載頁面的url是否是微信賬單頁面的url來判斷加載的是否是微信賬單頁面,如果是,則獲得cookie并返回。這里還要解決一個問題就是如何自動打開賬單頁面,只有打開了賬單頁面,才會去加載賬單。具體分析過程就不說明了,這里只貼出代碼:

/*** 啟動微信交易記錄頁面*/public static void startWeiXinBillListActivity() {XposedLogUtils.log("startWeiXinBillListActivity" + weiXinLauncherActivity);if (weiXinLauncherActivity != null) {// 打開賬單頁面callStaticMethod(findClass(VersionParam.weiXinBillListUIFullClassName, mWeiXinClassLoader), VersionParam.weiXinBillListMethodName, weiXinLauncherActivity);}} findAndHookMethod(VersionParam.weiXinWebViewClientFullClassName, classLoader, VersionParam.weiXinWebViewClientLoadFinishMethodName,findClass(VersionParam.weiXinWebViewFullClassName, classLoader), String.class, new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {String url = (String) param.args[1];if (url != null && url.contains("wx.tenpay.com/userroll/readtemplate")) { // 交易記錄urlXposedLogUtils.log("onPageFinished:" + url);String cookie = (String) callMethod(callStaticMethod(findClass(VersionParam.weiXinWebViewGetCookieFullClassName, classLoader),VersionParam.weiXinWebViewGetCookieInstanceMethodName), VersionParam.weiXinWebViewGetCookieMethodName, url);XposedLogUtils.log("cookie:" + cookie);if (cookie != null) {if (param.thisObject != null) {Activity webViewUI = (Activity) getField(param.thisObject, VersionParam.weiXinWebViewObjectFeildName);if (webViewUI != null) {Intent broadCastIntent = new Intent();broadCastIntent.putExtra("cookieStr", cookie);broadCastIntent.setAction(WebSocketService.WEIXIN_BILLLIST_COOKIE_INTENT_FILTER_ACTION);webViewUI.sendBroadcast(broadCastIntent);webViewUI.finish();}}}}}});// 這個是為了確保在賬單頁面加載失敗的時候能夠自動關閉賬單頁面,頁面打開多個賬單頁面,影響性能findAndHookMethod(VersionParam.weiXinWebViewUIFullClassName, classLoader, "b",findClass("com.tencent.mm.plugin.webview.stub.c", classLoader), new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {XposedLogUtils.log("WeiXin WebViewUI b");Activity webViewUI = (Activity) param.thisObject;try {if (webViewUI != null && !webViewUI.isFinishing()) {View refresh_mask = (View) getField(webViewUI, "pYL");if (refresh_mask != null && refresh_mask.getVisibility() == View.VISIBLE) {XposedLogUtils.log("WeiXin WebViewUI refresh_mask visibile");webViewUI.finish();}}} catch (Exception e) {}}});

?用的的一些全局靜態變量的定義

public static String WEIXIN_PACKAGE_NAME = "com.tencent.mm";public static String UNIONPAY_PACKAGE_NAME = "com.unionpay";public static String weiXinReturnParamFullClassName = "com.tencent.mm.ae.k";public static String weiXinBillStartRequestMethodName = "biJ";public static String weiXinCreateBillRequestParamFullClassName = "com.tencent.mm.wallet_core.c.h";public static String weiXinCreateBillRequestParamMethodName = "D";public static String ftf_pay_url_field_name = "ljf";public static String ftf_fixed_fee_field_name = "ljg";public static String ftf_fixed_fee_type_field_name = "fpP";public static String ftf_fixed_desc_field_name = "desc";public static String weiXinIsLoginFullClassName = "com.tencent.mm.kernel.a";public static String weiXinIsLoginMethodName = "Dz";public static String weiXinCreateQRCodeUIFullClassName = "com.tencent.mm.plugin.collect.ui.CollectCreateQRCodeUI";public static String weiXinWebViewUIFullClassName = "com.tencent.mm.plugin.webview.ui.tools.WebViewUI";public static String weiXinCreateQRCodeUICallBackMethodName = "d";public static String weiXinLauncherUIFullClassName = "com.tencent.mm.ui.LauncherUI";public static String weiXinBillListUIFullClassName = "com.tencent.mm.plugin.mall.ui.MallIndexBaseUI";public static String weiXinBillListMethodName = "u";public static String weiXinCreateQRCodeRequestParamFullClassName = "com.tencent.mm.plugin.collect.b.s";public static String weiXinWebViewClientFullClassName = "com.tencent.mm.plugin.webview.ui.tools.WebViewUI$i";public static String weiXinWebViewClientLoadFinishMethodName = "a";public static String weiXinWebViewFullClassName = "com.tencent.xweb.WebView";public static String weiXinWebViewGetCookieFullClassName = "com.tencent.xweb.b";public static String weiXinWebViewGetCookieInstanceMethodName = "cIi";public static String weiXinWebViewGetCookieMethodName = "getCookie";public static String weiXinWebViewObjectFeildName = "pZJ";// 微信當前版本中的登錄界面類全名public static String mWeiXinLoginActivityClassFullName = "com.tencent.mm.plugin.account.ui.LoginUI";public static String mWeiXinSQLiteDatabaseClassFullName = "com.tencent.wcdb.database.SQLiteDatabase";public static String mWeiXinSQLiteDatabaseInsertMethodName = "insertWithOnConflict";

由于微信的WebView和WebViewClient都是自定義的,所有在onPageFinished方法中獲得Cookie是通過調用微信提供的方法獲得的,一般情況下,我們要在onPageFinished中獲得Cookie,只需要執行如下代碼即可:

CookieManager cookieManager = CookieManager.getInstance();String cookieStr = cookieManager.getCookie(url);

獲得Cookie后,我們就可以將Cookie發送給服務端,服務端通過接口來請求微信賬單數據了,這個Cookie是有失效時長的,如果服務端發現Cookie過期,則重新向App請求Cookie,App會再次打開微信賬單頁面,刷新Cookie并返回給服務端。

四、總結

? ? ? 需要總結的不多,基本都是https://blog.csdn.net/xiao_nian/article/details/79881274里面使用的技巧,不得不說微信的混淆還是做得很好的,代碼里面基本都是adcd之類的。

?

嚴重聲明

本文的意圖只有一個就是通過分析app學習更多的逆向技術,如果有人利用本文知識和技術進行非法操作進行牟利,帶來的任何法律責任都將由操作者本人承擔,和本文作者無任何關系,最終還是希望大家能夠秉著學習的心態閱讀此文。

總結

以上是生活随笔為你收集整理的利用xposed自动获得微信个人收款二维码链接和收款记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

天天干夜夜爱 | 91视频xxxx| 久久天堂亚洲 | 91久久人澡人人添人人爽欧美 | 亚洲精品一区二区三区在线观看 | 天天插狠狠插 | 成人免费看视频 | 国产日本亚洲高清 | 国产精品成人自产拍在线观看 | 久久综合中文字幕 | 中文字幕免费国产精品 | 日本久久中文字幕 | 中文av资源站 | 婷婷综合五月 | 视频 天天草 | 国产在线观 | 日韩av网址在线 | 日本免费久久高清视频 | 欧美极度另类 | 国产免费影院 | 中国一级片在线 | 亚洲视频一区二区三区在线观看 | 综合色婷婷 | 国产黄免费| 国产三级精品三级在线观看 | 天天玩天天干天天操 | 2024国产精品视频 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 成人精品国产免费网站 | 日日夜夜精品免费视频 | 三上悠亚一区二区在线观看 | 国产精品精| av夜夜操 | 天天躁日日躁狠狠躁av中文 | 娇妻呻吟一区二区三区 | 国产精品久久久久久久免费大片 | 久久久久国产精品免费 | 日韩激情影院 | 国际精品网 | 2021久久 | 日韩欧美精品在线 | 99日韩精品 | 亚洲成人精品在线观看 | 日韩中文字幕免费视频 | 日韩精品视频免费专区在线播放 | 在线观看国产www | 五月婷婷综合在线观看 | 一区二区三区国产精品 | 日韩精品一区在线观看 | 在线观看黄网 | 成人久久电影 | 亚洲精品视频在线看 | 在线免费中文字幕 | 国产69熟| 欧美一级视频在线观看 | 免费观看丰满少妇做爰 | 2024国产精品视频 | 中文字幕二区在线观看 | 亚洲天堂网在线视频 | 久久欧美精品 | 伊人五月天av | 午夜成人免费影院 | 精品国产一区二区三区四区在线观看 | 精品国产一区二区三区久久影院 | 在线观看视频在线 | 久久精品一区二区三区国产主播 | 亚洲欧洲国产视频 | 99自拍视频在线观看 | 日韩电影一区二区三区 | 日韩一区二区三区免费视频 | 国产精品黄色影片导航在线观看 | 91视频免费观看 | 亚洲爱视频 | 99亚洲精品在线 | 天天操导航 | 亚洲人成人99网站 | 亚洲一区黄色 | 狠狠的干 | 手机色站 | 五月婷婷狠狠 | 天天干夜夜干 | 一区二区三区国产欧美 | 午夜av片| 亚洲欧美日本国产 | 亚洲日本中文字幕在线观看 | 日三级在线 | 91av短视频 | 久草在线免费资源站 | 国产精品美乳一区二区免费 | 人人玩人人爽 | 久久久久久久久久久久国产精品 | 精品国产亚洲一区二区麻豆 | 狠狠干狠狠操 | 国产二区视频在线 | 欧美久久成人 | 日韩免费电影在线观看 | www.夜夜干.com| 国产中文字幕在线看 | 黄色av成人在线观看 | 在线看片日韩 | 黄网在线免费观看 | 91国内在线视频 | 婷婷色资源 | 国产又黄又猛又粗 | 99中文字幕视频 | 欧美怡红院 | 免费av观看网站 | 国产成人精品女人久久久 | 91在线免费视频观看 | 四虎在线观看网址 | 亚洲成人999 | 69av视频在线观看 | 久久综合九九 | 欧美一级电影免费观看 | 国产精品一区二区三区免费看 | 久久深夜福利免费观看 | 国产色女人| 西西4444www大胆无视频 | 国际av在线| 国产精品高潮在线观看 | 亚洲欧洲国产视频 | 综合天堂av久久久久久久 | 韩日精品在线 | 日本中文字幕久久 | 国产精品久久久网站 | 中文字幕av一区二区三区四区 | 亚洲欧美少妇 | 中文字幕资源网 国产 | 97超碰超碰久久福利超碰 | 欧美性脚交 | 91超碰免费在线 | 中文在线亚洲 | 欧美激情综合网 | 中文字幕 在线看 | 久久国产欧美日韩 | 久久久久国产精品一区二区 | 久久夜av | 91在线观看欧美日韩 | 日本h在线播放 | 麻豆91小视频 | 99精品区| 天天曰天天爽 | 97干com| 免费在线观看一区 | 国产精品欧美精品 | 精品一区二区免费视频 | 91九色蝌蚪在线 | 欧美精品亚洲精品日韩精品 | 有码视频在线观看 | 91插插插免费视频 | 精品国产一区二区三区蜜臀 | av中文国产| 成人久久精品 | 亚洲在线a | 欧美日韩精品在线观看 | 久久久久国产精品免费免费搜索 | a级国产乱理论片在线观看 伊人宗合网 | 在线观看电影av | 射九九 | 久久经典国产视频 | 黄色www在线观看 | 久久国产精品精品国产色婷婷 | 国产精品久久久久久久av大片 | 久久99精品波多结衣一区 | 久久少妇免费视频 | 欧美精品久久久久久久久老牛影院 | 香蕉久久国产 | 探花视频免费观看 | 欧美久久99| 免费在线日韩 | 91九色网站 | 日韩欧美视频一区 | 久草精品视频在线观看 | 久久影视中文字幕 | 99久久精品国产一区二区三区 | 亚洲特级片 | av日韩在线网站 | 久久精品永久免费 | 人人舔人人插 | 日韩精品专区 | 91精品久久久久久久99蜜桃 | 久久99精品波多结衣一区 | 伊人射| 日韩久久久久久久久久 | 中文字幕资源网在线观看 | 伊人狠狠色 | 特级毛片在线观看 | 九九免费精品 | 黄色免费在线看 | 欧美一级免费高清 | 国产一区精品在线观看 | 四虎在线免费观看 | 一级特黄aaa大片在线观看 | 午夜美女wwww | 婷婷色在线 | 99久久久国产精品美女 | 欧美精品久久久久久久久久久 | 国产精品久久嫩一区二区免费 | 五月的婷婷 | 亚洲区精品视频 | 一区二区不卡 | 久久久久免费精品国产小说色大师 | 日韩电影在线一区二区 | www.日本色| 激情综合六月 | 国产成人精品av | 五月婷婷深开心 | 日韩欧美视频免费看 | 亚洲国产免费看 | 韩国精品在线 | 国产97视频在线 | 夜色.com| 亚洲精品乱码久久久一二三 | 久久久久久久久久久久久久免费看 | 五月天婷婷免费视频 | 99爱精品视频 | 亚洲天堂在线观看完整版 | 91九色性视频 | 天天色天天爱天天射综合 | 久久区二区 | 99在线精品免费视频九九视 | 亚洲人人网 | 97av视频在线 | 日韩一区二区在线免费观看 | 国产 日韩 在线 亚洲 字幕 中文 | 精品免费视频123区 午夜久久成人 | 久久免费黄色网址 | 欧美一区二区三区在线看 | 91禁看片 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 91探花国产综合在线精品 | 91免费在线| 成人不用播放器 | 欧美一区,二区 | 69av久久| 欧美调教网站 | 九七在线视频 | 菠萝菠萝在线精品视频 | 在线日韩视频 | 在线观看亚洲视频 | 成人少妇影院yyyy | 91亚洲精品久久久 | 国产日韩高清在线 | 婷婷色六月天 | 日韩不卡高清 | 午夜国产一区二区 | 99色免费视频 | 成人动漫一区二区三区 | 另类老妇性bbwbbw高清 | 婷婷中文字幕在线观看 | 男女啪啪免费网站 | 日韩欧美高清视频在线观看 | 国内精品久久久久影院日本资源 | 日韩免费观看一区二区 | 国产精品专区在线 | 免费av小说 | 日韩成人免费在线 | 国产精品99久久久久人中文网介绍 | 国产最顶级的黄色片在线免费观看 | 手机在线看片日韩 | 黄影院| 亚洲一区 av | 免费人成网 | 国产精品短视频 | 天堂入口网站 | 一区二区欧美激情 | 国产视频一区二区在线观看 | 亚洲精品综合久久 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 成人a在线观看高清电影 | 色综合天天综合 | av片无限看 | 黄色av一区| 亚洲激情在线视频 | 999男人的天堂 | 国产护士hd高朝护士1 | 国产精品毛片网 | 午夜av在线电影 | 亚州精品天堂中文字幕 | av线上免费看 | 99麻豆久久久国产精品免费 | 中文字幕在线观看的网站 | 欧美激情第一页xxx 午夜性福利 | 久久老司机精品视频 | 97超碰福利久久精品 | 四虎成人免费影院 | 黄色影院在线播放 | 久久成人高清 | 激情网五月婷婷 | 免费观看www小视频的软件 | 久久久久激情 | 高清av在线 | 91免费视频国产 | 深爱激情五月综合 | 97在线视 | 免费大片黄在线 | 久久久观看 | 国产精品免费成人 | 日韩精选在线观看 | 免费一区在线 | www黄色 | 国产免费一区二区三区最新 | 亚洲黄色片 | www婷婷| 中文字幕一区二区三区久久 | 91中文字幕一区 | 久久九九久久精品 | 久久久亚洲电影 | 五月激情站 | 亚洲播播 | 狠狠色丁香婷婷综合久久片 | 综合色综合色 | 天天色天天射天天综合网 | 成人久久18免费网站麻豆 | 久草在线免费电影 | 欧美三人交 | 成年人免费电影在线观看 | 日韩黄色免费在线观看 | aaa日本高清在线播放免费观看 | 国产99视频在线观看 | 免费成人在线观看 | 97超碰资源站 | 草莓视频在线观看免费观看 | 久久精品视频免费观看 | 色九九视频 | 国内精品在线观看视频 | 欧美 日韩 性 | 国产这里只有精品 | 精品专区一区二区 | 国产视频亚洲 | 日韩精品一区二区在线观看 | 99福利片| 人人玩人人添人人 | 一区二区男女 | 五月天综合网站 | 96在线| 免费看国产一级片 | 免费看网站在线 | 中文字幕永久在线 | 久av电影| av电影一区 | 激情综合色综合久久综合 | 国产成人精品一区在线 | 麻豆视频免费入口 | 色久网| 国产精品久久网站 | a在线免费观看视频 | 欧洲色综合 | 亚洲精品在线一区二区 | 91成人精品一区在线播放 | 在线观看小视频 | 亚洲专区一二三 | 99超碰在线观看 | 成人在线一区二区三区 | 国产又粗又猛又黄又爽 | 六月婷婷色| 国产一级片免费观看 | 热久久99这里有精品 | 99久久婷婷国产一区二区三区 | 人人爱爱 | 国产精品久久99综合免费观看尤物 | 日韩欧美黄色网址 | a国产精品| 亚洲国产一区在线观看 | 日韩国产高清在线 | 激情五月婷婷 | 精品91在线 | 免费涩涩网站 | 国产成人精品免费在线观看 | 久久久久久久av | www.亚洲精品 | 香蕉视频在线免费 | 国产日产av | 成人av久久 | 精品女同一区二区三区在线观看 | 91视频链接| 国产黄大片在线观看 | 伊人永久| 超碰免费成人 | 国产一线天在线观看 | 99re8这里有精品热视频免费 | 成片免费观看视频大全 | 久草在线观 | 免费精品久久久 | 九九九热视频 | 四虎影视www | 免费精品在线观看 | 午夜精品999| 久久久久五月天 | 99视频精品免费视频 | 免费a一级 | 日韩午夜精品福利 | 免费看的国产视频网站 | 亚洲成人频道 | 国产成人精品一区二区三区福利 | 韩国精品一区二区三区六区色诱 | 国产精品video爽爽爽爽 | 国产精品嫩草影院123 | 黄p在线播放 | 亚洲精品在线免费 | 中文字幕在线观看的网站 | 久久久久久久久久久成人 | 亚洲精品资源在线 | 99视频一区 | 国产区 在线 | 亚洲经典中文字幕 | 久久免费视频一区 | 欧美一二三区在线观看 | 久草在线视频首页 | 高清精品视频 | 伊人一级 | 久久69av| 四虎影视www | 亚洲国产无 | 久久久久亚洲国产精品 | 99精品成人| 欧美精品一区二区三区四区在线 | 亚洲国产中文字幕在线 | 大片网站久久 | 亚洲精品大全 | 日韩特级片 | 欧美日韩一区二区三区免费视频 | 人人插人人看 | 五月婷婷六月丁香 | 中文字幕高清在线 | 免费在线观看日韩欧美 | 人人插人人澡 | 成片人卡1卡2卡3手机免费看 | 久久欧美综合 | 蜜臀久久99精品久久久无需会员 | 中文欧美字幕免费 | 美女久久久久 | 二区视频在线观看 | 国产一区在线不卡 | 亚洲国产欧洲综合997久久, | 九九久久久久久久久激情 | 在线电影a | 在线播放精品一区二区三区 | 日韩欧美在线国产 | 免费看的黄色片 | 97国产小视频 | 国产精品原创在线 | 久操视频在线播放 | www.天天操 | 久久国产影院 | 手机在线小视频 | 国产精品久久久久久久久久久免费看 | 国产在线 一区二区三区 | 国内外激情视频 | 十八岁免进欧美 | 国产欧美日韩精品一区二区免费 | 天堂av网站| 成人av一二三区 | 久影院 | 亚洲特级片 | 久久99久久99精品中文字幕 | 91视频高清免费 | 欧美日韩国产伦理 | 天操夜夜操 | 欧美日韩二区在线 | 国产美女网站在线观看 | 日韩字幕 | 中文字幕中文中文字幕 | 911精品视频 | 97香蕉久久超级碰碰高清版 | 欧美激情在线看 | 久久这里只有精品23 | 中文字幕xxxx | 91av官网| 国产69精品久久久久9999apgf | 国产精品免费视频观看 | 天天操天天怕 | 国产一区二区日本 | 久久69精品 | 日韩精品中文字幕在线 | 91精品在线观看入口 | 麻豆播放| 在线看片a| 伊人va| 免费在线观看视频一区 | 精品久久久久久亚洲 | 久久久久美女 | 欧美午夜寂寞影院 | 深夜免费福利在线 | 久久夜色精品国产欧美乱极品 | av在线之家电影网站 | 色com网| 亚洲成av人片在线观看www | 在线免费高清视频 | 成年人三级网站 | 久久久91精品国产一区二区精品 | 亚洲男男gaygay无套 | 日韩视频在线不卡 | 91mv.cool在线观看 | 国产精品久久久久婷婷二区次 | 久久免费的视频 | av线上免费看 | 992tv又爽又黄的免费视频 | 久久99国产精品二区护士 | 亚洲手机天堂 | 精品一区二区三区久久久 | 国产精品a级 | www.亚洲视频 | a色视频 | 亚洲综合成人av | 国产一级视频 | 天天做夜夜做 | 国产免费一区二区三区网站免费 | 天天爱天天射天天干天天 | 91.麻豆视频| 91黄色在线视频 | 粉嫩aⅴ一区二区三区 | 99免费视频 | 午夜婷婷网 | 色网站在线看 | 久久久精华网 | 福利一区二区三区四区 | 久久久久久久久久久网 | 精品麻豆| 国产成人精品午夜在线播放 | 91精品视频免费在线观看 | 欧美少妇的秘密 | 亚洲影院天堂 | 久av在线 | 91丨九色丨国产在线 | 在线免费色视频 | 国产人免费人成免费视频 | 久久国产精品久久精品国产演员表 | 在线免费黄网站 | 99草视频在线观看 | 91精品在线播放 | 最新超碰| 天天做天天爽 | 免费国产亚洲视频 | 欧美精品久久久久性色 | 国产视频在线看 | 手机版av在线 | 91毛片在线 | 午夜av免费 | 色999精品 | 一区二区三区免费在线观看视频 | 久久精品一区二区 | 欧美小视频在线 | 成人黄色大片在线免费观看 | 国产一区福利在线 | 亚洲视频 中文字幕 | 久久精品久久精品久久 | 久射网| 天天射天天干天天插 | 五月婷激情 | 久久久av免费 | 日韩欧美黄色网址 | 91视频下载 | 天天射天天射 | 日韩综合视频在线观看 | 超碰人在线 | 91在线观看视频网站 | 久久国产欧美日韩精品 | 午夜12点 | 在线成人一区 | 国产一级二级视频 | 国产欧美日韩精品一区二区免费 | 国产精品美女在线 | 国产精品久久久久一区二区 | 国产三级久久久 | 久久手机视频 | 91在线免费播放 | 尤物九九久久国产精品的分类 | 韩国精品一区二区三区六区色诱 | 狠狠色丁香婷综合久久 | 日韩欧美有码在线 | 亚洲精品资源在线观看 | 日日干天天射 | 国产精品久久片 | 免费a级黄色毛片 | 国产成人精品一区二区在线 | 国产精品专区在线观看 | 在线观看网站你懂的 | 亚洲人视频在线 | 丁香5月婷婷| 婷婷丁香九月 | 国产精品成人免费一区久久羞羞 | 福利视频导航网址 | 在线看中文字幕 | 天天操天天添 | 欧美日韩免费一区二区 | 亚洲专区欧美专区 | 国产精品久久久久久久久久久杏吧 | 亚洲国产av精品毛片鲁大师 | 国产精品久久一区二区三区, | 成人免费观看视频大全 | 91九色蝌蚪国产 | 在线观看日本韩国电影 | 免费观看视频的网站 | 国产成人久久av免费高清密臂 | 天天综合网在线 | 日韩欧美99| 日韩aⅴ视频 | 国产韩国精品一区二区三区 | 91资源在线观看 | 国产精品九九九九九九 | 免费视频二区 | 日韩精品久久一区二区 | 国产精品亚洲片在线播放 | 久久精品国产成人 | 亚洲国产中文字幕在线 | 天天操天天爱天天干 | 国产手机在线观看视频 | 91欧美日韩国产 | 高清不卡一区二区三区 | 色就色,综合激情 | 国产大陆亚洲精品国产 | 亚洲视频免费在线观看 | 特级a毛片| 婷婷久久网站 | 亚洲精品视频一二三 | 国产小视频免费观看 | 欧美一级日韩三级 | 99久久日韩精品免费热麻豆美女 | 国产特级毛片aaaaaa高清 | 国产精品va在线观看入 | 黄色大片日本免费大片 | 久久综合九色综合久久久精品综合 | 国产在线观看91 | 久久免费的精品国产v∧ | 久久y | 九九九九热精品免费视频点播观看 | 99精品在这里 | 久久人人爽爽人人爽人人片av | 日韩av一区二区三区四区 | 亚洲小视频在线 | 91免费视频黄 | 国产小视频免费在线网址 | 国产一区网 | 欧美大片www | 欧美一区二区在线看 | 草樱av | 日韩精品免费一区二区 | 在线观看一区 | 九九在线精品视频 | 久草视频在线新免费 | 国产一区二区免费看 | 国产精品99久久久久人中文网介绍 | 超碰97中文| 国产黄色片久久久 | 在线观看国产亚洲 | 天天干,天天插 | 亚洲日本va午夜在线电影 | 国产欧美精品在线观看 | 狠狠的日日 | 久久综合九色综合久久久精品综合 | 日韩av高清 | 五月天综合在线 | 一区二区精品在线观看 | 香蕉视频久久 | 天堂av在线中文在线 | 日韩在线短视频 | 日本三级人妇 | 美女在线观看网站 | 91污污| www麻豆视频 | 黄色免费看片网站 | 波多野结衣最新 | 亚洲午夜电影网 | 日韩免费观看av | 91精品国产91久久久久久三级 | 麻豆视频免费版 | 高清精品久久 | 色操插 | 中文字幕乱码在线播放 | 久久久夜色 | 国产手机精品视频 | 亚洲精品一区二区在线观看 | 青春草视频在线播放 | 国产最新视频在线观看 | 精品国产伦一区二区三区观看体验 | 国产婷婷久久 | 国产精品电影在线 | 免费国产在线精品 | 天天操天天摸天天射 | av中文字幕亚洲 | 黄色成品视频 | 日韩av免费一区二区 | 精品综合久久 | 国产色网 | 久久午夜网| 国产精品麻豆91 | 久久久精品福利视频 | 欧美激情视频一区二区三区免费 | 99riav1国产精品视频 | 国产福利免费在线观看 | 久久色网站 | 国产精品国产自产拍高清av | 欧美日韩高清在线 | 久久国产成人午夜av影院宅 | 最新av在线播放 | 精品影院一区二区久久久 | 丁香色天天| 蜜臀久久99精品久久久无需会员 | 久久国产精品久久精品 | 黄色av一级 | 国产资源| av九九九 | 中文字幕在线电影 | 91综合久久一区二区 | 久久精品国产免费看久久精品 | 国产一区福利 | 国产青草视频在线观看 | 亚洲va在线va天堂 | 亚洲国产精彩中文乱码av | 99色在线观看| 久久久午夜剧场 | 久久天天躁狠狠躁夜夜不卡公司 | 国产精品久久二区 | 成人毛片在线观看视频 | 美女av免费看 | 久草在线网址 | 成人午夜精品久久久久久久3d | 国产精品黄网站在线观看 | 极品中文字幕 | 亚洲理论在线观看 | 国产福利免费在线观看 | 66av99精品福利视频在线 | 波多野结衣一区 | 欧美了一区在线观看 | 激情www| 国产精品九九九九九九 | 午夜视频免费在线观看 | 久久久精品小视频 | 9i看片成人免费看片 | 国产午夜免费视频 | 精品一区精品二区高清 | 国产91精品久久久久久 | 91福利视频久久久久 | av在线免费网 | 99视频在线免费观看 | 日韩伦理片一区二区三区 | 96久久| 日韩亚洲在线视频 | 美女在线国产 | 精品国产一区二区三区噜噜噜 | 国产在线最新 | 欧美一区免费观看 | 欧美色噜噜噜 | 欧美日韩在线观看一区二区 | 欧美一级电影片 | 中文字幕在线视频第一页 | 国产精品高清在线观看 | 久久久91精品国产一区二区精品 | 久久精品美女视频网站 | 天天操夜夜操 | 美女激情影院 | 91精品久久香蕉国产线看观看 | 久草a在线 | av综合 日韩| 欧美激情视频久久 | 973理论片235影院9 | 狠狠干狠狠久久 | 亚洲黄色成人 | 亚洲精品视频在线观看免费 | 欧美a级成人淫片免费看 | 国产成人精品久久久 | 久久草草热国产精品直播 | 日日爱av| 91亚洲狠狠婷婷综合久久久 | 久久午夜国产精品 | 五月精品 | se视频网址 | 2021国产在线视频 | 日韩在线观看小视频 | 在线午夜电影神马影院 | 日韩在线免费高清视频 | 国产精品99页 | 成人久久18免费网站麻豆 | 黄色免费观看网址 | 日韩影视大全 | 免费一级片视频 | 丁香av在线| 成人a级免费视频 | 免费高清在线观看成人 | 在线成人性视频 | 91自拍成人 | 精品一二 | 国产看片免费 | 国产中文字幕国产 | 玖玖视频免费在线 | 99久久er热在这里只有精品15 | 97av免费视频| 九九九九热精品免费视频点播观看 | 麻豆精品国产传媒 | 日本三级久久久 | 99福利影院| 337p西西人体大胆瓣开下部 | av成人免费 | 亚洲精欧美一区二区精品 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 亚洲日本在线一区 | 天天摸夜夜操 | 欧美激情综合五月色丁香小说 | 婷婷丁香狠狠爱 | 免费看黄在线观看 | 婷婷丁香色| 亚洲精品网站在线 | 中文在线字幕观看电影 | 91看片在线观看 | 亚洲综合在线视频 | 免费在线黄色av | 免费看在线看www777 | 黄色国产区 | 国产成人精品国内自产拍免费看 | 丁香婷婷深情五月亚洲 | 日韩在线观看视频一区二区三区 | 亚洲国产成人在线观看 | 69成人在线| 国产精品麻豆欧美日韩ww | 国产精品24小时在线观看 | 69视频国产 | 国产精品一区在线 | 久久久久久高清 | 91天天操 | 久草在线视频首页 | 极品美女被弄高潮视频网站 | 国产在线观看,日本 | 美女av免费看 | 国产美女网站视频 | 亚洲作爱视频 | 久久精品中文字幕免费mv | 天天玩天天操天天射 | 天天操综 | 特级毛片aaa| 国产一级黄大片 | 九九视频精品免费 | 国产一区二区精品久久 | 久久天天操 | 黄色网www | 国产精品一区二区视频 | 精品国产视频在线 | 日韩一区二区三区免费视频 | 一区二区三区四区五区在线视频 | 国产精品h在线观看 | 一区二区欧美在线观看 | 成人性生交大片免费看中文网站 | 日韩a欧美 | 欧美精品在线视频观看 | 欧美日韩高清一区二区三区 | 99久久精品国产系列 | 国产欧美日韩一区 | 91污污视频在线观看 | 国产一区免费在线观看 | 亚洲综合欧美日韩狠狠色 | 91精品国产九九九久久久亚洲 | 高清久久久 | 中文字幕av电影下载 | 久久精品二区 | 黄色的网站在线 | 欧美日韩一级久久久久久免费看 | 麻豆精品在线 | 九九九在线观看 | 91视频免费看网站 | 久久久久亚洲精品成人网小说 | 国产成人一区二区三区久久精品 | 91精品91 | 日本精品久久久一区二区三区 | 嫩草伊人久久精品少妇av | 国产精品久久久久影视 | 亚洲视频 一区 | 国产成人精品一区二区三区福利 | 中文字幕在线免费看 | 91高清视频 | 一区二区三区四区在线免费观看 | 国产第一福利 | 玖玖玖在线| 欧美视频日韩视频 | 精品国产一区二区三区久久久久久 | 国产精品成人免费一区久久羞羞 | 国产成人久久 | 婷婷射五月 | 成年人国产在线观看 | 激情婷婷色 | 深夜免费小视频 | 成人久久18免费网站图片 | 日本久久不卡视频 | 欧美日韩在线播放一区 | 日本在线中文在线 | 81精品国产乱码久久久久久 | 日女人免费视频 | 免费国产在线观看 | 国产小视频免费在线观看 | 在线视频观看国产 | 少妇精品久久久一区二区免费 | 麻豆视频免费在线观看 | 久久一区精品 | 日韩视频a | 亚洲精品九九 | 在线不卡的av| 91九色蝌蚪视频在线 | 午夜精品久久久久99热app | 绯色av一区 | 欧美日韩二区在线 | 欧美性色xo影院 | 久久公开视频 | 亚洲美女精品 | 五月天六月婷 | 91在线超碰 | 国产精品欧美日韩 | 久久激五月天综合精品 | 免费成人在线观看视频 | av一本久道久久波多野结衣 | 国产经典 欧美精品 | 五月天高清欧美mv | 久久国产精品色av免费看 | 免费网站在线观看人 | 婷婷.com| 欧美午夜一区二区福利视频 | 成人黄色中文字幕 | 国产成人精品一区二区三区网站观看 | 干天天| 精品一区二区免费视频 | 午夜美女福利直播 | 国产成人av网 | 六月久久婷婷 | 中文字幕专区高清在线观看 | 久久69精品| 久久精品79国产精品 | 国产一二区视频 | 娇妻呻吟一区二区三区 | 午夜123| 奇米影视8888 | 国产在线更新 | 免费高清在线视频一区· | 欧美色888 | 久久综合九色综合97_ 久久久 | 日本性xxx | 日韩一区二区免费播放 | 日日夜夜精品免费 | 五月激情在线 | 99亚洲精品 | 成人va视频 | 亚洲日本韩国一区二区 | 日韩动态视频 | 激情丁香 | av一级一片 | 97国产大学生情侣酒店的特点 | 国产精品乱码久久久久久1区2区 | 人人搞人人搞 | 91网页版在线观看 | 欧美一级性生活 | 一本—道久久a久久精品蜜桃 | 日韩av电影免费观看 | 涩涩网站在线看 | 六月丁香社区 | 中文字幕色站 | 日韩中文字幕亚洲一区二区va在线 | 亚洲午夜久久久久久久久 | www.大网伊人| 久久久久久久久久久久久影院 | 在线视频 区| 丁香久久五月 | 国产无套精品久久久久久 | 精品国产视频在线 | 欧美精品久久 | 久久成人久久 | 久久99精品国产99久久6尤 | 日韩一区二区三区免费视频 | 亚洲视屏 | 久久久久免费看 | 五月天综合网站 | 99在线精品视频在线观看 | 免费久久久久久久 | 人人澡人摸人人添学生av | 国产精品v a免费视频 | 久久男人中文字幕资源站 | 国产高清第一页 | 国产成人亚洲在线观看 | 精品久久一区二区三区 | 精品在线视频一区 | 国产午夜三级一区二区三 | 日韩精品免费一区二区三区 | 久久久综合精品 | 麻豆一精品传二传媒短视频 | www视频在线观看 | 尤物九九久久国产精品的分类 | 国产亚洲一区二区在线观看 | 国产成人精品一区二区三区在线观看 | 四虎永久精品在线 | 视频直播国产精品 | 天天爽天天碰狠狠添 | 久久国产免 | 日韩电影一区二区在线 | 久久综合电影 | 日韩欧美国产精品 | 国内精品免费 | 丁香六月综合网 | 日韩网站免费观看 | 国产欧美在线一区 | 成人在线观看网址 | 天天玩天天干 | 国产黄色大片免费看 |