前言

法治理论学习考试是一年一度的学习活动,其意义在于加强基层工作者的法治意识,今年的试题中,加入了许多反诈宣传的内容,其价值不用多说。

2021年的法治理论学习除了在内容上与时俱进之外,答题的方式也有了一些变化。可能是为了照顾年纪较大的人,所以年满50周岁的人可以选择电脑端或手机端参与答题;而50周岁以下的人只能通过手机端答题,并且需要人脸识别才行。

采用移动端原因分析

在过去的几年中,每年都有对应的答题器出现,只需要鼠标拖拽,选中题目文字,答案便可自动被提取出来。在PC端答题确实高效,但是参与的人们很难真正通过此次学习和考试收获到什么。今年举办方采用了移动端校验的方式,并且我在答题过程中前后共三次被要求人像校验,此举可以一定程度抵制答题作弊的行为。

绕过思路

在今天中午回家之后,首先把答题器的题库给更新了,经测试,能正常使用。但是我并不会ios和安卓开发,况且开发一个app也需要很长的时间。所以剩下要解决的问题便是如何绕过移动端校验或者不绕过但是能搭配使用答题器。

UA伪装法

举办方要校验答题者是否年满50很简单,一个简单的if判断即可。通过提取身份证号码的第8到第13位,用年份减去该数值,如果结果大于或等于50即可直接答题,否则显示二维码要求用户手机扫描。

对比了一下PC端和移动端的URL,一个末尾带h5目录,一个不带。在PC端直接访问前者会提示“请在手机微信客户端打开链接”。

众所周知,浏览器UA是很容易伪装的,所以我想到了伪装UA来骗过网页的移动端检测。

打开Chrome,进入控制台,点击左上角的“显示设备工具栏”,会切换到移动端模式。点击“尺寸”右边的机型,选择“修改”,然后点击“添加自定义设备”。

自定义浏览器UA

如果伪装的是ios设备的机型,将“用户代理字符串”设置为:

Mozilla/5.0 (iPhone; CPU iPhone OS 14_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.13(0x18000d22) NetType/WIFI Language/zh_CN

如果伪装的是安卓设备的机型,将“用户代理字符串”设置为:

Mozilla/5.0 (Linux; Android 10; MI 8 SE Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045512 Mobile Safari/537.36 MMWEBID/1299 MicroMessenger/8.0.1840(0x28000039) Process/tools WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 

重新访问该URL,如上图所示,可以成功登陆网页了。看这段JS,就连老掉牙的Windows phone也支持!

检测移动端系统js

但是!即便正常登录了,但是无法调用摄像头进行人脸验证从而进入考试。经测试,不是电脑没带摄像头的原因,而是网页通过微信客户端调用系统相机,仅仅伪装UA无法完成这项操作,所以放弃。

模拟器测试法

既然必须要通过微信调用系统相机,那安装一个微信不就好了?经过测试,PC版微信浏览器因为无法完成移动设备检测,所以无法直接使用。

于是我下载了一个安卓模拟器,在模拟器中安装微信,和在手机端正常操作一样进入答题。虽然模拟器检测不到相机,但是它贴心地提供了截图拍照的方法。用手机拍照——传到电脑——打开照片——选取对应区域——提交照片。

正常进入答题界面之后,新的问题来了——无法像在PC端一样直接选中拖动,在触屏手机上的逻辑都是先长按,再选择内容,再复制,这样效率极低呀。

那么是否还有别的办法?我找了一个OCR软件,框选了特定的题目展示区域,通过快捷键识别,自动复制文本,答题器检测到之后自动展示对应题目和答案。虽然这个方法快了一些,但是OCR识别存在一个问题,就是可能不会区分中英文的标点符号,中文的逗号识别显示出来可能是英文,这样导致和答题器题库文本不符合,从而找不到题目。避免这种情况的方法是少框选一点,但是精准度可能就没那么高了。

OCR识别自动复制

在使用这种方法答题的过程中,又弹出了两次要求人像验证的信息。如果继续使用之前的图片万一遇到人工审核就完了,所以我重新拍了两张照片提交识别,最终完成了答题,用时25分钟,而去年不到十分钟就能完成。

个人感想

当初继续更新这个答题器的初衷是希望效率能更高一点,如果一切任务都只是形式主义的话,各种对策肯定会层出不穷。今年的法治答题在校验上相对来说更严格了,非要使用答题器可能会快那么一点点,但效果大不如前,所以初衷并没有被达成,继续这个方式事实上有点得不偿失。

但新的思路肯定会有,只不过不是现在。

关于答题器和免责声明

为了提供测试和研究,以及方便各位年龄稍长的人,你仍然可以点击这里下载今年的答题器,使用方法和去年一致,且对于年长的人来说使用体验与去年无异。

另,根据《中华人民共和国网络安全法》第二十七条规定:

任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序、工具;

由于答题器的编写语言是易语言,而部分杀毒软件只会对签名和申请白名单的软件放行,因此可能会存在如360等对该软件的报毒。本人承诺该软件无任何恶意代码,也不会通过联网行为收集任何个人信息(事实上根本不会联网),也不提供任何非法侵入、干扰网络的功能。此外,禁止使用该软件进行任何中华人民共和国法律法规明令禁止的行为,包括牟利。