欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android?App?如何防止抓包方法及分析

 更新時(shí)間:2023年06月01日 09:30:51   作者:xiangzhihong  
這篇文章主要為大家介紹了Android?App如何防止抓包的方法及分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

在軟件開發(fā)中,常用的抓包方式有 Charles 、 Fiddler和Burp,它們通過在手機(jī)網(wǎng)絡(luò)中添加代理的方式,然后安裝信任證書,接著就可以在 App 請求的時(shí)候拿到請求數(shù)據(jù)。不過,這也可能導(dǎo)致一些安全問題,所以對于我們通常的處理方式是,對于線上運(yùn)行的包,需要防止這些抓包手段。

1,使用無代理 Proxy.NO_PROXY

在Android開發(fā)中,大部分的App的網(wǎng)絡(luò)請求都是基于charles 和 fiddler 來進(jìn)行抓包的,對網(wǎng)絡(luò)客戶端使用無代理模式即可防止抓包,代碼如下。

OkHttpClient.Builder()
            .retryOnConnectionFailure(true)
            .proxy(Proxy.NO_PROXY)
            .sslSocketFactory(ssl, trustManager)
            .build()

通常情況下上述的辦法有用,但是無法防住使用 VPN 導(dǎo)流進(jìn)行的抓包( Drony + Charles),使用VPN抓包的原理是,先將手機(jī)請求導(dǎo)到VPN,再對VPN的網(wǎng)絡(luò)進(jìn)行Charles的代理,繞過了對App的代理。

2,使用證書校驗(yàn)

此種方式可以有效的防止抓包,需要在App端嵌入證書,下面是證書校驗(yàn)的一些說明:

下面是使用Okhttp配合X509TrustManager對服務(wù)器證書進(jìn)行校驗(yàn)的邏輯:如果服務(wù)器證書的 subjectDN 和嵌入證書的 subjectDN 一致,我們再進(jìn)行簽名內(nèi)容 signature 的比對,如果一致則說明合法,否則是不合法的,不進(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í)對比嵌入的證書是否合法。

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("簽名不符!")
                }
            }
        }
    }
}

最后,在每次請求前將自定義的 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)用還會進(jìn)行雙證書的校驗(yàn)。

以上就是Android App 如何防止抓包方法及分析的詳細(xì)內(nèi)容,更多關(guān)于Android App防止抓包的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論