V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
2owe
V2EX  ›  Android

请问各位开发大佬,是怎么实现在安卓 7.0 及以上 https 解密抓包的?

  •  
  •   2owe · 2018-12-25 13:17:59 +08:00 · 16311 次点击
    这是一个创建于 2161 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:Android 7.0 ( API 24 )及以上,APP 默认不信任用户域的证书。

    参考链接:网络安全性配置,https://developer.android.com/training/articles/security-config

    那么直接信任 Charles 的证书已经不能满足要求了。

    请问各位老司机,需要抓包 https 的请求,有什么最佳实践吗?

    21 条回复    2018-12-27 16:29:11 +08:00
    mouyong
        1
    mouyong  
       2018-12-25 13:19:28 +08:00   ❤️ 1
    whistle
    2owe
        2
    2owe  
    OP
       2018-12-25 13:25:31 +08:00
    @mouyong #1

    https://github.com/avwo/whistle/blob/master/docs/zh/questions.md

    看了一下常见问题,这个应用也是通过信任证书实现的,无法解决上面的问题。
    annoy1309
        3
    annoy1309  
       2018-12-25 13:32:31 +08:00
    如果是自有 APP,Google 提供一个 debug 模式发布 app 的印象中,这个模式下,修改 trust-anchors 可以让 app 默认可以信任用户域
    annoy1309
        4
    annoy1309  
       2018-12-25 13:34:38 +08:00   ❤️ 1
    不是自有的话,xposed 吧。我记得有 JustTrustMe 一个插件
    lzvezr
        5
    lzvezr  
       2018-12-25 13:49:31 +08:00 via Android   ❤️ 1
    不信任用户证书好办,root 以后把证书丢到 system 里就可以了
    重点是 ssl-pinning,目前除了使用 xposed 以为,没什么好方法,所以 xposed 没有支持到的 9.0 系统无效,楼上提到的插件之前在 8.1 测试无效,不知道更新适配没有

    所以我的解决方法就是使用 6.0 系统,因为 ssl-pinning 涉及到很多证书验证的东西,很少自己实现的,而安卓在 7.0 才提供了原生解决方案,所以用 6.0 抓 HTTPS 轻松很多
    yukiww233
        6
    yukiww233  
       2018-12-25 13:56:04 +08:00   ❤️ 2
    https://juejin.im/post/5c1e370ae51d45374272696e

    在 VirtualApp 里抓不用 root
    yst
        7
    yst  
       2018-12-25 13:59:01 +08:00
    https://github.com/levyitay/AddSecurityExceptionAndroid
    这个脚本可以通过 apktools 修改配置文件然后重新打包
    一年前用 Nexus 6p 的时候用过,现在不知道还有用么 您可以试试
    2owe
        8
    2owe  
    OP
       2018-12-25 14:24:39 +08:00
    @yukiww233 赞啊,VirtualApp 是一个好思路,期待 http 转发——能在电脑上看,手机界面太小了。。
    2owe
        9
    2owe  
    OP
       2018-12-25 14:26:30 +08:00
    @lzvezr 用专门的测试机也是个简单易行的好办法
    2owe
        10
    2owe  
    OP
       2018-12-25 14:29:08 +08:00
    @annoy1309
    有非自有 APP 的需求,比如在微信里打开页面,使用微信授权。微信自带的工具一个问题就是,有些请求可能是过快了??请求内容获取不到。
    wjm2038
        11
    wjm2038  
       2018-12-25 14:33:25 +08:00 via Android
    @lzvezr 求问 system 哪个文件夹是证书的
    lzvezr
        12
    lzvezr  
       2018-12-25 16:15:04 +08:00 via Android
    @wjm2038 /system/etc/security
    ghos
        13
    ghos  
       2018-12-25 17:41:22 +08:00
    @yukiww233 好用啊 已买专业版
    momocraft
        14
    momocraft  
       2018-12-25 17:42:51 +08:00
    不验证签名的 app 可以解包-改 manifest-重签名 搞定吗?
    yukiww233
        15
    yukiww233  
       2018-12-25 17:47:57 +08:00
    @ghos #13 gp 余额不够,没买专业版
    baymaxx
        16
    baymaxx  
       2018-12-25 19:42:55 +08:00
    这个问题要看引起的原因,如果仅仅是因为不能信任用户证书引起的,其实只借助 VirtualApp 和 Charles 就能解决,
    1. 首先正常配置 Charles https 抓包,包括证书安装啥的
    2. 在 VA 里面配置

    <base-config cleartextTrafficPermitted="true">
    <trust-anchors>
    <certificates src="system" />
    <certificates src="user" /> <!--主要这行-->
    </trust-anchors>
    </base-config>

    3. 然后运行 VA,然后把你要抓包的 app 在 va 里面运行,通过 Charles 就可以抓包了。
    stop9125
        17
    stop9125  
       2018-12-25 19:53:58 +08:00
    模拟器,genymotion
    OrangeM21
        18
    OrangeM21  
       2018-12-26 05:41:25 +08:00 via Android
    上模拟器阿
    OrangeM21
        19
    OrangeM21  
       2018-12-26 05:41:48 +08:00 via Android
    用模拟器配合 wireshark
    jlhde123
        20
    jlhde123  
       2018-12-26 20:16:34 +08:00
    现在有些 app 都会检测是不是虚拟机,是虚拟机直接停止运行
    2owe
        21
    2owe  
    OP
       2018-12-27 16:29:11 +08:00
    @jlhde123 毕竟有些大厂爬虫就是用的这种方式……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1090 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:27 · PVG 02:27 · LAX 10:27 · JFK 13:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.