这大概是我干过最逆天的事
如题,这条内容曾经拿到了上千浏览和几百点赞,今天重新写一遍,用现在的眼光回看23年。
原文发布于 QQ 空间,点击查看原文)
背景
大概是高二,学校统一使用科大讯飞的所谓“AI辅助课堂教学“——每人发一台平板,深度定制 ROM。叫定制其实不算,说是阉割更准确:没浏览器,没原生系统设置,没文件管理器。相册只能看照片,视频播放器直接被砍了。本质上就是一台只能做题和交作业的电子砖头。
突破口
我没事就翻预装软件,主页一个叫 GeoGebra 的东西很受学生追捧,官方说法是“数学动态画图工具”,数学好的考完试拿它研究最后一道大题,数学差的干脆直接用它当计算器,但我点进去就看出来了—这玩意儿是网页套壳的,很多时候这种非原生软件一眼就能看出来,同时用起来手感顿顿的大概率就是Electron、Tauri此类封装方案,但GeoGebra直接演都不演——纯WebView 套壳。
window.open("https://www.bing.com")跳不出去。系统把 http/https 协议全封了CONNECTION_REFUSED,底层WebView 被魔改。而且输入框有过滤,输入直接吞字或者干扰。
柳暗花明
第一处:键盘输入会被拦截,可以使用剪切板粘贴,从别处复制粘贴进来不走那条拦截逻辑,最后多输一个回车正好被吞掉,只剩下正确逻辑。
第二处:http不通,那就弃帅保车,使用file协议访问本地文件,好在我大概摸索出 Linux/Android 的目录结构了。
window.open("file:///storage/emulated/0/")原生文件目录直接打开了,我欣喜若狂。能看到文件名、层级导航、文件大小。视频点进去,调用WebView就放了。
今日回首
ifly的工程师大概是这么想的:把浏览器干掉、把 http/https 封掉、把输入拦截做好,学生就没办法了。
但他们漏了两件事:
-
WebView 本质上是浏览器。你可以不让它上网,但它读本地文件的权限是 Android 沙箱赋予的,不是 ROM 说了算的。
-
file 协议不需要网络权限,只读本地存储,你在 WebView 层面拦不住。
说穿了就是攻击面分析的问题:只封了网络层,没考虑本地文件系统层。
引爆
我把方法整理成教程发到博客,顺手投稿到了表白墙,直接引爆——几百点赞,上千浏览,评论区全是”配享太庙”、“哥你是电教之神”之类,一时之间,风光无量。
开学第一周,级部广播直接点名diss:“我们级部还有个技术高手,掌握了比较高的计算机技术,破解出平板看视频的功能”。
随后发生的事,果不其然超出了我的控制范围,一开始可能只是传着看视频消遣,但后面有人用这个方法在家翻录电影、在宿舍熬夜追剧——一个数学画图工具被用成了娱乐终端。即便我在原博客郑重声明滥用的后果,失控的范围依旧远大于控制的成本,下架就成了唯一的选择。
没制裁我。但说实话,这件事我一直有点愧疚在心。
GeoGebra 是个好软件。数学课上用它画函数图像、做几何演示,确实比课本上的静态图直观太多。我用了快两年,很熟悉它的每一个角落——也正因如此,才看出它是网页套壳。讽刺的是,正因为我太了解它,才让它从全校平板上消失了,后面几届的学弟学妹连用都用不上了。技术上是我的一个高光时刻,但结果上,我带走的远比带来的多。
如果重来一次,我大概还是会发现那个漏洞——一个 WebView 套壳的应用放在一个对计算机充满好奇的高中生手里,这是迟早的事。但我可能不会把教程发到论坛上。
不过换个角度想,这件事之后我开始系统地研究前沿相关的技术,也学会了从”攻击面”的角度去审视一个系统的设计。某种意义上,它比我任何一门课给我的东西都多。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!




