首页
社区
课程
招聘
[原创]钉钉邀请上台功能分析
发表于: 2021-9-22 19:45 30667

[原创]钉钉邀请上台功能分析

2021-9-22 19:45
30667

因为钉钉课堂不上台成员与上台成员延迟差距太大,而当人数过多时挨个邀请太费时间,又有部分成员有网络波动等原因导致需要反复邀请。所以为了解放老师上课的双手,这个产品就诞生了出来。


布置人:武汉科锐钱林松老师

作者:Cr39班 凌哥

1、首先分析钉钉的一键邀请是如何发送到服务器的

2、首先x32dbg附加tblive.exe进程对所有发包函数进行下断,sendto,send,WSASend,WSASendTo

3、经过反复测试,点击邀请按钮没有任何一个函数被断下

4、而我们也知道tblive进程是由DingTalk主进程创建出来的,那么他们可能存在管道通讯由主进程进行发包。

5、所以附加DingTalk进程,并重复上述操作,在WSASend函数断了下来

6、那么回溯到函数外层查看传参的数据


7、休息时思考了一下为什么tblive进程中对发包函数下断无法断下邀请上台功能,而在钉钉主进程却可以。那么就验证了我们上面分析的子进程和父进程直接是含有通讯,假设教师创建课堂的时候课堂会保存一个类这个类包含了课堂id,台下学生链表等必要信息。当一个学员点开视频则加入台下学生链表中,当教师点击台下学生邀请上台时。那么tblive就会组装消息通过子父进程通讯给钉钉主进程, 由主进程和服务器进行通讯完成该功能。那么子父进程的通讯常见的也就几种,通过测试可以发现钉钉采用的管道通讯。


8、分析钉钉的子父进程通讯,首先下断WriteFile的时候发现断点一直来,看来一眼线程模块,发现有很多线程,那么我作为开发角度一定会把io相关操作使用多线程避免阻塞主线程从而影响上课的网速。所以我这里首先暂停所有线程保留主线程,同时在WriteFile函数下断,点击邀请按钮查看WriteFile函数是否断下成功,结果也是显而易见的,并不能断下来。后续通过折半查找法,定位到了钉钉的消息队列处理线程。

9、只保留主线程和消息队列线程,再次给WriteFile函数下断并且点击邀请按钮,可以看到相关的重要信息。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-9-26 13:52 被凌哥编辑 ,原因:
收藏
免费 13
支持
分享
最新回复 (5)
雪    币: 2637
活跃值: (4608)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
0.0
2021-9-22 20:46
0
雪    币: 210
活跃值: (1847)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
。。。。。。。。。。。。
2021-9-22 20:54
0
雪    币: 500
活跃值: (935)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
666
2021-9-23 22:03
0
雪    币: 864
活跃值: (5124)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
酱油党路过
2021-9-24 14:02
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
太强了
2021-10-24 20:17
0
游客
登录 | 注册 方可回帖
返回
//