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

android apk 防止反編譯技術第一篇-加殼技術

移動開發 Android
所謂apk的加殼技術和pc exe的加殼原理一樣,就是在程序的外面再包裹上另外一段代碼,保護里面的代碼不被非法修改或反編譯,在程序運行的時候優先取得程序的控制權做一些我們自己想做的工作。(哈哈,跟病毒的原理差不多)

做android framework方面的工作將近三年的時間了,現在公司讓做一下android apk安全方面的研究,于是最近就在網上找大量的資料來學習。現在將最近學習成果做一下整理總結。學習的這些成果我會做成一個系列慢慢寫出來與大家分享,共同進步。這篇主要講apk的加殼技術,廢話不多說了直接進入正題。

一、加殼技術原理

所謂apk的加殼技術和pc exe的加殼原理一樣,就是在程序的外面再包裹上另外一段代碼,保護里面的代碼不被非法修改或反編譯,在程序運行的時候優先取得程序的控制權做一些我們自己想做的工作。(哈哈,跟病毒的原理差不多)

PC exe的加殼原理如下:

二、android apk加殼實現

要想實現加殼需要解決的技術點如下:

(1)怎么第一時間執行我們的加殼程序?

首先根據上面的原理我們在apk中要想優先取得程序的控制權作為android apk的開發人員都知道Application會被系統第一時間調用而我們的程序也會放在這里執行。

(2)怎么將我們的加殼程序和原有的android apk文件合并到一起?

我們知道android apk最終會打包生成dex文件,我們可以將我們的程序生成dex文件后,將我們要進行加殼的apk和我們dex文件合并成一個文件,然后修改dex文件頭中的checksum、signature 和file_size的信息,并且要附加加殼的apk的長度信息在dex文件中,以便我們進行解殼保證原來apk的正常運行。加完殼后整個文件的結構如下:

(3)怎么將原來的apk正常的運行起來?

按照(2)中的合并方式在當我們的程序首先運行起來后,逆向讀取dex文件獲取原來的apk文件通過DexClassLoader動態加載。

具體實現如下:

(1)修改原來apk的AndroidMainfest.xml文件,假如原來apk的AndroidMainfest.xml文件內容如下:

1. <application

2. android:icon="@drawable/ic_launcher"

3. android:label="@string/app_name"

4. android:theme="@style/AppTheme" android:name="com.android.MyApplication" >

5. </application>

修改后的內容如下:

1. <application

2. android:icon="@drawable/ic_launcher"

3. android:label="@string/app_name"

4. android:theme="@style/AppTheme" android:name="com.android.shellApplication" >

5. <meta-data android:name="APPLICATION_CLASS_NAME" android:value="com.android.MyApplication"/>

6. </application>

com.android.shellApplication這個就是我們的程序的的application的名稱,而

7. <meta-data android:name="APPLICATION_CLASS_NAME" android:value="com.android.MyApplication"/>

是原來的apk的application名稱。

(2)合并文件代碼實現如下:
?

  1. public class ShellTool { 
  2. /** 
  3. * @param args 
  4. */ 
  5. public static void main(String[] args) { 
  6. // TODO Auto-generated method stub 
  7. try { 
  8. File payloadSrcFile = new File("payload.apk");//我們要加殼的apk文件 
  9. File unShellDexFile = new File("classes.dex");//我們的程序生成的dex文件 
  10. byte[] payloadArray = encrpt(readFileBytes(payloadSrcFile)); 
  11. byte[] unShellDexArray = readFileBytes(unShellDexFile); 
  12. int payloadLen = payloadArray.length; 
  13. int unShellDexLen = unShellDexArray.length; 
  14. int totalLen = payloadLen + unShellDexLen +4
  15. byte[] newdex = new byte[totalLen]; 
  16. //添加我們程序的dex 
  17. System.arraycopy(unShellDexArray, 0, newdex, 0, unShellDexLen); 
  18. //添加要加殼的apk文件 
  19. System.arraycopy(payloadArray, 0, newdex, unShellDexLen, 
  20. payloadLen); 
  21. //添加apk文件長度 
  22. System.arraycopy(intToByte(payloadLen), 0, newdex, totalLen-44); 
  23. //修改DEX file size文件頭 
  24. fixFileSizeHeader(newdex); 
  25. //修改DEX SHA1 文件頭 
  26. fixSHA1Header(newdex); 
  27. //修改DEX CheckSum文件頭 
  28. fixCheckSumHeader(newdex); 
  29.  
  30.  
  31. String str = "outdir/classes.dex"
  32. File file = new File(str); 
  33. if (!file.exists()) { 
  34. file.createNewFile(); 
  35.  
  36. FileOutputStream localFileOutputStream = new FileOutputStream(str); 
  37. localFileOutputStream.write(newdex); 
  38. localFileOutputStream.flush(); 
  39. localFileOutputStream.close(); 
  40.  
  41.  
  42. catch (Exception e) { 
  43. // TODO Auto-generated catch block 
  44. e.printStackTrace(); 
  45.  
  46. //直接返回數據,讀者可以添加自己加密方法 
  47. private static byte[] encrpt(byte[] srcdata){ 
  48. return srcdata; 
  49.  
  50.  
  51. private static void fixCheckSumHeader(byte[] dexBytes) { 
  52. Adler32 adler = new Adler32(); 
  53. adler.update(dexBytes, 12, dexBytes.length - 12); 
  54. long value = adler.getValue(); 
  55. int va = (int) value; 
  56. byte[] newcs = intToByte(va); 
  57. byte[] recs = new byte[4]; 
  58. for (int i = 0; i < 4; i++) { 
  59. recs[i] = newcs[newcs.length - 1 - i]; 
  60. System.out.println(Integer.toHexString(newcs[i])); 
  61. System.arraycopy(recs, 0, dexBytes, 84); 
  62. System.out.println(Long.toHexString(value)); 
  63. System.out.println(); 
  64.  
  65.  
  66. public static byte[] intToByte(int number) { 
  67. byte[] b = new byte[4]; 
  68. for (int i = 3; i >= 0; i--) { 
  69. b[i] = (byte) (number % 256); 
  70. number >>= 8
  71. return b; 
  72.  
  73.  
  74. private static void fixSHA1Header(byte[] dexBytes) 
  75. throws NoSuchAlgorithmException { 
  76. MessageDigest md = MessageDigest.getInstance("SHA-1"); 
  77. md.update(dexBytes, 32, dexBytes.length - 32); 
  78. byte[] newdt = md.digest(); 
  79. System.arraycopy(newdt, 0, dexBytes, 1220); 
  80. String hexstr = ""
  81. for (int i = 0; i < newdt.length; i++) { 
  82. hexstr += Integer.toString((newdt[i] & 0xff) + 0x10016
  83. .substring(1); 
  84. System.out.println(hexstr); 
  85.  
  86.  
  87. private static void fixFileSizeHeader(byte[] dexBytes) { 
  88.  
  89.  
  90. byte[] newfs = intToByte(dexBytes.length); 
  91. System.out.println(Integer.toHexString(dexBytes.length)); 
  92. byte[] refs = new byte[4]; 
  93. for (int i = 0; i < 4; i++) { 
  94. refs[i] = newfs[newfs.length - 1 - i]; 
  95. System.out.println(Integer.toHexString(newfs[i])); 
  96. System.arraycopy(refs, 0, dexBytes, 324); 
  97.  
  98.  
  99. private static byte[] readFileBytes(File file) throws IOException { 
  100. byte[] arrayOfByte = new byte[1024]; 
  101. ByteArrayOutputStream localByteArrayOutputStream = new ByteArrayOutputStream(); 
  102. FileInputStream fis = new FileInputStream(file); 
  103. while (true) { 
  104. int i = fis.read(arrayOfByte); 
  105. if (i != -1) { 
  106. localByteArrayOutputStream.write(arrayOfByte, 0, i); 
  107. else { 
  108. return localByteArrayOutputStream.toByteArray(); 
  109.  
  110.  

(3)在我們的程序中加載運行原來的apk文件,代碼如下:

  1. public class shellApplication extends Application { 
  2.  
  3.  
  4. private static final String appkey = "APPLICATION_CLASS_NAME"
  5. private String apkFileName; 
  6. private String odexPath; 
  7. private String libPath; 
  8.  
  9.  
  10. protected void attachBaseContext(Context base) { 
  11. super.attachBaseContext(base); 
  12. try { 
  13. File odex = this.getDir("payload_odex", MODE_PRIVATE); 
  14. File libs = this.getDir("payload_lib", MODE_PRIVATE); 
  15. odexPath = odex.getAbsolutePath(); 
  16. libPath = libs.getAbsolutePath(); 
  17. apkFileName = odex.getAbsolutePath() + "/payload.apk"
  18. File dexFile = new File(apkFileName); 
  19. if (!dexFile.exists()) 
  20. dexFile.createNewFile(); 
  21. // 讀取程序classes.dex文件 
  22. byte[] dexdata = this.readDexFileFromApk(); 
  23. // 分離出解殼后的apk文件已用于動態加載 
  24. this.splitPayLoadFromDex(dexdata); 
  25. // 配置動態加載環境 
  26. Object currentActivityThread = RefInvoke.invokeStaticMethod( 
  27. "android.app.ActivityThread""currentActivityThread"
  28. new Class[] {}, new Object[] {}); 
  29. String packageName = this.getPackageName(); 
  30. HashMap mPackages = (HashMap) RefInvoke.getFieldOjbect( 
  31. "android.app.ActivityThread", currentActivityThread, 
  32. "mPackages"); 
  33. WeakReference wr = (WeakReference) mPackages.get(packageName); 
  34. DexClassLoader dLoader = new DexClassLoader(apkFileName, odexPath, 
  35. libPath, (ClassLoader) RefInvoke.getFieldOjbect( 
  36. "android.app.LoadedApk", wr.get(), "mClassLoader")); 
  37. RefInvoke.setFieldOjbect("android.app.LoadedApk""mClassLoader"
  38. wr.get(), dLoader); 
  39.  
  40.  
  41. catch (Exception e) { 
  42. // TODO Auto-generated catch block 
  43. e.printStackTrace(); 
  44.  
  45.  
  46. public void onCreate() { 
  47.  
  48.  
  49. // 如果源應用配置有Appliction對象,則替換為源應用Applicaiton,以便不影響源程序邏輯。 
  50. String appClassName = null
  51. try { 
  52. ApplicationInfo ai = this.getPackageManager() 
  53. .getApplicationInfo(this.getPackageName(), 
  54. PackageManager.GET_META_DATA); 
  55. Bundle bundle = ai.metaData; 
  56. if (bundle != null 
  57. && bundle.containsKey("APPLICATION_CLASS_NAME")) { 
  58. appClassName = bundle.getString("APPLICATION_CLASS_NAME"); 
  59. else { 
  60. return
  61. catch (NameNotFoundException e) { 
  62. // TODO Auto-generated catch block 
  63. e.printStackTrace(); 
  64.  
  65.  
  66. Object currentActivityThread = RefInvoke.invokeStaticMethod( 
  67. "android.app.ActivityThread""currentActivityThread"
  68. new Class[] {}, new Object[] {}); 
  69. Object mBoundApplication = RefInvoke.getFieldOjbect( 
  70. "android.app.ActivityThread", currentActivityThread, 
  71. "mBoundApplication"); 
  72. Object loadedApkInfo = RefInvoke.getFieldOjbect( 
  73. "android.app.ActivityThread$AppBindData"
  74. mBoundApplication, "info"); 
  75. RefInvoke.setFieldOjbect("android.app.LoadedApk""mApplication"
  76. loadedApkInfo, null); 
  77. Object oldApplication = RefInvoke.getFieldOjbect( 
  78. "android.app.ActivityThread", currentActivityThread, 
  79. "mInitialApplication"); 
  80. ArrayList<Application> mAllApplications = (ArrayList<Application>) RefInvoke 
  81. .getFieldOjbect("android.app.ActivityThread"
  82. currentActivityThread, "mAllApplications"); 
  83. mAllApplications.remove(oldApplication); 
  84. ApplicationInfo appinfo_In_LoadedApk = (ApplicationInfo) RefInvoke 
  85. .getFieldOjbect("android.app.LoadedApk", loadedApkInfo, 
  86. "mApplicationInfo"); 
  87. ApplicationInfo appinfo_In_AppBindData = (ApplicationInfo) RefInvoke 
  88. .getFieldOjbect("android.app.ActivityThread$AppBindData"
  89. mBoundApplication, "appInfo"); 
  90. appinfo_In_LoadedApk.className = appClassName; 
  91. appinfo_In_AppBindData.className = appClassName; 
  92. Application app = (Application) RefInvoke.invokeMethod( 
  93. "android.app.LoadedApk""makeApplication", loadedApkInfo, 
  94. new Class[] { boolean.class, Instrumentation.class }, 
  95. new Object[] { falsenull }); 
  96. RefInvoke.setFieldOjbect("android.app.ActivityThread"
  97. "mInitialApplication", currentActivityThread, app); 
  98.  
  99.  
  100. HashMap mProviderMap = (HashMap) RefInvoke.getFieldOjbect( 
  101. "android.app.ActivityThread", currentActivityThread, 
  102. "mProviderMap"); 
  103. Iterator it = mProviderMap.values().iterator(); 
  104. while (it.hasNext()) { 
  105. Object providerClientRecord = it.next(); 
  106. Object localProvider = RefInvoke.getFieldOjbect( 
  107. "android.app.ActivityThread$ProviderClientRecord"
  108. providerClientRecord, "mLocalProvider"); 
  109. RefInvoke.setFieldOjbect("android.content.ContentProvider"
  110. "mContext", localProvider, app); 
  111. app.onCreate(); 
  112.  
  113.  
  114. private void splitPayLoadFromDex(byte[] data) throws IOException { 
  115. byte[] apkdata = decrypt(data); 
  116. int ablen = apkdata.length; 
  117. byte[] dexlen = new byte[4]; 
  118. System.arraycopy(apkdata, ablen - 4, dexlen, 04); 
  119. ByteArrayInputStream bais = new ByteArrayInputStream(dexlen); 
  120. DataInputStream in = new DataInputStream(bais); 
  121. int readInt = in.readInt(); 
  122. System.out.println(Integer.toHexString(readInt)); 
  123. byte[] newdex = new byte[readInt]; 
  124. System.arraycopy(apkdata, ablen - 4 - readInt, newdex, 0, readInt); 
  125. File file = new File(apkFileName); 
  126. try { 
  127. FileOutputStream localFileOutputStream = new FileOutputStream(file); 
  128. localFileOutputStream.write(newdex); 
  129. localFileOutputStream.close(); 
  130.  
  131.  
  132. catch (IOException localIOException) { 
  133. throw new RuntimeException(localIOException); 
  134.  
  135.  
  136. ZipInputStream localZipInputStream = new ZipInputStream( 
  137. new BufferedInputStream(new FileInputStream(file))); 
  138. while (true) { 
  139. ZipEntry localZipEntry = localZipInputStream.getNextEntry(); 
  140. if (localZipEntry == null) { 
  141. localZipInputStream.close(); 
  142. break
  143. String name = localZipEntry.getName(); 
  144. if (name.startsWith("lib/") && name.endsWith(".so")) { 
  145. File storeFile = new File(libPath + "/" 
  146. + name.substring(name.lastIndexOf('/'))); 
  147. storeFile.createNewFile(); 
  148. FileOutputStream fos = new FileOutputStream(storeFile); 
  149. byte[] arrayOfByte = new byte[1024]; 
  150. while (true) { 
  151. int i = localZipInputStream.read(arrayOfByte); 
  152. if (i == -1
  153. break
  154. fos.write(arrayOfByte, 0, i); 
  155. fos.flush(); 
  156. fos.close(); 
  157. localZipInputStream.closeEntry(); 
  158. localZipInputStream.close(); 
  159.  
  160.  
  161.  
  162.  
  163. private byte[] readDexFileFromApk() throws IOException { 
  164. ByteArrayOutputStream dexByteArrayOutputStream = new ByteArrayOutputStream(); 
  165. ZipInputStream localZipInputStream = new ZipInputStream( 
  166. new BufferedInputStream(new FileInputStream( 
  167. this.getApplicationInfo().sourceDir))); 
  168. while (true) { 
  169. ZipEntry localZipEntry = localZipInputStream.getNextEntry(); 
  170. if (localZipEntry == null) { 
  171. localZipInputStream.close(); 
  172. break
  173. if (localZipEntry.getName().equals("classes.dex")) { 
  174. byte[] arrayOfByte = new byte[1024]; 
  175. while (true) { 
  176. int i = localZipInputStream.read(arrayOfByte); 
  177. if (i == -1
  178. break
  179. dexByteArrayOutputStream.write(arrayOfByte, 0, i); 
  180. localZipInputStream.closeEntry(); 
  181. localZipInputStream.close(); 
  182. return dexByteArrayOutputStream.toByteArray(); 
  183.  
  184.  
  185. // //直接返回數據,讀者可以添加自己解密方法 
  186. private byte[] decrypt(byte[] data) { 
  187. return data; 

 

責任編輯:chenqingxiang 來源: 51CTO
相關推薦

2015-07-20 16:37:11

2017-04-10 13:43:34

AndroidGradleAS

2011-03-14 15:52:50

Windows Azu

2014-03-28 13:14:33

2014-07-30 14:25:41

SwiftiBeacon

2015-05-27 09:32:29

iOS應用架構

2011-06-21 09:14:01

Oracle查詢

2022-08-01 08:18:58

網絡網絡協議

2015-07-13 15:52:18

反編譯Android APK

2021-11-30 19:58:51

Java問題排查

2013-04-15 10:00:14

Hyper-V虛擬化網絡

2022-03-29 08:18:32

位圖算法索引技術

2018-10-22 12:50:20

CDN網絡內容發布網絡

2023-06-26 00:26:40

I/OJava字節流

2025-04-02 08:15:00

惡意軟件終端安全網絡安全

2017-11-20 15:09:21

2013-12-10 09:50:03

技術技術博客

2022-05-30 21:47:21

技術目標PRD

2021-09-07 09:20:44

Hadoop數據容錯

2018-03-20 14:14:48

NB-IoT物聯網終端
點贊
收藏

51CTO技術棧公眾號

国产成人亚洲综合91精品| 欧美丰满嫩嫩电影| 欧美日韩一区二区三区在线观看免| 日本一二三区视频| 夜夜躁狠狠躁日日躁2021日韩| 91成人免费在线视频| 中文字幕在线亚洲精品| 韩国av免费在线| 日韩在线a电影| 操91在线视频| 一级片手机在线观看| 日本一区二区中文字幕| 亚洲福利一区二区| 亚洲精品久久区二区三区蜜桃臀| www.日韩高清| 日韩精品一二三四| 欧美国产精品日韩| 综合 欧美 亚洲日本| 精品伊人久久久| 欧美日韩成人综合天天影院 | 亚洲视频一二三四| 免费电影视频在线看| 国产亚洲欧美日韩日本| 风间由美一区二区三区| 亚洲在线观看av| 亚洲狠狠婷婷| 久久亚洲国产成人| 美女爆乳18禁www久久久久久 | 7777女厕盗摄久久久| 欧美色图色综合| 大片免费在线观看| 欧美经典一区二区| 欧美日韩高清免费| 搡老岳熟女国产熟妇| 韩国v欧美v亚洲v日本v| 国产精品免费网站| 波多野结衣av无码| 亚洲深夜福利| 久久久久久美女| 中文字幕在线2021| 日韩一区二区三区免费播放| 亚洲精品自拍视频| 亚洲一级av无码毛片精品| 久久伊人影院| 在线播放91灌醉迷j高跟美女 | 伊人亚洲精品| 欧美性大战久久久| 久久午夜夜伦鲁鲁一区二区| 午夜不卡影院| 日韩欧美黄色动漫| 日本wwww视频| 欧美18av| 日本韩国精品在线| 美女黄色片视频| 日韩电影免费观| 日韩欧美在线免费| 日韩一级免费在线观看| 吉吉日韩欧美| 91成人网在线| 中文字幕永久有效| 中文字幕成人| 日韩欧美黄色影院| 激情av中文字幕| 超碰97久久| 日韩一区二区在线看| 日本网站在线看| 日本99精品| 精品日产卡一卡二卡麻豆| 国产成人精品综合久久久久99| 精品精品视频| 精品美女一区二区三区| 久久久久国产精品无码免费看| 九色丨蝌蚪丨成人| 亚洲人av在线影院| jizz18女人高潮| 国产精品久久久久9999赢消| 久久的精品视频| 紧身裙女教师波多野结衣| 亚洲精品国产首次亮相| 欧美理论电影在线播放| 黄色小视频在线免费看| 另类激情亚洲| 国产精品无av码在线观看| 亚洲专区第一页| 国产成人午夜精品影院观看视频| 国产精品播放| 伦理片一区二区三区| 欧美激情一区二区| 老司机午夜网站| 日韩伦理在线一区| 欧美色男人天堂| 少妇性l交大片7724com| 国产乱人伦丫前精品视频| 亚洲精品一区二区久| 国产极品视频在线观看| 欧美精品大片| 欧美在线激情网| 亚洲一区二区三区高清视频| 国产精品99久久久| 日本不卡在线观看| a黄色片在线观看| 精品欧美aⅴ在线网站| 中文字幕视频在线免费观看| 天堂精品久久久久| 亚洲天堂第二页| 欧美成人手机视频| 日本大胆欧美人术艺术动态| 97碰碰视频| 国产视频三级在线观看播放| 亚洲最大成人网4388xx| 欧美精品成人网| 91成人精品在线| 在线观看日韩视频| 日本一区二区三区免费视频| 欧美aaaaa成人免费观看视频| 成人情视频高清免费观看电影| 大胆av不用播放器在线播放| 亚洲第一福利一区| 天天操狠狠操夜夜操| 久久激情av| 欧美另类极品videosbestfree| 中文字幕高清在线免费播放| 国产成人自拍网| 亚洲激情图片| xxx欧美xxx| 亚洲国产精品久久91精品| 二区三区四区视频| 日韩和欧美一区二区三区| 岛国视频一区| 成人在线观看亚洲| 欧美专区日韩专区| 精品少妇一区二区三区免费观| 欧美+日本+国产+在线a∨观看| 国产精品成人免费电影| 色婷婷视频在线| 一区二区三区精品视频在线| 国产无遮挡猛进猛出免费软件| 美女久久久久| 97国产一区二区精品久久呦| www.国产.com| 亚洲美女免费视频| 天天做天天干天天操| 日韩欧美大片| 国产精品久久久久久久久久 | 欧美性受xxx黑人xyx性爽| 9l国产精品久久久久麻豆| 日韩欧美猛交xxxxx无码| 久久精品九色| 另类少妇人与禽zozz0性伦| 中文字幕在线视频第一页| 久久久噜噜噜久久人人看| 国产男女无遮挡| 亚洲综合图色| 日本午夜精品理论片a级appf发布| 五十路在线观看| 欧美日韩裸体免费视频| 国产高清自拍视频| 国产精品毛片| 免费一区二区三区在在线视频| 国产在线天堂www网在线观看| 亚洲精品一区二区三区99 | 色婷婷精品久久二区二区蜜臂av| 在线天堂www在线国语对白| 亚洲作爱视频| 欧美另类网站| 欧美日一区二区三区| 在线观看欧美日韩| 在线观看中文字幕2021| 自拍偷拍亚洲激情| 麻豆精品国产传媒| 亚洲国产午夜| 日韩国产高清一区| 国产成人a视频高清在线观看| 色婷婷久久av| 国产三级伦理片| 亚洲五码中文字幕| 成人无码www在线看免费| 日韩高清一区二区| 特级黄色录像片| 成人黄色av网址| 欧美做爰性生交视频| 91caoporn在线| 日韩一区二区三区在线| 精品亚洲永久免费| 久久久久国产精品人| 最新国产黄色网址| 一区久久精品| 日本高清不卡三区| 国产999精品在线观看| 久久久久日韩精品久久久男男 | 日韩中文字幕在线免费观看| 国产乱码精品一区二三区蜜臂| 亚洲午夜私人影院| 日本一道本视频| 国产成人精品免费| 成年人小视频网站| 一区二区三区四区在线观看国产日韩| 黄色国产精品一区二区三区| 免费在线观看一区| 欧美激情精品久久久| 国产高清视频免费最新在线| 日韩一区二区三区免费看| 特级做a爱片免费69| 成人免费一区二区三区视频 | 欧洲av无码放荡人妇网站| 欧美mv日韩| 久久国产一区| 欧美在线在线| 国产精品福利在线| 中文字幕在线播放网址| 国产一区二区三区直播精品电影 | 色婷婷综合久久久中字幕精品久久| 久久精品视频va| 日韩大胆视频| 日韩精品影音先锋| 一级特黄特色的免费大片视频| 一区二区三区四区在线| 国产传媒视频在线| 91在线你懂得| 亚洲少妇一区二区| 美女网站色91| 免费观看成人网| 亚洲国产婷婷| 精品无码av无码免费专区| 成人免费电影网址| 欧美大香线蕉线伊人久久国产精品| 精品国产一区二区三区性色av| 国产精品久久久精品| 草草视频在线观看| 久久91精品国产| 国精产品一区| 最新中文字幕亚洲| 国产大片在线免费观看| 日韩精品在线免费观看视频| 亚洲成人黄色片| 91精品国产综合久久久久久久| 免费视频网站在线观看入口| 精品久久久久久亚洲精品| 久久久久久激情| 亚洲精品写真福利| 麻豆精品国产免费| 自拍偷拍亚洲综合| 国产高潮流白浆| 亚洲精品国产一区二区精华液| 成人黄色短视频| 中文字幕欧美区| 亚洲v国产v欧美v久久久久久| 久久这里只精品最新地址| 欲求不满的岳中文字幕| 99久久综合精品| 免费的av网站| 久久综合色综合88| 久久精品国产亚洲av麻豆| 91亚洲男人天堂| 亚洲成人日韩在线| 久久精品一区二区三区四区| 国产jjizz一区二区三区视频| 久久精品视频一区| 五月婷六月丁香| 国产精品久线观看视频| 欧日韩不卡视频| 自拍视频在线观看一区二区| 成人性生活毛片| 尤物av一区二区| 国产午夜精品无码一区二区| 午夜视频一区二区三区| 久久精品一二区| 色哟哟日韩精品| 一级黄色大片免费| 日韩写真欧美这视频| 成人免费观看在线视频| 日韩av网站电影| 搞黄视频免费在线观看| x99av成人免费| 日本欧美电影在线观看| 91精品国产色综合久久不卡98口 | 婷婷夜色潮精品综合在线| 日韩在线观看第一页| 色综合久久久久| 亚洲无码精品国产| 日韩精品一区二区三区在线播放 | 国产丝袜一区二区三区| 精品影院一区| 久久精品成人欧美大片| 丰满大乳少妇在线观看网站| 欧美野外猛男的大粗鳮| 久久91视频| 超碰97人人人人人蜜桃| 一区二区导航| 97超碰人人爱| 亚洲一区不卡| 日韩av一卡二卡三卡| 成人精品一区二区三区四区| aa一级黄色片| 综合欧美亚洲日本| 久久狠狠高潮亚洲精品| 欧美卡1卡2卡| 性感美女一级片| 中文字幕在线成人| 999福利在线视频| 国产欧美精品xxxx另类| 国产精品15p| 一级日韩一区在线观看| 亚洲高清电影| 国产传媒免费观看| 久久久久久综合| 久久久久黄色片| 欧美日韩一区二区三区视频| 天堂在线视频免费| 久久精品国产综合| 久久野战av| 国产日韩欧美亚洲一区| 婷婷丁香综合| 国产小视频精品| 9l国产精品久久久久麻豆| 国产suv一区二区三区| 在线欧美小视频| 五月婷婷狠狠干| 九九热r在线视频精品| 97欧美成人| 久久精品丝袜高跟鞋| 欧美天天视频| 天天久久综合网| 国产日韩成人精品| 免费在线不卡视频| 精品国产免费久久| 在线观看中文字幕的网站| 国产欧美一区二区三区在线看 | 国产精品波多野结衣| 亚洲在线一区| 800av在线播放| 亚洲一区二区三区四区在线免费观看| 一二三四区在线| 亚洲视频999| 性感美女一区二区在线观看| 国产一区二区在线网站| 国产精品v日韩精品v欧美精品网站| 亚洲综合av在线播放| 国产日韩精品视频一区| 日韩电影在线观看一区二区| 亚洲欧美日本精品| 亚洲国产成人二区| 久久av免费观看| 亚洲最黄网站| 添女人荫蒂视频| 亚洲成人av一区二区| 后入内射欧美99二区视频| 欧美老少做受xxxx高潮| 久久综合偷偷噜噜噜色| 亚洲最新免费视频| 久久99久久久欧美国产| 老司机成人免费视频| 欧美精品久久99| 最新黄网在线观看| 国产福利一区二区三区在线观看| 欧美视频在线观看| 国产+高潮+白浆+无码| 亚洲aⅴ怡春院| 欧美xxx.com| 国产精品视频久| 色呦哟—国产精品| 欧美性受xxxx黒人xyx性爽| 一区二区三区 在线观看视频| 国产91视频在线| 国内精品在线一区| 色婷婷狠狠五月综合天色拍 | 日韩大陆毛片av| 日本成人三级电影| 亚洲一区尤物| 国产成人精品亚洲777人妖| www.国产高清| 亚洲性av在线| 国产精品va视频| 国产欧美日韩网站| 国产日韩精品一区二区浪潮av| 亚洲无码精品国产| 欧美大片在线影院| 日韩母乳在线| 亚洲精品久久久中文字幕| 一区二区三区四区亚洲| 国产又爽又黄网站亚洲视频123| 91精品国产91久久| 色无极亚洲影院| 亚洲视频 中文字幕| 色噜噜夜夜夜综合网| 男人和女人做事情在线视频网站免费观看| 亚洲精品免费一区二区三区| 亚洲美女黄色| 手机av在线不卡| 亚洲福利视频久久| 国产精品久久久久77777丨| 日韩亚洲欧美一区二区| 国产人久久人人人人爽| 国产乱色精品成人免费视频| 2020欧美日韩在线视频| 99久久影视| 亚洲精品乱码久久久久久久| 欧美高清www午色夜在线视频| 日韩av一卡| 中文字幕乱码免费|