严肃考试客户端这东西,严肃我拆过。考试客户不是漏洞物理拆,是严肃拿抓包工具和反编译器对着它折腾了三天。结论先放这儿:漏洞肯定有,考试客户但多数人用不上,漏洞用得上的严肃那批人根本不屑于用。
先说个具体的考试客户。某知名考试客户端,漏洞登录接口走的严肃是HTTPS,但握手协议没做证书绑定。考试客户这意味着什么?漏洞你只要在电脑上装个自签名根证书,再用Fiddler之类的严肃工具做中间人代理,就能看到客户端和服务器之间传输的考试客户密文——当然,是漏洞解密后的。我试过,能看到账号密码的明文哈希,还有每道题的请求时间戳。但别高兴太早,题目本身是加密的,密钥在服务器端动态生成,你抓到的只是一堆密文。
更蠢的是另一款客户端,它的“防作弊”功能靠的是检测进程名。我改了改某个常见截图软件的进程名,改成“taskmgr.exe”,然后它就不管了。考试期间我开着截图工具,全程没被警告。这算漏洞吗?严格说算,但监考老师又不是傻子——你屏幕一直闪,人家不会过来看?所以这类漏洞,实操价值极低。
真正有点意思的漏洞藏在内存里。有的客户端把题目加载到本地内存后,会保留一个副本用于“断网续答”。这个副本是明文JSON,里面包含题干和选项。理论上,你只要用Cheat Engine扫一下内存,就能在交卷前把答案抠出来。但问题来了——考试时间就那么点,你花十分钟去扫内存,还不如自己把题做了。而且现在大部分客户端都加了内存混淆,字符串被拆成碎片,恢复起来比解数学题还费劲。
还有个被人忽视的点:客户端对系统时间的依赖。有些考试允许晚到半小时,但时间一到就锁卷。我试过把系统时间调慢五分钟,结果客户端直接报错退出,因为服务器时间戳和本地差值超过阈值。后来发现,只要在客户端启动前调好时间,再启动后立刻改回去,就能多出几分钟答题时间。这招只对老版本有效,新版本已经改成每三十秒校准一次。但你说这算漏洞吗?我觉得更像设计缺陷——它没考虑用户会手动改时间,可哪个正经考生会带个秒表去考试?
说到底,严肃考试客户端的漏洞,多数是“理论上存在,实际用不上”。厂商的安全团队不是吃素的,他们每年更新版本,就是为了堵住这些口子。我见过最离谱的漏洞是某次考试,客户端把答案缓存在临时文件夹里,考试结束后没删干净。结果有人用恢复软件把文件捞出来,对着答案改自己的卷子。但这种事发生后,厂商直接把缓存机制改成内存-only了。
我的个人判断是:这些客户端确实有漏洞,但漏洞的利用成本远高于收益。你花三天研究逆向,不如多背两个公式。真正决定考试结果的,从来不是客户端安不安全,而是你脑子里有没有东西。那些天天喊着“客户端有漏洞”的人,多半连第一道题都做不对。