Android端Charles抓包
目录介绍
- 01.下载安装
- 02.抓包代理设置
- 03.抓包Https操作
- 04.抓包原理介绍
- 05.抓包数据介绍
- 06.常见问题总结
- 07.Android拦截抓包
01.下载安装
- 下载地址(下载对应的平台软件即可)
- 下载破解文件
- 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,根据实际情况可修改。
- 可以设置抓包数据类型,包括http与socket数据。可以根据需要在proxies栏下勾选。这里简单操作进行设置,Proxy ---> Proxy Settings默认端口是8888,根据实际情况可修改。
- Android手机代理设置
- 首先获取电脑ip地址
- 第一种方式:查看本机IP地址:Help ---> Local IP Addresses
- 第二种方式:命令行方式,输入ifconfig即可
- 第一种方式:查看本机IP地址:Help ---> Local IP Addresses
- 然后打开手机设置代理
- 注意:手机需要和电脑使用同一个Wi-Fi网络,这是前提!!!
- 操作步骤:打开WiFi列表 ---> 长按连接的WiFi修改网络设置代理 --- > 设置代理信息
- 首先获取电脑ip地址
- 最后抓包如下
- 抓包数据如下所示
- 抓包数据如下所示
03.抓包Https操作
- 需要做哪些操作
- 1.电脑上需要安装证书
- 2.手机上需要安装证书
- 3.Android项目代码设置兼容
- 1.电脑上需要安装证书
- 第一步安装证书:help ---> SSl Proxying ---> install charles root certificate ---> 安装证书
- 第二步设置SSL属性:Proxy ---> SSL Proxy Settings ---> 然后add操作(设置port为443)。如下所示
- 然后抓包试一下,会发现Android7.0手机之前可以抓包,但是Android7.0之后是无法抓包的
- 报错信息:客户端SSL握手失败:处理证书时出现未知问题(certificate_unknown)

- 如何解决在Android7.0之后也可以抓包https信息,接着往下看。
- 2.手机上需要安装证书
- 第一步下载证书
- 第二步安装证书
- 设置 ---> 更多设置 ---> 系统安全 ---> 加密与凭据 ---> 从SD卡安装,选择之前保存证书的路径。
- 注意,有的手机是直接点击下载的文件即可安装……
- 安装操作如下图所示
- 3.Android项目代码设置兼容
- 添加安全配置文件。如下所示:
- 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> //清单文件配置
<application
android:networkSecurityConfig="@xml/network_security_config_debug">
- Android 7.0及以上为何不能轻易抓取到Https请求的明文数据?
- 在Android 7.0(API 24 ) ,有一个名为“Network Security Configuration”的新安全功能。这个新功能的目标是允许开发人员在不修改应用程序代码的情况下自定义他们的网络安全设置。如果应用程序运行的系统版本高于或等于24,并且targetSdkVersion>=24,则只有系统(system)证书才会被信任。所以用户(user)导入的Charles根证书是不被信任的。
- 抓https最后结果如下所示
04.抓包原理介绍
- 1.抓包的原理:
- 代理。客户端请求->经过代理->到达服务端 服务端返回->经过代理->到达客户端
- 2.任何Https的 app 都能抓的到吗?
- 7.0以下是可以的,只要手机里安装对应CA证书,比如用charles抓包,手机要安装charles提供的证书就行。
- Android 7.0 之后,Google 推出更加严格的安全机制,应用默认不信任用户证书(手机里自己安装证书),自己的app可以通过配置解决,但是抓其它app的https请求就行不通。
- 3.如何避免抓包
- 1.基于抓包原理的基础上,直接使用okhtttp禁止代理,就可以了 builder.proxy(Proxy.NO_PROXY);经过测试,可以避免抓包
- 2.直接使用加密协议,全是字段乱码, 把域名换装IP。这样基本别人很难抓到,像混淆一样
- 4.charles抓包原理图
- 5.大概步骤流程
- 第一步,客户端向服务器发起HTTPS请求,charles截获客户端发送给服务器的HTTPS请求,charles伪装成客户端向服务器发送请求进行握手 。
- 第二步,服务器发回相应,charles获取到服务器的CA证书,用根证书(这里的根证书是CA认证中心给自己颁发的证书)公钥进行解密,验证服务器数据签名,获取到服务器CA证书公钥。然后charles伪造自己的CA证书(这里的CA证书,也是根证书,只不过是charles伪造的根证书),冒充服务器证书传递给客户端浏览器。
- 第三步,与普通过程中客户端的操作相同,客户端根据返回的数据进行证书校验、生成密码Pre_master、用charles伪造的证书公钥加密,并生成HTTPS通信用的对称密钥enc_key。
- 第四步,客户端将重要信息传递给服务器,又被charles截获。charles将截获的密文用自己伪造证书的私钥解开,获得并计算得到HTTPS通信用的对称密钥enc_key。charles将对称密钥用服务器证书公钥加密传递给服务器。
- 第五步,与普通过程中服务器端的操作相同,服务器用私钥解开后建立信任,然后再发送加密的握手消息给客户端。
- 第六步,charles截获服务器发送的密文,用对称密钥解开,再用自己伪造证书的私钥加密传给客户端。
- 第七步,客户端拿到加密信息后,用公钥解开,验证HASH。握手过程正式完成,客户端与服务器端就这样建立了”信任“。
- 在之后的正常加密通信过程中,charles如何在服务器与客户端之间充当第三者呢?
- 服务器—>客户端:charles接收到服务器发送的密文,用对称密钥解开,获得服务器发送的明文。再次加密, 发送给客户端。
- 客户端—>服务端:客户端用对称密钥加密,被charles截获后,解密获得明文。再次加密,发送给服务器端。由于charles一直拥有通信用对称密钥enc_key,所以在整个HTTPS通信过程中信息对其透明。
- 6.总结一下
- HTTPS抓包的原理还是挺简单的,简单来说,就是Charles作为“中间人代理”,拿到了服务器证书公钥和HTTPS连接的对称密钥,前提是客户端选择信任并安装Charles的CA证书,否则客户端就会“报警”并中止连接。这样看来,HTTPS还是很安全的。
05.抓包数据介绍
- HTTP请求包的结构
- 请求报文
- 请求报文结构格式:
请求行: <method> <request-URL> <version>
头部: <headers>
主体: <entity-body>
- 请求报文结构示意图:
- 例子:
- 请求了就会收到响应包(如果对面存在HTTP服务器)
POST /meme.php/home/user/login HTTP/1.1
Host: 114.215.86.90
Cache-Control: no-cache
Postman-Token: bd243d6b-da03-902f-0a2c-8e9377f6f6ed
Content-Type: application/x-www-form-urlencoded tel=13637829200&password=123456
- 请求报文结构格式:
- 常见的是那些
User-Agent:产生请求的浏览器类型。Accept:客户端可识别的响应内容类型列表;Accept-Language:客户端可接受的自然语言;Accept-Encoding:客户端可接受的编码压缩格式;Host:请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机;Connection:连接方式(close 或keep-alive);Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie;
- 请求报文
- HTTP响应包结构
- 响应报文
- 响应报文结构格式:
状态行: <version> <status> <reason-phrase>
响应头部: <headers>
响应主体: <entity-body>
- 响应报文结构示意图:
- 例子:
HTTP/1.1 200 OK
Date: Sat, 02 Jan 2016 13:20:55 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.6.14
X-Powered-By: PHP/5.6.14
Content-Length: 78
Keep-Alive: timeout=5, max=100 Connection: Keep-Alive
Content-Type: application/json; charset=utf-8 {"status":202,"info":"\u6b64\u7528\u6237\u4e0d\u5b58\u5728\uff01","data":null}
- 响应报文结构格式:
- 常见的响应头部参数
Allow服务器支持哪些请求方法(如GET、POST等)。Content-Encoding文档的编码(Encode)方法。Content-Length表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。Content-Type表示后面的文档属于什么MIME类型。Server服务器名字。Set-Cookie设置和页面关联的Cookie。ETag:被请求变量的实体值。ETag是一个可以与Web资源关联的记号(MD5值)。Cache-Control:这个字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令。
- 响应报文
- 响应报文状态码
- 包含了状态码以及原因短语,用来告知客户端请求的结果。
- 关于状态码,可以看这篇文章,http状态码。
状态码 类别 原因短语 1XX Informational(信息性状态码) 接收的请求正在处理 2XX Success(成功状态码) 请求正常处理完毕 3XX Redirection(重定向状态码) 需要进行附加操作以完成请求 4XX Client Error(客户端错误状态码) 服务器无法处理请求 5XX Server Error(服务器错误状态码) 服务器处理请求出错
06.常见问题总结
- 1.配置好后无法打开APP
- 在我们抓取时碰到个别APP在配置代理后无法打开,这个主要是因为该APP做了防止抓取处理,比如校验https的证书是否合法等,这种解决方法可以通过反编译APP,查看源码解决,难度较大。
- 2.抓取到的内容为乱码
- 有的APP为了防止抓取,在返回的内容上做了层加密,所以从Charles上看到的内容是乱码。这种情况下也只能反编译APP,研究其加密解密算法进行解密。
07.Android拦截抓包

- 网络拦截分析,主要是分析网络流量损耗,以及request,respond过程时间。打造网络分析工具……
- 项目代码地址:https://github.com/yangchong211/YCAndroidTool
- 如果你觉得这个拦截网络助手方便了测试,以及开发中查看网络数据,可以star一下……
网络拦截库:https://github.com/yangchong211/YCAndroidTool
Android端Charles抓包的更多相关文章
- android逆向---charles抓包
手机与电脑处于同一网络环境,且正确设置代理后,charles显示CONNECT失败,提示信息SSL handshake with client failed: An unknown issue occ ...
- Android使用charles抓包
1.下载并安状软件,官网在此: 2.前题条件,电脑和手机必须在同一网段 3.在Charles界面选择菜单 proxy->proxy settings 勾选"Enable transpa ...
- 如何使用charles对Android Https进行抓包
Charles.png charles是一款在Mac下常用的截取网络封包工具,对Android Http进行抓包,只要对手机设置代理即可,但对Android Https进行抓包还是破费一些功夫,网 ...
- charles抓包工具分享
今天,给大组内QA做了一次分享,主要面向移动端测试,介绍了我平时在测试工作中用到的功能,大家都积极响应,现场搭环境,现场操作,现场提问解答,最后大家都成功的利用起来了,感觉很有成就感.下面介绍我今天分 ...
- charles抓包https设置
写在前面 https抓包的实现 (一)首先,电脑得装个证书 (二)然后,移动设备上安装证书 (三)最后,Charles添加SSL Proxying 写在前面 开发时,面对各种接口数据,绝大多数时间都会 ...
- charles抓包误点deny处理办法及日常抓包
误点deny方法在最底下~~ (博文为转载) 我们在开发网站项目的时候,我们可以通过浏览器的debug模式来看request以及response的数据,那么如果我们开发移动端项目没有网页呢?如何抓取数 ...
- Charles抓包——弱网测试(客户端)
基础知识 网络延迟:网络延时指一个数据包从用户的计算机发送到网站服务器,然后再立即从网站服务器返回用户计算机的来回时间.通常使用网络管理工具PING(Packet Internet Grope)来测量 ...
- 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(4)-Charles如何设置捕获会话
1.简介 前边几篇宏哥介绍了Charles界面内容以及作用.今天宏哥就讲解和分享如何设置Charles后,我们就可以愉快地捕获会话,进行抓包了.因为上一篇许多小伙伴看到宏哥的Charles可以分开看到 ...
- 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(6)-Charles安卓手机抓包大揭秘
1.简介 Charles和Fiddler一样不但能截获各种浏览器发出的 HTTP 请求,也可以截获各种智能手机发出的HTTP/ HTTPS 请求. Charles也能截获 Android 和 Wind ...
- 如何使用Charles抓包-- 入门篇
下载地址 注意:首先需要下载java的运行环境支持(一般用burp的人肯定也都有装java环境).装好java环境后,可以直接去百度搜索并下载charles的破解版,下载到破解版之后,里面一般会有注册 ...
随机推荐
- 关于 javax.validation.constraints 的测试,以后用到的 会继续补充
参见:https://www.cnblogs.com/xiaogangfan/p/5987659.html 1.@Size注解测试:
- delphi TDBLookupComboboxEh 的项目设置
- 那些年我一直在用的高效开发者工具-Typora
今天跟大家介绍一款我平时一直在用的本地Markdown工具,对比了国内外几款相似工具,Typora简洁.干练.清爽.功能完备特性深深吸引了我.我平时一般用它记录一些学习文章撰写,工作会议内容记录.项目 ...
- CF131D Subway 题解
题目传送门 前置知识 强连通分量 | 最短路 解法 考虑用 Tarjan 进行缩点,然后跑最短路. 缩点:本题的缩点有些特殊,基于有向图缩点修改而得,因为是无向图,所以在 Tarjan 过程中要额外记 ...
- JS 可选链操作符?. 空值合并运算符?? 详解,更精简的安全取值与默认值设置小技巧
壹 ❀ 引 说来也比较惭愧,可选链操作符?.在公司项目中使用特别频繁,而我在之前一直以为是类似奇技淫巧的写法,所以也没去查阅相关文档,直到在学习typescript时碰巧看到了可选链操作符与空值合并操 ...
- 从零开始的react入门教程(六),一篇文章理解react组件生命周期
壹 ❀ 引 学习任何一门框架,无论是vue.react亦或是angular,我们除了需要熟练掌握框架语法外,了解框架自身的生命周期也是至关重要的.一方面生命周期在面试中多多少少总是会提及,其次了解框架 ...
- NC23047 华华给月月出题
题目链接 题目 题目描述 华华刚刚帮月月完成了作业.为了展示自己的学习水平之高超,华华还给月月出了一道类似的题: \(Ans=\oplus_{i=1}^N(i^N\mod(10^9+7))\) \(\ ...
- 吴X凡绯闻女友小怡同学被骂到清空社交平台?各大平台连敏感词库都没有的吗?
敏感词都没有的平台 最近某加拿大籍贯的 rapper 被曝私生活不检点,且极有可能涉及诱X未成年少女,成为一个 raper. 当然至于是否属实,其实一个人是否是海王,微信.QQ 聊天记录里面记得清清楚 ...
- springboot 实现拦截的 3 种方式介绍及异步执行的思考
springboot 拦截方式 实际项目中,我们经常需要输出请求参数,响应结果,方法耗时,统一的权限校验等. 本文首先为大家介绍 HTTP 请求中三种常见的拦截实现,并且比较一下其中的差异. (1)基 ...
- The Network Adapter could not establish the connection errorCode 17002, state 08006
问题说明 今天在centos7虚拟机中运行java程序,程序启动需要连接主机的oracle,报错: The Network Adapter could not establish the connec ...












