最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

在軟件開發(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)文章

最新評(píng)論

鹿邑县| 寿宁县| 伊川县| 江川县| 芜湖县| 昆明市| 邯郸市| 万载县| 肇州县| 商河县| 泰来县| 呼伦贝尔市| 中超| 石城县| 韶山市| 永寿县| 阜新| 方山县| 贞丰县| 石台县| 阿克陶县| 德保县| 双桥区| 江陵县| 东兴市| 永年县| 沙田区| 合水县| 吉首市| 错那县| 大田县| 沁水县| 阜康市| 垣曲县| 平湖市| 于都县| 威海市| 柳林县| 犍为县| 石渠县| 丹巴县|