xx环境
Ubuntu20.04
iphone
部署环境
Linux
(ubuntu && Centos)
前言
讲的是思路 !!!
安装xx工具&&报文分析
- 安装
Charle
wget -q -O - https://www.charlesproxy.com/packages/apt/PublicKey | sudo apt-key add
sudo sh -c 'echo deb https://www.charlesproxy.com/packages/apt/ charles-proxy main > /etc/apt/sources.list.d/charles.list'
sudo apt update
sudo apt install charles-proxy -y
- xx激活
Charle
Registered Name:https://zhile.io
License Key: 48891cf209c6d32bf4
打开软件在手机上安装证书
- 前提准备
- 保证手机和电脑在一个局域网中
- 保证手机链接同一个局域网并配置
Http
代理为你电脑的ip:8888 (找不见自己电脑中的IP可以在第三张图查看)
- 使用的是Iphone 如果是安卓手机就需要Root (这里只是教大家分析报文 真实部署不需要)
依次点击help
->SSL Proxying
->Install Charle Root Certificate on a Mobile device or Romote Browser
- 在手机上输入如图上的域名
chls.pro/ssl
下载安装证书 - 依次点击
Proxy
->SSL Proxying Settings
点击Add
添加所有需要抓的Https
请求
- 当看到Charle中抓到很多请求后 说明初始配置成功
清除历史包并在手机上打开x信和xxxx
-清除手机后台所有应用 并打开 x信 -> xxxx
-
根据要抓的应用名称判断出需要的域名
-
显然这个域名是放小程序h5以及用户信息的域名路径
-
显然这个域名是放小程序js 以及css文件的路径
-
选择清除小程序数据信息 然后进入后会跳转到登陆页面
-
后期会发现
post
一个定位打卡签到的报文 会需要Session
信息故 要发登陆的报文取到session
信息 -
随变在用户名密码填一下让手机将报文发出去
-
charle下查看到发送了一个带username passwd的post报文
-
查看报文信息
username
passwd
为我在校园用户名秘密openid
unionid
为小程序的信息phoneinfo
字面意思
-
把链接复制出来拉到postman下测试一下 发现刚才的 其他三个Requests headers 字段可以不需要
-
Response headers
中的Set-Cookie
和JwsSESSION
是后期发送打卡请求需要的字段
-
手机点击我的可以发现抓到了个人数据 分析请求头发现是带这cookie请求的
-同样复制出Requests headers
拉到postman测试一波
-
最后点到打卡的界面 因为 今天我已经打过卡了所以出现的是 gettoday.json
-
没有打过卡可以直接提交 发现就是在这个路径下发了一个 名为
save.json
的Post
包 将参数拿到postman 同样测试一遍
-
发现打卡成功 然后开始写代码
Code
- 这里放一个没有添加每日短信提示的版本
- home_data 的需要更改为你自己家的数据
- 前两个字段为家的经度和伟度
‘latitude’: ‘34.445026’,
‘longitude’: ‘107.62972’, - city填你所在的市
‘country’: ‘中国’,
‘city’: ‘宝鸡市’, - 后面的数据填你所在的镇
‘district’: ‘xx县’,
‘province’: ‘xx省’,
‘township’: ‘xx镇’,
‘street’: ‘xx街’, - areacode 你的地域号 通过高德/百度 地图的API可以查到 不知到写你身份证前6位
‘areacode’: ‘610323’,
import datetime
import json
import os
import random
import requests
FileLog=os.path.basename(__file__).replace('.py','.log')
class WZXY_Fuck(object):
def __init__(self,username,passwd):
self.username=username
self.passwd=passwd
self.JWSESSION=''
def get_student_data(self):
student_info_url="https://gw.wozaixiaoyuan.com/basicinfo/mobile/my/index"
student_info_headers={
'method':'POST',
'scheme':'https',
'path':'/basicinfo/mobile/my/index',
'authority':'gw.wozaixiaoyuan.com',
'content-type':'application/json;charset=UTF-8',
'accept':'application/json, text/plain, */*',
'accept-encoding':'gzip, deflate, br',
'accept-language':'zh-CN,zh-Hans;q=0.9',
'origin':'https://gw.wozaixiaoyuan.com',
'user-agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 15_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.18(0x18001225) NetType/WIFI Language/zh_CN miniProgram/wxce6d08f781975d91',
'referer':'https://gw.wozaixiaoyuan.com/h5/mobile/basicinfo/index/home/my',
'cookie':'JWSESSION={}'.format(self.JWSESSION),
}
student_info_response=requests.post(student_info_url,headers=student_info_headers)
print(student_info_response.text, file=open(FileLog, 'a'))
def login(self):
login_headers