一个计算机爱好者的不完整回忆(四十八)监控优盘的程序

  大约在02年后,公司开始对计算机保密工作比较重视了,最开始只是一些条文的规定,后来才开始慢慢加强各种安全措施。
  大约05年或者06年,那段时间,优盘是随意使用的,于是保密办就提出这样不行,必须对优盘进行限制,没经过认可的优盘是不能插在计算机上的。于是我们所的书记找到我,问我能不能做一个限制优盘使用的软件。我大概花了不到5秒钟思考,说能。当时我是这么想的,要想完成这项功能,那么首先需要判断优盘的序列号,这个貌似是可以得到的(当然,有些杂牌优盘的序列号都是一样的,这个暂时不管它),即便无法做到,那么也可以对优盘进行一下处理,写入特定的位置特定的文件也勉强能用。第二个要完成的任务就是检测优盘插入和拔出的事件,这个依稀记得windows提供了这个事件。第三个要完成的就是如何限制用户使用插入非指定优盘,这个最好当然是从驱动级别去考虑最理想,不过哥们没这本事,但是当用户插入优盘限制用户键盘鼠标操作等还是没问题的,最差的办法还有只要插入非指定优盘就重新启动计算机,这个我肯定能做到,嘿嘿。现在我觉得当时我思考的挺快的,在忽然接到这个问题,我就把基本功能和每项任务的最差的实现办法想到了,也就是说即便做不到很好但也总还能满足要求。
  以前在看Delphi资料的时候(当时我最主要的两个Delphi资料包,一个是Delphi Tips Power Pack,另一个是Delphi猛料),看到过关于windows服务程序的介绍,所以觉得自己仔细看看应该可以用服务的方式来做这个应用。为啥不采用写驱动的方式呢,因为以前也看过关于delphi写驱动的文章,貌似非常麻烦,应该说,最好还是不用delphi写驱动,不如直接学C用C来写——个人感觉。
  看了一下资料,觉得写服务程序还不是很难,delphi在这方面做得挺好的,只需要创建时选择创建服务程序,基本架构都给自动生成了,只需要填写代码就差不多了。花费时间最多的地方其实就是研究怎么能在服务程序中显示出一个窗口提示相关信息。
  最后完成的情况如下,一共四个程序:
  第一个是客户端检测并限制优盘使用的服务程序,算是主程序,这个程序负责检测插入优盘的序列号,并发往服务器(实际上就是在SQL server数据库中验证一下),如果通过了验证,则不做任何限制。如果没有通过验证,将该优盘的序列号、插入时间、当前机器的IP发到服务器,然后锁定键盘、鼠标,弹出一个警告窗口,这时候用户的键盘和鼠标都是不能使用的,除非用户拔掉优盘。这个服务是不可以被停止的,而且设置了如果服务有问题直接重新启动计算机。
  第二个是升级上面那个服务程序的服务程序,由于服务是在用户尚未登录之前就已经启动了,在没有用户界面的情况下只能同样使用服务程序来升级该服务。当检测到服务器上有更新的主程序后,先用GlobalFindAtomW添加一个全局原子(我不知道标准名称是啥),然后停止主服务程序,主服务程序检测到这个全局原子的话就会允许停止,没检测到的话会禁止停止,继续保持运行。停止主服务程序后,删掉该服务,然后从服务器下载新的程序,重新创建该服务并运行,完成升级工作。
  第三个是客户端的安装程序,主要是为了方便安装而做的,在用户的计算机上直接执行这个安装程序就自动把服务程序拷贝到指定位置,并创建服务且运行。
  第四个是服务器端的管理软件,可以方便的查看哪些优盘在什么时间插入过哪些计算机上,同时在这里对优盘进行审核工作,设置哪些优盘是合法的或非法的。
  不管代码写的如何,反正最后实现出来的效果还是挺完美的。自己曾经想过破掉这个禁用限制,发现还是很难的,最开始还加上了防止Ctrl+Alt+Del的代码,后来发现根本没必要,出来任务管理器也干不了啥。正常渠道无法停止这个服务程序,非正常渠道还会直接导致计算机重新启动。如果直接在DOS下面删掉这个服务程序,启动后会出错导致重启。当然了,肯定还会有别的办法搞定这个程序,我能做到这样就可以了。
  不过这个程序只在两个科室使用了一段时间,大概能有半年多?效果还是可以的。后来书记跟我说,厂里保密办说了,你们自己编的软件是不行的,你们自己编软件监控自己,谁知道你们会不会自己放水?书记也挺生气,我自己买把锁头锁自己的门也不行么。反正厂里嘴大,这个软件就被pass了。
  不过后来这个软件还算是救了我一下,大概开发完这个软件一个月左右,我用优盘拷贝文件,因为经常拷贝,所以有时候就懒,直接把优盘插在计算机上不拔,结果有一天我正好下楼,保密检查的人来了,发现了我电脑上的优盘。那时候我们有一个规定,只有科长的计算机上才能插优盘,其他人计算机上是不可以插优盘的(当时只有这个规定,没有具体限制措施,我的软件才刚刚开发完,厂里还没弄到专门的优盘审核软件)。然后领导就给我打电话,问我为啥在我的计算机上插优盘,赶紧回来解释。这可是严重错误呀,赶忙回来,解释说我正在开发优盘监控的软件,并且我的电脑上有正在开发的这个程序的源代码可以作证,书记当然也知道我在做这个程序,毕竟是他让我开发的么,于是这事就算过去了。差点被处分,不过这之后,我还是主动卸掉了保密员的工作——早就不想干了,一个很烦的工作。当然,每年我都是保密先进个人,那年的自然就没我了。
  服务程序给我最大的感触就是调试特别麻烦,最开始我是先用windows窗体程序来测试一些基本功能的,但是当改成服务程序后还是出现了很多意想不到的问题,为了调试,差不多每行代码后面都跟着一个输出到文本文件的命令,通过看输出的文本文件来发现问题。
  接这个任务前,我是有一个底线的,也就是使用普通应用程序监控(可以通过其他手段来限制这个程序不被关闭掉)、通过在优盘上写入特定信息来确定优盘身份、通过禁止用户键盘鼠标来完成限制操作(必要的时候可以直接重启计算机完成),后来我实现出来的效果已经远远超出这个底线,实际上,即便用我现在的观点来看,这个程序也已经做到我所能达到的最好。想做得更好的话,应该从写驱动入手,而想真正做到完美,应该是软硬件结合。关于这个,也许以后可以谈谈,因为两年前我们公司采用的方案就已经向我所想的软硬件结合方向前进了一步,不过还差得远,还是有漏洞。
  又有点扯远了,不说了,这个监控优盘的程序和以前做的好多程序一样,没有任何金钱的收益,不过开发的过程还是很有乐趣的,现在我恐怕都很难在短短几天内就编写完成这样的一个程序,那时候真有精力和耐心。

你可能感兴趣的:(一个计算机爱好者的不完整回忆(四十八)监控优盘的程序)