【原创】获取B站私信撤回的消息与一键导出私信记录

这几天乱逛,捡到一个接口,这个接口存在一个bug,能够返回已经撤回的消息或者因为各种原因而导致无法查看的消息,如图:

对方撤回了一条消息
从API看到撤回的消息

https://api.vc.bilibili.com/svr_sync/v1/svr_sync/fetch_session_msgs

请求方式:GET
认证方式:Cookie(SESSDATA)

url参数:

参数名 类型 内容 必要性 备注
sender_device_idnum 发送者设备 可选1
talker_idnum 聊天对象的UID 必要
session_typenum 聊天对象的类型 必要 1为用户,2为粉丝团
sizenum 列出消息条数 可选 默认是20
buildnum 未知 可选 默认是0
mobi_appstr 设备 可选 web

实例:

获取与目标用户uid为123的私信记录:

https://api.vc.bilibili.com/svr_sync/v1/svr_sync/fetch_session_msgs?sender_device_id=1&talker_id=123&session_type=1&size=20&build=0&mobi_app=web

获取与粉丝团id为234的私信记录:

https://api.vc.bilibili.com/svr_sync/v1/svr_sync/fetch_session_msgs?sender_device_id=1&talker_id=234&session_type=2&size=20&build=0&mobi_app=web

附:真正的加密通话

利用发送的消息类型为3做到不可见

但是通过本api可以让不可见的消息内容显现

因为这几天突然有老哥翻出远古项目来问,所以更新一下,这个api最多仅仅返回200条数据,那剩下超出的该怎么办?通过刷新页面你能看到:实际上这个api还有begin_seqno与end_seqno参数来检测是否有新的消息已做到实时更新,因此我们可以利用end_seqno等于最早一条消息的时间,反复循环来做到读取以前所有的历史记录

具体的api调用相关,已经提交到了 哔哩哔哩-API收集整理

私信消息记录导出工具

如有疑问请评论,转载请标明出处

关于QQbot的AI画图功能的实现思路

因为群友要AI画图功能,但又不想花钱接入官方的api,也没法拿自己服务器直接进行搭建,所以只能去找别人已经搭好了的,在各种方式寻找后,发现了一个每天签到获取次数的网站符合要求,接下来就是发包模拟请求看能不能做进去

已知注册会给你一段16位token,登录直接用这个,所以抓个包看看
/api/user_login?token=你的token

直接返回一大串不知道是什么的字符串,但别急,看看下面那个包

/api/get_left?pass=接的是返回的这段

/api/dreambooth/get_model?pass=接的是返回的这段

得知登录得到这串字符串是与cookie作用相同的pass(注意,请求头里没有带任何认证用的如cookie,Authorization等),get_left顾名思义获取剩余次数,get_model获取模型(实际返回是NULL)

接下来,直接随便输入点tag生成模型看看,毕竟这才是关键,依旧先抓包看看(一下*均为手动打码)

POST /api/generate-image HTTP/2
Host: ****
Content-Length: 744
Sec-Ch-Ua: "Chromium";v="95", ";Not A Brand";v="99"
Accept: application/json, text/javascript
Content-Type: application/json
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Sec-Ch-Ua-Platform: "Windows"
Origin: ***
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: ***
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
{"pass":"你的pass","prompt":"masterpiece,best quality,1 girl,mika (blue archive) ,scrunchie,very long hair,yellow eyes,pink hair,halo,breasts,white wings, low wings,single side bun,blue ribbon,blunt bangs,low wings,white pantyhose,smile,sleeveless dress,Masturbation,thighs,nsfw,straddling,sex,rape","nprompt":",lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry","step":40,"scale":12,"seed":1168765599,"sampler":"DPM++ 2M Karras","wh":"square_l","progress_id":"1b9854b1-****-4517-80d9-a6703df53e55","dreambooth":"anything-v4.0-fp16-default"}

Pass是登录给的,prompt是tag,nprompt我直接留空,说明默认是这些,step是迭代次数,scale是服从度,seed随机种子不填写他会自己随机,sampler是采样器,wh是尺寸,progress_id暂时存疑,dreambooth是模型

返回结果如下,种子编号,成功状态,模型和图片链接

看接下来的包,

忽略掉/speed这个host都不是这个网站的包(也没有返回参数,直接不管)

/api/progress?id=接progress_id,返回如图,很明显是展示图片生成的进展,但实际上并没有用在生成图片里,只是一个指示进度的功能罢了,在调用层面上可以直接使用await强行等待返回结果即可

接下来的问题就是查明progress_id是如何生成的,当然你可能会说既然没用,为什么不去掉这个参数直接发包,如下图

既然是前面包里没有的参数,那就去看看生成功能的这段JS,非常幸运,直接ctrl+F就定位到了代码位置并且js没有进行混淆

可以看到seed是随机0到1之间的数再乘4294967296最后再向下取整

而Progress_id是u,而u又是uuid()方法生成的,那就去看uuid()

有点意思了,36个字符的数组s,最后这个s会拼接成字符串uuid,而这个uuid的第9,14,19,24位是“-”,第15位必定是4,其余位数(除第20位)是在0123456789abcdef里随机(16进制),第20位是随机出来的数按位与 0x3,再按位或0x8

既然如此,所有参数都知道来源了,甚至还带一个/api/pass_check?pass=的接口给你验证自己的pass是否依旧有效,那么自己写程序构造就好了。

最后需要注意的一点是,如果请求头没带够或者有误会直接403forbidden,而如果json发送的格式有误则会400bad request

Sec-Fetch-*请求头必须全部带上,请求头Referer那更不用说(关于Referer防盗链),否则必定403

关于FF14无人岛自动采集思路

因为国服也6.2了,人均一个空岛的版本到来了,然而无人岛收益虽低,但不得不肝,我看某鱼上的价格都卖到了40多,所以就写一个思路放在这给大家看看

”阅读全文”

这里先要讲一下游戏内的机制:

  1. 退本进本可以立刻刷新岛内所有资源(除稀有动物)
  2. 挖黏土的地方效率极高,但材料单一
  3. 一键宏能到材料跟前,使用小键盘0或者手柄的B能代替右键进行点击收割

知道这些就好办了,用按键精灵都能写出个简单的循环,但是你无法得知是否真的到了材料面前,因此这次使用的是 Uibot Creator ,上位版按键精灵,自带识图

大概需要注意以下几点:

一定要用管理员身份运行Creator.exe ,不然读不到FF14的进程而没法对其输入按键

识图点击默认是点击图片正中间(如下图)因此需要加向下的偏移

最后附一张位置

”折叠”

[原创]OpenCvSharp学习1—-图像三通道分离

看网上都是C++的,没有C#的就来写一个,其实本质都是一样的

 // 读取一张图片
Mat srcImage = new Mat(@"D:\1.jpg", (ImreadModes)0x1);
            Mat[] channels;
//Split图像切割,成3个通道,并声明3个变量分别储存,此时3个图像都是单通道的,因此显示出来是灰色图片
            Cv2.Split(srcImage, out channels);
            Mat srcImage_blue = channels[0];
            Mat srcImage_green = channels[1];
            Mat srcImage_red = channels[2];
//声明一个同尺寸0像素图,一定要注意类型,不知道类型可以用srcImage.Type()看看,1代表1个通道
Mat Image_0 = new Mat(srcImage.Size(),MatType.CV_8UC1, (Scalar)0);
//声明一个同尺寸图,融合用
Mat Image_new = new Mat(srcImage.Size(), srcImage.Type()); 
//把绿红通道像素赋值为0,然后Merge方法进行合并
channels[1] = Image_0;
channels[2] = Image_0;
Cv2.Merge(channels, Image_new);
//出蓝色图
Cv2.ImShow("image_blue", Image_new);
//其他同理
最后结果

如Merge方法合并那行出现错误:mv[i].size == mv[0].size && mv[i].depth() == depth” 那大概率是你声明Image_0或者Image_new时MatType有问题

简单记一笔ECharts做加载动画

因为最近在整毕设,正好需要用ECharts制图,偶然看到官方Examples自带有加载动画的示例,因而想到做一个先显示3s加载动画然后再显示生成的图像

查官方文档得知有一个方法:echartsInstance. clear; 清空当前实例,会移除实例中所有的组件和图表。 这就好办了,直接进行一个setTimeout就完事了,代码如下:

//myChart是你初始化echarts的实例
//option是指定图表的配置项和数据
//option_loading是你加载动画的配置项和数据
//3000指的是3秒
  myChart.setOption(option_loading);
  setTimeout(function () { myChart.clear(); },3000);
  setTimeout(function () { myChart.setOption(option); },3000);

记一笔C# 图片转Base64

因为给机器人外套了一层百度鉴黄,需要将接受到的图片转换为Base64然后才能调用接口,因此就有了如下的代码

//图片转Base64
public static String getFileBase64(String fileName)
{
FileStream filestream = new FileStream(fileName, FileMode.Open);
byte[] arr = new byte[filestream.Length];
filestream.Read(arr, 0, (int)filestream.Length);
string baser64 = Convert.ToBase64String(arr);
filestream.Close();
return baser64;
}

关于某系统通用文章的补充

文章链接在这:https://mp.weixin.qq.com/s/YnF6DU4DwVaUrIxJeZMDqw

  • 可能有师傅会说写的是什么垃圾东西,确实,这系统实属没有什么可以过多展现的,我写这个文章纯粹只是给大家一个获得系统用户的思路,后续该如何进行大家都懂
  • 没有排版,图糊,是因为word导入问题,我懒得搭建微信公众号,所以找史总帮忙代发的,可能他也懒于整这些吧
  • 最后发出来的文章其实是第一版,虽然中间的核心是第二版的内容,讲清楚了就行

最后还是要强调,本次测试只作为学习用途,请勿未授权进行渗透测试

教育SRC

努力了一个月,拿到了SRC的第一张证书

”阅读全文”

这里也没有什么经验可以分享的,只能说教育的SRC相对比企业的好挖的多,边缘资产往往是重灾区,看师傅们的文章可以学到不少经验,虽然自己没有碰上过罢了

人们常说技高人胆大,确实,我这看到上传点也不敢去测,主要是因为不会,能百度到的马早已过时了,往往传不上去;测sql注入,用sqlmap跑,直接把网站直接给跑崩了,怕了怕了。等级到正式白帽子的时候(截止3月23日),要师傅帮忙统计出一张表发现基本就是水平权限绕过和越权还有弱密码了

有人就问我,我这挖掘过程都用了哪些工具,我就这样说,纯粹只有游览器和postman,游览器F12调出开发者工具用于抓包,postman用于回发post包,下了sqlmap,但未能成功一例,也下过nmap,也没有扫出有用的端口,弱密码,真的全是手动测试,当时上音的弱密码洞,我就硬在那里手动测试了300多个号

挖洞,往往就是耐心和细节还有信息收集,自己不写安全方面的文章,纯粹也只是因为没特别的技术,写不出有观感的,都是些抓包层面的产物。像大佬的文章,写sql注入就会涉及waf绕过,写getshell就会涉及各种传马和发现的过程,我这抓包只是其中一个过程。当然最主要的还是这博客在网络定义上的境外主机上。

最后贴一下自己的界面:https://src.sjtu.edu.cn/profile/9111/
希望有师傅能带带我,学习一下关于getshell的知识

”折叠”

新年快乐/一年的总结

在这里先祝大家新年快乐啊,现在是大年初六,只要大年初七之内就算是年(确信)

”阅读全文”

一定不是因为我懒,所以没有更新,去年(2020年)发生了很多事,也算是大学以来最有收货的一年

上半年的疫情,之前也说了,下半年就是整学校的服务器(虽然最后只给了个院级荣誉),重写机器人插件,顺便临时用unity做了个小游戏拿去参加学校比赛,结果有课错过,又赶上硬盘爆炸,工程文件直接打不开,最后就留下了个成品,至少没有加密,可以直接反编译拿出之前写的代码,这也是为之后打算自己做独立游戏的试水作品,也算是知道要做好一款游戏是真的艰难,尤其是关卡设计方面,如果有想玩的,可以在底下留言(可能就入门水平,实质是看了你B上的教程跟着做的,然后再自己创意了点东西,估摸着也没啥人会看?)

从工程文件来看整个游戏,2个场景,28个脚本

关于反编译,之前也没写过,这里就之前引用我去年写在steam的一篇指南:https://steamcommunity.com/sharedfiles/filedetails/?id=2340011757
这篇指南是针对 Outer Wilds  这个游戏,我在指南里写了是如何反编译代码,并进行修改,将某个星球上的鮟鱇鱼移除
使用的工具是最常用的反编译软件之一:dnSpy
这工具挺有意思的,只要是unity打包时自带的加密就能直接反编译(并不局限于unity才行),因而不少游戏都是可以直接解开的,毕竟unity用的是C#,也是这么多年我一直在看的,假如要进行修改数据,对于我来说从代码层面来进行修改,远比从内存修改(指CE)好弄

今年(2021年)将是最艰难的一年,博主早已决定考研,在这里也祝大家万事如意,心想事成,同样要考研的同学一次上岸

”折叠”

实例3——校趣多打卡 思路

对自己的身体负责

前言

因为每天打卡很麻烦又容易忘,所以想到做这个

微信小程序本质就是网页,用的是JS+CSS+HTML5语言,但正常游览器是打不开的,之前托人整了一份校趣多小程序的源码,但并没有找到有用的东西,手机上抓包也抓不到数据。听闻新版PC版微信能打开小程序就立刻整来看了

过程

之前早有猜想打卡就是个POST发包,包里带上json格式文本就是我们打卡的内容,实际上发的是POST的默认格式 x-www-form-urlencoded ,原理都是一样的,所以我们要做的就是找到发到了哪,然后模拟发包就好了

通过电脑抓包软件我们可以看到,进小程序时,我们发送了3个包,这里用了authcode的加密运算,看返回可知得到了我们的用户信息,比如学号,名字等

/api/auth/weChatLogin
/api/auth/getUserInfoByAuthCode/
/api/auth/getContentList

当点击健康打卡,
/api/redirect/d3b47307f6a104332ac6d14b8b22060d8d1998874c69809fe51b58e03eb8209686054713c0f3153ec74f6da8dffdc349/go?authCode=
我们可以看到访问时依旧带了authCode,然后返回了一个了https://mps.zocedu.com/corona/submitHealthCheck 前缀的链接并进行302跳转,跳转过去后会发现返回了一个cookie,Set-Cookie: JSESSIONID=XXXXX 而这个cookie就是我们打卡要传过去的,也就是告诉服务器,我们打卡打的是哪个账号

点击打卡,可以看到用POST访问/corona/submitHealthCheck/submit,请求头带上cookie, 带上格式是 x-www-form-urlencoded的 数据包 ,数据包里便是我们打卡的内容

第二个显示cookie的地方,详见评论

更新:由此可知,cookie是从 authCode 得来的,因而直接记下 authCode ,在每次请求前去先请求cookie,再用cookie打卡,就能防止cookie会失效的问题(虽然 authCode 看似每次打开会变,其实是永久有效的)

打卡程序

链接: https://github.com/hd80606b/xiaoquduo

为了方便使用windows自带的计划任务来循环打卡,以及QQ机器人监控完成状态,特意写的是控制台程序,具体的如何操作看看github吧,那边的md文件写的很详细了

感谢评论的提醒,这里是需要开启https监听的,在Tools—Fiddler Options—HTTPS中勾选“Decrpt HTTPS traffic”即可,如图

隐藏
变装
Scroll Up