V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ErenJaeger
V2EX  ›  Python

现在服务端可以识别抓包了嘛?

  •  
  •   ErenJaeger · 46 天前 · 2414 次点击
    这是一个创建于 46 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 Charles 抓包,知乎可以正常获取到数据,但是抓豆瓣就一直超时了,看请求也都是 unknown 。

    20 条回复    2021-06-16 17:35:07 +08:00
    mht
        1
    mht   46 天前
    SSL 证书没配置吧
    newmlp
        2
    newmlp   46 天前   ❤️ 1
    有些客户端做了证书固定,除了自己的证书谁的证书都不信任
    libook
        3
    libook   46 天前
    只要你最终是用官方的证书来发起 HTTPS 请求的,理论上服务端是无法知道你有没有做抓包的。

    那么就只能是客户端不认自签证书,这个只要你破解了客户端,服务端应该是一点办法都没有。

    TLS 只能解决 TLS 通信过程中的中间人问题,不能解决 TLS 通信之前的中间人问题。
    bruce0
        4
    bruce0   46 天前
    https 抓包就是中间人攻击, 欺骗客户端和服务器, 有很多种方式可以防范, 很多 app 内置私有证书,服务端只信任自己的私有证书
    https://zhuanlan.zhihu.com/p/46433599 这里有详细介绍
    ErenJaeger
        5
    ErenJaeger   46 天前
    @mht 配置了,证书都安装好了,不然 https 的都解密不了
    ErenJaeger
        6
    ErenJaeger   46 天前
    @newmlp 淦,这种有解决的方法吗?
    ErenJaeger
        7
    ErenJaeger   46 天前
    @bruce0 谢谢老哥,我去研究一下
    ErenJaeger
        8
    ErenJaeger   46 天前
    @libook 这种方式该如何实现呢,用 Charles,fidder 这些做代理,可以配置对应的证书吗?
    heart4lor
        9
    heart4lor   46 天前   ❤️ 2
    https://www.sunyongfei.cn/archives/213/ 我写过一篇博客介绍 hook 绕过本地 https 证书认证,可以参考下看有没有帮助,服务端是无感知的
    ZhaoHuiLiu
        10
    ZhaoHuiLiu   46 天前
    我就纳闷。。。都手机 app 应用了,直接用 socket 通信,私有加密算法,你抓包抓什么呢?
    ErenJaeger
        11
    ErenJaeger   46 天前
    @heart4lor 感谢老哥,我去拜读一下
    duan602728596
        12
    duan602728596   45 天前
    我之前是通过越狱了的手机安装 ssl-kill-switch2 抓的
    libook
        13
    libook   45 天前
    @ErenJaeger #8 其他楼都提到了,抓包其实本质上就是中间人攻击,就是你在 A 、C 通信的时候中间加了个 B,就变成了 A 到 B,然后 B 到 C,B 就是这个抓包工具,A 到 B 是使用 B 的证书来通信的,B 到 C 是使用 C 的证书来通信的,大多数 A 都不会管通信时是用谁的证书,只要有证书就行,所以大多情况你可以直接在设备上装抓包软件的证书就可以直接抓包,但是你目前遇到的情况可能是 A 只认 C 的证书,你让 A 用 B 的证书被 A 拒绝了,所以抓不到数据。

    要想解决问题只能让 A 接受 B 的证书,这个涉及到破解 A 的程序,修改算法让其接受 B 的证书,这个属于逆向工程的领域,技术门槛比较高。
    locoz
        14
    locoz   45 天前 via Android   ❤️ 1
    补充一下,服务端检测方面除了 @libook #3 说的证书方面的检测以外,实际上还可以通过 ssl 指纹进行检测,因为不同软件、系统使用的 ssl 库是不一样的,能支持的加密套件、版本号啥的也都是不一样的,产生出来的特征就相对比较独特。

    所以对于 app 而言,如果对方把抓包工具的特征记录了下来,或者在客户端上对 ssl 层做了一个特别的特征,而代理软件发出的 ssl 握手请求却不符合正常的特征,那就肯定有问题。

    另外,如果在客户端上检测的话花样就更多了,只不过没啥意义,太容易被 hook 一下就解决掉,还不如套个别的协议来得直接。比如 @ZhaoHuiLiu #10 说的“直接用 socket 通信,私有加密算法”,在实际应用的时候可以是先基于 TCP/UDP 定一套私有协议,然后套上加密,再在这套私有协议里跑 HTTP,其实也就是科学上网工具用的方法。这方面比较典型的实际应用案例就是腾讯的维纳斯,大众点评啥的直接抓包抓不到就是因为这个。
    locoz
        15
    locoz   45 天前 via Android
    @locoz #14 (客户端对证书做检测这种就是典型的能被 hook 一下就解决掉的操作,看着花里胡哨实际没啥难度
    julyclyde
        16
    julyclyde   45 天前
    Charles 这就不叫抓包
    qwerthhusn
        17
    qwerthhusn   45 天前
    @julyclyde 为什么不叫抓包,Charles 和 Fiddler 也是抓包,只不过同时把包二次包装发给服务器或者客户端
    unco020511
        18
    unco020511   45 天前
    怎么就成中间人攻击了,TLS 是安全的,你被抓包是因为你主动在你自己的设备中安装了第三方的证书,第三方才可以读取你的数据,这不是协议的问题,这是你自己的问题啊
    julyclyde
        19
    julyclyde   45 天前
    @qwerthhusn sniff 才能叫抓包
    charles 这叫中间人攻击
    ErenJaeger
        20
    ErenJaeger   39 天前
    这种方式可以解决,我目前用的是将 charles 的证书放在系统证书目录下,在模拟器里面抓的
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   840 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:48 · PVG 03:48 · LAX 12:48 · JFK 15:48
    ♥ Do have faith in what you're doing.