安卓逆向-网络抓包

网络抓包

  1. 代理抓包模式(中间人攻击,只能抓应用层的数据) Fiddler Charles VPN 192.168.0.5
  2. 网卡混杂模式(wireshark HTPPS)
  3. 路由器抓包(网络组网方式,有些路由器带有抓包功能,是公司监控员工网络流量的方法)
  4. Hook 域名 把https 改成 http HTTP://WWW.YUANRENXUE.COM/LIST/(因为https要进行证书校验)
  5. Hook常见的网络请求库
代理抓包模式( Fiddler Charles 中间人攻击)
  • 能抓 Http/Https/WebSocket (应用层)
  • 优点:
    配置简单/抓取解析SSL方便
  • 缺点:
    APP对代理抓包的检测屏蔽越发厉害
代理抓包原理

在这里插入图片描述

HTTP特点:
  1. 是明文传播,易被拦截,易被修改,网页弹广告。
HTTPS的特点(在HTTP的基础上加了一安全层(SSL或TSL)):
  1. 数据加密,不再明文传播
  2. 使用数字证书(CA Certificate Authority)(赛门铁克),做身份校验,防止数据被截获,只有合法证书持有者
    才能读取数据
  3. 数据完整性,防止数据被篡改。对数据做签名
SSL层握手协议
  1. Client Hello 发给服务端:一串随机数 和 客户端支持哪些加密算法 一般是RSA加密
  2. Server Hello 回客户端:一串随机数 和 确定使用哪种加密算法
  3. Certificate: 服务端把要公匙证书发给客户端
  4. Client key Exchange: 客户端把自己的证书又发给服务端
  5. Session Ticket:开始传输数据/用key 给http数据加密 传输给服务端

代理抓不到包的几种原因

1.请求没有走代理(app开发者可以设置走自己代理,安卓系统会优先走APP设定的代理http.route.default-proxy)
如何判断没有走我们的代理:
设置wifi代理后 关闭fiddler 如果APP还能正常访问 就是不走代理
解决方法:
ProxyDroid APP (需要root)全局代理 强制把IP转发到指定端口上(原理: 使用 iptable 命令 实现端口转发。为避免干扰把在wifi上设置的ip和端口去掉,调回自动)
mumu虚拟器 iptable 会报错
案例:夜神模拟器的mm应用市场(可以通过adb看看模拟器有没有iptable 命令)
2.ssl pining(ssl证书验证) 目前大部分是这种导致抓不到包
APP对服务端证书做校验,校验服务器的证书和域名,对证书验证不过的内容不进行展示。(这也叫单向认证)

在这里插入图片描述

Python里的requests库对ssl的校验(verify):
requests.get(url, timeout=1, verify=false)
如何判断是ssl pinning

在这里插入图片描述

ssl pinning解决方法
1.使用Hook手段 Hook APP端网络请求库对 ssl证书的判断方法:
借助xposed 模块 justtrustme apk 地址:https://github.com/Fuzion24/JustTrustMe
借助frida 程序 DroidSSLUnpinning https://github.com/WooyunDota/DroidSSLUnpinning
2.逆向APP:
扣出里面的证书 放到charles里 让charles使用真实证书做代理(在双向验证中讲)
示例:安吉星
部分 ssl pinning 失效的原因:
Hook 失败,APP的网络请求库代码被混淆,或者大厂自己实现了一套网络请求库
解决办法:逆向APP,找到证书验证的地方,修改xposed 的justtrustme 或者 frida的DroidSSLUnpinning 代码,再重新Hook
3.双向认证 (客服端对服务端发来的证书做校验,真实的服务端也对客服端证书做校验)使用者很少,会影响服务器性能
如何判断是双向验证:案例soul app(已失效)
当解决了ssl pinning后,依然报如下错误:

在这里插入图片描述

双向认证解决办法:
客服端校验任然使用SSL unPinning方法。服务端校验,需把APP里的证书导入到代理抓包软件中,让代理抓包工具使用真实的APP证书。charles 比较方便配置
示例:soul(已失效)

在这里插入图片描述

如何找到APP里的证书
反编译APP 在assert文件夹里有.p12 .pem之类文件cer ssl
反编译后,在源代码里大量搜索
Hook 监听Assert文件夹 知道读了哪些文件
可能有密码 Hook java.security.KeyStore 查看密码

网卡混杂模式抓包
软件:Wireshark
不需要对客服端做改变(设置代理IP),是对网卡抓包,能抓传输层/网络层,能抓经过网卡的所有TCP包
如何抓手机上的数据:
在电脑上开wifi热点,手机联电脑的wifi热点,共用一个网卡(360wifi热点) http://wifi.360.cn/easy/pc/
安卓虚拟机可以直接抓包,不需要热点
特点:
抓https需要把ssl证书导入到wireshark,不然没法解析https,这个操作难度较大
tcp及以上的数据都能抓,http/https/socket(IP层)等

路由器抓包(网络组网方式)
买有访问抓包追踪功能的路由器,设置路由器转发到本机的fiddler上
也是需要配置ssl证书 这个难度也较大

Hook抓包-通用性差
Hook 域名 把https 改成 http
让app强行发http,请求会失败,抓不到response,但是能抓到请求包
Hook网络请求库
请求前打印出请求参数,响应后打印出返回数据

注意事项:
  1. 安卓7.0(包括7.0)以后,安卓系统不再信任用户安装的证书。(例如 fiddler/charles的代理抓包证书) mumu
    模拟器
解决7.0以后用户证书不信任问题两种方法:
 (1) root手机,把代理证书放到系统证书根目录下
 用户CA证书目录
 /data/misc/user/0/cacerts-added
 系统CA证书目录
 /system/etc/security/cacerts
 问题:
 有的手机root /system 分区是只能读 仍然不能把证书放到系统根目录, 比如魅族pro5
 df 命令
 mount -o rw,remount /system
 (2) hook 系统方法,强行让系统信任用户证书:
 比如:使用xposed框架的justtrustme模块 和 frida的DroidSSLUnpinning
tricks:
 1.优先使用安卓系统低版本抓包
 优先使用安卓4.0 5.0 6.0抓包
 2.优先使用APP低版本抓包(能够运行的最低版本)
 比如微信7.0以下 在安卓4.0-6.0上 容易抓包微信小程序
 优先使用能用的APP最低版本
 3.APP历史版本:
 https://wap.pp.cn/
 apkpure.com
 4.当安卓抓包很艰难时,试试iOS抓包
 5.工具准备充分fiddler/charles/wirseshark/模拟器4.0 5.0 6.0/root了的安卓手机 4.0 5.0 6.0 7.0/苹果手机

猜你喜欢

转载自blog.csdn.net/m0_50685012/article/details/114384701