文章

防止抓包

防止抓包

防止抓包

Android7.0 及以上配置 networkSecurityConfig

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

ProxySelector

OkHttp 中 socket 连接建立的过程:
在建立 socket 连接之前,OkHttp 会获取系统的代理信息,如果设置代理,那么通过 DNS 解析其 IP 然后使用代理 IP 来建立 socket 连接。如果没有设置代理,那么会使用请求中的 url 的 IP 地址,来建立连接。
如果要防抓包,那只需要绕过代理就可以了。
OkHttp 使用 ProxySelector 来获取代理信息,在构造 OkHttpClient 时是可以设置的,其默认值是 ProxySelector.getDefault(),该默认值会反应出系统的代理信息。
那么我们就可以提供自己的 ProxySelector 实现来达到绕过系统代理的能力。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
val client = OkHttpClient.Builder()
    .proxySelector(object : ProxySelector() {
        override fun select(uri: URI?): MutableList<Proxy> {
            Log.i("hacket", "select: $uri")
            return Collections.singletonList(Proxy.NO_PROXY)
        }

        override fun connectFailed(
            uri: URI?,
            sa: SocketAddress?,
            ioe: IOException?
        ) {
            ioe?.printStackTrace()
            Log.w("hacket", "connectFailed uri: $uri, sa=$sa, ioe=$ioe")
        }
    })
    .build()

其他

https://juejin.cn/post/7175325220109025339?>

https://mp.weixin.qq.com/s/KD1Gkg-H4Dsq-PZ1GRxMUA

yj3cv

8ss7n
4ztre

本文由作者按照 CC BY 4.0 进行授权