Android?App?如何防止抓包方法及分析
引言
在軟件開發(fā)中,常用的抓包方式有 Charles 、 Fiddler和Burp,它們通過在手機(jī)網(wǎng)絡(luò)中添加代理的方式,然后安裝信任證書,接著就可以在 App 請(qǐng)求的時(shí)候拿到請(qǐng)求數(shù)據(jù)。不過,這也可能導(dǎo)致一些安全問題,所以對(duì)于我們通常的處理方式是,對(duì)于線上運(yùn)行的包,需要防止這些抓包手段。
1,使用無代理 Proxy.NO_PROXY
在Android開發(fā)中,大部分的App的網(wǎng)絡(luò)請(qǐng)求都是基于charles 和 fiddler 來進(jìn)行抓包的,對(duì)網(wǎng)絡(luò)客戶端使用無代理模式即可防止抓包,代碼如下。
OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.proxy(Proxy.NO_PROXY)
.sslSocketFactory(ssl, trustManager)
.build()通常情況下上述的辦法有用,但是無法防住使用 VPN 導(dǎo)流進(jìn)行的抓包( Drony + Charles),使用VPN抓包的原理是,先將手機(jī)請(qǐng)求導(dǎo)到VPN,再對(duì)VPN的網(wǎng)絡(luò)進(jìn)行Charles的代理,繞過了對(duì)App的代理。
2,使用證書校驗(yàn)
此種方式可以有效的防止抓包,需要在App端嵌入證書,下面是證書校驗(yàn)的一些說明:

下面是使用Okhttp配合X509TrustManager對(duì)服務(wù)器證書進(jìn)行校驗(yàn)的邏輯:如果服務(wù)器證書的 subjectDN 和嵌入證書的 subjectDN 一致,我們?cè)龠M(jìn)行簽名內(nèi)容 signature 的比對(duì),如果一致則說明合法,否則是不合法的,不進(jìn)行鏈接操作。
首先,我們需要從本地讀出證書,獲取一個(gè)X509Certificate。
val myCrt: X509Certificate by lazy {
getCrt(R.raw.my_ca)
}
private fun getCrt(@RawRes raw: Int): X509Certificate {
val certificateFactory = CertificateFactory.getInstance("X.509")
val input = ApplicationContext.resources.openRawResource(raw)
input.use {
return certificateFactory.generateCertificate(input) as X509Certificate
}
}然后,檢查服務(wù)器證書時(shí)對(duì)比嵌入的證書是否合法。
private fun getTrustManagerInRelease(): X509TrustManager {
return object : X509TrustManager {
override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String?) {}
override fun getAcceptedIssuers(): Array<X509Certificate> = arrayOf()
override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String?) {
val myCrt: X509Certificate = myCrt
if (chain[0].subjectDN.name == myCrt.subjectDN.name) {
if (!myCrt.signature!!.contentEquals(chain[0].signature)) {
throw SSLHandshakeException("簽名不符!")
}
}
}
}
}最后,在每次請(qǐng)求前將自定義的 SSLSocketFactory 和 X509TrustManager 填充到Okhttp 客戶端中。
private fun getClient(ssl: SSLSocketFactory, trustManager: X509TrustManager): OkHttpClient {
return OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.proxy(Proxy.NO_PROXY)
.sslSocketFactory(ssl, trustManager)
.build()
}經(jīng)過上面的操作后,就基本解決了 Drony + Charles 抓包問題。不過為了安全,很多的銀行類和支付類應(yīng)用還會(huì)進(jìn)行雙證書的校驗(yàn)。
以上就是Android App 如何防止抓包方法及分析的詳細(xì)內(nèi)容,更多關(guān)于Android App防止抓包的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用kotlin實(shí)現(xiàn)MVP的方式(簡(jiǎn)單好用)
這篇文章主要介紹了使用kotlin實(shí)現(xiàn)MVP的方式(簡(jiǎn)單好用),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android android:exported = true 用法詳解
在本篇文章里小編給大家整理了關(guān)于Android android:exported = true 用法,需要的朋友們參考下。2019-09-09
Android編程實(shí)現(xiàn)自動(dòng)檢測(cè)版本及自動(dòng)升級(jí)的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)自動(dòng)檢測(cè)版本及自動(dòng)升級(jí)的方法,涉及Android版本檢測(cè),匹配,下載及自動(dòng)安裝等技巧,需要的朋友可以參考下2016-01-01
Android中LinearLayout布局的常用屬性總結(jié)
這篇文章主要介紹了Android中LinearLayout布局的常用屬性總結(jié),包括居中、重心、比例等線性布局中的基本設(shè)置,需要的朋友可以參考下2016-04-04
Android 獲取IP地址的實(shí)現(xiàn)方法
這篇文章主要介紹了Android 獲取IP地址的實(shí)現(xiàn)方法的相關(guān)資料,這里提供了具體實(shí)現(xiàn)的方法及代碼,使用WIFI 和GPRS的思路,需要的朋友可以參考下2016-11-11
Android中父View和子view的點(diǎn)擊事件處理問題探討
當(dāng)屏幕中包含一個(gè)ViewGroup,而這個(gè)ViewGroup又包含一個(gè)子view,這個(gè)時(shí)候android系統(tǒng)如何處理Touch事件呢,接下來將對(duì)此問題進(jìn)行深入了解,感興趣的朋友可以了解參考下,或許對(duì)你有所幫助2013-01-01
Android Loader詳細(xì)介紹及實(shí)例代碼
這篇文章主要介紹了Android Loader詳細(xì)介紹及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-12-12
android事件分發(fā)機(jī)制的實(shí)現(xiàn)原理
本篇文章主要介紹了android事件分發(fā)機(jī)制的實(shí)現(xiàn)原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09

