Android Charles抓包 3分钟手把手图文教程 支持https 7.0以上系统 fidder


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,根据实际情况可修改。
  03.Android手机代理设置
  • 首先获取电脑ip地址
  •  
04.手机设置:设置端口和Ip       命令行方式,输入ifconfig即可
  • 注意:手机需要和电脑使用同一个Wi-Fi网络,这是前提!!!
      Http抓包:可以直接看到 如果http加密了,怎么弄   http进行加密了的现实如下:   Http:成功抓包效果如下  
  • .抓取到的内容为乱码
    • 有的APP为了防止抓取,在返回的内容上做了层加密,所以从Charles上看到的内容是乱码。这种情况下也只能反编译APP,研究其加密解密算法进行解密。
   

抓包Https操作

https提示错误:还有现实unknow    
  • 需要做哪些操作
    • 1.电脑上需要安装证书
    • 2.手机上需要安装证书
    • 3.Android项目代码设置兼容
问题:电脑装的是啥证书????? 电脑安装证书: 给Mac安装证书。
打开Charles,在Menu选择SSL Proxying > Install Charles Root Certificate,Keychain Access(钥匙访问串)被打开,我们可以看到Charles Certificate已经被安装,如图: 信任证书
但此时该证书并没有被信任,双击该行弹出证书详情,选择“Always Trust”。
      2.手机上需要安装证书
  • 第一步下载证书
    • 打开浏览器,输入:chls.pro/ssl,就会自己下载到手机上,这里需要记住下载完成保存到本地的路径。
  • 第二步安装证书
    • 设置 ---> 更多设置 ---> 系统安全 ---> 加密与凭据 ---> 从SD卡安装,选择之前保存证书的路径。
    • 注意,有的手机是直接点击下载的文件即可安装…
    手机打开设置—安全和隐私—凭据存储—从SD卡安装,选择步骤4中下载的证书,进行安装,完成 输入网址chls.pro/ssl,会提示下载证书,此时下载的是个.pem 格式的。需要手动更改为.crt 格式,最后放进的DownLoad 文件夹即可     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>
  没成功的包。显示乱码   成功抓取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请求就行不通。
  3.如何避免抓包
  • 1.基于抓包原理的基础上,直接使用okhtttp禁止代理,就可以了 builder.proxy(Proxy.NO_PROXY);经过测试,可以避免抓包
  • 2.直接使用加密协议,全是字段乱码, 把域名换装IP。这样基本别人很难抓到,像混淆一样
    自己的总结: 证书安装,安装的不是我们说的https。而是通过chales生成的证书。电脑商生成的  安装到手机里面去。 HTTPS抓包的原理还是挺简单的,简单来说,就是Charles作为“中间人代理”,拿到了服务器证书公钥和HTTPS连接的对称密钥, 前提是客户端选择信任并安装Charles的CA证书,否则客户端就会“报警”并中止连接。这样看来,HTTPS还是很安全的。  
上一篇:Charles打开代理安装证书后依然无法上网


下一篇:Fiddler和Charles的区别