app抓不到包的几种原因

1 ssl pining(ssl证书验证)

单向认证

APP对服务端证书做校验 校验服务器的证书和域名。

Fiddler/Charles等的证书肯定是校验不过的

Charles安装配置:https://blog.csdn.net/Lu_GXin/article/details/105841312

APP做ssl pining的几种方式:

举例Python requests库对ssl的校验

requests.get(url, timeout=1, verify=false)

Python的几种网络请求方式

  requests
  urllib
  urlib3
  aiohttp

Java的几种网络请求方式

  HttpsURLConnection 
  okhttp       
  webview ssl pinning
  Native SSL 

如何判断是ssl pinning:

在这里插入图片描述
ssl pinnin解决办法:

1)使用Hook手段 Hook APP端网络请求库对 ssl证书的判断方法

  • 借助xposed 模块 justtrustme apk 地址:https://github.com/Fuzion24/JustTrustMe
    JustTrustMe.apk 是一个用来禁用、绕过 SSL 证书检查的基于 Xposed 模块。JustTrustMe 是将 APK 中所有用于校验 SSL 证书的 API 都进行了 Hook,从而绕过证书检查。xposed的54的可以运行,高版本没有测试,可以自行测试。
    在这里插入图片描述
    注意:设置成功后需要重启设备。

  • 借助frida 程序 DroidSSLUnpinning https://github.com/WooyunDota/DroidSSLUnpinning

2)逆向APP 扣出里面的证书 放到charles里 让charles使用真实证书做代理

示例:安吉星

部分 ssl pinning 失效的原因:
Hook 失败,APP的网络请求库代码被混淆,或者大厂自己实现了一套网络请求库
解决办法:
1、逆向APP,找到证书验证的地方,将证书导入抓包软件
2、修改xposed 的 justtrustme为JustMePlush(自适应混淆) 或者 frida的DroidSSLUnpinning 代码, 重新Hook

双向认证

客服端对服务端发来的证书做校验, 真实的服务端也对客服端证书做校验。

如何判断是双向验证:soul app

当做了ssl unpinning后,报如下错误:

在这里插入图片描述

双向认证解决办法:

客服端校验任然使用SSL unPinning方法

服务端校验,需把APP里的证书导入到代理抓包软件中,让代理抓包工具使用真实的APP证书。charles 比较方便 配置

示例:soul

如何找到APP里的证书

反编译APP 在assert文件夹里有.p12 .pem之类文件cer ssl

反编译后,在源代码里大量搜索

Hook 监听Assert文件夹 知道读了哪些文件

可能有密码  Hook java.security.KeyStore 查看密码 

参考:
https://www.yuanrenxue.com/app-crawl/android-7-capture-data.html

https://mp.weixin.qq.com/s/UyVn15EpbkO1zLyzqy7FcQ?version=3.1.1.3006&platform=win

猜你喜欢

转载自blog.csdn.net/weixin_44032232/article/details/111478298