精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美伊人久久大香线蕉综合69| 成人午夜看片网址| 在线午夜精品自拍| 久久久精品高清| av软件在线观看| 成人av中文字幕| 国产成人av在线| 疯狂撞击丝袜人妻| 99re6热只有精品免费观看| 五月婷婷激情综合网| 日韩欧美国产二区| 精品毛片在线观看| 亚洲一区二区动漫| 久久福利视频导航| 三叶草欧洲码在线| 日韩一区二区三免费高清在线观看| 一二三四区精品视频| 欧美一二三区| 亚洲国产精品二区| 首页亚洲欧美制服丝腿| 欧美精品免费看| 中文字幕一区二区人妻在线不卡| www.欧美视频| 欧美性猛交xxxx乱大交3| 伊人色综合影院| 亚洲欧洲成人在线| 国产一区免费电影| 国产成人精品一区| 精品无码人妻一区二区三区品| 国产精品一在线观看| 欧美一区二区三区公司| 天堂中文视频在线| 免费h在线看| 亚洲精品美国一| 日韩欧美精品一区二区三区经典| 欧美天堂在线视频| 精品一区二区三区的国产在线播放 | 国产三级久久久| 好吊色欧美一区二区三区| 99久久久久久久| 日韩精品电影一区亚洲| 8x拔播拔播x8国产精品| 免费中文字幕在线观看| 四虎成人精品永久免费av九九| 日韩精品有码在线观看| 9.1在线观看免费| 国产95亚洲| 欧美精品第1页| 久久久久国产精品熟女影院| 黑人巨大亚洲一区二区久| 精品国产91久久久久久老师| 国产夫妻自拍一区| 日本性爱视频在线观看| 亚洲精品国产精品乱码不99| 樱空桃在线播放| 欧美成人视屏| 国产精品国产三级国产| 午夜精品区一区二区三 | 亚洲网址你懂得| 性囗交免费视频观看| 97超碰成人| 精品国一区二区三区| 成人免费播放视频| 视频免费一区二区| 日韩欧美的一区| 先锋资源在线视频| 亚洲综合影院| 精品国产免费久久| 在线播放av网址| h视频久久久| 日韩av综合中文字幕| 国产肉体xxxx裸体784大胆| 网红女主播少妇精品视频| 日韩经典中文字幕| 精品无码人妻一区| 波多野结衣在线播放一区| 中文字幕亚洲综合久久| 91高清免费看| 亚洲高清成人| 欧洲美女7788成人免费视频| 麻豆成人免费视频| 美女免费视频一区| 97超碰资源| 日本美女一级片| 久久久电影一区二区三区| 亚洲电影网站| 91cn在线观看| 疯狂做受xxxx高潮欧美日本| 国产福利视频在线播放| 成人精品国产| 日韩视频免费观看高清在线视频| 亚洲婷婷在线观看| 少妇一区二区视频| 久久这里有精品视频| 久久精品人妻一区二区三区| 国产精品三上| 91精品视频在线| 少妇高潮一区二区三区99小说| 国产亚洲欧美中文| 日韩视频 中文字幕| 自拍在线观看| 欧美一区二区三区四区视频| 大黑人交xxx极品hd| 日韩在线综合| 性欧美视频videos6一9| 中文字幕在线观看欧美| 成人动漫在线一区| 亚洲精品久久区二区三区蜜桃臀| 国产嫩草在线视频| 在线观看视频91| 一级黄色免费视频| 日韩精品dvd| 7m精品福利视频导航| 亚洲系列第一页| 99久久精品国产一区二区三区| 亚洲精品美女久久7777777| 99爱在线观看| 91精品国产91热久久久做人人| 亚洲欧美在线不卡| 欧美成人有码| 国产精品久久久久秋霞鲁丝| 天堂成人在线视频| 亚洲欧美一区二区三区国产精品| 99久久国产宗和精品1上映| 91国内精品| 久久精品人人做人人爽| 精品不卡一区二区| 成人黄色网址在线观看| 中文字幕日韩一区二区三区不卡| 久久青青视频| 国产视频欧美视频| 中文在线观看免费网站| 狠狠色丁香久久婷婷综合_中| 欧美日韩无遮挡| www.超碰在线| 亚洲成人激情在线观看| 日本a级片视频| 麻豆精品一二三| 日韩影片在线播放| 性欧美18一19sex性欧美| 日韩久久精品电影| 日产欧产va高清| 成人在线一区二区三区| av磁力番号网| 国产一区 二区| 久久久精品在线| 国产毛片一区二区三区va在线 | 欧美国产日韩在线观看成人| 免费看欧美女人艹b| 日本免费高清一区| 免费观看欧美大片| 亚洲精品视频在线观看视频| 国产 日韩 欧美 在线| 成人免费电影视频| 青青草国产精品视频| 老司机精品视频在线播放| 久久久亚洲影院| 人妻一区二区三区免费| 亚洲午夜精品网| 色综合久久五月| 久久久久久久高潮| 日本不卡高清视频一区| 精品欧美日韩精品| 中文字幕亚洲一区在线观看| 国产精品久久久久久免费免熟| 亚洲视频免费在线观看| 性生活在线视频| 亚洲裸体俱乐部裸体舞表演av| 国内精品久久国产| 国产精品迅雷| 中文字幕亚洲欧美在线| 国产露脸91国语对白| 亚洲综合图片区| avtt香蕉久久| 日韩成人精品在线| 日本黄色播放器| 嗯用力啊快一点好舒服小柔久久| 欧美精品福利视频| 精品欧美不卡一区二区在线观看| 欧美日韩综合在线| 国产探花在线播放| av午夜精品一区二区三区| 国产三级三级三级看三级| 久久久久久久久99精品大| 国产女人水真多18毛片18精品 | 日本精品久久久久中文| av资源在线观看免费高清| 日本久久一区二区| 国产又黄又粗的视频| 精一区二区三区| 久久这里只有精品8| 琪琪久久久久日韩精品 | 色吧亚洲日本| 国产精品视区| 91精品国产自产在线观看永久| 成人免费观看视频大全| 国产高清一区二区| 色爱区综合激月婷婷| jizzjizzjizz国产| 成人高清视频在线观看| 男女污污的视频| 欧美久久影院| 亚洲国产精品久久久久久女王| 视频一区中文字幕精品| 国产91色在线免费| 日本片在线观看| 在线视频精品一| 欧美一区二区三区黄片| 欧美猛男男办公室激情| 好吊妞视频一区二区三区| 国产精品久久久久久妇女6080| 国产69视频在线观看| 美美哒免费高清在线观看视频一区二区| 欧美大黑帍在线播放| 日韩欧美字幕| 欧美三级电影在线播放| 丁香一区二区| 91嫩草在线视频| 成人不卡视频| 国产91精品高潮白浆喷水| 午夜成年人在线免费视频| 一区二区三区精品99久久| 五月色婷婷综合| 日韩视频一区二区三区| 国产又粗又大又爽视频| 91成人国产精品| 久久久久亚洲av成人毛片韩| 亚洲综合精品久久| 国产日韩欧美在线观看视频| 欧美极品少妇xxxxⅹ高跟鞋| 无码人妻精品一区二区三区温州| 国产成人av一区二区三区在线| 91亚洲精品久久久蜜桃借种| 免费不卡在线视频| 无人在线观看的免费高清视频| 国产福利一区二区三区在线播放| 免费视频亚洲| 午夜亚洲视频| 国产精品无遮挡| 欧美精品一区在线观看| 国产精品xxxxx| 日韩中字在线观看| 国产又黄又粗又猛又爽的| 爽爽视频在线观看| 日本免费成人| 韩国av一区二区三区| 一区二区三区四区视频在线观看 | 成人疯狂猛交xxx| 巨胸喷奶水www久久久| 国产成人在线精品| 91精品韩国| 国产精品久久一区| 日韩欧美2区| 国产精品久久久久久久久久久久| 成人日韩精品| 国产精品久久久亚洲| 成人h在线观看| 国产一区二中文字幕在线看| 久久精品黄色| 91在线直播亚洲| 亚洲天堂av资源在线观看| 国产不卡一区二区在线观看 | 日本亚洲欧美天堂免费| 中文字幕乱码人妻综合二区三区| 久久综合九色综合欧美狠狠| 一级特黄性色生活片| 奇米色一区二区| 最新免费av网址| 国产在线视频精品一区| 韩国av中国字幕| 92国产精品观看| 欧美 日韩 成人| 国产偷国产偷亚洲高清人白洁| 熟女俱乐部一区二区| 国产精品久久久久久久久果冻传媒| 毛片视频免费播放| 亚洲乱码中文字幕综合| www..com国产| 欧美三级电影一区| www.激情五月| 亚洲欧美精品中文字幕在线| 91社区在线| 欧美激情综合色| 超碰超碰人人人人精品| 91精品国产自产在线观看永久| 中文一区二区三区四区| 美女一区视频| 香蕉视频国产精品| av黄色在线网站| 黑人巨大精品欧美黑白配亚洲| 无码人妻一区二区三区免费n鬼沢| 91视频免费观看| 亚洲国产123| 精品色蜜蜜精品视频在线观看| 中文字幕777| 亚洲国产欧美在线成人app| 国产永久av在线| 久久久久久久香蕉网| 免费亚洲电影| 成人在线视频电影| 女人丝袜激情亚洲| 99在线观看视频免费| 秋霞午夜av一区二区三区| youjizz.com日本| 国产亚洲精久久久久久| 麻豆changesxxx国产| 在线看不卡av| 日韩一级在线播放| 久久久精品999| 亚洲四虎影院| 国产精品久久精品视| 久久亚洲国产| 国产一区亚洲二区三区| 国产成人免费在线视频| 五月天免费网站| 欧美日韩中国免费专区在线看| 99久久国产免费| 在线视频国产日韩| 最新欧美色图| 国产精成人品localhost| 久久大综合网| 无码人妻丰满熟妇区毛片| 成人教育av在线| 欧洲猛交xxxx乱大交3| 欧美日韩国产另类一区| 精品999视频| 8090成年在线看片午夜| youjizz欧美| 四虎精品欧美一区二区免费| 蜜桃精品视频在线观看| 加勒比一区二区| 五月天激情小说综合| 精品黑人一区二区三区国语馆| 久久激情五月丁香伊人| 成人精品动漫| 亚洲国产婷婷香蕉久久久久久99| 国产精品日本欧美一区二区三区| 日韩精品视频一区二区| 亚洲国产一区二区三区青草影视| 国产日韩欧美视频在线观看| 色吧影院999| 久久国产三级| 一区二区在线观| 美女视频一区在线观看| www久久久久久久| 在线观看av一区| av片在线免费观看| 国产精品国产三级国产aⅴ9色| 国产欧美日韩一区二区三区四区| 日韩黄色片视频| 国产午夜精品久久久久久免费视| 凹凸精品一区二区三区| 伊人久久五月天| 中文字幕日本一区| 在线视频亚洲自拍| 激情欧美日韩一区二区| 男女性高潮免费网站| 日韩视频在线观看一区二区| 日韩欧美一起| 国产精品区一区二区三含羞草| 91久久久久| 9.1成人看片免费版| 欧美亚洲一区三区| 思思99re6国产在线播放| 91香蕉嫩草影院入口| 欧美阿v一级看视频| 国产视频久久久久久| 狠狠色狠狠色综合日日五| 免费一级毛片在线观看| 国产精品免费久久久久影院| 999视频精品| 亚洲av午夜精品一区二区三区| 亚洲成人免费在线观看| 青草久久伊人| 91精品久久久久久久久久久久久久 | 日韩亚洲欧美一区二区三区| 色婷婷av在线| 久久国产欧美精品| 美女一区二区三区| 免费在线看黄网址| 亚洲欧美日韩直播| www欧美在线观看| 黄色一级视频片| 亚洲国产精品黑人久久久| av无码精品一区二区三区宅噜噜| 午夜精品一区二区三区在线播放 | 国产高清不卡一区二区| 91午夜视频在线观看| 在线观看视频99| 无码国模国产在线观看| 日本黄网站免费| 亚洲乱码精品一二三四区日韩在线| 欧美一级在线免费观看| 国产精品免费网站| 韩国自拍一区| 欧美成人另类视频| 欧美精品一区男女天堂| 日韩免费大片| 丰满人妻中伦妇伦精品app| 亚洲天堂免费看|