飞猫盘请求参数pto以及par的加密算法分析

本文分析了飞猫盘的加密机制,着重解析了pto参数涉及的RSA算法和par参数涉及的MD5+AES算法,通过实际验证确认了加密方法。作者还分享了使用Python和Cryptodome库进行验证的过程和心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

飞猫盘加密算法分析

前言

今天突发奇想想要查看一下有没有什么脚本可以写,想到了之前写的飞猫盘自动签到,因为后面加了加密算法就没法自动签到了,那段时间又没什么时间就搁置了,所以今天准备看一下算法到底怎么回事

准备工作

首先先去看了一下具体是那些参数,用F12的网络工具查看一下包,这里进行一下过滤,就过滤info关键词免得信息太多了,可以看到这个parpto长得就像加密的样子,所以我们主攻这两个参数

2023-11-05T22:42:46.402114559-xjkqnjye.png

分析

pto参数

这里的先去全局搜索一下,这里的话搜索也是有小技巧的,因为毕竟是全局搜索,如果光搜这个很短的参数肯定会特别多,所以我这边搜索的是pto:,为什么这样搜?因为既然他会用到这个参数,只要源代码里面会生成肯定就会pto:它的生成过程或者用法,不出意外这样搜就只有几个,但是没有直接找到我们想要的生成过程,但是至少确定到了他所在的文件

2023-11-05T22:52:19.679211880-wlyislmj.png

进去查看发现虽然两个参数都在,但这几个都不是生成过程仅仅只是用法,所以我们在文件里面进行一下搜索,确定所在文件之后搜索很快就找到生成位置,这里比较明显就是我们要的,毕竟前面是setitem函数

2023-11-05T22:57:46.675978001-ngvezhel.png

跟踪一下看到pto所对应的opt.re()函数生成,里面有iC两个参数,那么我先去找i和C这两个参数,看到i是pt.genak()生成,那么先跟踪这个函数

2023-11-05T23:00:08.259154132-hcmyvtee.png

能够看出来这个函数是生成一个随机字符串的,然后长度为12,同时跳转跟踪一下可以得到C

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6dK2bq7H5xk8uySxE/fp\nH54yGIL8pwYE7IbF4pxBXG1QVla3MGjJc2Qp3VlFIXfAegjZPr68hqymDYcEHF80\nniGSW3PjJQnhKEqErtfSogDR2iSZg303oMSNHGkk9cfPkNfGU+9v/DYFKovZqwbS\n4J9UEwfHtw27CUi9hvMwGPW4XGK2kBYW5JiPsUG7pQ+zkwxwLndHnzfAezBriX6g\nSTEPQREWGVuboRXpiL94iOi5/hAl8muUnGiGbIcYHwvKz1kIbNe2KTIj8r/87bY2\njArs9DZDn+38+2MUHpT6o99jN9mkTWFeUSUhQsL09ruah2aDaj2flUW7hEcxCqfj\ntQIDAQAB

猜测应该是密钥

2023-11-05T23:04:56.064527266-enbzubhb.png

接下来跟踪pt.re()函数,其实这个函数就在刚才生成随机字符串的下面,这个函数的话看起来就有些难度,需要一定基础。它先是初始化一个密钥对象,规定了一下长度,然后检查传入的参数t是不是对象,然后用m()函数处理,接着如果传入的参数e存在则是将其设置为公钥,最后进行加密

2023-11-05T23:17:04.981136082-mswomfdn.png

然而这里并不需要细扣m函数,我们在这里下一个断点,然后刷新页面,发现t在处理前后没有差别,所以在复刻的时候就不必管了

2023-11-05T23:22:41.428357872-muycojik.png

那么接下来就是看具体是什么算法了,刚才我们说到e被设置为公钥,其实有公钥而且常用的加密算法没几个,很容易就想到RSA算法了,这里的话我们调出控制台验证一下,利用断点得到的t进行调用加密函数,dt.thisKeyPair.encrypt("CLoaz8Lornil"),查看输出,发现输出每次都不一样,这里我们几乎就可以确定是RSA算法了,等待后期验证即可

2023-11-05T23:25:30.519558832-kyjmszid.png

至此pto参数分析完毕,初步确定是一个RSA算法,具体留待后面验证

par参数

回到par的生成地方,继续开始分析,看到s = pt.secret(a, i),那么就是找pt.secret()以及它的两个参数ai,刚才分析过了i就是12位的随机字符串,那么看a,a是device_key,字面意思就是设备号之类的,我猜测是不会变化的,于是接着下断点进行验证

2023-11-05T23:33:04.592162744-hrbzmlde.png

下一个断点在退出这段程序之前就可以,这里我重复执行了两遍发现都没有变化,可以确定这是生成之后固定的,这样就不必去扣x64hash128()函数了(因为它是由这个函数生成的,实际上我去看了一下,是一个很复杂的混淆函数,很头疼)

2023-11-05T23:39:35.196074546-qqkqfrsq.png

参数确定完了接下来找pt.secret()函数,搜索一下发现在刚才re函数的下面,这个函数看起来比较简单明了。它接受ten三个参数

  1. t:t是对象的话进行预处理,此处和pto参数的预处理一样,实际上并无变化

  2. e:e进行MD5哈希,前16位做AES加密iv偏移量,后16位做AES加密的密钥

  3. n:若输入存在n则是进行AES解密,不存在则是AES加密

2023-11-05T23:44:12.002245293-fgcgxher.png

至此par参数分析完毕,可以看到是MD5+AES算法生成

验证

既然分析完毕那么接下来就可以进行验证了,我选择的是python,用了一下Cryptodome库,生成这两个参数之后其他的参数从F12的网络工具里面复制进来进行request请求即可,请求之后发现成功过验证(注意pto和par参数所用到的12位随机字符串必须是同一个,否则过不去验证,我在这里踩了一下坑,浪费了一些时间去重新看算法)

2023-11-05T23:51:36.384681187-xtfgingp.png

结语

总的来说这次扣算法还算是成功的,虽然说中间走了一些弯路,但好在结局是好的不是吗?然后呢就是锐评一下飞猫盘,感觉这个盘不是很好用,但是很多ACG论坛都在用,所以搞个自动签到也还是蛮香的,过去签到的两千多点至今还没有用完哈哈哈。本次分析仅作学习交流分享经验,无任何不良引导

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值