一 : 梳理思路:
- 想要签到 , 必须有一个可以签到的软件 , 网页 , 小程序等
- 抓包 你想要进行签到的 软件 , 网页 , 小程序等(不会抓包或抓不到包的点击抓包 的超链接去学习)
- 然后就是分析(很有可能需要解密的相关知识)你抓的数据包 , 直到找到 签到 (或其他操作) 包
- 使用测试工具进行测试,确定是否可以请求成功(不成功自己寻找并解决问题)直到可以成功请求
- 最后就是写脚本了, 只要前面的完成了, 写脚本那就很快了
二: 思路有了, 那就开始吧!
有任何错误笑笑就好了 , 当然更加欢迎您指出我的错误 , 万分感激的!
首先确定一个目标(今天来个简单的例子)
微信小程序:骁友会 (直接搜索或扫码进入:扫码有邀请 没啥用的,在意的自己搜索)
- 注册登录后可以找到 任务列表 里面有 每日签到 跟其他的很多任务(今天就搞这个签到)
- 然后就是下一步了
进行 签到 (相关操作)的抓包
根据不同的机型 , 我们需要分类讨论了 首先来说说ios吧
ios 抓包相关
抓包软件
- 免费的 : stream 图标就是个心电图是的 , 免费软件 , 国区可自行下载
收费软件:
- 不得不说的就是 圈x ios绕不开的软件 , 操作教程找科技玩家小姐姐(点击超链接即可)(不会告诉你我搬运到我的bolg了) , 需要自行外区下载
- thor 也叫锤子 , 就是长得像索尔的吧 , 需要自行外区下载 (有这个软件的应该不需要教程)
- Http Catcher 也叫网球 ,可能就是长得像吧 国区可下载 , 高级功能需要付费解锁 , 有这个软件的也不需要教程
- 别的没怎么用过 , 听说过了
抓包操作
- 不同的软件 , 操作也有所差异 , 但是本质都是一样的 , 都是通过建立 vpn 进行代理网络流量 , 从而进行捕获数据包 . 想要捕获https 数据包 , 都需要进行证书的信任工作 , 记得有两个关于证书的操作就够了,一个地方安装证书 , 一个地方信任证书 ; 详细教程自己百度 , google 去吧!
Android 抓包相关
相对比 ios 来说 , 安卓的抓包就有利有弊了,得益于安卓的生态,也毁在安卓的生态(个人见解哈)
抓包软件
- 小黄鸟(3.3.6) , 小蓝鸟 , 还有各种小黄鸟的改版 ; 安卓端知名的抓包软件 , 推荐3.3.6版本,别问为啥
- 抓包精灵 跟小黄鸟差不多的
- 还有好多好多好多好多没听说过的软件
- 抓包操作 同ios 自行搜索研究去吧!
PC 抓包相关
- 上面的软件基本都是基于手机的 , 总有这样那样的不方便的地方,个人觉得还是配合电脑抓包,才能更好 , 更更快的分析数据包 (当然,你只有手机就当我在)
PC 抓包软件推荐
- Fiddler 首推fd,mac的话可以考虑 charles , fd的强大是人尽皆知的:学习链接 -- 52破解基础基础 进阶教程
- charles (也叫花瓶、青花瓷等)mac用户首推这个 , 当然win也有这个 分类很好用; 看雪charles教程
- 别的没怎么用过 , 当然抓包工具还有超级多的
抓包签到
- 打开你的抓包软件 , 或者手机连上你的电脑抓包软件
- 确定开始正常抓包后去app执行签到相关操作
- 返回抓包工具 , 停止抓包 , 备注刚才抓包的app 进行的操作(不能备注的也没办法)
- 至此,抓包结束
分析刚才抓的数据包
分析数据包这个东西吧 , 没法教 ,主要看自己的悟性(就是猜) , 自己的英语水平 (数据包基本没有中文,只有部分中文的提示,基本全是英语) , 还有就是自己的经验(废话) ,我们一点点来说吧!
首先可以根据 url 链接,寻找关键字进行定位
- 例如: 某个url如下
https://qualcomm.growthideadata.com/qualcomm-app/api/user/signIn?userId=xxx
请你判断下这个url 是做什么工作的 用户登录我们来分析下这个 url
- 首先前面是固定的
https://
这个是 https 请求 qualcomm.growthideadata.com
是他的域名(也就是host)/user/signIn
很明显就是/用户/登录
了鸭
- 首先前面是固定的
- 像这种的根据 url 中的英文单词来判断 这个数据包功能是 非常非常非常 常见的,因为你第一眼看到的就是这玩意了
然后我们还可以根据 响应体 来进行判断 (请求头 请求体 响应头 响应体还不懂的自行去补课: 简书
- 例如: 某个响应体如下 ;
{
"code": 0,
"message": "success!",
"data": {
"coins": 5
}
}
- 请你判断下这个 响应体 可能是什么的 , 我们经常用的数据有哪些? 用户签到获得硬币(金币等) 常用数据:code message coins
我们可以根据数据包的类型来进行初步筛选
- 一般请求都是
post
或者get
请求 , 我们根据数据包类型减少工作量 - 一般有携带账号密码信息的请求都是使用
post
进行的 - 一些简单的请求可能使用
get
我们可以根据获得的数据进行搜索筛选
- 例如: 我们签到获得了5 积分 , 我们就可以直接搜索
5
作为关键字搜索响应体(因为这个数据是服务器发回我们的,所以搜索响应体) ; 搜索出来数据可能超级多 因为5
太常见了 ; 如果33
78
等这样的值这样搜索 效果比较好 - 同理,也可以进行中文的搜索筛选(效果非常不理想,很多返回都是英文的)
可以通过软件内的时间来进行辅助定位
- 例如:你签到成功后,很多软件都会给你一个积分(金币)啥的明细表,就是你什么时间,做了什么操作,然后获得了多少积分等
- 可以根据软件给的时间 来进行辅助定位,很多软件会精确到毫秒 ,所以这不失为一个好方法呢(o)/~
没有别的办法那就只能查看所有数据包,慢慢寻找你要的数据包了
- 找的过程也要慢慢积累,尽可能的搞清楚他的命名逻辑,对以后的找包速度会有明显提升
下面给出本次试验对象的签到数据包
使用测试工具进行测试
其实这里我不知道该叫什么名字,反正我就按照我自己的理解进行教程,有不对,不合适的地方,请指出
使用抓包工具自带的软件进行测试
很多抓包工具都带有数据包 重发 功能,例如:
- 安卓:小黄鸟、小蓝鸟
- ios:圈x自带重放 锤子配合 anubis 网球没用过
- pc: fd自带重放 花瓶(charles)都可以直接进行重放
- 一般当你不能确定是否是这条数据包时,重放总是一个不错的选择!
使用第三方的调试工具进行测试
- 我比较常用的有 postman apipost等
- 这里主要是进行数据的重放与必要参数的测试
进行数据包参数测试
- 这一步主要是确定服务器会校验那些参数,那也就是我们写脚本必须要加强关注的参数
- 所谓的服务器校验,也就是你发送过去后 他会判断这个参数是否正常,不正常的话一般会返回一些错误码等等
- 也就是说,你要保证他检验的数据一定是正确的,你才有可能签到(别的什么操作)成功
- 得到最简的参数时,这一步可以算完成了
接下来就是最后一步了,我们开始写脚本吧
开始写脚本之前我先声明几句
- 我的js是自学的,难免有错误的地方
- 很多地方都是大佬的开源脚本修改的,可能修改的四不像,但是我用着舒服就行了
- 脚本我写了很多注释 // 就是双引号后面的内容,希望可以帮你可以尽快的理解这一行的作用
- 有任何不懂得地方,直接百度、google查一下 很快就懂了
- 没了没了 开始
- 首先,脚本地址:
- 如果遇到任何问题,请首尝试自己解决它,这样你的成长才会更快;实在解决不了的可以群里问
- 啰啰嗦嗦几千字了,第一版就先这样吧
- 下面给懒得同学吧脚本内容搬运下,省的跳过去看了!
/**
* 教程
* 地址:
*
* 教程 这里是写脚本说明的地方
* 本脚本仅用于学习使用请勿直接运行
*
* ========= 青龙 =========
* 变量格式:export jiaocheng_data=' xxxx & xxx @ xxxx & xxx ' 多个账号用 @分割
*
*/
const jsname = "教程";
const $ = Env(jsname);
const notify = $.isNode() ? require('./sendNotify') : ''; // 这里是 node(青龙属于node环境)通知相关的
const Notify = 1; //0为关闭通知,1为打开通知,默认为1
const debug = 1; //0为关闭调试,1为打开调试,默认为0
//////////////////////
let jiaocheng_data = process.env.jiaocheng_data; // 这里是 从青龙的 配置文件 读取你写的变量
let jiaocheng_dataArr = [];
let data = '';
let msg = '';
!(async () => {
if (!(await Envs())) //多账号分割 判断变量是否为空 初步处理多账号
return;
else {
console.log(`本地脚本4-11 )`); // console.log是输出信息的,可以在脚本日志中看到输出(打印)的信息
console.log(`\n\n========================================= \n脚本执行 - 北京时间(UTC+8):${new Date(
new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 +
8 * 60 * 60 * 1000).toLocaleString()} \n=========================================\n`);
await wyy();
console.log(`\n=================== 共找到 ${jiaocheng_dataArr.length} 个账号 ===================`)
if (debug) {
console.log(`【debug】 这是你的全部账号数组:\n ${jiaocheng_dataArr}`);
}
for (let index = 0; index < jiaocheng_dataArr.length; index++) {
let num = index + 1
console.log(`\n========= 开始【第 ${num} 个账号】=========\n`)
data = jiaocheng_dataArr[index].split('&'); // 这里是分割你每个账号的每个小项
if (debug) {
console.log(`\n 【debug】 这是你第 ${num} 账号信息:\n ${data}\n`);
}
// 这里是开始做任务 需要注意的点
// 1. await只能运行与async函数中
// 2. 函数的名字不可以相同
// 3. 不够可以自己复制
console.log('开始 xx');
await signin();
await $.wait(2 * 1000);
// 这里是开始做任务
console.log('开始 yy');
await yyyy();
await $.wait(2 * 1000);
// 这里是开始做任务
console.log('开始 zz');
await zzzzz();
await $.wait(2 * 1000);
await SendMsg(msg); // 与发送通知有关系
}
}
})()
.catch((e) => console.logErr(e))
.finally(() => $.done())
/**
* 签到 骁友会
* 下面我们来看看函数需要注意的东西吧
*/
function signin(timeout = 3 * 1000) {
return new Promise((resolve) => {
let url = {
url: `https://qualcomm.growthideadata.com/qualcomm-app/api/user/signIn?userId=${data[1]}`, // 这是请求的 url 可以直接用我们抓包、精简后的URL
headers: { // headers 是请求体 可以直接用精简后的 hd 也就是服务器校验的部分,他需要啥,我们就给他啥
"userId": data[1],
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"Host": "qualcomm.growthideadata.com",
"User-Agent": UA,
"sessionKey": data[0],
"Referer": "https://servicewechat.com/wx026c06df6adc5d06/176/page-frame.html",
"Connection": "keep-alive"
},
// body: '', // 这是一个 get 请求,没有请求体 body 如果是 post 不要忘记他鸭!
}
if (debug) {
console.log(`\n【debug】=============== 这是 签到 请求 url ===============`);
console.log(JSON.stringify(url));
}
$.get(url, async (error, response, data) => { // 这是一个 get 请求 , 如果是 post 记得把这里改了
try {
if (debug) {
console.log(`\n\n【debug】===============这是 签到 返回data==============`);
console.log(data)
}
let result = JSON.parse(data);
if (result.code == 200) { // 这里是根据服务器返回的数据做判断 方便我们知道任务是否完成了
console.log(`【签到】${result.message}
[1]: https://www.jianshu.com/p/eb3e5ec98a66