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

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

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

引言

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

1,使用無(wú)代理 Proxy.NO_PROXY

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

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

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

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

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

下面是使用Okhttp配合X509TrustManager對(duì)服務(wù)器證書(shū)進(jìn)行校驗(yàn)的邏輯:如果服務(wù)器證書(shū)的 subjectDN 和嵌入證書(shū)的 subjectDN 一致,我們?cè)龠M(jìn)行簽名內(nèi)容 signature 的比對(duì),如果一致則說(shuō)明合法,否則是不合法的,不進(jìn)行鏈接操作。
首先,我們需要從本地讀出證書(shū),獲取一個(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ū)時(shí)對(duì)比嵌入的證書(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("簽名不符!")
                }
            }
        }
    }
}

最后,在每次請(qǐng)求前將自定義的 SSLSocketFactory 和 X509TrustManager 填充到Okhttp 客戶(hù)端中。

private fun getClient(ssl: SSLSocketFactory, trustManager: X509TrustManager): OkHttpClient {
        return OkHttpClient.Builder()
            .retryOnConnectionFailure(true)
            .proxy(Proxy.NO_PROXY)
            .sslSocketFactory(ssl, trustManager)
            .build()
    }

經(jīng)過(guò)上面的操作后,就基本解決了 Drony + Charles 抓包問(wèn)題。不過(guò)為了安全,很多的銀行類(lèi)和支付類(lèi)應(yīng)用還會(huì)進(jìn)行雙證書(shū)的校驗(yàn)。

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

相關(guān)文章

最新評(píng)論