这是一篇折腾日记,可以给予我们一些提供生活便利的启发。:D项目其实是阴差阳错搞出来的,起因是教室在一些课余时间会锁定电教设备并断电导致我不能给电脑充电,于是抽空分析中控系统协议。教室里可以接触到有两台设备,一台Windows PC,另一台是控制电教系统的Android 面板,有上课、下课和控制设备等功能。最开始只是研究怎么在设备锁定期间使系统开机,一段时间摸索之后发现控制面板本质是Webview且默认开放adb和remote inspect,连接adb后即可在chromium中打开设备对应的devtools。把前端pull下来后,可以看到锁定状态没有对应的html,但是在img文件夹下有一张对应的图片。遂进行元素审查,删除顶层的锁定状态图片即可恢复准备上课模式。经验证,证明可以在锁定状态下启动电教系统。进一步分析可以得到教室转播摄像机网络地址,控制面板与中控通过串口通讯。这一部分与本文关联不大,故略。在尝试分析设备间通讯协议的时候,注意到系统托盘有与控制面板相同厂商的程序,打开配置后可以注意到系统支持远程桌面且配置端口为5900、MTQQ协议和websocket,但具体作用未知。看到5900立马想到vnc,定位到程序目录,果然有tightvnc server。同目录下还有ssh程序,但不是sshd。尝试连接,要密码,但是程序目录里没有看到vnc server的配置文件。我猜测存在注册表里,而且猜的密码强度不高。先在网上搜索tightvnc server密码储存位置,但是网上的位置不对。最后没办法,打开regedit按Ctrl - F搜索吧,最终是找到了。很幸运的是,系统使用的是较低版本的tightvnc server,低版本的密码加密算法较弱,很容易解密得到原文(为什么不用md5 check呢?),把encrypted password拍下来之后回到自己电脑上解密,成功拿到密码。realvnc vncviewer支持命令行参数,这里国内没有太多资料。配置文件以 [connection] 开头,文件后缀可为 .vnc,其中的条目可以参考 vncviewer -h:[connection]host=ipport=5900username=password=password[options]viewonly=1WarnUnencrypted=0
保存为 .vnc 文件后,在macOS中可以双击配置文件启动连接。这里我设置了viewonly,防止出现鼠标抽风替老师上课的情况发生。下一步,我设想在宿舍电脑上录制,然后通过rtsp协议推流到我和舍友的手机上,这样记笔记也比较方面。录制是比较方便的,我平时也用obs,问题在于推流。网络上的首选方案是使用nginx加流媒体模块实现,看了一下需要自己编译,我懒,告辞。github上的mediamtx项目很适合,经测试可以正常连接,具体obs中的连接配置可以参考mediamtx手册。在宿舍测试运行后发现一是同时开着vnc、录屏和推流对电脑负担有些大,二是学校似乎设置了某种网络策略,禁止学生设备连接其他的学生设备,但之前是可以的。(另一个校区则不能连接学校设备)最终放弃推流,并且改为使用todesk在教室操控宿舍电脑。经今天测试,能够获取录制完整的课件,导出图片我选择使用vlc配合快捷键,最后使用pdf2img完成,效率也足够了。ffmpeg的抽帧处理我不是很满意,敏感度在0.2左右时要么截取出来的图片太少要么截取的都是上半张加下半张。后面还尝试了OCR,但是效果不好,也放弃。后面考虑使用AI协助整理课件。篇幅有限,可以继续挖下去的内容还有很多,下面是一些我的想法。记录地址可得,每间教室均会分配3~4个ip地址,除了文中所介绍的两台设备外,有一ip可以观看录播用的流媒体(部分教室),另一ip只开放了带认证的rtsp端口,相关信息翻遍控制面板配置文件也没发现,其功能未知,可能也是摄像机。控制面板的index.js中有不少没有用到的功能,考虑到学校使用的解决方案与其他使用该解决方案的学校有着资金上的差距,这是可以理解的。继续挖掘串口通讯可能还会发现一些有趣的事情。能否录制课件的同时录制会议纪要呢?我认为通过控制面板是可以的,但是,因为我有多余的手机,我可以把手机放在讲台附近充电录制,只是这不失为一种思路。PC系统所用到的其他通讯协议,包括但不限于MTQQ,ws等,这些协议负责了哪些功能呢?