关于自动投票工具软件的实现
很久以前,网络游戏都是WEB界面的,很简单,大多是社区游戏,那时最复杂的可能也就是第九城市啦。我玩的那个社区游戏叫阳光BBS,里面分了很多帮派。按我的性格,我自然而然的就加入了逍遥派。那段时间写了很多东东,大部分都是关于逍遥的。甚至后来还弄了个网站,做为逍遥人的家。由此可见,我也是个很怀旧的人。很多人和事,至今未忘。当然,这都是闲话。说说正题,那时在游戏里要练功(就象现在的网游中练级一样),通过几个页面,来取得经验值,通过进聊天室,取得金钱。聊天还好,每进出一次聊天室可以得五两银子,在聊天室每待十分钟,也可以得五两银子。聊天的同时,有钱拿。但是练功就比较枯燥一些,要在网页上点来点去。为了解放自己的双手,后来就做了个练功机器人。方法是做一个网页,用javascript先去调一个PHP程序进行网站登录,取得COOKIE,然后转向到另一个网页,网页中同样采用javascript来自动点击。这种自动机器人我把它称之为页面级的机器人。
页面级的机器人使用起来不是很可靠,而且不方便保密(因为当时社区里有好几个帮派,其他帮派把网页改一下就可以用于他们帮派练功啦)。所以,后来又编写了一个程序版的泡钱练功工具,由于是基于MSWEB控件做的,所以我把它称之为WEB控件机器人。在WEB控件机器人的开发中,需要注意的是微软的DCOM文档对象的定义。当时国内关于DCOM的资料很少,无奈之下只好直接去MS的资料中心下载了英文文档啃。也正是由于资料的缺乏,一开始做的工具还是页面+WEB控件的方式来做的。记得那时为了屏蔽网站的弹出页面想了很多办法,后来在一个英文网站上查到一个资料,原来只要在控件的事件中加上很简单的一条语句就可以解决。资料不全真的很麻烦呀。其实WEB控件的功能很强大,可以直接操纵网页的元素。象做投票程序,就是利用WEB控件先显示投票页面,然后自动点选,然后调用页面上的SUBMIT按钮的CLICK事件发送表单。
WEB控件的优点是可以解析网页的HTML,但在投票中这也成了它的缺点。这时,INET控件开始走入我的视线。INET控件可以直接收包、发包,而不对包的内容做解析。在WEB控件机器人中,投完票之后,一般网站都会自动刷新一下投票页面,如果投票页面上有很多图片,就会影响到投票的速度。而INET控件则不然,它发送和接收的速度都要比WEB控件要快,但是它的缺点是,程序员要自己想办法来分析数据。发送时简单一些,只要构造好HTTP HEAD,再加上表单数据,将包发出即可。但是发送之前一般网站都会发送一些标志过来,有的还会有验证码。这时,就要求程序员把INET接收的数据分析后,重新构造必须的内容,写入一个WEB控件,生成一个网页。
经过多次实践,这种方式投票效果最好。
另外,现在验证码采用的越来越普遍了,固定位置方式的验证码可以采取先取样,生成字模,然后进行对比(XOR运算)方法来破解。这种验证码不管是加什么样的噪点,基本上都是可以识别出来的。因此,现在更多的是采用变形而且不固定位置的验证码。这种验证码的破解要复杂了很多很多,我只有个初步思路。我想仍然应该是先取样,但是不是生成字模,而是生成一个矢量特征,然后对验证码图片进行分解,对每一部分以同样方法生成矢量特征,再与特征库对比。其难点在于,怎么样去生成矢量特征?怎么样去消除矢量噪点?矢量特征库如何对比?相似度如何计算?呵呵,这个好象已经是图像识别的领域了,难度不是一般的大。
自动投票工具也已经做了好几个啦,不过都是针对特定的网站定制的。准备近期有空时,做一套通过设定参数就能通用大多数投票网站的辅助工具,以方便大家。