openssl rsa -in certificate.crt -pubout > public_key.pub
2.将 public_key.pub 内地 ---begin public key--- 和 ---end public key--- 去除,并合并成一行cat public_key.pub | grep -v 'PUBLIC' | awk '{printf("%s",$0)}'
得到输出类似:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMI...
3.利用2命令输出的结果,然后 计算sha256摘要 (下载pubkey-sha256.py)python pubkey-sha256.py MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMI...
得到的输出类似SHA256:S8Ff3JCaO4V...
将开头的 SHA256: 改成 sha256/ ,得到sha256/S8Ff3JCaO4V...
然后在我们的OkHttp中进行配置一下OkHttpClient.Builder builder = new OkHttpClient.Builder();builder.certificatePinner(new CertificatePinner.Builder().add("域名", "sha256/S8Ff3JCaO4V...").build());
然后我们再次用charles 进行抓包就是这样的结果:虽然存在网络请求记录,但是数据抓不到了#####禁止代理Okhttp 在建立socket 连接之前,Okhttp 会获取系统的代理信息,如果设置代理,那么通过DNS解析其IP然后使用代理IP来建立socket连接如果没有设置代理,那么会使用请求中的url的IP地址,来建立连接 / Gets the system-wide proxy selector. @throws SecurityException If a security manager has been installed and it denies {@link NetPermission}{@code ("getProxySelector")} @see #setDefault(ProxySelector) @return the system-wide {@code ProxySelector} @since 1.5 / public static ProxySelector getDefault() { SecurityManager sm = System.getSecurityManager(); if (sm != null) { sm.checkPermission(SecurityConstants.GET_PROXYSELECTOR_PERMISSION); } return theProxySelector; } / Sets (or unsets) the system-wide proxy selector. Note: non-standard protocol handlers may ignore this setting. @param ps The HTTP proxy selector, or {@code null} to unset the proxy selector. @throws SecurityException If a security manager has been installed and it denies {@link NetPermission}{@code ("setProxySelector")} @see #getDefault() @since 1.5 / public static void setDefault(ProxySelector ps) { SecurityManager sm = System.getSecurityManager(); if (sm != null) { sm.checkPermission(SecurityConstants.SET_PROXYSELECTOR_PERMISSION); } theProxySelector = ps; }
OkHttp使用ProxySelector来获取代理信息,在构造OkHttpClient时是可以设置的,其默认值是ProxySelector.getDefault(),该默认值会反应出系统的代理信息 那么我们就可以提供自己的ProxySelector实现来达到绕过系统代理的能力OkHttpClient client = new OkHttpClient.Builder() 2 .proxySelector(new ProxySelector() { 3 @Override 4 public List<Proxy> select(URI uri) { 5 return Collections.singletonList(Proxy.NO_PROXY); 6 } 7 8 @Override 9 public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {10 11 }12 }).build();
设置玩完成之后,再用Charles进行抓包的话,已经抓取不到app 的访问信息了总结上述内容我们主要介绍了两种抓包方式:使用AndroidStudio 自带的Profiler 进行抓包使用Charles使用Charls 介绍了两种安装证书的方式:使用浏览器安装证书手动安装证书三种防止抓包的方式:数据加密进行SSL证书校验禁用代理希望大家能够通过本文的讲解,能够对抓包有所了解,对反抓包也有方案您的点赞,关注就是我最大的动力(图片来源网络,侵删)
0 评论