一文搞懂Android抓包

一篇文章了解Android抓包

今天主要给大家介绍一下Android的抓包以及抓包的预防。

抓包工具方面,我们介绍两款抓包工具Profiter和Charles。

工具环境:

AndroidStudio4.2.2

移动版GooglePixel3XLAndroid11

使用Profiler工具抓包

将手机连接电脑,然后打开AndroidStudio的Profiler

NetWorkInspectorforAndroidStudioWhiteFox及以下版本位于Profiler中,NetWorkInspectorforBumblebee版本位于AppInspection中。

那么当app访问网络时,会有这样的提示:

一文搞懂Android抓包

我们选择波动,可以看到请求的信息

一文搞懂Android抓包

然后我们点击接口信息后就可以看到请求的详细信息

一文搞懂Android抓包

这样我们就可以通过AndroidStudio的Profiler轻松捕获我们App的网络信息了。

使用Charles工具抓包

1.安装证书

首先下载Charles,打开点击Help->SSLProxying->InstallCharlesRootCertificate安装根证书

一文搞懂Android抓包

然后双击该证书以信任它

一文搞懂Android抓包

至此,电脑端已经配置完毕。接下来,配置客户端。

方式一:

通过手机浏览器下载证书

一文搞懂Android抓包

一文搞懂Android抓包

在手机上设置连接wifi的代理,设置手动代理,设置charles提示的代理地址,然后charles会有提示:

一文搞懂Android抓包

然后我们同意了,那很好。

然后在浏览器中输入chls.pro/ssl即可下载证书。下载完成后,安装;但有时此方法无法安装,可以通过方法2安装。

方式二:

通过Help->SSLProxying->SaveCharlesRootCertificate将证书保存在您的计算机上

一文搞懂Android抓包

然后上传到手机上,点击设置-安全-加密和凭证-安装证书-CA证书,选择我们刚刚安装的证书。

至此,我们已经完成了安装证书的步骤。

2.抓包

此时,当我们访问网络时,就可以在Charles上看到我们访问的数据

一文搞懂Android抓包

我们可以通过左下角的Filter过滤地址,找到我们想要看到的网络数据。

防止数据包捕获

有时在我们的项目中,由于一些安全问题,我们不希望我们的应用被抓包,所以我们需要添加一些方法来防止抓包。

数据加密:

我们的接口信息可以进行数据加密,防止信息泄露。只需定义客户端和后端即可。

SSL证书验证:

该方式需要后端或运维配合获取SSL服务器证书。

1.提取证书的公钥

opensslrsa-incertificate.crt-pubout>publickey.pub

2.从publickey.pub中删除—beginpublickey—和—endpublickey—并将它们合并为一行

catpublickey.pub|grep-v’PUBLIC’|awk'{printf(“%s”,$0)}’

获得类似于以下内容的输出:

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMI…

3.利用2命令输出的结果,然后计算sha256摘要(下载pubkey-sha256.py)

pythonpubkey-sha256.pyMIIBIjANBgkqhkiG9w0BAQEFAAAOCAQ8AMI…

结果输出类似于

SHA256:S8Ff3JCaO4V…

将开头的SHA256:改为sha256/即可得到

sha256/S8Ff3JCaO4V…

然后在我们的OkHttp中进行配置

OkHttpClient.BuilderbuildernewOkHttpClient.Builder();

builder.certificatePinner(newCertificatePinner.Builder()

.add(“域名”,”sha256/S8Ff3JCaO4V…”)

。建造());

然后我们再次使用Charles抓包,结果是这样的:

一文搞懂Android抓包

虽然有网络请求记录,但无法捕获数据。

#####禁止代理

在Okhttp建立socket连接之前,Okhttp会获取系统的代理信息。如果设置了代理,它将通过DNS解析其IP,然后使用代理IP建立套接字连接。如果未设置代理,则将使用请求中URL的IP地址来建立连接。

/**

*获取系统范围的代理选择器。

*

*@抛出安全异常

*如果已安装安全管理器并且它拒绝

*{@linkNetPermission}{@code(“getProxySelector”)}

*@see#setDefault(ProxySelector)

*@returnthesystem-wide{@codeProxySelector}

*@since1.5

*/

publicstaticProxySelectorgetDefault(){

SecurityManagersmSystem.getSecurityManager();

如果(sm!null){

sm.checkPermission(SecurityConstants.GETPROXYSELECTORPERMISSION);

}

返回代理选择器;

}

/**

*设置(或取消设置)系统范围的代理选择器。

*

*注意:非标准协议处理程序可能会忽略此设置。

*

*@parampsTheHTTPproxyselector,或者

*{@codenull}取消设置代理选择器。

*

*@抛出安全异常

*如果已安装安全管理器并且它拒绝

*{@linkNetPermission}{@code(“setProxySelector”)}

*

*@see#getDefault()

*@since1.5

*/

publicstaticvoidsetDefault(ProxySelectorps){

SecurityManagersmSystem.getSecurityManager();

如果(sm!null){

sm.checkPermission(SecurityConstants.SETPROXYSELECTORPERMISSION);

}

theProxySelectorps;

}

OkHttp使用ProxySelector来获取代理信息,可以在构造OkHttpClient时设置。它的默认值是ProxySelector.getDefault(),它将反映系统的代理信息。那么我们可以提供自己的ProxySelector实现来实现绕过系统代理的能力。

OkHttpClientclientnewOkHttpClient.Builder()

2.proxySelector(newProxySelector(){

3@覆盖

4publicListselect(URIuri){

5returnCollections.singletonList(Proxy.NOPROXY);

6}

7

8@覆盖

9publicvoidconnectFailed(URIuri,SocketAddresssa,IOExceptionioe){

10

11}

12}).build();

设置完成后,如果使用Charles抓包,将无法再捕获应用的访问信息。

总结

在上面的内容中,我们主要介绍了两种抓包方式:

使用AndroidStudio自带的Profiler抓包

使用查尔斯

使用Charls引入了两种安装证书的方法:

使用浏览器安装证书

手动安装安装证书

防止抓包的三种方法:

数据加密

执行SSL证书验证

禁用代理

希望通过本文的讲解,您能够对抓包有所了解,并对反抓包有一个预案。

您的喜欢和关注是我最大的动力!

© 版权声明

相关文章