Charles抓包
https://blog.csdn.net/c10WTiybQ1Ye3/article/details/109733079
https://www.jianshu.com/p/1338c9f5305e
01.下载安装软件charles
- 下载地址(下载对应的平台软件即可)
- 下载破解文件
- https://assets.examplecode.cn/file/charles.jar
- 打开Finder,在应用程序中选择Charles并右键选择显示包内容
- 显示包内容后在Content/Java目录下将破解文件复制过来替换掉原文件即可
- 如果打开Charles时提示:程序已损坏,打不开。您应该将它移到废纸篓。此时需要在终端中执行以下命令即可:sudo spctl --master-disable
02.抓包代理设置
-
charles软件里面设置:代理设置
- 可以设置抓包数据类型,包括http与socket数据。可以根据需要在proxies栏下勾选。这里简单操作进行设置,Proxy ---> Proxy Settings默认端口是8888,根据实际情况可修改。
- 首先获取电脑ip地址
- 注意:手机需要和电脑使用同一个Wi-Fi网络,这是前提!!!
- .抓取到的内容为乱码
- 有的APP为了防止抓取,在返回的内容上做了层加密,所以从Charles上看到的内容是乱码。这种情况下也只能反编译APP,研究其加密解密算法进行解密。
抓包Https操作
https提示错误:还有现实unknow- 需要做哪些操作
- 1.电脑上需要安装证书
- 2.手机上需要安装证书
- 3.Android项目代码设置兼容
打开Charles,在Menu选择SSL Proxying > Install Charles Root Certificate,Keychain Access(钥匙访问串)被打开,我们可以看到Charles Certificate已经被安装,如图: 信任证书
但此时该证书并没有被信任,双击该行弹出证书详情,选择“Always Trust”。
2.手机上需要安装证书
- 第一步下载证书
- 打开浏览器,输入:chls.pro/ssl,就会自己下载到手机上,这里需要记住下载完成保存到本地的路径。
- 第二步安装证书
- 设置 ---> 更多设置 ---> 系统安全 ---> 加密与凭据 ---> 从SD卡安装,选择之前保存证书的路径。
- 注意,有的手机是直接点击下载的文件即可安装…
- 添加安全配置文件。如下所示:
- java.security.cert.CertPathValidatorException: Trust anchor for certification path not found 这个异常,解决方案如下所示:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates overridePins="true" src="system" /> <certificates overridePins="true" src="user" /> </trust-anchors> </base-config> </network-security-config>没成功的包。显示乱码 成功抓取https的包:
Android 版本
Android7.0 是一个分水岭
首先 http 是可以直接抓的,没任何问题
Android7.0 之前,抓 https 一般都是通过安装中间人证书的方式进行抓包
Android7.0 之后,系统不再信任用户级的证书,抓 https 就有点麻烦了
第二步设置SSL属性:Proxy ---> SSL Proxy Settings ---> 然后add操作(设置port为443)。如下所示
SSL Proxying not enabled for this host: enable in Proxy Settings, SSL locations
在overView提示报错的信息:04.抓包原理介绍
- 1.抓包的原理:
- 代理。客户端请求->经过代理->到达服务端 服务端返回->经过代理->到达客户端
- 2.任何Https的 app 都能抓的到吗?
- 7.0以下是可以的,只要手机里安装对应CA证书,比如用charles抓包,手机要安装charles提供的证书就行。
- Android 7.0 之后,Google 推出更加严格的安全机制,应用默认不信任用户证书(手机里自己安装证书),自己的app可以通过配置解决,但是抓其它app的https请求就行不通。
- 1.基于抓包原理的基础上,直接使用okhtttp禁止代理,就可以了 builder.proxy(Proxy.NO_PROXY);经过测试,可以避免抓包
- 2.直接使用加密协议,全是字段乱码, 把域名换装IP。这样基本别人很难抓到,像混淆一样