越来越觉得现有的极域开关没写好了,我现在都不忍看它那不完善的代码了——一堆 BUG 和其他没写好的地方,看起来就觉得是整个都没写好。于是,经过深思熟虑,我决定开发极域开关3,并加入一些新功能。
但是,我们下学期就没有信息课了喂!于是,计划就无限期地终止了。现在我只能把极域开关3的构想分享一下。
在现有的极域开关版本中,像《极域开关2.5,反极域学生端》中说的那样,程序是通过调用外部的 ntsd.exe 来强制结束学生端 StudentMain.exe 进程的。然而,调用外部程序总是不好的,毕竟我不能保证它会跟我的程序无缝对接;更重要的是,我不能保证每台电脑中都有 ntsd.exe,常青藤同学也在它的《关于对极域开关的一点思考和改进》帮我指出了这一点。于是,我肯定要寻找一个方法,能达到相同效果又避免调用外部程序。如果有这么一个 API 该多好。
事实上,结束进程的 API 是能轻易找到的,如何“强制”结束进程才是个问题,因为极域学生端有保护进程的功能。
话说回来,感谢常青藤同学的那一篇文章,里面给出了获取学生端的管理员密码的方法。经过“多方调研”和亲自测试后,我发现那个方法是可行的。管理员密码确实被明文保存在那个注册表字符串值中。使用管理员密码,我们可以解锁断网时的自动锁屏,可以设置甚至卸载学生端。当我进入到学生端的设置界面,我发现有一项是关于“防杀进程”的。取消勾选“阻止学生终止本进程”,我们就能轻易用任务管理器结束学生端程序了。不过当时我并没有意识到这对极域开关可能造成的影响。
后来,我突然想到,既然学生端密码都被保存在注册表中,那我没理由不怀疑这些设置项也是储存在注册表中的,改变注册表某些值,就能改变学生端的设置。后来注册表监控器验证了我的猜想,原来相关的项就在那个密码附近。下面就是我收集到的相关数据:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\TopDomain]
[HKEY_LOCAL_MACHINE\SOFTWARE\TopDomain\e-Learning Class]
[HKEY_LOCAL_MACHINE\SOFTWARE\TopDomain\e-Learning Class\DeskPref]
"FPS"=dword:00000000
"FrameQuality"=dword:00000064
"FrameSpeed"=dword:00000003
"GroupSize"=dword:00000020
"WaitMilliSeconds"=dword:0000000a
"WaitPackets"=dword:000000a0
[HKEY_LOCAL_MACHINE\SOFTWARE\TopDomain\e-Learning Class\Student]
"ChannelId"=dword:00000002
"LocalInterface"=dword:0703a8c0
"EnableLockScreen"=dword:00000001
"PreventKill"=dword:00000000
"AutoRecordSavePath"="D:\\我的文档\\e-Learn"
"KnockScreen"=dword:00000001
"UseExitKey"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\TopDomain\e-Learning Class Standard]
[HKEY_LOCAL_MACHINE\SOFTWARE\TopDomain\e-Learning Class Standard\1.00]
"SourceDirectory"="C:\\DOCUME~1\\ADMINI~1\\LOCALS~1\\Temp\\"
"TargetDirectory"="C:\\Program Files\\TopDomain\\e-Learning Class\\"
"UninstallPasswd"="Passwdadmin"
"SetupType"="Student"
[HKEY_LOCAL_MACHINE\SOFTWARE\TopDomain\e-Learning Class V6.0]
"LanguageID"=dword:00000804
"Version"="5.1.22.526"
"GUID"="{5FB4EEDF-6A79-45C3-B049-EF327CA03FCD}"
"Enable4BytesCharacterSupport"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\TopDomain\eXchange]
[HKEY_LOCAL_MACHINE\SOFTWARE\TopDomain\eXchange\DesktopCapture]
"EnforceWriteProtection"=dword:00000000
容易看到,HKEY_LOCAL_MACHINE\SOFTWARE\TopDomain\e-Learning Class Standard\1.00\UninstallPasswd
中包含着管理员密码,“TargetDirectory”为安装路径;而 HKEY_LOCAL_MACHINE\SOFTWARE\TopDomain\e-Learning Class\Student\
下面储存着相关设置信息,“EnableLockScreen”是断线时是(1)否(0)锁屏,“PreventKill”为是否保护进程不被轻易结束,但是“KnockScreen”的作用暂不明,因其未出现在设置界面中,但从名称看可能是有关锁屏选项的。
一切都明了了,只要我改变 HKEY_LOCAL_MACHINE\SOFTWARE\TopDomain\e-Learning Class\Student\PreventKill
的值为 dword:00000000
,什么都好说了。经过实验得出,这项值的改变并不能使学生端立马反应过来,但是这就够了;我们可以先让学生端退出一次(但再也不要用 ntsd 了),再启动时学生端的进程保护就是关闭的状态了。至于如何退出学生端,我想我们可以断开网络连接中的本地连接——呃,这个行为对无盘机太坑爹了,得想想备用方法。
至此,极域开关3的核心部分的构想已经浮出水面了。
接下来要解决的就是热键的问题。现有极域开关只能把热键设定为“B”或“C”,其实是因为学生端在被屏幕广播时似乎只有这两个键可用。但用“B”或“C”作为热键,会给我们的正常电脑操作(包括文字)输入带来不便,因而很有必要改变这一现状。我想这个可能要通过解除学生端按键限制的方法实现——这只是一个大致方向,我还没有充足的把握。
剩下的就是一些BUG了——托盘图标会由于 explorer.exe 的结束而消失啦,进程判断方法的不准确和不完善啦(我应该使用 win32 API 的)……还有一个问题,我把官方主页的网址输错了……
我原先确实计划全部重写极域开关的。现在,虽然我没能把我的“极域开关3”构想实现,但是我还是有了一个大致思路的,界面浏览有一部分已经完成了:
这是初始化过程的浏览代码:
'检查环境
'算了,不想检查环境
'关闭学生端服务
changeProcess "关闭学生端的系统服务...", 10
'禁用锁屏
changeProcess "学生端设置最佳化(禁用锁屏)...", 12
'禁用断网锁屏
changeProcess "学生端设置最佳化(禁用断网锁屏)...", 14
'关闭学生端的自我保护
changeProcess "学生端设置最佳化(关闭自我保护)...", 19
'读取学生端路径
changeProcess "读取学生端设置(软件路径)...", 23
'读取学生端管理员密码
changeProcess "读取学生端设置(管理员密码)...", 26
'断开本地连接
changeProcess "断开本地网络连接...", 36
'占用学生端主程序
changeProcess "占用学生端程序(主程序)...", 40
'占用学生端关机程序
changeProcess "占用学生端程序(关机程序)...", 44
'连接本地连接
changeProcess "恢复本地网络连接...", 54
'启用托盘图标和工具栏伪装
changeProcess "启用托盘图标和工具栏伪装...", 65
'检查更新
changeProcess "检查“极域开关”新版本...", 78
'设定热键
changeProcess "设定开关快捷键...", 95
changeProcess "初始化过程完成!", 100
这个连半成品都算不上的东西的源代码我还是放出来吧。点此下载,如果你有意接班极域开关的开发工作,或者仅仅是想吐槽的话。
话说有人想知道我在极域开关之前弄个了什么么?——
嗯,我之所以放这个出来是因为从这里可以看到对付学生端的各种方法。对了,虚拟桌面似乎也能奏效。
我心里还一直有一个没有多大进展的想法,就是写一个程序来伪装学生端与教室端通信,这样可避免在教室端看到“脱控机”处于离线状态。有兴趣的同学可以自己抓抓包看看。我这里也有一份学生端刚启动时与教室端通信的数据,需要的同学可以点此查看。或者,阻挡来自教师端的数据通信,如何?
极域开关就这样与你们说再见了。不再有新版本发布了——或许会还有再来的一天,或许没有了。
欢迎使用最后一个较为稳定的版本 2.7β 版(点此下载)(这真的是个稳定版本!)。2.7β 版相对于 2.5 版增加了获取管理员密码的功能,便于同学们手动破解学生端。不过,这一版的源码就不能放出来了,它已经不复存在了(因为不是正式版本)。
有更高需求的同学们还可以尝试使用更加强大的电子教室杀手;尽管它没有极域开关这样小巧,但它能很好地解决几乎全部学生端程序,不限于极域学生端。
最后再说一句:再见,极域开关!
2014-9-7 P.S.对本文某两处进行了点小改动。
这个是干么用的呢?博主好技术哈。。
反极域学生端的。详见:http://shansing.com/read/300/
博主的電腦教室好高端,無盤........我們直接拔網線或者開防火牆
我们不是无盘的 - -
2013-05-01 11:38我见过你。
2015年1月19日14:31:24你还在,真好。
好久不见,新年快乐!
电子教室杀手的论坛,我都注册不了
怎么回事?
博主可以留个联系方式吗?有问题向你请教
我已经留过了……请在博客中找我的资料……
在新版本里注册表里不写密码了,要用od才能找