Skip to content

ITJesse/bypass-qq-guild-img-audit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

绕过 QQ 频道图片审计

主要功能

  • 识别被系统撤回的图片,裁剪后重新发送
  • 将图片上传到 OSS,并返回短链接

开发背景

QQ频道对于图片有额外的审计机制,这是个异步操作,会在审计结果出来之后再撤回图片。这就让我们有机会拿到没有通过审计的图片的信息,重新加工后再次发送。

如何绕过审计

一张图片如果审计失败,第二次发送将不会真的发送出去,只会在本地显示,做出一种发送成功的假象。这时候你可能想到去利用原来绕过审计的方法,比如模糊,胡乱画几笔等,这些方法均无法影响审计结果。因此推测其使用了基于图片相似度的审计方式。那么应对的方法也很简单,将图片裁剪为两半发送。

因此该 Bot 会在检测到图片被系统撤回后,将图片裁剪为上下两部分,并放在同一条消息中发送,这样对观感影响最小。

如何识别系统撤回

本来撤回应该能收到一个事件,但是由于 go-cqhttp 尚未支持该事件,因此我们采取了比较麻烦的做法。

  • 首先判断一条消息是否包含图片
  • 是的话则将其加入队列中
  • 10s 后将其从队列中取出,通过 /get_guild_msg 接口请求这条消息
  • 如果失败则说明图片被撤回

如何部署

首先你需要有:

  • Node.js 16.x
  • Redis
  • OSS
  • go-cqhttp

关于 go-cqhttp 的配置这里不再赘述,请查看相应的文档。这里需要注意的是,登陆的 QQ 号需要有频道内测权限,并已经加入需要管理的频道。

git clone https://github.com/ITJesse/bypass-qq-guild-img-audit.git
cd bypass-qq-guild-img-audit
cp .env.example .env

编辑 .env 文件,填入你的信息。

yarn
yarn build
yarn start

关于 ADMIN_ID 的获得

yarn dev 启动 bot,使用你需要设置为管理员的账号在任意频道内发送一条消息,查看 log,其中 sender 的 tiny_id 就是该账号的 ID,将其填入 ADMIN_ID 字段即可。

命令

/func [enable|disable] [bypass|archive]

请在对应的子频道中执行上述命令。命令对于子频道分别生效,需要在每个希望启用/关闭的子频道中执行一遍命令。 所有功能默认都是关闭状态,需要执行该命令开启。

License

GPLv3

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published