前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python 爬虫时,高版本 App 如何进行抓包?

Python 爬虫时,高版本 App 如何进行抓包?

作者头像
AirPython
发布于 2020-09-22 07:43:36
发布于 2020-09-22 07:43:36
2.1K00
代码可运行
举报
文章被收录于专栏:Python 自动化Python 自动化
运行总次数:0
代码可运行

我们都知道 iphone 和低版本 Android 抓包,只需要设置代理和配置证书就可以顺利抓包

但是升级了 targetSdkVersion 到 28 后发现,在 Android 7.0 以上机型 Charles 抓取 https 包时显示找不到证书,但是 Android 6.0 机型还是可以正常抓包。

这其中的原因是,从 Android 7.0 开始,默认的网络安全性配置修改了

解决方法如下:

现象:android7.0 以上的手机 https 抓包失败(安装了 https 证书也不行)

原因:android7.0+ 的版本新增了证书验证(系统证书),具体如下:

1、Android 6.0(API 23)及更低版本应用的默认网络安全性配置如下:

代码语言:javascript
代码运行次数:0
运行
复制
<!-- 默认允许所有明文通信 -->
<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <!-- 信任系统预装 CA 证书 -->
        <certificates src="system" />
        <!-- 信任用户添加的 CA 证书,Charles 和 Fiddler 抓包工具安装的证书属于此类 -->
        <certificates src="user" />
    </trust-anchors>
</base-config>
代码语言:javascript
代码运行次数:0
运行
复制

2、而在 Android 7.0(API 24)到 Android 8.1(API 27)的默认网络安全性配置如下:

代码语言:javascript
代码运行次数:0
运行
复制
<!-- 默认允许所有明文通信 -->
<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <!-- 信任系统预装 CA 证书 -->
        <certificates src="system" />
    </trust-anchors>
</base-config>
代码语言:javascript
代码运行次数:0
运行
复制

3、而在 Android 9.0(API 28)及更高版本的默认网络安全性配置如下:

代码语言:javascript
代码运行次数:0
运行
复制
<!-- 默认禁止所有明文通信 -->
<base-config cleartextTrafficPermitted="false">
    <trust-anchors>
        <!-- 信任系统预装 CA 证书 -->
        <certificates src="system" />
    </trust-anchors>
</base-config>
代码语言:javascript
代码运行次数:0
运行
复制

对比很容易发现,在 Android 7.0(API 24)到 Android 8.1(API 27),默认不再信任用户添加的 CA 证书,所以也就不再信任 Charles 和 Fiddler 抓包工具的证书,所以抓取 HTTPS 包时才会失败

而且在 Android 9.0(API 28)及更高版本上,不仅默认只系统预装的 CA 证书,还默认禁止所有明文通信(不允许 http 请求)

解决办法:

前提:在手机端和电脑端都必须安装 https 的安全证书 配置打测试包时,项目设置默认信任所有证书(系统 + 用户,Charles 和 Fiddler) 1、在项目工程 res-xml 目录中创建一个名为 network_security_config.xml 的文件,文件内容如下:

代码语言:javascript
代码运行次数:0
运行
复制
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" overridePins="true" />
            <certificates src="user" overridePins="true" />
        </trust-anchors>
    </base-config>
</network-security-config>

2、在 AndroidManifest 里的标签中,添加如下代码,在清单文件中指向该文件:

代码语言:javascript
代码运行次数:0
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
        ...
</application>
</manifest>

重新打包项目,然后抓包,即可成功

Webview 抓包失败

上面可以解决 Android 原生抓包问题,但在 Android7.0 以上的手机,开着网络代理访问不了Webview

若要抓包webview,需要在 Webview 的 WebViewClient 中,将一行代码给注释掉:

代码语言:javascript
代码运行次数:0
运行
复制
super.onReceivedSslError(view, handler, error)

这样是为了忽略掉 SSL 证书错误

因为开启代理后网络会变得不安全,证书会报错误,Webview 检测到证书错误之后就不请求任何数据。注释是为了忽略掉父类的处理,默认执行下去。

警告

这样的配置操作是敏感且危险的,只能用于测试环境方便抓包,线上包一定注意要恢复配置,不然 APP 会面临被他人抓包的风险。

如何只在调试模式下允许抓包呢?

使用 <debug-overrides> 即可实现:只在 android:debuggable true 时才生效的配置

代码语言:javascript
代码运行次数:0
运行
复制
<?xml version="1.0" encoding="utf-8"?>

<network-security-config>
    <!-- 支持 Android 7.0 以上调试时,信任 Charles 和 Fiddler 等用户信任的证书 -->
    <debug-overrides>
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

网上有些解决方式是将 Charles 和 Fiddler 的证书添加到 raw 文件夹下的方式也可以,但是繁琐了点

在 Android 9.0(API 28)以上允许部分 http 请求

最佳的解决方式肯定是全部使用 https 请求,安全性更高,如果有些请求或测试环境下还是需要使用 http 请求,需要在网络安全性配置添加白名单:

代码语言:javascript
代码运行次数:0
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!-- 支持 Android 9.0 以上使用部分域名时使用 http -->
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">sample.domain</domain>
    </domain-config>
    <!-- 支持 Android 7.0 以上调试时,信任 Charles 和 Fiddler 等用户信任的证书 -->
    <debug-overrides>
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>
代码语言:javascript
代码运行次数:0
运行
复制

后记 通过查找资料,还有一个方法,通过重载 WebViewClient 的 onReceivedSslError() 函数并在其中执行 handler.proceed(),即可忽略 SSL 证书错误,继续加载页面

代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
WebView webview = (WebView) findViewById(R.id.webview);
webview.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// 不要调用super.onReceivedSslError,因为其包含了一条 handler.cancel(),第一次访问时无法加载,第二次以后可以加载
// super.onReceivedSslError(view, handler, error);
// 忽略SSL证书错误,继续加载页面
        handler.proceed();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AirPython 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Android中Https请求失败排查
https://www.psvmc.cn/article/2019-04-03-win-proxy.html
码客说
2024/03/29
2740
Android中Https请求失败排查
《吐血整理》高级系列教程-吃透Fiddler抓包教程(26)-Fiddler如何抓取Android7.0以上的Https包-上篇
众所周知,假如设备是android 7.0+的系统同时应用设置targetSdkVersion >= 24的话,那么应用默认是不信任安装的Fiddler用户证书的,所以你就没法抓到应用发起的https请求,然后你在Fiddler就会看到一堆200 HTTP Tunnel to xxx.xxx.xxx:443的请求日志,这些都是没有成功抓取的https请求,下面重点介绍一下各种解决方案,相信总有一款解决方案适合你~
北京-宏哥
2022/10/04
4.3K0
《吐血整理》高级系列教程-吃透Fiddler抓包教程(26)-Fiddler如何抓取Android7.0以上的Https包-上篇
接口测试实战 | Android 高版本无法抓取 HTTPS,怎么办?
在接口测试中,相信很多人都遇到过 Android 高版本(Android7.0 以上)系统无法抓包的问题。
霍格沃兹测试开发
2020/11/15
1.1K0
安卓7.0及以上版本抓包https失败解决方法
前提:在手机端和电脑端都必须安装https的安全证书 配置:打测试包时,项目设置默认信任所有证书(系统+用户) 1.在工程res-xml目录中创建一个名为 network_security_config.xml的文件,文件内容如下:
流柯
2020/07/06
2.1K0
解决Android手机连接Charles Unknown问题
在应用xml目录下新建一个名为network_security_config.xml,内容为
技术小黑屋
2020/01/21
3.8K0
移动开发抓包方案
在移动应用开发过程中,我们会使用Charles和Fiddler进行抓包。通常要抓取HTTPS加密的数据包,一般使用Charles或者Fiddler4代理HTTP请求,配置证书信任后,便可拿到明文报文。但是由于Charles证书和Fiddler证书并非证书机构颁发的目标站点的合法证书,所以会不被信任。要解决这个问题,我们需要使用到Xposed+JustTrustMe工具来关闭SSL验证。
xiangzhihong
2021/01/25
1.1K0
Android 7+使用Charles抓取https包-unknow
Android 7+使用Charles抓包,之前因为一直使用http访问一直无阻访问,后来统一推https测试说Charles不能正常抓包,Charles抓到接口状态为Unknow,开始以为是证书有问题,我将PC证书删除重新信任,如果你直接安装时会提示证书不可信任,需要将证书save导入到信任列表中,手机端删除证书,重新安装发现还是Unknow
笨兔儿
2019/05/30
2.5K0
安卓应用安全指南 5.4.3 通过 HTTPS 的通信 高级话题
在本节中,将介绍如何在 Linux(如 Ubuntu 和 CentOS)中创建私有证书和配置服务器。 私有证书是指私人签发的服务器证书,并由 Cybertrust 和 VeriSign 等可信第三方证书机构签发的服务器证书通知。
ApacheCN_飞龙
2022/12/01
7270
Charles Client SSL handshake failed certificate_unknown
抓包 Android App HTTPS Charles Client SSL handshake failed 问题解决. 相关背景 使用Charles抓包时, 有些APP使用https的可以解开但有些就报这个错,放谷歌查了一些资料,放上解决方案,有类似问题的可以参考一下。 解决方案 确保已正确安装证书, Charles已配置好 使用apktool对apk进行反编译 1apktool d example.apk 修改AndroidManifest.xml配置文件, 在application节点
许杨淼淼
2018/06/06
6.1K0
【答疑解惑】为什么你的 Charles 会抓包失败?
作为一名 Web 开发工程师,天天都会和网络打交道。Charles 作为一款网络抓包工具,几乎成了 Web 开发的标配。
卤代烃
2020/09/27
4.5K0
【答疑解惑】为什么你的 Charles 会抓包失败?
Android端Charles抓包
目录介绍 01.下载安装 02.抓包代理设置 03.抓包Https操作 04.抓包原理介绍 05.抓包数据介绍 06.常见问题总结 07.Android拦截抓包 01.下载安装 下载地址(下载对应的平台软件即可) https://www.charlesproxy.com/download/ 下载破解文件 https://assets.examplecode.cn/file/charles.jar 打开Finder,在应用程序中选择Charles并右键选择显示包内容 显示包内容后在Content/Java目录
杨充
2020/09/21
1.7K0
绕过安卓SSL验证证书的常见四种方式
在此之前,移动端应用程序会直接忽略掉所有的SSL错误,并允许攻击者拦截和修改自己的通信流量。但是现在,很多热门应用程序至少会检查证书链是否是一个有效可信任的证书机构(CA)颁发的。作为一名渗透测试人员来说,我们常常需要让目标应用程序信任我们的证书是有效的,这样我们就可以进行中间人攻击(MITM)并修改其流量了。
xiangzhihong
2022/11/30
3.4K0
Android Osmdroid + 天地图 (一)
  Osmdroid是一款完全开源的地图基本操作SDK,我们可以通过这个SDK去加一些地图API,比如腾讯、百度、高德、Google等等。天地图API也是一个地图服务提供商,不过之前还是提供Android的地图SDK的,现在就只提供了API服务了,那么为什么我们会想到这个天地图API呢?因为贫穷,贫穷使我们相遇,如果你是个人项目不上架的那种我推荐你使用高德、百度、腾讯3家,但如果你要上架的话就涉及到一个可能会被宰的问题了,这3家商业授权都是5万一年,那不是开玩笑的,如果你的应用不是主导地图的话,完全犯不上去使用,下面我们进入正文去使用天地图API,效果图如下所示:
晨曦_LLW
2024/11/28
4640
Android Osmdroid + 天地图 (一)
安卓高版本安装系统证书 HTTPS 抓包 - 终极解决方案
不过从Android 从 7.0 开始,系统不再信任用户 CA 证书,所以你需要把 CA 证书安装到系统 CA 证书目录。
奋飞安全
2023/03/08
8.6K1
Android安卓进阶之——一文带你了解抓包和反抓包
将自己的手机连接到电脑上,然后打开Android Studio 的Profiler
BlueSocks
2022/03/18
3K0
Android安卓进阶之——一文带你了解抓包和反抓包
小米手机安装 charles 证书,提示“没有可安装的证书”
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
周小董
2019/10/24
17.6K0
APP各种抓包教程
每当遇到一些 APP 渗透测试项目的时候,抓不了包的问题令人有点难受,但是抓不了包并不能代表目标系统很安全,那么接下来我会整理一下目前我所了解到的一些抓包方法
XRSec
2023/08/23
12.5K3
APP各种抓包教程
最全的 Charles 抓包工具详解「建议收藏」
不管是移动开发者还是测试者,于抓包工具对于我们的工作都是非常有帮助的,而Charles是一款非常优秀的抓包工具
全栈程序员站长
2022/07/02
4.6K0
最全的 Charles 抓包工具详解「建议收藏」
Android P 第二个测试版本请求网络 CLEARTEXT communication to host not permitted by network
问题: 由于 Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。
程思扬
2022/01/11
2370
移动开发抓包方案
在移动应用开发过程中,我们会使用Charles和Fiddler进行抓包。通常要抓取HTTPS加密的数据包,一般使用Charles或者Fiddler4代理HTTP请求,配置证书信任后,便可拿到明文报文。但是由于Charles证书和Fiddler证书并非证书机构颁发的目标站点的合法证书,所以会不被信任。要解决这个问题,我们需要使用到Xposed+JustTrustMe工具来关闭SSL验证。
xiangzhihong
2022/11/30
7310
推荐阅读
相关推荐
Android中Https请求失败排查
更多 >
目录
  • 现象:android7.0 以上的手机 https 抓包失败(安装了 https 证书也不行)
  • 原因:android7.0+ 的版本新增了证书验证(系统证书),具体如下:
  • 解决办法:
  • Webview 抓包失败
  • 警告
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文