飞书防撤回

飞书介绍

一个由字节跳动研发的工作使用的IM。
PC、MAC客户端开发使用的是electron js,也有网页版。

实现思路

鉴于使用的是electron js,客户端并没有什么好的调试方法。通过对源码结构的对比,我发现客户端版和网页版相比并没有太大区别,于是我决定从网页版入手。

关键字定位

打开网页版飞书,测试消息撤回功能。右键审查元素。
关键字

得到了我们要的关键字——“is-recalled”
然后在浏览器搜索定位。
浏览器搜索

调试

在上面搜索得到的路径中,寻找可疑的执行路径进行断点调试。
会发现每一个消息其实都是结构对象。

这里就有我们要的 isRecalled 字段。

所以我们要做的就是找到接收消息函数,对每次接收过来的消息对isRecalled字段进行判断。若值为true,则直接丢弃。

最后找到 onReceivePushAsyncMessages 函数,对函数进行修改。(可能已失效)

1
2
3
4
5
6
7
onReceivePushAsyncMessages(e) {
if(Object.keys(e.messages).length == 1) {
if(e.messages[Object.keys(e.messages)[0]].isRecalled) {
return
}
}
H.a.receiveAsyncPushMesssage(Object.values(e.messages)), this.receiveMessagesEntities(e, {onlyUpdateMessages: !0})

客户端实现

mac下访达,应用程序-飞书-显示包内容,Contents-Frameworks-Lark Framework-Resources-webcontent


都是js,自由发挥。

chrome下替换指定js文件的插件

ResRes插件

chrome下修改Ajax请求回包

使用ajax-interceptor插件:
https://chrome.google.com/webstore/detail/ajax-interceptor/nhpjggchkhnlbgdfcbgpdpkifemomkpg