1、引發(fā)思考的現(xiàn)象
知乎詳情頁太慢了,想抓包看為什么慢,結(jié)果發(fā)現(xiàn)抓不到!
1.1 抓不到的原因
- Charles 抓包方式-中間人攻擊(英語:Man-in-the-middle attack,縮寫:MITM)
維基百科解釋:在密碼學(xué)和計算機安全領(lǐng)域中是指攻擊者與通訊的兩端分別創(chuàng)建獨立的聯(lián)系,并交換其所收到的數(shù)據(jù),使通訊的兩端認(rèn)為他們正在通過一個私密的連接與對方直接對話,但事實上整個會話都被攻擊者完全控制。在中間人攻擊中,攻擊者可以攔截通訊雙方的通話并插入新的內(nèi)容。在許多情況下這是很簡單的(例如,在一個未加密的Wi-Fi 無線接入點的接受范圍內(nèi)的中間人攻擊者,可以將自己作為一個中間人插入這個網(wǎng)絡(luò))
2、防止自己app被抓包的幾種方式
2.1 接口訪問不使用代理
URL url = new URL(urlStr);
urlConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
OkHttpClient client = new OkHttpClient().newBuilder().proxy(Proxy.NO_PROXY).build();
2.2 api 24和 targetSdkVersion>=24 對抓包的影響
在Android 7.0(API 24 ) ,有一個名為“Network Security Configuration”的新安全功能。這個新功能的目標(biāo)是允許開發(fā)人員在不修改應(yīng)用程序代碼的情況下自定義他們的網(wǎng)絡(luò)安全設(shè)置。如果應(yīng)用程序運行的系統(tǒng)版本高于或等于24,并且targetSdkVersion>=24,則只有系統(tǒng)(system)證書才會被信任。所以用戶(user)導(dǎo)入的Charles根證書是不被信任的。具體說明看官方文檔在這個官方文檔里面說了,如何能指定信任用戶安裝的根證書從而可以實現(xiàn)抓包
2.3 api 24之后抓第三方apk的方法
- 通過重打包的方式強行修改配置,或者強行降低 targetSdkVersion,或者強行修改別人源碼里面的信任證書的代碼,然后再重打包就好了。
- 通過使用Xposed的 JustTrustMe 模塊來信任所有的證書,Xposed不會用的看這里
- 使用Android 7.0 以下的系統(tǒng)安裝應(yīng)用,并抓包
- 使用雙開沙箱應(yīng)用,比如VirtualApp,讓被抓包的應(yīng)用運行到VA里面,并且修改VA的targetSdkVersion < 24,或者通過Manifest文件里面配置networkSecurityConfig屬性,讓他信息Charles證書。
- 把 Charles 證書,打入到Android 系統(tǒng)信任證書里面去