Day02 2.3 抓取数据包初识

发布时间 2023-06-17 17:32:38作者: Chimengmeng

抓取数据包

【一】抓包工具选择

  • Wireshark:Wireshark
    • 是一个开源的网络抓包工具
    • 可以在多个平台上运行
    • 支持多种协议的抓取和分析。
  • Fiddler:Fiddler
    • 是一个跨平台的抓包工具
    • 可以用于捕获和分析 HTTP 和 HTTPS 流量
    • 它提供了强大的调试和排查功能。
  • Charles Proxy:Charles Proxy
    • 是一款跨平台的代理服务器工具
    • 可以捕获并分析 HTTP 和 HTTPS 流量
    • 它具有图形化界面和丰富的功能,适用于移动设备和桌面应用程序的抓包。
  • Tcpdump:Tcpdump
    • 是一个命令行抓包工具
    • 适用于 Linux 和 Unix 系统
    • 它可以捕获和分析网络流量,并提供灵活的过滤和输出选项

【二】charles安装和配置

【1】mac安装配置

1 下载软件:Charles_4.5.6_xclient.info.dmg

2 双击安装

3 打开软件,输入sn码破解

【2】win安装配置

1 下载软件:charles-proxy-4.5.6-win64.msi

2 一路下一步安装

3 打开软件,输入sn码破解

【3】sn账号

Name: Just For Testing
Serial: 230ADA2020DFBD108E
Name: TEAM MESMERiZE
Serial: FC91D362FB19D6E6CF
Name: MSJ
Serial: 1101CAF6A1989C62AC

为什么使用抓包软件抓手机包

  • 1 本来 手机直接发送请求到服务端
  • 2 现在咱们在电脑上装了抓包软件,使用电脑作为手机的代理,以后所有请求,都会走电脑,就会被抓包软件抓住,我们就可以分析数据包

【三】使用charles抓取手机http包

【1】配置步骤

  • 【电脑】
    • 安装并运行抓包工具 charles
  • 【手机】
    • 配置手机系统代理

【2】配置模拟器抓包

  • 打开charles
    • 点击:proxy--》proxy Settings---》如下图1

  • 打开charles
    • 点击:help--》Local ip address-->查看本机地址--》

  • 或执行命令查看:
win:ipconfig
mac:ifconfig

演示为:192.168.1.173

  • 打开mumu模拟器---》设置--》wlan---》长按---》配置代理

【3】配置真机抓包

  • 打开charles
    • 点击:proxy--》proxy Settings---》

  • 打开charles
    • 点击:help--》Local ip address-->查看本机地址--》

  • 或执行命令查看:
  win:ipconfig
  mac:ifconfig

演示为:192.168.1.173

  • 打开真机---》设置--》wlan---》长按---》配置代理

【4】案例

  • 抓取http包案例(爱学生app)
import requests
data={"code":"","password":"lqz12345","username":"18953675221","uuid":""}
res=requests.post('http://parentsystem.aixuesheng.net/app/v1/patriarchLogin/1',json=data)
print(res.text)

【四】使用 charles 抓取手机https包(手机需要root)

【1】模拟器安装 charles 证书

  • 手机或模拟器只能抓取http请求的数据包,https无法抓取。
  • 想要抓取,就需要在手机上安装 charles 的证书。

注意:

安卓7 以下设备,安装完证书就可以使用,不用移动证书

安卓7以上设备,安装完证书后,为用户证书,必须把用户证书,移动成系统证书,需要借助于magisk刷move cert模块,需要root权限

  • 模拟器安装(模拟器版本低于7,不需要做证书迁移)
    • 1 打开charles-->help--->SSLProxying--->nstallCharles Root Certificate on a Mobile...
    • 2 访问网址 chls.pro/ssl
    • 3 手机设置完代理,才能访问
    • 4 下载安装证书
    • 5 就可以抓取http的包了

【2】真机安装charles证书

  • 1 真机配置好代理后
  • 2 浏览器访问:chls.pro/ssl

  • 3 下载后,手机打开:安全--->加密与凭据--->安装证书--->安装完成
  • 4 手机打开:安全-->加密与凭据--->信任的凭据

  • 此时可以看到用户证书和系统证书

【3】用户证书和系统证书解释

  • 在 Android 系统中,有两种类型的证书:

    • 用户证书(User Certificates)和系统证书(System Certificates)。
  • 用户证书(User Certificates):

    • 用户证书是由特定用户生成或颁发的数字证书。
    • 这些证书通常用于用户身份验证和安全通信。
    • 用户证书可以用于加密和解密数据,数字签名以及建立安全连接。
    • 用户证书通常由用户自己创建,例如,用于加密电子邮件、VPN连接或身份验证。
  • 系统证书(System Certificates):

    • 系统证书是由 Android 系统或设备制造商预装的证书。
    • 这些证书通常用于系统级别的安全功能,如应用程序签名验证、SSL/TLS 连接等。
    • 系统证书通常用于验证应用程序的真实性和完整性,以确保它们没有被篡改或恶意修改。
    • 这些证书由 Android 操作系统或设备制造商管理和维护。
  • 系统证书包括以下几种类型:

    • 代码签名证书:
      • 用于验证应用程序的签名,以确保应用程序的真实性和完整性。
    • 安全通信证书:
      • 用于建立 SSL/TLS 连接,保护设备和服务器之间的通信安全。
    • 根证书:
      • 根证书用于验证其他证书的真实性。Android 系统预装了一组根证书,用于验证 SSL/TLS 通信中的服务器证书。
  • 用户证书和系统证书在安全和身份验证方面扮演不同的角色。

    • 用户证书由用户自己管理,用于个人身份验证和加密通信。
    • 而系统证书由操作系统或设备制造商管理,用于验证应用程序和保护系统级别的通信安全。

【4】把用户证书转成系统证书

1 将move cert压缩包传到手机

  • (任意好找的一个目录 /sdcard/Download/
adb push /Users/lqz/soft/movecert-1.9-4.zip  /sdcard/Download

2 使用面具,刷入

  • 按照下图步骤

3 重启手机

4 手机打开:安全--》加密与凭据---》信任的凭据

  • -此时可以看到用户级别证书移动到系统级别了

5 此时可以愉快抓https包了

【5】案例:抓取https包(今日南川app)

import requests

data = {
    'appId': '32',
    'hashSign': '133bcb5e7330257a8823747b492d28b2',
    'imgUrl': '',
    'lat': '29.568295',
    'lng': '106.559123',
    'loginName': '18953645221',
    'nickName': '',
    'openId': '',
    'place': '重庆',
    'pwd': '827ccb0eea8a706c4c34a16891f84e7b',
    'sessionId': '392032c5-09c8-4c3c-bb17-16a1dc49f7fc',
    'token': "",
    'type': '',
}
headers = {
    'appid': '32',
    'sessionid': '392032c5-09c8-4c3c-bb17-16a1dc49f7fc',
    'token': '',
    't': '1686650472124',
    'sign': '90b5afeaed045a4c5ac9b13f693c7023',
    'cqlivingappclienttype': '1',
    'cqlivingappclientversion': '2029',
    'content-type': 'application/x-www-form-urlencoded',
    'content-length': '249',
    'accept-encoding': 'gzip',
    'user-agent': 'okhttp/4.10.0',
}
res = requests.post('https://api.cqliving.com/login.html', data=data, verify=False,headers=headers)
print(res.text)